单目测距那些事儿(上) | 从MobileEye谈起
单目测距那些事儿(上) | 从MobileEye谈起
全面专业的自动驾驶学习资料:链接
- 前言
在ADAS领域,有个功能叫自适应巡航控制(Adaptive Cruise Control, ACC)。 ACC是一种纵向距离控制,具体包括发现目标车辆、判断目标车辆所在路径、测量相对本车的距离和速度,然后进行相应的刹车等制动操作以保持安全驾驶距离。当没有发现目标车辆时,则保持预设的巡航速度。
对于测距而言,最直接的方法是采用毫米波雷达、激光雷达和双目相机。但是考虑到设备成本和计算成本,人们开始考虑能不能用单目相机来做距离控制。当然这种考虑不是空穴来风的,而是有两个直观的动机:
-
生物视觉角度:一方面,人类双眼虽然有立体测距功能,但仅在近距离比较准确,无法准确测量百米距离;另一方面,基于近大远小的原理,人类视觉就可以准确评估TTC (Time To Collision)。(换句话说,在ACC中测距可能不用太准,而近大远小的原理用单目也可实现,那单目测距还是很有希望的嘛)
-
实践角度:雷达太贵,立体视觉不仅增加额外相机,而且计算量大,标定也是个问题。单目相机则成本很低,易于批量生产。
当然,挑战也是有的,主要两个:
-
由于缺乏用于目标识别的深度信息,非常依赖基于模式识别的目标检测算法,那么当前的目标检测算法是否足够鲁棒?(目标识别不出来,就没法测距,后果很危险。)
-
目标检测出来后,利用透视法则和近大远小原理测距能否满足制动控制精度。
下面就先介绍MobileEye在2003年一篇论文,主要介绍了测量距离、相对速度的基本方法,以及误差分析。
2. MoibleEye 2003年的论文
论文:Vision-based ACC with a Single Camera: Bounds on Range and Range Rate Accuracy
2.1 测距
首先明确一点,对于单目测距,我们主要是有两个信息可以利用:图像中车辆的尺寸,图像中车辆的位置。
而这篇论文主要是利用图像中车辆位置进行测距的(确切地说,是利用车与路面的接触点)。如下图,A,B,C三辆车在路面上,A车上p处有个相机。有两个假设:
-
道路是平面。
-
相机光轴与路面平行。
道路上与本车(A)距离为Z的一点,投影到图像上高度为y。f为焦距,H为相机高度,则满足:
为了测距,首先需要检测前车与路面的接触点,然后就可以计算距离了:
也就是,根据焦距、相机高度,图像中接触点位置三个量,即可计算距离。
当然在现实中,上述两个假设常常不满足,会造成很大的误差。另外,接地点的估计也会引入误差。
2.2 测距误差分析
如果接地点存在n个像素误差,那么测距误差公式为:
所以,测距误差是随着距离而二次方地增长,而误差比例则随着距离线性增长。
在640x480分辨率的图像上,90m的测距误差比例为10%左右,45m的测距误差比例为5%左右。
除了距离,相对速度或许更重要,因为它告诉我们是否在保持一个恒定的距离。
2.3 相对速度
相对速度(range rate, or relative velocity)可以如下表示:
也就是测量两个时间的距离,用距离差除以时间差。但是,测距结果充满噪声,这样算出来的相对速度精度自然不高。所以,这里主要使用目标尺寸变化计算相对速度。令W是车辆实际宽度,w和w'是前后两张图像上的车辆宽度,那么满足:
(7)式可以参考下图:
然后,
也就是,根据t1时刻距离,t1和t2的检测尺寸,就可计算出相对速度。
2.4 相对速度误差分析
这一部分公式比较复杂,就不详细展开了。说几个结论:
-
相对速度误差与相对速度是独立的。
-
相对速度随着距离二次方增长。
-
时间间隔越大,相对速度越准。
-
相机视场角小(焦距大),会线性减小误差。
3 后记
一句话总结下ME的方法:用目标在图像中的位置测距,用目标尺寸变化来计算相对速度。 简单明了,实在是高!
正所谓:单目测距不是梦,无数豪杰往前冲。回首漫漫发展路,MobileEye启征程。
但是,上述方法基于两个很强的假设,在实际应用中存在很大问题,主要两点:
-
相机光轴很难总是和路面平行的,一是安装固定有难度,二是车辆行驶中难免颠簸,相机角度肯定存在起伏。 -
-
道路不是一直平坦的,很多道路存在坡度,这时候又该怎么办呢?
其实,也有不少论文针对上述问题做出了探索,我将在单目测距那些事儿(下)中对相关方法进行梳理,敬请期待!