坐标系与坐标变换:世界坐标系、车辆坐标系、激光雷达坐标系、IMU坐标系

各位同学,今天我们来聊聊标定中最绕不开的一个话题——坐标系与坐标变换。说实话,我刚开始做自动驾驶标定时,被这四个坐标系搞得晕头转向。有一次在实车测试中,因为把车辆坐标系和激光雷达坐标系搞反了,点云数据直接飞到了天上,找了整整两天才排查出来。从那以后,我就养成了一个习惯:动手之前,先把坐标系理清楚。

1. 四个核心坐标系

我们先从最基础的开始。自动驾驶系统里,有四个坐标系你必须刻在脑子里:

  • 世界坐标系:也叫全局坐标系。它固定在地面上,通常用经纬度+海拔,或者UTM坐标来表示。说白了,就是描述「车在地球上哪个位置」。
  • 车辆坐标系:固定在车身上。一般原点在后轴中心,X轴朝前,Y轴朝左,Z轴朝上。这个坐标系描述的是「传感器装在车的哪个位置」。
  • 激光雷达坐标系:原点在激光雷达的扫描中心。X轴朝前,Y轴朝左,Z轴朝上。注意,不同厂家的雷达定义可能不一样,我踩过这个坑。
  • IMU坐标系:原点在IMU芯片内部。通常也是X朝前、Y朝左、Z朝上,但安装角度偏差是常事。

核心要点:所有标定的本质,就是求这些坐标系之间的变换关系。你想想看,激光雷达看到的一堵墙,要映射到世界坐标系里,中间要经过多少次变换?

2. 坐标变换的数学基础

坐标变换说白了就两件事:旋转和平移。旋转用旋转矩阵R表示,平移用平移向量t表示。一个点从坐标系A变换到坐标系B,公式很简单:

P_B = R * P_A + t

嗯,这里要注意,R是3x3的矩阵,t是3x1的向量。我在项目中遇到过有人把R和t的顺序搞反了,结果变换出来的点云全乱套了。

3. 欧拉角:直观但容易踩坑

欧拉角是描述旋转最直观的方式。它用三个角度来表示:绕X轴转的叫横滚角(Roll),绕Y轴转的叫俯仰角(Pitch),绕Z轴转的叫航向角(Yaw)。

我个人习惯用ZYX顺序,也就是先转Yaw,再转Pitch,最后转Roll。为什么?因为这种顺序最符合直觉——你先看车头朝哪(Yaw),再抬头低头(Pitch),最后左右倾斜(Roll)。

避坑指南:我曾经因为欧拉角的旋转顺序没统一,导致标定结果时好时坏。记住,不同库函数默认的旋转顺序可能不一样。比如ROS里用的是ZYX,但有些数学库默认是XYZ。一定要确认清楚!

欧拉角还有一个致命问题——万向锁。当Pitch接近±90度时,Roll和Yaw会变得无法区分。这在自动驾驶里很少遇到,但做无人机标定时一定要小心。

4. 四元数:稳定但抽象

四元数,说白了就是用一个四维向量来表示旋转。它没有万向锁问题,插值也平滑,所以在工程里用得最多。

一个四元数长这样:

q = w + x*i + y*j + z*k

其中w是实部,x、y、z是虚部。模长为1的四元数叫单位四元数,用来表示旋转。

你可能会问:「为什么不用旋转矩阵?」嗯,旋转矩阵有9个参数,但只有3个自由度,冗余太多。四元数只有4个参数,计算效率高,还容易做归一化。

我记得有一次做在线标定,需要实时更新外参。用欧拉角做优化,迭代到后面直接发散。换成四元数表示后,收敛得又快又稳。从那以后,我但凡涉及优化问题,一律用四元数。

5. 坐标系变换链

在实际标定中,我们经常要串联多个变换。比如激光雷达看到的一个点,要变换到世界坐标系:

P_world = T_world_vehicle * T_vehicle_lidar * P_lidar

其中T是4x4的齐次变换矩阵,包含了旋转和平移。你想想看,这个链越长,误差累积就越大。所以我的建议是:能直接标定的,就不要间接推算。

个人经验:我一般会把激光雷达和IMU先做联合标定,得到一个高精度的相对位姿。然后再用IMU和车辆坐标系的关系,把激光雷达数据映射到车体坐标系。这样误差传递路径最短。

6. 知识体系总览

下面这张图是我自己整理的坐标系与坐标变换知识体系,你可以把它当作学习路线图:

坐标系与坐标变换知识体系 世界坐标系 车辆坐标系 激光雷达坐标系 IMU坐标系 GPS/INS 外参标定 杆臂标定 联合标定 变换表示方法 旋转矩阵 R 3x3 矩阵,9个参数 直观,但冗余 欧拉角 (R,P,Y) 3个角度,直观易懂 有万向锁问题 四元数 q 4个参数,无奇异性 工程首选 应用场景 传感器外参标定 点云配准 SLAM建图 高精地图融合

7. 实战中的注意事项

最后,我总结几个实战中容易忽略的点:

  1. 坐标系方向要统一:我见过有人用左手系,有人用右手系,数据一交换就出问题。建议全用右手系。
  2. 单位要一致:激光雷达给的是毫米,IMU给的是米,不统一的话,平移向量直接差1000倍。
  3. 四元数要归一化:计算过程中四元数会漂移,记得每步都做归一化。我曾经因为这个,标定结果一直收敛不到真值。
  4. 欧拉角转四元数时注意顺序:不同库函数的转换公式可能不一样,写代码前先验证一下。

小技巧:我每次做标定前,都会先打印出各个坐标系的原点和轴方向,用可视化工具确认一遍。虽然多花5分钟,但能省下后面排查问题的半天时间。

好了,坐标系与坐标变换就讲到这里。这些概念是标定的地基,地基不稳,后面盖的房子迟早要塌。下一章我们开始讲具体的标定方法,到时候会用到今天讲的这些知识。

可可精品资料库