坐标系与坐标变换:WGS84、UTM、ENU、车身坐标系、传感器坐标系,以及齐次变换矩阵
做高精地图和定位,说白了就是在跟坐标系打交道。我刚开始接触这行的时候,被各种坐标系绕得晕头转向。后来踩了不少坑,才慢慢理清楚。今天咱们就把这些坐标系和变换关系彻底讲明白。
1. 全球坐标系:WGS84
WGS84 是个什么概念?你可以把它想象成一个巨大的地球模型。GPS 卫星发下来的信号,给的就是 WGS84 坐标。它用经度、纬度、海拔高度来描述一个点。
举个例子,北京天安门的 WGS84 坐标大概是:
- 经度:116.397°E
- 纬度:39.908°N
- 海拔:约 44 米
嗯,这里要注意。WGS84 的纬度、经度是角度单位,不是长度单位。你没法直接用加减法算距离。我在项目中遇到过有人直接用经纬度差值算距离,结果偏差大得离谱。
我曾经在融合 GPS 和 IMU 数据时,忘记把 WGS84 转成平面坐标系。结果卡尔曼滤波直接发散。记住:WGS84 只适合做全局定位,不适合做局部运算。
2. 投影坐标系:UTM
UTM 把地球表面切成 60 个带,每个带 6 度宽。它把球面上的点投影到平面上,这样就能用米来做单位了。
UTM 坐标长这样:
- 东向(Easting):从中央经线往东多少米
- 北向(Northing):从赤道往北多少米
- 带号:比如 50N
我个人的习惯是,在自动驾驶的感知模块里,全部用 UTM 坐标。因为激光雷达、相机算出来的距离都是米,跟 UTM 天然匹配。
如果你在跨带区域做标定,比如北京和天津分属不同 UTM 带,建议统一到一个带。否则坐标跳变会让你怀疑人生。
3. 局部坐标系:ENU
ENU 是东-北-天坐标系。它是个右手系:
- X 轴指向东
- Y 轴指向北
- Z 轴指向天
ENU 特别适合做车辆周围的局部定位。比如你站在天安门,ENU 原点就在你脚下。往东走 100 米,坐标就是 (100, 0, 0)。
你想想看,ENU 和 UTM 的区别在哪?UTM 是固定的,ENU 是跟着你走的。在标定过程中,我们经常把 UTM 原点平移到车辆位置,就变成了 ENU。
4. 车身坐标系
车身坐标系是固定在车上的。一般定义:
- X 轴:车头方向
- Y 轴:车身左侧
- Z 轴:车顶方向
这个坐标系会随着车动。我在做传感器标定时,所有传感器的外参都是相对于车身坐标系的。比如激光雷达装在车顶,它的坐标就是 (0, 0, 1.8) 米左右。
车身坐标系的原点通常在后轴中心。为什么?因为车辆的动力学模型都是基于后轴中心计算的。如果你把原点放在车头,转弯半径的计算会变得很麻烦。
5. 传感器坐标系
每个传感器都有自己的坐标系:
| 传感器 | X 轴 | Y 轴 | Z 轴 |
|---|---|---|---|
| 激光雷达 | 正前方 | 左侧 | 上方 |
| 相机 | 右方 | 下方 | 前方 |
| IMU | 前向 | 左侧 | 上方 |
注意,相机坐标系比较特殊。它的 Z 轴是朝前的,X 轴朝右,Y 轴朝下。这是图像处理领域的惯例。我第一次做相机和激光雷达联合标定时,就被这个搞晕了。
6. 齐次变换矩阵
齐次变换矩阵是连接所有坐标系的桥梁。它长这样:
| R11 R12 R13 tx |
| R21 R22 R23 ty |
| R31 R32 R33 tz |
| 0 0 0 1 |
左上角 3x3 是旋转矩阵,右上角 3x1 是平移向量。用这个矩阵,你可以把任意点从一个坐标系变换到另一个坐标系。
举个例子,把激光雷达的点变换到车身坐标系:
P_body = T_lidar_to_body * P_lidar
其中 T_lidar_to_body 就是齐次变换矩阵。我建议你把这个矩阵写成 4x4 的形式,这样乘法运算特别方便。
我在做多传感器融合时,维护了一个坐标系变换树。每个传感器到车身的变换矩阵都存起来。这样不管数据从哪个传感器来,都能统一到车身坐标系。
7. 坐标系变换链
实际应用中,坐标变换是链式的。比如:
- GPS 给出 WGS84 坐标
- 转成 UTM 平面坐标
- 平移到车辆位置变成 ENU
- 再转到车身坐标系
- 最后转到传感器坐标系
这条链上的每一步,都是一个齐次变换矩阵。把它们乘起来,就得到最终的变换关系。
我曾经犯过一个低级错误:变换矩阵的乘法顺序搞反了。记住,矩阵乘法不满足交换律。先旋转后平移,和先平移后旋转,结果完全不同。
8. 知识体系总览
下面这张图展示了本章的核心逻辑:
说白了,坐标系变换就是一套数学工具。它让我们能把不同来源的数据统一到一个框架下。我做了这么多年标定,最大的体会就是:坐标系搞清楚了,标定就成功了一半。
- WGS84:全球定位,角度单位
- UTM:平面投影,米单位
- ENU:局部坐标系,以车辆为中心
- 车身坐标系:固定在后轴中心
- 传感器坐标系:每个传感器独立定义
- 齐次变换矩阵:4x4 矩阵,连接所有坐标系
嗯,今天就聊到这儿。这些坐标系和变换矩阵,是后续所有标定工作的基础。你只要把这块吃透了,后面学传感器标定、融合定位都会轻松很多。