单目测距那些事儿(上) | 从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启征程。
但是,上述方法基于两个很强的假设,在实际应用中存在很大问题,主要两点:
相机光轴很难总是和路面平行的,一是安装固定有难度,二是车辆行驶中难免颠簸,相机角度肯定存在起伏。 -
道路不是一直平坦的,很多道路存在坡度,这时候又该怎么办呢?
其实,也有不少论文针对上述问题做出了探索,我将在单目测距那些事儿(下)中对相关方法进行梳理,敬请期待!
全面专业的自动驾驶学习资料:链接
单目测距那些事儿(上) | 从MobileEye谈起的更多相关文章
- form表单那点事儿(上) 基础篇
form表单那点事儿(上) 基础篇 做为html中最为常见,应用最广泛的标签之一,form常伴随前端左右.了解更深,用的更顺. 目录: 表单属性 表单元素 常识 模拟外观 表单属性 这个表单展示了fo ...
- (实用篇)php处理单文件、多文件上传代码分享
php处理 单文件.多文件上传实例代码,供大家参考,具体内容如下 后台处理文件submit_form_process.php <?php /************************** ...
- c# 模拟表单提交,post form 上传文件、大数据内容
表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...
- ajax提交表单、ajax实现文件上传
ajax提交表单.ajax实现文件上传,有需要的朋友可以参考下. 方式一:利用from表单的targer属性 + 隐藏的iframe 达到类似效果, 支持提交含有文件和普通数据的复杂表单 方式二:使用 ...
- 使用ajax提交form表单,包括ajax文件上传【转载】
[使用ajax提交form表单,包括ajax文件上传] 前言 转载:作者:https://www.cnblogs.com/zhuxiaojie/p/4783939.html 使用ajax请求数据,很多 ...
- 基于 Struts2 的单文件和多文件上传
文件的上传下载是 Web 开发中老生常谈的功能,基于 Struts2 框架对于实现这一功能,更是能够给我们带来很多的便利.Struts2 已经有默认的 upload 拦截器.我们只需要写参数,它就会自 ...
- 使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html
使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },&qu ...
- springMVC上传功能(单文件和多文件上传)
单文件和多文件上传 首先在xxx-select.xml里面配置上传的大小和编码 <bean id="multipartResolver" class="org.sp ...
- 关于单CPU,多CPU上的原子操作
所谓原子操作,就是"不可中断的一个或一系列操作" . 硬件级的原子操作:在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是" 原子操作& ...
- c# 模拟表单提交,post form 上传文件、数据内容
转自:https://www.cnblogs.com/DoNetCShap/p/10696277.html 表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipar ...
随机推荐
- BeginCTF 2024(自由赛道)MISC
real check in 题目: 从catf1y的笔记本中发现了这个神秘的代码 MJSWO2LOPNLUKTCDJ5GWKX3UN5PUEM2HNFXEGVCGL4ZDAMRUL5EDAUDFL5M ...
- 五一不休息,每天都学习,从零教你手写节流throttle
壹 ❀ 引 我在 从零教你手写实现一个防抖debounce方法 一文中详细的介绍了防抖概念,以及如何手写一个防抖.既然聊到防抖那自然避不开同等重要的节流throttle,老规矩,我们先阐述节流的概念, ...
- NC210520 Min酱要旅行
题目链接 题目 题目描述 从前有个富帅叫做Min酱,他很喜欢出门旅行,每次出门旅行,他会准备很大一个包裹以及一大堆东西,然后尝试各种方案去塞满它. 然而每次出门前,Min酱都会有个小小的烦恼.众所周知 ...
- EasyExcel使用及自定义设置单元格样式
EasyExcel使用及自定义设置单元格样式 https://www.cnblogs.com/Hizy/p/11825886.html easyexcel 自动设置列宽 https://www.man ...
- 案例分享:Qt出版社书籍配套U盘资源播放器软件定制(脚本关联播放器与资源文件,播放器,兼容win7,win10和mac)
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术.树莓派.三维.OpenCV.OpenGL.ffmpeg.OSG.单片机.软硬结合等等)持续更新中-(点击传送门) 合作案例专栏:案例分享(体 ...
- linux服务器界面初始--day01
linux服务器界面初始 ip add show 查看服务器网卡信息还可以使用ifconfig 局域网ip: 192.168.1.0 10.0.0.0 172.16.1.0 如果网卡没有启用,我们需要 ...
- 【生成对抗网络学习 其二】GAN(keras实现)代码阅读笔记
想来想去还是记录一下吧,主要是怕以后时间长忘了 好记性不如烂笔头 代码来自eriklindernoren的开源GAN实现:https://github.com/eriklindernoren/Kera ...
- DataGear 制作基于 three.js 的 3D 数据可视化看板
DataGear专业版 1.0.0 已发布,欢迎试用! http://datagear.tech/pro/ DataGear 支持采用原生的HTML.JavaScript.CSS制作数据可视化看板,也 ...
- 【Azure Redis 缓存】对于Azure Redis 从 Redis 4 升级到 Redis 6 的一些疑问
问题描述 使用Azure Redis服务,客户端使用Redisson 3.X , 在近期Microsoft Azure对Redis服务进行大规模变动升级( Redis 版本由 4 升级到 6),对于这 ...
- 图数据库|Nebula Graph v3.1.0 性能报告
本文首发于 Nebula Graph Community 公众号 本文系 Nebula Graph 发行版 v3.1.0 的性能测试报告. 本文目录 测试环境 测试数据 关于 LDBC-SNB 测试说 ...