坐标系基础:世界坐标系、车体/机器人坐标系、传感器坐标系

做外参标定,说白了就是搞清楚「各个坐标系之间怎么互相换算」。

我刚开始接触多传感器融合时,觉得坐标系转换不就是矩阵乘法吗?后来在项目里吃过亏才明白——坐标系定义错了,后面所有标定结果都是废的。今天咱们就把这几个坐标系彻底捋清楚。

1. 世界坐标系:全局的「锚点」

世界坐标系是固定的,不随任何传感器或车体移动。它就像地图上的经纬度,给所有东西一个绝对位置。

我个人习惯用 W 表示世界坐标系,比如 P_W 表示世界坐标系下的一个点。在自动驾驶里,世界坐标系通常选在起始点或地图原点;在机器人里,可能选在房间角落或基站位置。

关键点:世界坐标系一旦定义好,就不要轻易改。我见过有人中途换原点,结果所有历史数据都得重算,那叫一个酸爽。

2. 车体/机器人坐标系:跟着走的「身体」

车体坐标系(也叫机器人坐标系)是固定在车上的。通常用 B 表示(Body)。

它的原点一般在车辆后轴中心或几何中心。X轴朝前,Y轴朝左,Z轴朝上——这是最常见的右手系定义。嗯,这里要注意:不同厂家定义可能不一样,比如有些把Y轴朝右。标定前一定要确认好。

我在项目中遇到过一个问题:IMU的坐标系和车体坐标系差了90度,结果定位轨迹一直在漂。排查了两天才发现是坐标系定义没对齐。从那以后,我拿到任何传感器第一件事就是画坐标系示意图。

3. 传感器坐标系:各说各话的「感官」

每个传感器都有自己的坐标系。咱们重点说三个最常见的:

3.1 相机坐标系

相机坐标系的原点在光心。Z轴指向镜头前方(也就是拍摄方向),X轴向右,Y轴向下。这是计算机视觉里的标准定义。

为什么Y轴向下?因为图像坐标系的原点在左上角,Y轴朝下。这样从相机坐标系到图像坐标系的投影更自然。

我的经验:相机坐标系和车体坐标系之间的转换,最容易出错的是旋转方向。我建议用Rodrigues公式或者四元数来算,别用欧拉角——万向锁问题会让你怀疑人生。

3.2 LiDAR坐标系

LiDAR坐标系的原点在激光雷达的旋转中心。通常X轴朝前,Y轴朝左,Z轴朝上。这和车体坐标系很像,但原点位置不同。

LiDAR的坐标系定义比较统一,但要注意:有些机械式LiDAR的0度角对应的是X轴还是Y轴?不同厂家不一样。我踩过这个坑——Velodyne和Hesai的定义就不同。

3.3 IMU坐标系

IMU坐标系最麻烦。它的原点在IMU芯片内部,但不同IMU的轴定义五花八门。

比如加速度计:有的定义Z轴朝上(重力为正),有的朝下(重力为负)。陀螺仪也是,正方向定义各家不同。

避坑指南:我曾经因为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. 知识体系总览

下面这张图把整个坐标系体系串起来了。我建议你保存下来,标定的时候对照着看。

坐标系转换知识体系 世界坐标系 (W) 车体/机器人坐标系 (B) 相机坐标系 (C) LiDAR坐标系 (L) IMU坐标系 (I) T_WB (外参) T_BC T_BL T_BI 核心公式:P_W = T_WB * T_BC * P_C 每个T都是4x4齐次变换矩阵,包含旋转R和平移t

6. 实际标定中的坐标系操作

搞清楚了理论,咱们说说实际怎么用。

  1. 第一步:定义所有坐标系。画个图,标清楚每个坐标系的原点和轴方向。我习惯用Excel画,简单粗暴。
  2. 第二步:确定转换关系。比如你要标定相机到LiDAR的外参,那就是求 T_CL 或者 T_LC。
  3. 第三步:采集数据。用标定板或者自然特征点,获取两个传感器下的对应点。
  4. 第四步:求解外参。用最小二乘法或者非线性优化,解出旋转矩阵和平移向量。
一个小技巧:求解旋转矩阵时,可以用SVD分解。这个方法数值稳定性好,我一直在用。具体做法是:先计算两组点的质心,然后做SVD分解得到旋转矩阵,最后反推平移向量。

7. 常见坐标系定义对照表

坐标系 原点位置 X轴方向 Y轴方向 Z轴方向
世界坐标系 (W) 固定点(如起始点) 自定义(通常朝北) 自定义(通常朝东) 朝上(重力反方向)
车体坐标系 (B) 后轴中心/几何中心 车辆前进方向 车辆左侧 车辆上方
相机坐标系 (C) 光心 图像右侧 图像下方 镜头前方
LiDAR坐标系 (L) 旋转中心 前方 左侧 上方
IMU坐标系 (I) 芯片内部 芯片标注方向 芯片标注方向 芯片标注方向

嗯,这张表你标定的时候可以贴在墙上。我当年就是把它打印出来,每次标定前看一眼,省了好多弯路。

坐标系这东西,说白了就是个「参考系」的问题。你只要记住:所有传感器都在用自己的语言描述世界,外参标定就是给它们当翻译。搞清楚了坐标系转换,后面的标定工作就顺了。

可可精品资料库