黑芝麻智能 - 相机自动标定
记录在黑芝麻智能工作期间在相机自动标定方面的工作。
Introduction
自动驾驶领域的相机自动标定 (automatic camera calibration),一般指在汽车行驶过程中对相机的外参进行实时计算的过程。
相机模型是联系成像平面与三维世界的纽带,其参数影响二维和三维间的转换过程。实时标定是为了解决汽车行驶过程中姿态变化引发的参数变化。汽车行驶过程中最明显的是俯仰角和滚转角变化,即 Pitch 和 Roll 角度变化,它们可能是由车内静态载荷分布变化、车辆颠簸和转向引发。
我在黑芝麻时期的工作之一就是基于车道线进行实时的俯仰角标定。
Implementation
Camera Extrinsics Calibrate Kernel
V2021.0531
方法

给定标定初始值(非待标定参数通过预标定获得,待标定参数通过帧内简易标定或上帧标定结果获得)
生成插值锚点(利用插值锚点逼近图像系车道线,加速后续的逆透视变换)
在世界系生成采样点
基于上述采样点描述的线间距检测不规则的车道线并剔除

- 基于线间距定性描述当前外参数偏离真值的倾向

- 偏离倾向小于阈值或迭代超过一定次数时退出标定,否则根据倾向调整外参并迭代3~5步

思路
Q:用什么方法标定?
A:基于平行线段间距相等原理,通过迭代方法找出最优解
Q:为什么在世界系进行采样?
A:
Q:为什么需要初始外参?会带来什么问题?
A:因为基于优化的方法求解,通过初值避免落入其它局部最优。初始值来自上一帧,第一帧来自其它标定方式(不能依赖于外部标定文件,因为该模块需通用于无外部标定文件的工作模式,如当前的自助标定模式)。
Q: 如何迭代到最优?
A:由采样点构建优化网格,计算每个网格的倾斜倾向并统计各方向数量,依据少数服从多数原则决定最终迭代优化方向。
Q:优化过程中如何剔除实际不平行的线?
A:1. 两条线判断形状相似性(共模信号?);2. 更多条线判断趋势一致性;3. 无论俯仰角是否最优、道路是否含有坡道,两条平行车道线投影到三维空间中后其中心线坐标点相对于两车道线变化趋势应该相同,即可以采用差分信号的形式检测平行度。同时对单条车道线进行检测,当其有效节点数不足时,剔除整条线,且被剔除的节点或车道线不再参与后续的优化计算。
Q:如何降低部分车道线的误差带来的影响?
A:剔除掉不平行的车道线或车道线区段后进行迭代优化,在优化完成后剔除一定比例误差最大的节点再进行一次迭代以输出最终结果。
Q:标定采用的车道线区域有什么限制么?
A:考虑到实际需要的是相机相对车辆近点路面的姿态角,因此有必要将标定使用的车道线限定在一定范围内(如10米,在能力满足的情况下越近越好,以更好的支持后续的坡道建模)。此外,考虑到路口场景可能在近处不存在车道线,需可配置使用较远处的车道线完成标定以拓展工作范围。