4. 传感器标定与坐标系对齐
各位同学,欢迎来到第四章。这一章我们聊点硬核的——传感器标定与坐标系对齐。
说实话,我在做自动驾驶项目初期,最头疼的就是这个环节。你想想看,车上装了相机、激光雷达、IMU,每个传感器都有自己的“小脾气”,它们各自为政,数据格式不同,坐标系也不同。如果不把它们对齐,那BEV感知就是空中楼阁。我见过不少团队,算法模型调得再好,最后因为标定误差,车在路上跑偏了。嗯,这可不是开玩笑的。
4.1 为什么标定这么重要?
简单说,标定就是给传感器“配对”。
相机看到的是像素,激光雷达看到的是点云,IMU看到的是加速度和角速度。它们各自描述的是同一个物理世界,但用的“语言”不同。标定的目的,就是建立一套翻译规则,让这些数据能在同一个坐标系下对话。
我个人习惯把标定分为两类:
- 内参标定:传感器自身的内部参数。比如相机的焦距、畸变系数;IMU的零偏、尺度因子。
- 外参标定:传感器之间的相对位姿。比如相机相对于激光雷达的旋转和平移。
在BEV感知中,外参标定是重中之重。因为我们要把不同传感器的数据统一到车身坐标系,再映射到全局坐标系。
核心观点:没有准确的标定,就没有可靠的融合。标定误差1厘米,在50米外的目标可能偏差半米。这在自动驾驶中是致命的。
4.2 相机-激光雷达联合标定
这是最经典,也是最常用的联合标定组合。说白了,就是用激光雷达的精确深度信息,来弥补相机单目测距的不足。
4.2.1 标定原理
核心思路:找一个特征丰富的标定物(比如棋盘格或标定板),让相机和激光雷达同时观测它。然后通过优化算法,求解出相机坐标系到激光雷达坐标系的变换矩阵。
数学上,我们要求解一个3x3的旋转矩阵R和一个3x1的平移向量t。合起来就是4x4的外参矩阵:
| R t |
| 0 1 |
这个矩阵能把激光雷达点云中的点,投影到相机图像上。理想情况下,投影点应该正好落在图像中对应的物体上。
4.2.2 实际操作中的坑
我在项目中遇到过一个问题:标定板反光。激光雷达打到高反光表面,点云会丢失或产生噪点。后来我改用哑光材质的标定板,并在不同光照条件下多次采集数据,才解决了这个问题。
我的小技巧:标定时,让车辆缓慢移动,采集多帧数据。这样能增加约束,提高标定精度。我曾经用20帧数据标定,结果比单帧好很多。
4.3 加入IMU:三传感器联合标定
IMU的加入,让事情变得更有趣。IMU测量的是高频的加速度和角速度,但它有漂移。相机和激光雷达提供的是低频但绝对准确的位姿信息。
联合标定的目标,就是同时求解:
- 相机到IMU的外参
- 激光雷达到IMU的外参
- IMU的内参(零偏、噪声等)
这其实是一个图优化问题。我常用的工具是 lidar_imu_calib 和 Kalibr。前者专门做激光雷达-IMU标定,后者做相机-IMU标定。两者结合,就能完成三传感器联合标定。
4.3.1 标定流程
- 数据采集:让车辆做“8”字形运动,充分激励IMU的各个轴。我一般采集5-10分钟数据。
- 预处理:对IMU数据进行去噪,对激光雷达点云进行运动畸变校正。
- 初始化:用旋转运动粗略估计外参初值。
- 优化:构建残差函数,用非线性最小二乘法求解。
警告:IMU对温度敏感。标定前要让传感器预热到工作温度。我曾经因为没注意这一点,标定结果在冷启动时完全不能用。
4.4 外参矩阵详解
外参矩阵,说白了就是一个4x4的齐次变换矩阵。它描述了从一个坐标系到另一个坐标系的刚体变换。
在BEV感知中,我们常用到以下几个坐标系:
| 坐标系 | 说明 | 原点 |
|---|---|---|
| 相机坐标系 | 以相机光心为原点 | 光心 |
| 激光雷达坐标系 | 以激光雷达中心为原点 | 激光雷达中心 |
| IMU坐标系 | 以IMU芯片中心为原点 | IMU中心 |
| 车身坐标系 | 以后轴中心为原点,x向前,y向左,z向上 | 后轴中心 |
| 全局坐标系 | 通常是UTM坐标系或自定义原点 | 自定义 |
外参矩阵的乘法遵循链式法则。比如,要把激光雷达点云转换到全局坐标系:
T_global_lidar = T_global_body * T_body_imu * T_imu_lidar
这里T_global_body是车身在全局坐标系下的位姿,通常由GPS/IMU组合导航提供。
4.5 从车身坐标系到全局坐标系
这一步是BEV感知的关键。我们最终要输出的,是全局坐标系下的障碍物位置和地图信息。
转换过程分两步:
- 传感器数据 → 车身坐标系:利用外参矩阵,把相机、激光雷达、IMU的数据统一到车身坐标系。
- 车身坐标系 → 全局坐标系:利用车辆的定位信息(GPS+IMU融合),把车身坐标系下的数据投影到全局坐标系。
这里有个细节要注意:定位信息通常有延迟。我习惯用IMU的高频数据做插值,补偿GPS的延迟。这样能保证时间对齐。
避坑指南:我曾经在实车测试时,发现全局坐标系下的障碍物位置一直在抖动。排查了半天,发现是GPS的更新频率太低,而车辆在转弯时角速度很大。后来我加入了IMU的航迹推算,用卡尔曼滤波融合,问题就解决了。
4.6 本章知识体系
为了让大家更直观地理解,我画了一张流程图:
这张图把本章的核心逻辑串起来了。从三个传感器出发,经过联合标定得到外参矩阵,再通过坐标系转换,最终服务于BEV感知。
4.7 总结与个人体会
传感器标定这件事,说难不难,说简单也不简单。它不像算法模型那样有炫酷的理论,但却是整个系统的基石。我见过太多项目,因为标定没做好,后面所有的努力都白费了。
我个人建议,在项目初期就建立一套标准化的标定流程。包括:
- 标定板的规格和材质
- 数据采集的运动模式
- 标定结果的验证方法
嗯,这些细节看似琐碎,但能帮你省下大量调试时间。记住,好的标定,是BEV感知成功的一半。
最后分享一个经验:标定完成后,一定要做交叉验证。比如用标定结果把激光雷达点云投影到图像上,看看边缘是否对齐。如果偏差超过2个像素,建议重新标定。