第三节:传感器标定基础

聊到传感器融合,标定是绕不开的第一步。我见过不少团队,算法模型选得挺先进,结果一上路就崩——查来查去,原来是标定没做好。说白了,标定就是给传感器「配眼镜」,让它们看清这个世界,并且彼此对齐。

3.1 标定的目的与意义

为什么要标定?我直接说大白话:让传感器输出的数据真实反映物理世界

你想想看,一个摄像头装在车上,它看到的像素坐标和真实世界的三维坐标之间,存在一个映射关系。这个关系如果不对,那后面的融合、感知、决策全是错的。标定就是把这个映射关系算出来。

具体来说,标定解决三个核心问题:

  • 消除制造误差:镜头畸变、安装偏差、芯片偏移,这些出厂就有
  • 统一坐标系:摄像头、激光雷达、毫米波雷达各说各话,得翻译成同一种语言
  • 建立时空对齐:不同传感器的数据在时间和空间上要能对上号

核心观点:标定不是一次性的「做完就完」,而是贯穿传感器生命周期的工作。温度变化、振动、时间推移都会让标定参数漂移。

我在项目里遇到过一件事:一台测试车跑了三个月,突然发现障碍物检测偏差越来越大。排查了两天,最后发现是摄像头固定螺丝松了,外参变了。从那以后,我坚持在每次路测前做一次快速标定校验。

3.2 内参标定与外参标定

这两个概念很多人容易搞混。我习惯这么区分:内参是传感器自己的事,外参是传感器之间的事

3.2.1 内参标定

内参标定,说白了就是搞清楚传感器「自己长什么样」。

对于摄像头,内参包括:

  • 焦距(fx, fy)
  • 主点偏移(cx, cy)
  • 畸变系数(k1, k2, p1, p2, k3)

对于激光雷达,内参包括:

  • 激光发射角
  • 旋转轴偏移
  • 各线束的垂直角度偏差

内参标定通常在生产环节完成,但使用过程中也需要定期校验。我见过一个案例:某款激光雷达用了半年后,测距精度从±2cm漂到了±5cm,重新标定内参后才恢复。

3.2.2 外参标定

外参解决的是「传感器A和传感器B之间的相对位置和姿态」。

举个例子:摄像头看到一辆车在像素坐标(500, 300)处,激光雷达在同一个时刻测到同一个点在(10m, 2m, 0.5m)处。这两个数据怎么对应起来?靠的就是外参——一个旋转矩阵R和一个平移向量t。

外参标定的常见方法:

  • 目标物法:在共同视野内放置标定板,同时采集数据
  • 自然特征法:利用道路上的车道线、路沿等特征
  • 在线标定:车辆行驶过程中动态估计外参

我的经验:外参标定最怕「过拟合」。我曾经用一组数据把外参调得特别准,换一个场景就崩了。后来我学会了用多组不同距离、不同角度的数据做联合优化。

3.3 标定板设计

标定板是标定工作的「尺子」。选什么样的标定板,直接影响标定精度和效率。

3.3.1 棋盘格标定板

棋盘格是最经典的标定板,也是我入行时第一个接触的。

它的原理很简单:黑白相间的格子,角点清晰,容易检测。OpenCV的findChessboardCorners()函数就是专门干这个的。

设计棋盘格时要注意:

  • 格子数量:建议7×10或9×12,太少角点不够,太多容易误检
  • 格子大小:根据传感器距离和分辨率决定,一般30mm-100mm
  • 材质:亚光打印纸最好,反光材料会引入噪声
// 棋盘格角点检测示例(C++)
cv::Mat image = cv::imread("calib_image.jpg");
cv::Size patternSize(9, 6); // 内角点数量
std::vector<cv::Point2f> corners;

bool found = cv::findChessboardCorners(image, patternSize, corners);
if (found) {
    cv::drawChessboardCorners(image, patternSize, corners, found);
    // 进一步做亚像素精化
    cv::cornerSubPix(gray, corners, cv::Size(5,5), cv::Size(-1,-1),
                     cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 30, 0.1));
}

避坑指南:我曾经用一张A4纸打印的棋盘格去标定长焦摄像头,结果角点检测总是失败。后来发现是格子太小,远距离时角点模糊成一团。记住:标定板尺寸要和传感器分辨率匹配。

3.3.2 AprilTag标定板

AprilTag是后来兴起的方案,比棋盘格更「聪明」。

它的每个Tag都自带ID,系统可以自动识别是哪个Tag、在什么位置、朝向如何。这意味着:

  • 不需要人工指定角点顺序
  • 部分遮挡也能工作
  • 支持多Tag拼接,覆盖更大视野

AprilTag的设计参数:

参数 说明 推荐值
Tag家族 编码方式 Tag36h11(鲁棒性好)
Tag大小 单个Tag的边长 50mm-200mm
间距 Tag之间的间隔 0.5倍Tag大小
布局 行列数量 3×3 或 4×4

我个人习惯用AprilTag做多传感器联合标定。因为它的ID信息可以自动匹配不同传感器中的对应点,省去了手动选点的麻烦。

3.4 知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以看到标定工作从「为什么做」到「怎么做」的完整链路。

传感器标定知识体系 标定的目的与意义 内参标定 外参标定 摄像头内参 焦距、主点、畸变系数 激光雷达:发射角、旋转轴偏移 外参内容 旋转矩阵 R、平移向量 t 传感器间的相对位姿 标定板设计 棋盘格 AprilTag

从这张图可以看得很清楚:标定目的驱动了内参和外参两大方向,而标定板则是实现这些标定的具体工具。棋盘格和AprilTag各有优劣,选哪个取决于你的应用场景和精度要求。

我的建议:如果你是刚入门,先从棋盘格开始,把内参标定的流程跑通。等你对标定原理有了手感,再切换到AprilTag做多传感器联合标定。一步一个脚印,别贪多。


公众号:蓝海资料掘金营,微信deep3321