3、内外参标定:相机内参标定原理、外参标定方法、激光雷达与相机联合标定、标定工具链介绍。

说到BEV融合,有个绕不开的坎——标定。我见过不少团队,模型调得飞起,一上车数据全对不上,最后发现是标定出了问题。说白了,标定就是给传感器「配眼镜」,让它们看到的世界在同一个坐标系里对齐。

3.1 相机内参标定原理

相机内参,描述的是光线怎么穿过镜头落到CMOS上。核心参数就这几个:焦距(fx, fy)、主点(cx, cy)、畸变系数(k1, k2, p1, p2等)。

标定原理其实不复杂。我们拿一个已知尺寸的棋盘格,拍不同角度的照片。棋盘格上的角点坐标是已知的(世界坐标系),它们在图像上的像素坐标也是已知的。通过多组对应关系,就能解出内参矩阵。

数学上,这个过程可以写成:

s * [u, v, 1]^T = K * [R|t] * [X, Y, Z, 1]^T

其中K就是内参矩阵。我们通过最小化重投影误差来求解——说白了,就是让「计算出来的像素位置」和「实际检测到的像素位置」尽可能接近。

我的经验:拍棋盘格时,角度要丰富。我见过有人只拍了正对着的几张,结果标出来的畸变参数完全不对。建议至少拍15-20张,覆盖画面四个角落和中心区域。

3.2 外参标定方法

外参解决的是「相机装在车上的什么位置、什么朝向」这个问题。它包含旋转矩阵R和平移向量t,一共6个自由度。

常用的外参标定方法有几种:

  • 手动测量法:用卷尺量位置,用量角器估角度。精度嘛...只能说凑合能用,但别指望它做高精度融合。
  • 基于标定板的方法:在车前放一个已知尺寸的标定板,同时用激光雷达和相机采集数据。通过提取标定板在各自坐标系下的位姿,解出外参。
  • 基于自然特征的方法:利用道路上的车道线、路沿等特征进行在线标定。我去年在某个项目中用过这种方法,效果还不错,但需要场景中有足够多的稳定特征。

核心公式:外参标定本质上是在求解一个刚体变换:

P_cam = R * P_lidar + t

其中P_cam是相机坐标系下的点,P_lidar是激光雷达坐标系下的点。

为什么会标不准?我踩过的坑主要有两个:一是标定板不够平整,二是采集数据时车辆有微小晃动。你想想看,一个0.1度的角度误差,在50米外就会产生将近10厘米的偏差——这对BEV融合来说是不能接受的。

3.3 激光雷达与相机联合标定

这是BEV融合中最关键的一步。激光雷达提供精确的3D点云,相机提供丰富的纹理信息。两者对齐了,融合才有意义。

联合标定的流程大致如下:

  1. 准备一个同时能被激光雷达和相机「看见」的标定物(通常是带反光标记的棋盘格或立方体)
  2. 采集多组同步数据
  3. 分别提取标定物在点云和图像中的特征
  4. 建立3D-2D对应关系
  5. 用PnP算法或非线性优化求解外参

这里有个细节要注意:激光雷达的点云是稀疏的,很难精确找到标定板的角点。我习惯的做法是,先拟合出标定板的平面,再取平面的边界交点作为特征点。

避坑指南:我曾经在联合标定时忽略了时间同步问题。激光雷达和相机的采集时间戳差了50毫秒,结果标出来的外参在静态场景下看着没问题,车一开动就全乱了。后来我加上了硬件同步触发,问题才解决。

3.4 标定工具链介绍

工欲善其事,必先利其器。这里介绍几款我常用的标定工具:

工具名称 适用场景 优点 缺点
OpenCV Calibration 相机内参标定 成熟稳定,文档丰富 需要手动采集数据
Kalibr 多相机+IMU标定 支持多种传感器,精度高 配置复杂,学习曲线陡
Autoware Calibration 激光雷达-相机联合标定 有GUI界面,操作直观 依赖ROS,版本兼容性一般
Apollo Calibration 量产车规级标定 自动化程度高,支持在线标定 代码量大,定制化困难

我个人习惯用Kalibr做内参标定,用Autoware的标定工具做联合标定。不过说实话,没有哪个工具是万能的。实际项目中,我经常需要自己写一些脚本做数据预处理和后处理。

小技巧:标定完成后,一定要做验证。我的验证方法是:把激光雷达点云投影到图像上,看边缘是否对齐。如果投影误差在2-3个像素以内,就算合格。如果超过5个像素,建议重新标定。

嗯,标定这块内容就讲到这里。记住一句话:标定是BEV融合的地基,地基不稳,上层建筑再漂亮也是白搭。下一章我们会聊聊BEV空间中的特征提取,到时候你会看到,标定精度直接影响特征对齐的效果。