单目测距那些事儿(上) _ 从MobileEye谈起

news2024/9/30 19:35:07

单目测距那些事儿(上) | 从MobileEye谈起

全面专业的自动驾驶学习资料:链接

  1. 前言

在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处有个相机。有两个假设

  • 道路是平面。

  • 相机光轴与路面平行。

image

道路上与本车(A)距离为Z的一点,投影到图像上高度为y。f为焦距,H为相机高度,则满足:

image

为了测距,首先需要检测前车与路面的接触点,然后就可以计算距离了:

image

也就是,根据焦距、相机高度,图像中接触点位置三个量,即可计算距离。

当然在现实中,上述两个假设常常不满足,会造成很大的误差。另外,接地点的估计也会引入误差。

2.2 测距误差分析

如果接地点存在n个像素误差,那么测距误差公式为:

image

所以,测距误差是随着距离而二次方地增长,而误差比例则随着距离线性增长。

在640x480分辨率的图像上,90m的测距误差比例为10%左右,45m的测距误差比例为5%左右。

除了距离,相对速度或许更重要,因为它告诉我们是否在保持一个恒定的距离。

2.3 相对速度

相对速度(range rate, or relative velocity)可以如下表示:

image

也就是测量两个时间的距离,用距离差除以时间差。但是,测距结果充满噪声,这样算出来的相对速度精度自然不高。所以,这里主要使用目标尺寸变化计算相对速度。令W是车辆实际宽度,w和w’是前后两张图像上的车辆宽度,那么满足:

image

(7)式可以参考下图:

image

然后,

image

也就是,根据t1时刻距离,t1和t2的检测尺寸,就可计算出相对速度。

2.4 相对速度误差分析

这一部分公式比较复杂,就不详细展开了。说几个结论:

  • 相对速度误差与相对速度是独立的。

  • 相对速度随着距离二次方增长。

  • 时间间隔越大,相对速度越准。

  • 相机视场角小(焦距大),会线性减小误差。

3 后记

一句话总结下ME的方法:用目标在图像中的位置测距,用目标尺寸变化来计算相对速度。 简单明了,实在是高!

正所谓:单目测距不是梦,无数豪杰往前冲。回首漫漫发展路,MobileEye启征程。

但是,上述方法基于两个很强的假设,在实际应用中存在很大问题,主要两点:

  • 相机光轴很难总是和路面平行的,一是安装固定有难度,二是车辆行驶中难免颠簸,相机角度肯定存在起伏。 -

  • 道路不是一直平坦的,很多道路存在坡度,这时候又该怎么办呢?

其实,也有不少论文针对上述问题做出了探索,我将在**单目测距那些事儿(下)**中对相关方法进行梳理,敬请期待!

全面专业的自动驾驶学习资料:链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1537646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32之HAL开发——手动移植HAL库

HAL库移植步骤 创建目录 配置启动文件 在\Drivers\CMSIS\Device\ST\stm32f1xx\Source\Templates\ARM目录下,根据你的芯片型号选择对应的启动文件,不同容量大小的芯片,对应的启动文件也不一样。 注意:在HAL库中,不同容…

离散型工业生产制造MES管理系统解决方案

一、核心优势 1、业务场景高适配 ①配置好程度高,可适应不同的业务场景。 ②业务功能灵活可配,可根据客户需求及时调整。 2、功能覆盖全周期 产品功能覆盖面广,能够实现从来料管理到销售出库整个产品生命周期管控。 3、触点互联降成本 能将相关的设备集成至MES中来,实现与设…

全网最靠谱的短网址平台,你知道几个?

在当今互联网时代,短网址平台成为了人们分享链接的常用工具。它们不仅可以将冗长的网址压缩为简洁的短链接,还能提供更多的功能和优势。在众多的短网址平台中,有几个平台以其可靠性和出色的性能脱颖而出。今天,我们就来介绍几个全…

跳槽多次未成功,问题源自何处?

众所周知,2023年市场很难!看着企业们纷纷裁员,甚至连内推这个后门都走不通!哪怕有面试,都是屡屡碰壁,你想清楚问题出在哪了吗?😭“求职不得,夜不能寐;三更半夜…

设计模式—观察者模式与发布订阅

观察者设计模式 观察者设计模式(Observer Design Pattern)是一种常用的软件设计模式,它是一种行为型模式。该模式用于定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知…

NeuralForecast 超参数优化

NeuralForecast 超参数优化 flyfish 不使用超参数优化的方式 import numpy as np import pandas as pd from IPython.display import display, Markdownimport matplotlib.pyplot as plt from neuralforecast import NeuralForecast from neuralforecast.models import NBEA…

C#事件实例详解

一、什么是事件? 在C#中,事件(event)是一种特殊的类成员,它允许类或对象通知其他类或对象发生了某些事情。 从语法上看,事件的声明类似于字段,但它们在功能和行为上有一些重要的区别。 从技术角度来说,事件实际上是一个封装了事件订阅和取消订阅功能的委托字段。…

通过JWT完成token登录验证

前言 什么是JWT? 全称是JSON Web token,是用于对应用程序上的用户进行身份验证的标记,使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据 使用JWT的优势 提高了程序的可伸缩性,也极大的提高了应用程序的安全…

鸿蒙Harmony应用开发—ArkTS(@Link装饰器:父子双向同步)

子组件中被Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。 说明: 从API version 9开始,该装饰器支持在ArkTS卡片中使用。 概述 Link装饰的变量与其父组件中的数据源共享相同的值。 限制条件 Link装饰器不能在Entry装饰的自定义组件中使用…

前端canvas项目实战——简历制作网站(六):加粗、斜体、下划线、删除线(上)

目录 前言一、效果展示二、实现步骤1. 视图部分:实现用于切换字体属性的按钮2. 逻辑部分:点击按钮之后要做什么?3. 根据Textbox的属性实时更新按钮的状态 三、Show u the code后记 前言 上一篇博文中,我们实现了对文字的字体、字…

ChatGLM3 Linux 部署

1.首先需要下载本仓库: git clone https://github.com/THUDM/ChatGLM3 2.查看显卡对应的torch 版本 官方文档说明: Start Locally | PyTorch 例如: a. 先查看显卡的CUDA版本 nvcc --version 查看对应版本 Previous PyTorch Versions …

Error:No such property: GradleVersion for class: JetGradlePlugin

Gradle版本对照表 Android Gradle 插件版本在项目的根目录(不是App目录)下的build.gradle文件中,如图 插件所需的Gradle 版本在gradle目录下的gradle-wrapper.properties文件中,如图

安全认证|CISSP认证是什么证书?考了有什么用?能做什么工作?

很多人总是听说CISSP是顶级的信息安全证书,在国内或者国外都有盛誉,那么CISSP到底是个什么样的证书,本期就给大家介绍下! 什么是CISSP CISSP(Certification for Information System Security Professional&#xff0…

三份天注定,七分靠XX?

文 | 螳螂观察 作者 | 陈小江 1988年,中国宝岛台湾,蒋经国过世后,社会运动风起云涌。在所谓“解严”的时代氛围里,人们对前途虽然迷茫,但却充满打拼的热情。 那时节,40岁的台湾歌手叶启田,开…

【消息队列开发】 实现消费者订阅消息

文章目录 🍃前言🌳关于订阅消息方法参数解析🎋如何实现将消息推送给消费者🎍消费者类🍀消费消息的流程🎄如何实现消息确认呢?⭕总结 🍃前言 本次开发任务 实现消费者订阅消息 &am…

公司内部局域网怎么适用飞书?

随着数字化办公的普及,企业对于内部沟通和文件传输的需求日益增长。飞书作为一款集成了即时通讯、云文档、日程管理、视频会议等多种功能的智能协作平台,已经成为许多企业提高工作效率的首选工具。本文将详细介绍如何在公司内部局域网中应用飞书&#xf…

电脑Wi-Fi无法连接如何排查

Wi-Fi是一个神奇的东西,总是能在某一天莫名其妙的连不上让我们疯狂糟心!!! 呉師傅准备了几个解决方法来帮助大家解决连不上Wi-Fi的问题; 1、疑难解答功能 系统自带的【疑难解答】功能不妨试一试,也能一定…

【AAAI 2024】M2Doc:文档版面分析的可插拔多模态融合方法

一、文章介绍 文档版面分析任务是文档智能的一个关键任务。然而,现有的很多文档版面分析研究方法都基于通用目标检测方法,忽视了文档的文本特征而仅仅只关注于视觉特征。近年来,基于预训练的文档智能模型在很多文档下游任务中都取得了成功&a…

左旋字符串功能的实现

实现一个函数,可以左旋字符串中的k个字符。 例如: #1ABCD左旋一个字符得到BCDA #2ABCD左旋两个字符得到CDAB 由此图可知,其字符串长度为4,每次经历四次左旋后又回到了初始 位置,所以是以字符串长度len为一个循环&…