坐标系基础:世界坐标系、车体/机器人坐标系、传感器坐标系
做外参标定,说白了就是搞清楚「各个坐标系之间怎么互相换算」。
我刚开始接触多传感器融合时,觉得坐标系转换不就是矩阵乘法吗?后来在项目里吃过亏才明白——坐标系定义错了,后面所有标定结果都是废的。今天咱们就把这几个坐标系彻底捋清楚。
1. 世界坐标系:全局的「锚点」
世界坐标系是固定的,不随任何传感器或车体移动。它就像地图上的经纬度,给所有东西一个绝对位置。
我个人习惯用 W 表示世界坐标系,比如 P_W 表示世界坐标系下的一个点。在自动驾驶里,世界坐标系通常选在起始点或地图原点;在机器人里,可能选在房间角落或基站位置。
2. 车体/机器人坐标系:跟着走的「身体」
车体坐标系(也叫机器人坐标系)是固定在车上的。通常用 B 表示(Body)。
它的原点一般在车辆后轴中心或几何中心。X轴朝前,Y轴朝左,Z轴朝上——这是最常见的右手系定义。嗯,这里要注意:不同厂家定义可能不一样,比如有些把Y轴朝右。标定前一定要确认好。
我在项目中遇到过一个问题:IMU的坐标系和车体坐标系差了90度,结果定位轨迹一直在漂。排查了两天才发现是坐标系定义没对齐。从那以后,我拿到任何传感器第一件事就是画坐标系示意图。
3. 传感器坐标系:各说各话的「感官」
每个传感器都有自己的坐标系。咱们重点说三个最常见的:
3.1 相机坐标系
相机坐标系的原点在光心。Z轴指向镜头前方(也就是拍摄方向),X轴向右,Y轴向下。这是计算机视觉里的标准定义。
为什么Y轴向下?因为图像坐标系的原点在左上角,Y轴朝下。这样从相机坐标系到图像坐标系的投影更自然。
3.2 LiDAR坐标系
LiDAR坐标系的原点在激光雷达的旋转中心。通常X轴朝前,Y轴朝左,Z轴朝上。这和车体坐标系很像,但原点位置不同。
LiDAR的坐标系定义比较统一,但要注意:有些机械式LiDAR的0度角对应的是X轴还是Y轴?不同厂家不一样。我踩过这个坑——Velodyne和Hesai的定义就不同。
3.3 IMU坐标系
IMU坐标系最麻烦。它的原点在IMU芯片内部,但不同IMU的轴定义五花八门。
比如加速度计:有的定义Z轴朝上(重力为正),有的朝下(重力为负)。陀螺仪也是,正方向定义各家不同。
4. 坐标系转换的数学原理
坐标系转换说白了就是两件事:旋转 + 平移。用数学语言说,就是刚体变换。
4.1 旋转矩阵
一个3x3的矩阵,表示从一个坐标系到另一个坐标系的旋转关系。比如从车体坐标系 B 到相机坐标系 C 的旋转矩阵记作 R_BC。
// 绕Z轴旋转θ角的旋转矩阵
R_z(θ) = [
cosθ, -sinθ, 0,
sinθ, cosθ, 0,
0, 0, 1
]
旋转矩阵有个重要性质:它是正交矩阵,逆等于转置。这意味着 R_CB = R_BC^T。这个性质在标定里经常用到。
4.2 平移向量
平移向量 t 表示两个坐标系原点之间的偏移。比如 t_BC 表示从车体坐标系原点到相机坐标系原点的向量,在车体坐标系下表示。
注意:平移向量的表示方式很重要。我习惯用「从A到B的平移,在A坐标系下表示」。这样和旋转矩阵配合起来,转换公式很简洁。
4.3 齐次变换矩阵
把旋转和平移合在一起,就是4x4的齐次变换矩阵:
T_BC = [
R_BC, t_BC
0, 0, 0, 1
]
有了这个矩阵,把一个点从相机坐标系转换到车体坐标系就很简单:
P_B = T_BC * P_C
其中 P_C 是相机坐标系下的点(齐次坐标,4维向量),P_B 是车体坐标系下的点。
P_W = T_WB * T_BC * P_C。你想想看,这不就是一层层「套娃」吗?
5. 知识体系总览
下面这张图把整个坐标系体系串起来了。我建议你保存下来,标定的时候对照着看。
6. 实际标定中的坐标系操作
搞清楚了理论,咱们说说实际怎么用。
- 第一步:定义所有坐标系。画个图,标清楚每个坐标系的原点和轴方向。我习惯用Excel画,简单粗暴。
- 第二步:确定转换关系。比如你要标定相机到LiDAR的外参,那就是求
T_CL或者T_LC。 - 第三步:采集数据。用标定板或者自然特征点,获取两个传感器下的对应点。
- 第四步:求解外参。用最小二乘法或者非线性优化,解出旋转矩阵和平移向量。
7. 常见坐标系定义对照表
| 坐标系 | 原点位置 | X轴方向 | Y轴方向 | Z轴方向 |
|---|---|---|---|---|
| 世界坐标系 (W) | 固定点(如起始点) | 自定义(通常朝北) | 自定义(通常朝东) | 朝上(重力反方向) |
| 车体坐标系 (B) | 后轴中心/几何中心 | 车辆前进方向 | 车辆左侧 | 车辆上方 |
| 相机坐标系 (C) | 光心 | 图像右侧 | 图像下方 | 镜头前方 |
| LiDAR坐标系 (L) | 旋转中心 | 前方 | 左侧 | 上方 |
| IMU坐标系 (I) | 芯片内部 | 芯片标注方向 | 芯片标注方向 | 芯片标注方向 |
嗯,这张表你标定的时候可以贴在墙上。我当年就是把它打印出来,每次标定前看一眼,省了好多弯路。
坐标系这东西,说白了就是个「参考系」的问题。你只要记住:所有传感器都在用自己的语言描述世界,外参标定就是给它们当翻译。搞清楚了坐标系转换,后面的标定工作就顺了。