3、传感器标定:激光雷达与IMU联合标定、激光雷达与相机联合标定、标定工具与流程

传感器标定,说白了就是给机器人装上一副「对齐」的眼镜和耳朵。你想想看,激光雷达看到的世界和IMU感受到的运动,如果坐标系对不上,那建出来的地图就是歪的。我刚开始做SLAM时,就吃过这个亏——标定参数差了一点点,整个地图就像喝醉了酒,怎么调都调不回来。

这一章,我们重点聊三个东西:激光雷达与IMU联合标定激光雷达与相机联合标定,以及标定工具与流程。嗯,都是实战中绕不开的硬骨头。

3.1 激光雷达与IMU联合标定

为什么要做这个联合标定?因为激光雷达和IMU是两个完全不同的传感器。激光雷达告诉你「我在哪里看到了什么」,IMU告诉你「我现在的加速度和角速度是多少」。它们各自有各自的坐标系,如果不标定,数据就没办法融合。

我个人习惯用外参标定这个词。外参,就是两个传感器之间的旋转矩阵和平移向量。说白了,就是激光雷达坐标系到IMU坐标系的变换关系。

3.1.1 标定原理

核心思路其实很简单:让激光雷达和IMU同时观测同一个运动。比如你拿着设备转几圈,激光雷达会看到环境的点云变化,IMU会记录下角速度和加速度。然后通过优化算法,找到一组外参,使得两者的运动轨迹尽可能一致。

我在项目中遇到过一个问题:IMU的零偏如果不先校准,标定出来的外参全是错的。所以我的建议是——先做IMU内参标定,再做联合外参标定。顺序不能乱。

3.1.2 常用工具

目前业界用得比较多的是lidar_alignKalibr。我个人更推荐lidar_align,因为它对激光雷达的支持更友好。不过要注意,lidar_align需要你提供一段包含充分运动的rosbag,运动太单调的话,优化会陷入局部最优。

关键参数一览:

参数 含义 典型值
旋转矩阵 R 激光雷达到IMU的旋转 3x3矩阵
平移向量 t 激光雷达到IMU的位移 3x1向量(单位:米)
时间延迟 td 两个传感器的时间戳偏差 毫秒级

小技巧:标定前,先把激光雷达和IMU的时间戳对齐。我一般用tf2工具检查时间差,如果超过10ms,建议先做硬件同步。

3.2 激光雷达与相机联合标定

激光雷达和相机的联合标定,比IMU标定要复杂一些。为什么?因为相机看到的是像素,激光雷达看到的是三维点云。一个是2D,一个是3D,怎么对齐?

答案是:找共同特征。比如一个棋盘格,相机能看到角点,激光雷达能看到格子的边缘。通过匹配这些特征,就能算出外参。

3.2.1 标定流程

我常用的流程是这样的:

  1. 准备标定板:推荐用黑白棋盘格,尺寸要足够大,保证激光雷达能扫到边缘。
  2. 采集数据:让设备在不同角度、不同距离下拍摄标定板。至少采集20组数据。
  3. 提取特征:相机提取棋盘格角点,激光雷达提取平面边缘点。
  4. 优化求解:用最小二乘法或BA(光束法平差)求解外参。

嗯,这里要注意:激光雷达的点云比较稀疏,如果标定板太小,可能扫不到几个点。我曾经用A4纸大小的棋盘格,结果激光雷达只扫到两三个点,根本没法用。后来换成了1米×1米的标定板,效果就好多了。

3.2.2 工具推荐

目前最成熟的是lidar_camera_calibration(来自ethz-asi)和Autoware的标定工具。我个人更倾向用Autoware的,因为它有图形界面,操作起来比较直观。

避坑指南:我曾经在室外做标定,阳光太强导致棋盘格反光,相机根本检测不到角点。后来我改成阴天或者室内做,问题就解决了。另外,激光雷达不要对着玻璃或镜面,反射点会飘。

3.3 标定工具与流程

聊完了原理,我们来看看实际怎么操作。我整理了一套通用的标定流程,你可以直接拿来用。

3.3.1 标定前准备

  • 硬件检查:确保所有传感器固定牢固,没有松动。
  • 时间同步:用硬件触发或软件同步,保证时间戳一致。
  • 环境选择:室内空旷区域,避免强光和反射面。

3.3.2 标定步骤

  1. 采集数据:让设备做「8」字形运动,包含平移、旋转、俯仰、偏航。时长建议30秒到1分钟。
  2. 预处理:去除激光雷达的离群点,对IMU数据进行低通滤波。
  3. 运行标定:用工具自动求解外参。
  4. 验证结果:将标定后的点云投影到图像上,检查边缘是否对齐。

验证标准:投影后的点云边缘与图像边缘的偏差小于2个像素,就算合格。如果偏差超过5个像素,建议重新标定。

3.3.3 代码示例(伪代码)

# 激光雷达与相机联合标定伪代码
1. 加载rosbag数据
2. 提取相机图像中的棋盘格角点
3. 提取激光雷达点云中的平面特征
4. 构建优化问题:
   - 目标函数:最小化重投影误差
   - 优化变量:R, t (外参)
5. 使用Ceres或g2o求解
6. 输出标定结果并可视化验证

我的习惯:标定完成后,我会把外参保存成YAML文件,然后在SLAM系统中加载。每次换传感器或重新安装后,必须重新标定。别偷懒,标定一次也就十几分钟,但能省下后面几天的调试时间。

3.4 本章知识体系

下面这张图,是我自己画的标定知识体系。你可以把它当作一个「地图」,随时回来对照。

传感器标定知识体系 激光雷达 + IMU 激光雷达 + 相机 标定工具与流程 子模块 • 外参标定(R, t) • 时间延迟标定 • IMU零偏预校准 • 工具:lidar_align, Kalibr 子模块 • 棋盘格特征提取 • 点云与图像对齐 • 重投影误差优化 • 工具:Autoware, ethz-asi 子模块 • 数据采集(8字运动) • 预处理(滤波、去噪) • 优化求解(Ceres/g2o) • 验证(投影偏差 < 2px) 核心目标:让多传感器数据在统一坐标系下对齐,为SLAM提供可靠输入

好了,这一章的内容就到这里。标定这件事,看起来繁琐,但做熟了之后也就那么回事。记住一句话:标定做得好,SLAM跑得稳。下一章我们会聊点更刺激的——前端里程计,到时候见。