3、传感器标定:激光雷达与IMU联合标定、激光雷达与相机联合标定、标定工具与流程
传感器标定,说白了就是给机器人装上一副「对齐」的眼镜和耳朵。你想想看,激光雷达看到的世界和IMU感受到的运动,如果坐标系对不上,那建出来的地图就是歪的。我刚开始做SLAM时,就吃过这个亏——标定参数差了一点点,整个地图就像喝醉了酒,怎么调都调不回来。
这一章,我们重点聊三个东西:激光雷达与IMU联合标定、激光雷达与相机联合标定,以及标定工具与流程。嗯,都是实战中绕不开的硬骨头。
3.1 激光雷达与IMU联合标定
为什么要做这个联合标定?因为激光雷达和IMU是两个完全不同的传感器。激光雷达告诉你「我在哪里看到了什么」,IMU告诉你「我现在的加速度和角速度是多少」。它们各自有各自的坐标系,如果不标定,数据就没办法融合。
我个人习惯用外参标定这个词。外参,就是两个传感器之间的旋转矩阵和平移向量。说白了,就是激光雷达坐标系到IMU坐标系的变换关系。
3.1.1 标定原理
核心思路其实很简单:让激光雷达和IMU同时观测同一个运动。比如你拿着设备转几圈,激光雷达会看到环境的点云变化,IMU会记录下角速度和加速度。然后通过优化算法,找到一组外参,使得两者的运动轨迹尽可能一致。
我在项目中遇到过一个问题:IMU的零偏如果不先校准,标定出来的外参全是错的。所以我的建议是——先做IMU内参标定,再做联合外参标定。顺序不能乱。
3.1.2 常用工具
目前业界用得比较多的是lidar_align和Kalibr。我个人更推荐lidar_align,因为它对激光雷达的支持更友好。不过要注意,lidar_align需要你提供一段包含充分运动的rosbag,运动太单调的话,优化会陷入局部最优。
关键参数一览:
| 参数 | 含义 | 典型值 |
|---|---|---|
| 旋转矩阵 R | 激光雷达到IMU的旋转 | 3x3矩阵 |
| 平移向量 t | 激光雷达到IMU的位移 | 3x1向量(单位:米) |
| 时间延迟 td | 两个传感器的时间戳偏差 | 毫秒级 |
小技巧:标定前,先把激光雷达和IMU的时间戳对齐。我一般用tf2工具检查时间差,如果超过10ms,建议先做硬件同步。
3.2 激光雷达与相机联合标定
激光雷达和相机的联合标定,比IMU标定要复杂一些。为什么?因为相机看到的是像素,激光雷达看到的是三维点云。一个是2D,一个是3D,怎么对齐?
答案是:找共同特征。比如一个棋盘格,相机能看到角点,激光雷达能看到格子的边缘。通过匹配这些特征,就能算出外参。
3.2.1 标定流程
我常用的流程是这样的:
- 准备标定板:推荐用黑白棋盘格,尺寸要足够大,保证激光雷达能扫到边缘。
- 采集数据:让设备在不同角度、不同距离下拍摄标定板。至少采集20组数据。
- 提取特征:相机提取棋盘格角点,激光雷达提取平面边缘点。
- 优化求解:用最小二乘法或BA(光束法平差)求解外参。
嗯,这里要注意:激光雷达的点云比较稀疏,如果标定板太小,可能扫不到几个点。我曾经用A4纸大小的棋盘格,结果激光雷达只扫到两三个点,根本没法用。后来换成了1米×1米的标定板,效果就好多了。
3.2.2 工具推荐
目前最成熟的是lidar_camera_calibration(来自ethz-asi)和Autoware的标定工具。我个人更倾向用Autoware的,因为它有图形界面,操作起来比较直观。
避坑指南:我曾经在室外做标定,阳光太强导致棋盘格反光,相机根本检测不到角点。后来我改成阴天或者室内做,问题就解决了。另外,激光雷达不要对着玻璃或镜面,反射点会飘。
3.3 标定工具与流程
聊完了原理,我们来看看实际怎么操作。我整理了一套通用的标定流程,你可以直接拿来用。
3.3.1 标定前准备
- 硬件检查:确保所有传感器固定牢固,没有松动。
- 时间同步:用硬件触发或软件同步,保证时间戳一致。
- 环境选择:室内空旷区域,避免强光和反射面。
3.3.2 标定步骤
- 采集数据:让设备做「8」字形运动,包含平移、旋转、俯仰、偏航。时长建议30秒到1分钟。
- 预处理:去除激光雷达的离群点,对IMU数据进行低通滤波。
- 运行标定:用工具自动求解外参。
- 验证结果:将标定后的点云投影到图像上,检查边缘是否对齐。
验证标准:投影后的点云边缘与图像边缘的偏差小于2个像素,就算合格。如果偏差超过5个像素,建议重新标定。
3.3.3 代码示例(伪代码)
# 激光雷达与相机联合标定伪代码
1. 加载rosbag数据
2. 提取相机图像中的棋盘格角点
3. 提取激光雷达点云中的平面特征
4. 构建优化问题:
- 目标函数:最小化重投影误差
- 优化变量:R, t (外参)
5. 使用Ceres或g2o求解
6. 输出标定结果并可视化验证
我的习惯:标定完成后,我会把外参保存成YAML文件,然后在SLAM系统中加载。每次换传感器或重新安装后,必须重新标定。别偷懒,标定一次也就十几分钟,但能省下后面几天的调试时间。
3.4 本章知识体系
下面这张图,是我自己画的标定知识体系。你可以把它当作一个「地图」,随时回来对照。
好了,这一章的内容就到这里。标定这件事,看起来繁琐,但做熟了之后也就那么回事。记住一句话:标定做得好,SLAM跑得稳。下一章我们会聊点更刺激的——前端里程计,到时候见。