4、激光雷达标定:内参标定(角度、距离偏差)、外参标定(雷达与车体/IMU的位姿关系)、常用的标定工具(lidar_align、kalibr)
标定这件事,说白了就是给雷达「配眼镜」。
我见过不少团队,算法调得再好,标定一塌糊涂,最后定位精度就是上不去。你想想看,雷达告诉你前方5米有障碍物,结果实际只有4.8米——这0.2米的误差,在狭窄通道里可能就是撞车和通过的差别。
这一章,咱们把标定这件事彻底讲透。
核心观点:标定是导航系统精度的天花板。内参决定「看得准不准」,外参决定「装得对不对」。两个都做好,你的雷达才算真正「上岗」。
4.1 内参标定:让雷达看清世界
内参标定,解决的是雷达自身的「出厂误差」。
每个激光雷达都有制造公差。电机安装偏了0.1度,激光器发射角度偏了0.05度,这些微小的偏差在100米外就会放大成十几厘米的误差。
4.1.1 角度偏差标定
角度偏差分两种:水平角度偏差和垂直角度偏差。
- 水平角度偏差:雷达旋转时,每个激光束的水平起始角度与理论值不一致。表现为点云整体「扭」了一下。
- 垂直角度偏差:多线雷达中,各线束的垂直俯仰角与设计值有偏移。这会导致地面点云出现「分层」或「波浪」。
我的经验:判断垂直角度偏差有个土办法——把雷达对着平整地面扫一圈。如果地面点云在远距离出现明显的上下分层,那垂直角度大概率偏了。我曾经用这个方法在5分钟内定位了一台16线雷达的垂直角度问题,省去了拆机检查的麻烦。
标定方法其实不复杂:
- 在空旷场地放置标定板(或利用平整墙面)
- 采集多组不同距离、不同角度的点云数据
- 构建误差函数:理论点位置 vs 实际点位置
- 用最小二乘法或非线性优化求解角度偏差
4.1.2 距离偏差标定
距离偏差,就是雷达测出来的距离和真实距离之间的差值。
原因很多:激光器功率衰减、接收器灵敏度变化、温度漂移、甚至镜片脏了都会导致距离偏差。
| 偏差类型 | 典型表现 | 常见原因 | 标定方法 |
|---|---|---|---|
| 固定偏移 | 所有距离都偏大/偏小一个固定值 | 电子延时、线缆长度 | 近距离标定板补偿 |
| 比例偏移 | 距离越远偏差越大 | 时钟频率漂移 | 多距离点拟合 |
| 非线性偏移 | 不同距离段偏差不一致 | 光学系统像差 | 分段多项式拟合 |
注意:距离偏差标定一定要在雷达预热后进行。冷启动和热稳定后的数据能差出2-3厘米。我习惯开机后让雷达空转10分钟再开始标定。
4.2 外参标定:让雷达融入系统
内参搞定了,接下来就是外参。
外参标定要解决的是:雷达装在车上哪个位置?朝哪个方向?相对于IMU(惯性测量单元)的位姿关系是什么?
4.2.1 雷达与车体的位姿关系
车体坐标系通常以后轴中心为原点,X轴向前,Y轴向左,Z轴向上。雷达坐标系则是以雷达自身为原点。
我们需要求出一个4x4的变换矩阵 T,把雷达坐标系下的点转换到车体坐标系下。
# 外参矩阵示例(单位:米,弧度)
# 假设雷达安装在车顶中心,向前0.5米,向上1.2米,俯仰角0.02弧度
T_lidar_to_vehicle = [
[0.9998, 0.0000, 0.0200, 0.5000],
[0.0000, 1.0000, 0.0000, 0.0000],
[-0.0200, 0.0000, 0.9998, 1.2000],
[0.0000, 0.0000, 0.0000, 1.0000]
]
标定方法通常有两种:
- 手动测量法:用卷尺量安装位置,用量角器测安装角度。简单粗暴,但精度有限(通常误差在2-5厘米、1-3度)。
- 自动标定法:利用已知特征点(如标定板角点),通过点云匹配反算外参。精度高(毫米级、0.1度级)。
我的建议:手动测量只适合初装调试。量产或高精度场景,一定要做自动标定。我记得有个项目,手动测量后定位一直有20厘米的偏差,折腾了两天找不到原因。最后用自动标定一跑,发现雷达安装时Y轴偏了1.5度——卷尺根本量不出来。
4.2.2 雷达与IMU的联合标定
IMU和雷达的联合标定,是激光雷达导航中最关键的一步。
为什么?因为IMU提供高频姿态信息,雷达提供低频位置信息。两者融合时,如果外参不准,融合结果会互相打架。
标定流程大致如下:
- 同时采集雷达点云和IMU数据
- 利用IMU积分得到运动轨迹
- 利用雷达点云匹配得到另一条运动轨迹
- 优化外参,使两条轨迹对齐
避坑指南:我曾经在标定IMU和雷达时,发现怎么优化都对不齐。折腾了半天,才发现IMU的采样时间戳和雷达的时间戳差了50毫秒。时间同步没做好,外参标定就是白费功夫。所以,标定前一定先确认时间戳对齐。
4.3 常用标定工具
工具选对了,事半功倍。我这些年用过不少工具,挑三个最实用的讲讲。
4.3.1 lidar_align
这是一个开源工具,专门用于激光雷达和IMU的外参标定。
它的核心思路是:利用IMU预积分和雷达点云配准,构建一个联合优化问题,同时优化外参和轨迹。
# lidar_align 使用示例
# 1. 准备数据:rosbag 包含 /velodyne_points 和 /imu/data
# 2. 运行标定
rosrun lidar_align lidar_align \
--bag_file data.bag \
--lidar_topic /velodyne_points \
--imu_topic /imu/data \
--output_file calibration.yaml
优点:全自动,不需要标定板。缺点:对运动激励要求高——你得让机器人做充分的旋转和加速运动。
4.3.2 kalibr
kalibr 是ETH Zurich开发的标定工具箱,支持多传感器联合标定。
它不仅能标定雷达和IMU,还能标定相机、IMU、雷达三者之间的外参。
| 功能 | 支持传感器 | 标定精度 | 难度 |
|---|---|---|---|
| 相机-IMU标定 | 单目/双目 + IMU | 亚像素级 | 中等 |
| 雷达-IMU标定 | 激光雷达 + IMU | 厘米级 | 较高 |
| 多传感器联合标定 | 相机+雷达+IMU | 综合最优 | 高 |
注意:kalibr 对数据质量要求很高。运动太慢、太快、或者场景特征不足,都会导致标定失败。我建议至少采集3组不同运动模式的数据:缓慢平移、快速旋转、8字形运动。
4.3.3 手动标定板方法
有时候,工具再好也不如自己动手。
手动标定板方法适合以下场景:
- 没有IMU数据(只有雷达)
- 需要快速验证外参
- 现场调试时临时标定
做法很简单:
- 在雷达前方放置一个已知尺寸的标定板(比如1m×1m的平板)
- 用雷达扫描标定板,提取板面点云
- 根据板面法向量和中心点,反算雷达相对于板的位置
- 移动标定板到不同位置,重复上述步骤,用多组数据优化外参
我的经验:手动标定虽然土,但有时候比自动工具还靠谱。有一次在野外调试,自动标定工具因为地面不平一直收敛失败。我直接用标定板手动标了10分钟,外参精度完全够用。所以,别看不起手动方法——关键时刻能救命。
4.4 标定后的验证
标定完不是就完事了。你得验证标定结果对不对。
我一般做三步验证:
- 点云重投影:把标定板点云投影到理论位置,看偏差是否在容忍范围内(通常<2cm)
- 地面平整度检查:标定后的地面点云应该是一个平面,没有波浪或分层
- 闭环一致性:让机器人走一个闭环路径,看起点和终点的位姿偏差。如果外参准,闭环偏差应该很小
嗯,标定这件事,说难不难,说简单也不简单。关键是要理解原理,选对工具,然后多动手试。我见过太多人拿着工具跑一遍就以为完事了,结果系统跑起来各种问题——其实都是标定没做好。