第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() 函数就能搞定。流程很简单:

  1. 拍摄20-30张不同角度的棋盘格图像
  2. 提取角点坐标
  3. 调用标定函数
  4. 检查重投影误差(一般小于0.5像素就算合格)
我的经验:拍摄时让棋盘格占满画面不同区域,尤其是边缘。我曾经只拍了中心区域的图像,结果畸变校正后边缘反而更扭曲了。

3.2 内参标定:Lidar

激光雷达的内参标定,其实比相机简单得多。LiDAR 的内参主要包括:

  • 激光发射器与接收器的对准偏差
  • 每个激光通道的俯仰角、水平角偏移
  • 距离测量误差(offset 和 scale)

大多数工业级 LiDAR(如 Velodyne、Hesai、RoboSense)出厂时已经标定好了。但如果你用的是自研 LiDAR 或者拆机维修过,就需要重新标定。

标定方法通常是在暗室中放置已知距离的平面靶标,采集点云后拟合平面,反算每个激光通道的偏差。我记得有一次帮客户调试一台16线雷达,发现第8线到第12线的点云总是「飘」的,最后排查出来是发射器透镜上有灰尘——擦干净就好了。

注意:LiDAR 内参标定对环境要求很高。温度变化、机械振动都会影响标定结果。建议在恒温环境下进行,并多次重复取平均。

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 能检测到反光条边缘。

关键参数:棋盘格方格大小建议 5-10 cm,标定板整体尺寸 60×80 cm 左右。反光条宽度 2-3 cm。

3.5 标定工具使用

市面上成熟的标定工具有不少,我挑几个常用的说说:

3.5.1 Autoware 标定工具

开源、免费,支持 Camera-LiDAR 联合标定。操作流程:

  1. 录制一段包含标定板的 rosbag
  2. 运行 calibration_camera_lidar 节点
  3. 手动选取图像中的标定板角点
  4. 自动优化外参

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
避坑指南:我曾经用 Apollo 工具时,发现标定结果总是偏。排查了两天,最后发现是标定板上的反光条在 LiDAR 点云中产生了多次回波,导致角点提取不准。解决办法是改用单回波模式采集数据。

3.6 标定质量评估

标定完了,怎么知道好不好?我一般看三个指标:

  1. 重投影误差:点云投影到图像上,与真实像素位置的偏差。小于 2 像素算合格。
  2. 距离误差:在已知距离处放置物体,测量 LiDAR 点云与相机估计的距离差。小于 5 cm 算优秀。
  3. 可视化检查:把点云投影到图像上,看边缘是否对齐。这是最直观的方法。

嗯,这里要注意:标定不是一劳永逸的。车辆行驶中的振动、温度变化都会导致外参漂移。我建议每 3-6 个月重新标定一次,或者在每次大修后必须标定。

3.7 本章知识体系

下面这张图总结了传感器标定的核心流程和关键点:

传感器标定知识体系 内参标定 外参标定 标定工具 Camera: 内参矩阵+畸变 LiDAR: 通道偏差+距离校正 Camera-LiDAR 联合标定 R, T 矩阵求解 Autoware / Apollo 自研脚本 (Python/C++) 标定板设计 标定质量评估 重投影误差 < 2px 距离误差 < 5cm 建议每 3-6 个月重新标定一次,大修后必须标定

标定这件事,说难不难,说简单也不简单。关键是要理解每个参数背后的物理意义,以及它们对最终感知结果的影响。我见过太多团队在标定上省功夫,结果融合效果一塌糊涂——标定省下的时间,最后都要在调试里加倍还回去。

好了,这一章就到这里。标定是感知融合的基石,打好基础,后面的路才好走。

可可精品资料库