3. 传感器标定基础
传感器标定,说白了就是给车装上「眼睛」之后,还得教会它怎么看世界。我刚开始做感知时,总觉得标定是件小事,结果有一次路测发现障碍物位置总是偏了30厘米,排查了三天——最后发现是外参矩阵里一个符号写反了。嗯,从那以后我再也不敢轻视标定了。
3.1 内参标定:Camera
相机内参标定,核心是求解从三维世界到二维像素的映射关系。这个映射由两部分组成:内参矩阵和畸变系数。
内参矩阵长这样:
K = [fx 0 cx]
[ 0 fy cy]
[ 0 0 1]
其中 fx、fy 是焦距(单位像素),cx、cy 是主点偏移。畸变系数则包括径向畸变(k1, k2, k3)和切向畸变(p1, p2)。
我个人习惯用棋盘格标定板,OpenCV 的 cv2.calibrateCamera() 函数就能搞定。流程很简单:
- 拍摄20-30张不同角度的棋盘格图像
- 提取角点坐标
- 调用标定函数
- 检查重投影误差(一般小于0.5像素就算合格)
3.2 内参标定:Lidar
激光雷达的内参标定,其实比相机简单得多。LiDAR 的内参主要包括:
- 激光发射器与接收器的对准偏差
- 每个激光通道的俯仰角、水平角偏移
- 距离测量误差(offset 和 scale)
大多数工业级 LiDAR(如 Velodyne、Hesai、RoboSense)出厂时已经标定好了。但如果你用的是自研 LiDAR 或者拆机维修过,就需要重新标定。
标定方法通常是在暗室中放置已知距离的平面靶标,采集点云后拟合平面,反算每个激光通道的偏差。我记得有一次帮客户调试一台16线雷达,发现第8线到第12线的点云总是「飘」的,最后排查出来是发射器透镜上有灰尘——擦干净就好了。
3.3 外参标定:Camera-LiDAR 联合标定
这是标定中最关键也最头疼的一步。Camera 和 LiDAR 各自有坐标系,我们需要求解一个 4×4 的刚体变换矩阵,把 LiDAR 点云投影到相机图像上。
变换关系:
P_cam = R * P_lidar + T
其中 R 是旋转矩阵(3×3),T 是平移向量(3×1)。
常用的标定方法有两种:
| 方法 | 原理 | 精度 | 难度 |
|---|---|---|---|
| 靶标法 | 使用特制标定板,同时被相机和 LiDAR 观测 | 高(0.1° 级别) | 中等 |
| 自然场景法 | 利用场景中的边缘、角点等特征自动匹配 | 中等(0.5° 级别) | 低 |
我个人更推荐靶标法。虽然准备标定板麻烦一点,但精度有保障。我曾经在项目里偷懒用了自然场景法,结果雨天场景下匹配失败,导致融合模块直接崩了——教训深刻。
3.4 标定板设计
标定板是联合标定的核心工具。一个好的标定板需要满足:
- 相机可见:有高对比度的图案(棋盘格、圆点阵)
- LiDAR 可见:表面有高反射率区域,或者使用特殊材料(如反光贴纸)
- 尺寸合适:太大不好操作,太小点云稀疏
我常用的设计是:在黑色亚克力板上贴白色棋盘格,棋盘格四周加一圈反光条。这样相机能看到棋盘格角点,LiDAR 能检测到反光条边缘。
3.5 标定工具使用
市面上成熟的标定工具有不少,我挑几个常用的说说:
3.5.1 Autoware 标定工具
开源、免费,支持 Camera-LiDAR 联合标定。操作流程:
- 录制一段包含标定板的 rosbag
- 运行
calibration_camera_lidar节点 - 手动选取图像中的标定板角点
- 自动优化外参
3.5.2 百度 Apollo 标定工具
功能更全,支持多传感器联合标定。我印象最深的是它的可视化界面,能实时看到点云投影到图像上的效果,方便调试。
3.5.3 自研脚本
有时候现成工具不够灵活,我会自己写 Python 脚本。核心步骤:
# 伪代码示例
def calibrate_camera_lidar(corners_img, corners_lidar):
# 1. 构建对应点对
# 2. 使用 PnP 算法求解初始外参
# 3. 使用非线性优化(如 Levenberg-Marquardt)精调
# 4. 计算重投影误差
return R, T
3.6 标定质量评估
标定完了,怎么知道好不好?我一般看三个指标:
- 重投影误差:点云投影到图像上,与真实像素位置的偏差。小于 2 像素算合格。
- 距离误差:在已知距离处放置物体,测量 LiDAR 点云与相机估计的距离差。小于 5 cm 算优秀。
- 可视化检查:把点云投影到图像上,看边缘是否对齐。这是最直观的方法。
嗯,这里要注意:标定不是一劳永逸的。车辆行驶中的振动、温度变化都会导致外参漂移。我建议每 3-6 个月重新标定一次,或者在每次大修后必须标定。
3.7 本章知识体系
下面这张图总结了传感器标定的核心流程和关键点:
标定这件事,说难不难,说简单也不简单。关键是要理解每个参数背后的物理意义,以及它们对最终感知结果的影响。我见过太多团队在标定上省功夫,结果融合效果一塌糊涂——标定省下的时间,最后都要在调试里加倍还回去。
好了,这一章就到这里。标定是感知融合的基石,打好基础,后面的路才好走。