2、传感器标定:内参、外参标定对变换精度的影响
传感器标定这件事,说白了就是给传感器“配眼镜”。
你想想看,一个摄像头或者激光雷达,出厂时多少有点“近视”或者“散光”。内参标定就是矫正它自己的视力问题。而外参标定呢,是让两个传感器“对上眼”——知道它们之间到底谁在左边、谁在右边,角度差了多少。
我在项目里见过太多人,算法调得再好,标定一塌糊涂,最后坐标变换全崩了。嗯,今天我们就来聊聊这里面的门道。
2.1 内参标定:传感器的“出厂矫正”
内参,是传感器自身的固有参数。对于相机来说,就是焦距、主点、畸变系数。对于激光雷达,就是扫描角度、距离偏移量。
为什么内参重要?
因为坐标变换的第一步,是把传感器原始数据转换到传感器坐标系。如果这一步就歪了,后面再怎么变换都是错的。
核心结论:内参误差会直接导致测量点云或图像像素的位置偏移。在远距离场景下,这种偏移会被放大。
我记得有一次做多传感器融合,相机和激光雷达怎么都对不齐。折腾了两天,最后发现是相机内参用了出厂默认值。重新标定后,问题直接解决。
2.1.1 相机内参标定要点
- 棋盘格标定法:最经典的方法。采集20-30张不同角度的棋盘格图像。
- 关键参数:fx, fy(焦距), cx, cy(主点), k1, k2, p1, p2(畸变系数)。
- 重投影误差:标定完成后,检查重投影误差。一般小于0.5像素才算合格。
我的习惯:标定完成后,我会拍一张棋盘格放在画面中央和边缘,手动验证一下畸变矫正效果。边缘的直线如果还是弯的,说明标定不够好。
2.1.2 激光雷达内参标定
激光雷达的内参相对简单,但容易被忽略。
- 距离偏移:由于激光发射和接收的延迟,测距会有固定偏差。
- 角度偏移:每个激光束的发射角度可能有微小偏差。
- 强度校正:不同距离、不同材质的反射强度需要归一化。
我曾经遇到一个案例:一台16线激光雷达,建图时总出现“重影”。排查后发现是某个激光束的角度偏差了0.1度。在100米外,这个偏差造成了17厘米的误差。嗯,0.1度看起来很小,但后果很严重。
2.2 外参标定:传感器之间的“握手协议”
外参,描述的是两个传感器坐标系之间的旋转和平移关系。比如相机和激光雷达之间,或者IMU和相机之间。
外参标定的精度,直接决定了多传感器融合的效果。
警告:外参标定不是一次性的。传感器安装位置如果发生微小位移(比如车辆颠簸导致支架松动),外参就会变化。我建议每次开机做一次在线标定校验。
2.2.1 常见外参标定方法
| 方法 | 适用场景 | 精度 | 难度 |
|---|---|---|---|
| 手动测量 | 粗略安装 | 厘米级 | 低 |
| 标定板法 | 实验室/工厂 | 毫米级 | 中 |
| 自然场景法 | 现场/在线 | 厘米级 | 高 |
| 手眼标定 | 机械臂+传感器 | 亚毫米级 | 高 |
我个人最推荐标定板法。虽然需要准备标定板,但精度可控,复现性好。
2.2.2 相机-激光雷达联合标定
这是最经典的外参标定场景。核心思路是:找到激光雷达点云中的特征点,与图像中的对应像素点建立匹配关系。
# 伪代码:相机-激光雷达外参标定流程
1. 采集数据:同时录制相机图像和激光雷达点云
2. 特征提取:在图像中检测棋盘格角点,在点云中提取棋盘格平面
3. 建立对应:将点云中的棋盘格角点投影到图像平面
4. 优化求解:最小化重投影误差,求解R和t
5. 验证:用标定后的外参投影点云到图像,检查对齐效果
避坑指南:我曾经犯过一个错误——只用了一组数据做标定。结果外参在某个角度很准,换个角度就偏了。后来我学乖了,至少采集5组不同距离、不同角度的数据,联合优化。
2.3 标定误差对变换精度的影响分析
我们来定量分析一下。假设外参的旋转误差为δθ,平移误差为δt,目标点距离传感器为d。
那么,由旋转误差引起的点位置误差大约是:d × tan(δθ)。
举个例子:
- 如果δθ = 0.5度,d = 10米,误差 ≈ 8.7厘米
- 如果δθ = 0.5度,d = 50米,误差 ≈ 43.6厘米
- 如果δθ = 0.1度,d = 50米,误差 ≈ 8.7厘米
看到了吗?距离越远,旋转误差的影响越恐怖。所以远距离感知任务(比如自动驾驶的高速场景),对外参精度的要求极高。
经验数据:对于自动驾驶应用,外参旋转误差应控制在0.1度以内,平移误差控制在1厘米以内。对于室内机器人,可以放宽到0.5度和2厘米。
2.4 标定流程与工具推荐
我整理了一套我自己常用的标定流程,供你参考:
- 准备阶段:选择合适的标定板(棋盘格或AprilTag),固定传感器安装位置。
- 数据采集:确保标定板在传感器视野内,采集多角度、多距离的数据。
- 内参标定:先标定每个传感器的内参,确保内参准确。
- 外参标定:使用联合标定工具,求解外参。
- 验证:用独立的数据集验证标定结果,检查重投影误差。
- 部署:将标定参数写入配置文件,并在实际场景中测试。
工具方面,我常用的是:
- 相机内参:OpenCV的calibrateCamera()
- 激光雷达内参:厂商提供的标定工具
- 相机-激光雷达外参:Autoware的标定工具包,或者自己写优化代码
- 多传感器联合标定:Kalibr(支持相机+IMU)
2.5 本章知识体系
下面这张图,是我梳理的传感器标定对变换精度影响的核心逻辑。你可以把它当作一个检查清单:
这张图的核心逻辑很简单:内参和外参共同决定了坐标变换的精度。任何一个环节出问题,最终都会反映在变换结果上。
最后说一句:标定这件事,看起来枯燥,但它是所有上层算法的基石。我见过太多团队花几个月调算法,却不愿意花一天做标定。结果呢?算法在仿真里跑得飞起,一上真机就崩。嗯,别走这条路。
可可精品资料库