4. 传感器标定:激光雷达-IMU外参标定、相机-激光雷达联合标定、轮式里程计标定
说到多传感器融合,标定这事儿,我敢说它占了整个项目 60% 的坑。你算法写得再漂亮,传感器之间「谁在哪儿、朝哪儿看」没对齐,那融合出来的就是一团浆糊。我自己带项目时,第一周基本都在干标定——说白了,就是给每个传感器发一张「身份证」,告诉系统它们之间的相对位置和朝向。
这一章,咱们就聊聊三种最核心的标定:激光雷达与 IMU 的外参、相机与激光雷达的联合标定,还有轮式里程计的标定。嗯,一个一个来。
4.1 激光雷达-IMU 外参标定
激光雷达和 IMU 这对搭档,一个负责「看世界长啥样」,一个负责「感知自己怎么动」。但问题是,它们俩装在车上的位置不一样,朝向也可能有偏差。外参标定,就是求出从 IMU 坐标系到激光雷达坐标系的旋转和平移矩阵。
我个人习惯用 LiDAR-IMU 初始化 + 在线优化 的方式。先粗标,再精调。
4.1.1 粗标定:利用重力对齐
IMU 能测重力方向,激光雷达扫描地面能算出地面法向量。把这两个向量对齐,就能得到旋转的初值。我在项目中遇到过,如果地面不平整,激光雷达算出的法向量会有偏差。所以建议多采几帧地面数据,取平均。
4.1.2 精标定:基于运动约束
粗标定之后,用一段运动数据做优化。核心思想是:激光雷达通过帧间匹配(比如 ICP)算出的位姿变化,应该和 IMU 积分出的位姿变化一致。构建一个最小二乘问题,优化外参。
关键公式(简化版):
min_{R, t} Σ || (T_lidar_i^{-1} * T_lidar_j) - (R * T_imu_i^{-1} * T_imu_j * R^T) ||^2
其中 R, t 就是待求的外参旋转和平移。
我的小技巧: 做精标定时,别用匀速运动。多来几个急转弯、急加速,IMU 的激励才够充分,标定结果才稳。我曾经有一次用匀速直线数据标了半小时,结果外参完全不对,后来才发现是激励不足。
4.2 相机-激光雷达联合标定
相机给的是稠密的颜色纹理,激光雷达给的是稀疏但精确的深度。联合标定的目标,就是找到相机像素和激光雷达点云之间的投影关系。说白了,就是知道「激光雷达打到的那个点,对应相机图像上的哪个像素」。
4.2.1 标定板法
最经典的方法。用一块带棋盘格或圆孔的标定板,同时被相机和激光雷达看到。相机提取角点,激光雷达提取板平面上的点。然后通过 PnP 或直接线性变换求解外参。
你想想看,这里有个坑:激光雷达打在标定板边缘时,容易产生「混合点」——一部分打在板上,一部分打在背景上,导致测距不准。我建议在提取板上的点时,只取板中心区域的数据,去掉边缘 10cm。
4.2.2 无目标标定(自然场景法)
如果现场不方便放标定板,也可以用自然场景中的边缘、角点来做。比如找一堵有纹理的墙,相机提取边缘,激光雷达提取对应的深度跳变点。这种方法精度稍低,但胜在方便。
| 方法 | 精度 | 操作复杂度 | 适用场景 |
|---|---|---|---|
| 标定板法 | 高(<0.1°) | 中 | 实验室、量产线 |
| 自然场景法 | 中(<0.5°) | 低 | 现场快速部署 |
注意: 相机和激光雷达的视野重叠区域一定要足够大。如果激光雷达装在车顶,相机装在保险杠,两者几乎看不到同一片区域,那标定就是白费功夫。我曾经见过一个项目,硬是把两个传感器装得八竿子打不着,最后只能重新设计安装支架。
4.3 轮式里程计标定
轮式里程计,说白了就是靠轮子转了多少圈来推算走了多远。但轮子有打滑、有磨损、轮胎气压不同也会影响。所以必须标定两个参数:每脉冲对应的移动距离(尺度因子),以及左右轮的轮距(影响转弯)。
4.3.1 直线标定:尺度因子
让机器人走一段已知距离的直线,比如 10 米。记录轮式里程计输出的脉冲数。用实际距离除以脉冲数,就得到每个脉冲对应的米数。
# 伪代码示例
actual_distance = 10.0 # 米
pulses = encoder_reading_end - encoder_reading_start
scale = actual_distance / pulses
print(f"尺度因子: {scale:.6f} 米/脉冲")
嗯,这里要注意:走直线时尽量选平整地面,地毯和瓷砖的摩擦系数不同,标定结果会有差异。我建议在项目实际运行的地面上标定。
4.3.2 转弯标定:轮距
让机器人原地转圈,比如转 360 度。记录左右轮的脉冲差。根据运动学公式,可以反推出轮距。
运动学公式:
轮距 = (左轮脉冲数 + 右轮脉冲数) * 尺度因子 / (2 * π * (转圈数))
实际上更精确的做法是用最小二乘法,多转几圈,拟合出最优轮距。
避坑指南: 我曾经在瓷砖地面上标定轮式里程计,结果一转弯就打滑,标出来的轮距偏大 20%。后来换成在粗糙水泥地上标,数据才正常。所以标定环境一定要贴近实际使用场景。
4.4 本章知识体系
为了让你更直观地理解这三种标定的关系和流程,我画了一张图。它展示了从传感器原始数据到最终外参输出的完整链路。
从图上你能看到,激光雷达和 IMU 先做外参标定,然后相机再和激光雷达做联合标定。轮式里程计标定相对独立,但最终所有参数都要统一到一个坐标系下,才能用于后续的融合建图和避障。
好了,这一章的内容就这些。三种标定方法,各有各的坑,也各有各的技巧。你动手做一遍,比我讲十遍都管用。记住:标定数据的好坏,直接决定了你后面所有算法的上限。别图省事,多采几组数据,多验证几次。