坐标系与空间变换:自动驾驶的“空间语言”
做自动驾驶感知这些年,我最大的体会就是——坐标系搞不明白,后面全是坑。你想想看,激光雷达说前面3米有个障碍物,摄像头说像素坐标(320,240)有个目标,这两个数据怎么对齐?靠的就是坐标系变换。
说白了,自动驾驶系统里有多个“眼睛”和“大脑”,每个部件都有自己的坐标系。我们要做的,就是让它们说同一种“空间语言”。
1. 世界坐标系:全局地图的“锚点”
世界坐标系是最大的那个坐标系。它固定在地球上,不随车辆移动而改变。我习惯用WGS-84经纬度坐标系,或者UTM投影坐标系。
举个例子:高精地图上的车道线、红绿灯位置,都是用世界坐标描述的。车辆知道自己在地图上的位置,才能规划路径。
2. 车辆坐标系:车身的“本体感知”
车辆坐标系以车身为参考。通常定义如下:
- X轴:车头方向为正
- Y轴:车身左侧为正(注意!有些标准用右侧)
- Z轴:车顶方向为正
- 原点:后轴中心或车辆质心
我在项目中遇到过一个问题:不同供应商给的车辆坐标系定义不一样。有的用ISO标准,有的用SAE标准。Y轴方向正好相反!这导致融合结果直接翻车。所以,第一件事就是统一坐标系定义。
3. 传感器坐标系:每个传感器的“小世界”
每个传感器都有自己的坐标系:
| 传感器 | 原点位置 | Z轴方向 | 常见问题 |
|---|---|---|---|
| 激光雷达 | 激光发射中心 | 垂直向上 | 安装角度偏差 |
| 摄像头 | 光学中心 | 光轴方向 | 畸变+安装误差 |
| 毫米波雷达 | 天线中心 | 水平向前 | 多径反射干扰 |
| IMU | 惯性测量单元中心 | 重力方向 | 温漂+零偏 |
你想想看,激光雷达的点云是三维的,摄像头图像是二维的。要把它们对齐,就得知道每个传感器在车辆坐标系下的位置和朝向。这就是外参。
4. 坐标变换矩阵:数学上的“翻译官”
坐标变换的核心是刚体变换。说白了,就是旋转+平移。
数学表达式很简单:
P_vehicle = R * P_sensor + T
其中:
- R:3x3旋转矩阵,描述朝向关系
- T:3x1平移向量,描述位置偏移
- P_sensor:传感器坐标系下的点
- P_vehicle:车辆坐标系下的点
实际工程中,我们通常用齐次坐标来简化计算:
| P_vehicle | = | R T | * | P_sensor |
| 1 | | 0 1 | | 1 |
这样做的好处是:多次变换可以连乘成一个矩阵。比如从传感器到世界坐标:
T_world_sensor = T_world_vehicle * T_vehicle_sensor
5. 外参标定简介:让传感器“对齐”
外参标定,就是求传感器坐标系到车辆坐标系的变换矩阵。我做过很多次标定,总结下来就两种方法:
5.1 离线标定
在实验室或固定场地,用标定板、标定杆等工具。优点是精度高,缺点是费时费力。
- 激光雷达-摄像头标定:用棋盘格,提取角点,找3D-2D对应关系
- 激光雷达-激光雷达标定:用ICP算法,对齐点云
- 摄像头-摄像头标定:用立体视觉方法,求本质矩阵
5.2 在线标定
车辆行驶过程中自动标定。我参与过一个项目,用SLAM的位姿估计来做在线外参校正。
嗯,这里要注意:在线标定精度通常不如离线标定。但它的好处是能补偿安装松动、温度变化引起的微小偏移。
6. 知识体系总览
下面这张图,是我自己总结的坐标系与空间变换知识体系。你看一遍就能明白整体脉络:
7. 工程实践中的几个建议
做了这么多年感知,我总结了几条坐标系相关的铁律:
- 统一坐标系定义:项目一开始就定好X/Y/Z正方向,写在文档里,所有人遵守
- 用齐次矩阵:别分开存旋转和平移,容易出错
- 标定后验证:标定完一定要做投影验证。比如把激光雷达点云投影到图像上,看边缘是否对齐
- 监控外参漂移:加一个定期检查机制,发现偏差超过阈值就报警
- 记录变换链:每个数据都带上它的坐标系来源,方便追溯
好了,坐标系与空间变换就讲到这里。记住一句话:坐标系是感知系统的“地基”,地基不稳,楼盖得再高也会塌。