实现自动驾驶的难点有哪些?

news2024/11/16 13:40:32

摘要:

这里主要介绍了传感器融合(SF)对目标方面的几类任务,除目标之外,传感器融合还能做很多其他对环境建模的任务,例如道路特征的描述、占用栅格地图以及可通行区域表示等等。

从车道保持到高阶自动驾驶功能,都需要车辆所处的静态、动态环境的准确信息。通过传感器数据融合,可以获得有关其他交通参与者的动态信息、静态环境以及道路和交通规则的信息。俗话说“单丝不成线,独木不成林”。面对如此复杂的自动驾驶系统,最好的办法自然是博采众长,多传感器融合咯。


01False Positive & False Negative

这是做多传感器融合之前必须了解的一个概念。统计学上的名字叫第一类错误和第二类错误。当然,这么专业的名字经常搞得人云里雾里。实际上,除了FP和FN之外,还有TP和TN,组成了如下图所示的四角关系。

医学上经常会用这个术语来表述检测结果和实际结果的差别,经典的例子就是你有没有得肿瘤导致你心情大起大落的故事。在自动驾驶感知任务中,FP和FN常被描述成如下场景:

FP:传感器探测到了目标,但实际上没有这个目标。这样的目标又被称作ghost。

FN:传感器没有探测到目标,但实际上有这个目标。这样的情况被称为漏检。

对于双目摄像头而言,它能感知深度,这原本是个很不错的能力。但是当双目摄像头遇上有强光反射的光滑地面时,强光导致的图像局部饱和会让摄像头的深度测量出现偏差,而误以为地上有一个洞。但我们都知道实际上地面上并没有洞,那这就是一个false positive。

明亮的地面反射导致摄像头探测到了洞

而这样的偏差会导致汽车在行驶过程中误以为前方不能通行,需要绕行避让或直接刹停,从而产生让人觉得莫名其妙的“幽灵刹车”。但是面对同样的场景,毫米波雷达就不会探测出一个洞来,因为它通过自身发出的电磁波来感知周围环境而不受光线强弱的影响。这时候采用传感器融合,就能够避免这样的问题。


02目标检测

了解了多传感器融合的必要性之后,我们来看看多传感器融合的细分任务。首要的任务便是目标检测。对于自动驾驶汽车来说,周围环境中最多的、出现频率最高的自然是其他汽车。而目标检测就是要用一个个小框把他们框起来,从而与周围环境区别开来。这样的框我们就称为bounding box。Bounding box可以分成二维和三维的,分别对应目标检测里的二维目标检测及三维目标检测方法。2D bounding box,顾名思义每一个框子都是平面的。好处在于简单快捷的把一帧图像或是点云里的目标标识出来。

但是同时缺点也是显而易见的。第一,由于框子也是二维的是一个平面,我没法知道这里车的长或者宽;第二,目标的行驶方向也无法体现出来。这两点在车辆进行ACC、AEB纵向功能时可能还不明显,但一旦涉及到车辆横向控制,需要变道时,缺少这些信息则是致命的。于是,三维的目标检测应运而生,并逐渐成为目标检测的主流。同时,我们也会把目标分类合并在一起做掉,这可以通过神经网络的多头设计来完成。因此你会看到目标的框上有一个分类以及分类的置信度。不同类别的目标有不同的几何外形,这样也能方便设计不同大小的框子对应不同类别的目标

不过3维框也有其局限,我们都知道车辆的外表并非一个完美的长方体,而都用长方体框出就忽略掉了很多外观上的细节。而这些细节在近距离跟车、加塞变道时会变得特别有用。


03目标追踪

目标检测还只是针对单帧的画面和数据,但是实际上我们的运动场景是连续的,我们不能只简简单单在一张或几张图片上成功检测到物体就足够,还需要跨帧地确保这些目标联系起来,即知道这些目标是同一个目标在不同时间戳的表示。这就是目标追踪。目标追踪的常用结构就是依据我们之前讲过的卡尔曼滤波结合目标关联算法。先预测,再关联,后更新。九字箴言。对于不同的目标我们会建立不同的数学模型,例如针对静止目标,由于速度始终为0不会变化,我们就会用恒定速度(constant velocity)模型来建立运动学模型;而针对运动的目标,尤其是车辆这种还带有旋转、拐弯的一般会用匀速圆周运动模型(constant turn rate and velocity)。不同的模型意味着不同的预测结果。

而有了预测值之后,你就能大约猜测出下一个周期目标应该会出现在图上的什么位置,从而去那个范围搜寻对应的像素点或者点云,把合适的点与预测的目标位置关联上。关联上后你就获得了这个时刻的测量值,你就可以用测量去校正之前的预测,从而获得精确的目标位置。这样,循环往复,周而复始,你就成功地tracking上了这个目标。在实际自动驾驶项目中,丢目标和目标跳变是一个很严重的问题。这里的“丢目标”指的就是目标追踪失败,传感器没能跟上目标实际的运动轨迹;“目标跳变”指的就是目标追踪丢失后又重新跟上。由于这两者都会导致目标ID变化而导致功能退出,因此都是需要在目标融合时极力避免的。


04总结

这里主要介绍了传感器融合(SF)对目标方面的几类任务,除目标之外,传感器融合还能做很多其他对环境建模的任务,例如道路特征的描述、占用栅格地图以及可通行区域表示等等。这些会在后续文章介绍,欢迎大家点赞关注收藏!

来源 | 知乎 晓畅Auto

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

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

相关文章

【从零开始学习JAVA | 第二篇】JAVA综合练习 (1)

目录 前言: 1.买飞机票 2.找质数: 3.开发验证码: 4.数组元素的复制: 5.评委打分: 6.数字加密: 前言: 本篇将起到总结的作用,利用具体案例来带我们复习JAVA的基础内容&#xff…

CountDownLatch源码

介绍 CountDownLatch是依赖AQS完成的线程阻塞和唤醒,利用AQS的共享锁完成锁的多线程获取和释放。 CountDownLatch 使用了共享锁模式。CountDownLatch 使用一个内部类 Sync来实现CountDownLatch的同步控制,而Sync是AQS的一个实现类,它使用AQ…

安装Node,环境配置详细教程及使用

安装Node,环境配置详细教程及使用 一.下载 https://nodejs.org/en/download 一般现在windows电脑都选64位,如果是其他系统或者需要更低的版本可以按照自己的需求进行下载安装,过程都大差不多 二.安装 node.js的安装过程一般都不需要勾选什…

2023/6/21总结

JS 解绑事件 对象.on事件 对象.on事件null 如果是 addEventListener方式必须使用 对象.removeEventListener () 匿名函数无法解绑 mouseover和mouseout会有冒泡效果mouseenter和mouseleave没有冒泡效果 事件委托: 事件委托是利用事件流的特征解决一…

第九章 ShuffleNetv1网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

【从零开始学习JAVA | 第五篇】This关键字详解

目录 前言: This关键字: 作用: 本质: 总结: 前言: 相信大家在进入JAVA面向对象编程篇章以后,多多少少都见过This关键字,而他的指向很多人总是傻傻搞不清楚,今天我们…

chatgpt赋能python:Python编程语言的词汇量有多少?

Python编程语言的词汇量有多少? Python编程语言是一种广泛使用的高级编程语言,被广泛用于数据科学、机器学习、人工智能、Web开发、游戏开发和其他许多领域。由于Python的简单易学以及丰富的库,越来越多的人开始使用Python编程语言进行编程。…

【MongoDB】四、MongoDB副本集的部署

【MongoDB】四、MongoDB副本集的部署 实验目的实验内容实验步骤实验小结 实验目的 能够通过部署副本集理解副本集机制,从而解决大数据项目中数据丢失的问题 实验内容 环境准备:根据表中的信息完成3台MongoDB服务器的部署(XXX是姓名拼音首字母…

C语言指针初阶+进阶(看这一篇就够了)

目录 本章重点 1. 指针是什么 2. 指针和指针类型 3. 野指针 4. 指针运算 5. 指针和数组 6. 二级指针 7. 指针数组 8. 字符指针 9.数组指针 10. 指针数组 11数组传参和指针传参 12. 函数指针 13. 函数指针数组 14. 指向函数指针数组的指针 15. 回调函数 16 指针和数组面试题的解…

【从零开始学习JAVA | 第三篇】类与对象 和 封装

目录 前言: 类与对象: 封装: 总结: 前言: 从本篇开始,我们就要以面向对象编程思想来进行学习了,今天我们学习的内容是类与对象,这是JAVA中的重要知识,让我们一起来进…

docker 项目部署 后端/前端

1.前端部署 2.后端部署 问题一:build出问题 ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref 668a7264-5d0b-45a6-b547-fa8fff014bda::g00ukurq2ipxuvrrz8rnpyskp: "/swagger2-demo-0.0.1-SNAPSHOT.jar": …

next.js博客搭建_react-markdown渲染内容(第三步)

文章目录 ⭐前言⭐引入react-markdown💖 使用markdown渲染💖 文章内容布局💖 react-syntax-highlighter代码高亮 ⭐结束 ⭐前言 大家好,我是yma16,本期给大家分享next项目中使用react-markdown渲染内容。 该系列的往期…

考研C语言第八章

结构体定义&#xff0c;初始化&#xff0c;结构体数组 结构体对齐 这个东西看着像数据库里面属性的定义&#xff0c;也像java里面的类的定义 #include <stdio.h> #include <string.h> #include <stdlib.h>struct student{int num;char name[20];char sex;i…

chatgpt赋能python:Python桌面编程:探索图形用户界面

Python桌面编程&#xff1a;探索图形用户界面 Python是一种广受欢迎的高级编程语言&#xff0c;被广泛应用于数据科学、人工智能、Web开发和自动化。但是&#xff0c;随着越来越多的应用程序向图形用户界面&#xff08;GUI&#xff09;转移&#xff0c;Python的桌面编程能力也…

datagrip 连接 phoenix

jar替换完后尽量重启datagrip. 然后重新连接即可. 不重启貌似报错... 效果:

chatgpt赋能python:Python更新界面:让你的应用更美观、更易用

Python更新界面&#xff1a;让你的应用更美观、更易用 Python是一门强大的编程语言&#xff0c;广泛应用于软件开发、数据分析、机器学习等领域。其中&#xff0c;Python的GUI开发能力也非常出色。Python支持多种GUI库&#xff0c;如Tkinter、PyQt、wxPython等&#xff0c;可以…

【C++篇】C++新增的一些基础特性

友情链接&#xff1a;C/C系列系统学习目录 知识总结顺序参考C Primer Plus&#xff08;第六版&#xff09;和谭浩强老师的C程序设计&#xff08;第五版&#xff09;等&#xff0c;内容以书中为标准&#xff0c;同时参考其它各类书籍以及优质文章&#xff0c;以至减少知识点上的…

Python--字典

Python--字典 <font colorblue>一、创建字典<font colorblue>二、访问字典元素<font colorblue>三、字典的增、删、查、改<font colorblue>1、添加元素<font colorblue>2、删除元素<font colorblue>3、查找元素<font colorblue>4、修…

Git——分布式版本控制系统

简介 Git是一个开源的分布式版本控制系统&#xff0c;可以高效的处理从小到很大的项目版本管理。 分类 集中式 SVN&#xff0c;CVS 使用单一的服务器用来管理和存储所有文件的修订版本&#xff1b;协同开发的成员拉取或提交都需连接到这台服务器&#xff1b;如果服务器宕机…

电控开关详细介绍 MOSFET

目录 NMOS MOSFET的开关模型 现实生活中MOSFET的截面图 输出特性曲线 总结 MOSFET的SCS模型 MOSFET的SR模型 进一步分析 例子 PMOS CMOS(Complementary Metal-Oxide-Semiconductor) NMOS 金属氧化物半导体场效应晶体管 这是一个什么样的结构呢&#xff1f; 对于…