4、摄像头外参标定:车辆坐标系下的安装角度标定
好,咱们进入摄像头标定里最「接地气」的一个话题——外参标定。
内参标定搞定的是镜头和感光芯片本身的畸变、焦距这些事。但摄像头装到车上以后,它到底朝哪个方向看?跟车头是不是一条直线?这些就是外参要解决的问题。
说白了,外参就是描述摄像头坐标系和车辆坐标系之间的旋转和平移关系。今天咱们重点聊旋转——也就是安装角度。
4.1 车辆坐标系下的安装角度
先统一一下坐标系。我习惯用ISO 8855标准:
- X轴:车辆前进方向
- Y轴:车辆左侧方向
- Z轴:车辆上方方向
摄像头装上去以后,它的光轴跟车辆坐标系之间会有三个角度偏差:
| 角度 | 定义 | 影响什么 |
|---|---|---|
| 俯仰角(Pitch) | 绕Y轴旋转,摄像头抬头或低头 | 测距精度、地平线位置 |
| 偏航角(Yaw) | 绕Z轴旋转,摄像头向左或向右偏 | 车道线横向位置、目标方位 |
| 翻滚角(Roll) | 绕X轴旋转,摄像头左右倾斜 | 地平线倾斜、车道线斜率 |
这三个角度,任何一个偏差超过0.1度,在100米外的横向误差就能到17厘米。你想想看,车道宽度才3.5米,这误差已经不能忍了。
关键认知:外参标定的精度直接决定了感知系统在远距离上的可靠性。俯仰角偏差1度,100米处的纵向测距误差可达1.7米——这在AEB场景下可能就是撞与没撞的区别。
4.2 俯仰角/偏航角/翻滚角的计算方法
这三个角怎么算?核心思路就一句话:找特征,算旋转。
具体来说,我们需要找到一些在车辆坐标系下已知位置的特征点,然后在图像里找到它们的投影,反过来解算旋转矩阵。
4.2.1 俯仰角计算
俯仰角最容易算。为什么?因为地平线在图像里的位置直接反映了俯仰角。
假设摄像头安装高度为H,焦距为f,图像中地平线的纵坐标为v₀(像素),那么:
俯仰角 θ = arctan((v₀ - cy) / f)
其中cy是图像主点的纵坐标。
我在项目中遇到过一个问题:有些场景下地平线被遮挡了,比如前面有辆大卡车。这时候就不能直接用地平线了。我的做法是用车道线——只要找到两条车道线在图像中的消失点,那个点的纵坐标就是地平线的位置。
实用技巧:如果车道线也不清晰,可以用静止车辆的车轮下沿或者路沿石。这些特征在平直路段上都能提供可靠的地平线信息。
4.2.2 偏航角计算
偏航角稍微麻烦一点。它反映的是摄像头光轴跟车辆纵轴之间的水平夹角。
怎么算?看车道线的横向位置。
如果摄像头完全正对前方,左右车道线在图像里应该是对称的。如果偏航角不为零,两条车道线会整体向左或向右偏移。
具体公式:
偏航角 ψ = arctan((x_left + x_right - 2*cx) / (2*f))
其中x_left和x_right是左右车道线在图像底部的横坐标,cx是主点横坐标。
嗯,这里要注意:这个公式假设车道宽度是标准的3.5米左右。如果实际车道宽度偏差很大,比如窄路或者宽马路,结果会有误差。我一般会结合多个帧的数据做滤波,或者用标定场里的已知宽度标志线。
4.2.3 翻滚角计算
翻滚角最简单——看地平线的倾斜角度。
如果摄像头装歪了,图像里的地平线就不是水平的。翻滚角就是地平线在图像中的倾斜角度。
翻滚角 φ = arctan((v_right - v_left) / (x_right - x_left))
其中v_left和v_right是地平线左右两端的纵坐标。
翻滚角一般不会太大,因为安装支架有机械限位。但我见过一个案例:某款车的摄像头支架在长期振动后松动了,翻滚角漂了2度。结果车道线检测一直报「车道线倾斜」,其实是摄像头自己歪了。
避坑指南:我曾经在标定一台车时发现翻滚角总是偏大,查了半天发现是车辆停在了有坡度的路面上。记住:翻滚角标定必须在水平路面上进行,否则会把路面坡度误认为是摄像头倾斜。
4.3 基于车道线的在线标定
前面说的都是静态标定——在标定场里一次搞定。但实际应用中,摄像头的外参会随着时间漂移。温度变化、振动、支架老化,都会让安装角度发生变化。
所以,在线标定就变得非常重要。
在线标定的核心思想:利用车辆行驶过程中感知到的自然特征,持续修正外参。
4.3.1 车道线法的基本原理
车道线是最理想的在线标定特征。为什么?
- 大部分结构化道路上都有
- 车道线是平行的,提供了方向约束
- 车道宽度已知(虽然不同国家有差异)
具体做法是这样的:
- 从图像中提取车道线
- 假设车道线在车辆坐标系下是平行且等距的
- 用当前的外参将车道线投影到车辆坐标系
- 计算投影后的车道线是否满足平行和等距约束
- 如果不满足,反向优化外参
说白了,这就是一个优化问题:
min Σ || 投影后的车道线偏差 ||²
s.t. 车道线平行且间距为W
4.3.2 基于标定场的离线标定
虽然在线标定很香,但新车下线或者更换摄像头后,还是得做一次离线标定。
标定场里一般会有:
- 棋盘格或圆点阵(用于内参标定)
- 已知位置的地面标志线(用于外参标定)
- 垂直标志杆(用于高度标定)
我记得有一次在标定场里,发现摄像头检测到的标志点位置跟实际位置总是差几厘米。排查了半天,发现是标定场的地面标志线被晒褪色了,检测精度下降。从那以后,我每次去标定场都会先检查标志线的清晰度。
经验之谈:离线标定和在线标定不是二选一的关系。我建议的做法是:新车下线做一次完整的离线标定,然后车辆运行过程中持续用在线标定做微调。两者结合,才能保证长期稳定。
4.4 标定流程与注意事项
最后,我总结一下完整的标定流程:
- 准备工作:确保车辆停在水平路面,轮胎气压正常,载荷分布均匀
- 内参标定:先搞定镜头畸变和焦距(如果内参已知可跳过)
- 特征提取:从图像中提取车道线或标定场标志点
- 初始估计:用地平线法估算俯仰角和翻滚角,用车道线对称性估算偏航角
- 非线性优化:用Levenberg-Marquardt或Gauss-Newton做精细优化
- 验证:用另一组数据验证标定结果,检查投影误差是否在阈值内
重要提醒:标定完成后一定要做验证。我见过有人标定完发现投影误差很小,但实际跑起来测距偏差很大。为什么?因为优化陷入了局部最优。验证的方法很简单:在图像里选几个特征点,投影到车辆坐标系,然后跟实际测量值对比。误差超过5厘米就要重新标定。
好了,这一章的内容就到这里。摄像头外参标定说难不难,说简单也不简单。关键是要理解每个角度背后的物理意义,以及它们对感知系统的影响。下一章咱们聊毫米波雷达的标定,那个又是另一番天地了。