A Survey of Autonomous Driving: Common Practices and Emerging Technologies
一. 摘要
本文主要讨论ADS(Automated Driving System)的主要问题及相关技术层面的综述,包括:当前挑战、系统架构、新兴方法、核心功能(定位,建图,感知,规划,人机交互)等。文章最后介绍了相关可供测试开发的数据集和工具。
【丰田认为automated和autonomous的区别在于:automated代表几乎不需要人进行控制的车辆的功能,autonomous是指可一直在该状态下进行驾驶的车辆。从这种区别来看,目前大多数自称“autonomous”的自动驾驶车,由于都是人在监控、负责,所以从真正的意义上来说不能称为“autonomous”。】
前景和挑战
问题:预防交通事故,减少交通拥堵,减少排放
机会:重新分配驾驶时间,解决运输出行障碍
新趋势:出行既服务,物流革命
二. 引言
2.1 两个著名的自动驾驶研究项目:
1、Eureka Project PROMETHEUS:1987-1995年间在欧洲开展,是最早的主要自动化驾驶研究之一,戴姆勒-奔驰公司的VITA II也基于此而来。
2、DARPA Grand Challenge:美国国防部主办的业内最负盛名的挑战赛,许多经典的文章都来自于这里。
2.2 汽车的自动化水平分级
L0:无自动化
L1:原始驾驶员辅助系统(Primitive driver assistance systems),包括自适应巡航控制、防抱死制动等
L2:部分自动化,先进的辅助系统(Advanced assistance systems),例如紧急制动或避免碰撞
L3:有条件的全自动化(Conditional automation),在正常操作期间,驾驶员可以专注于除驾驶以外的其他任务,但是紧急情况下必须能快速响应并接管车辆
L4:在天气条件许可,基础设施(信号地图等)完善的情况下,完全不需要驾驶员。
L5:无论在任何场景下,都不需要驾驶员目前尚无完全实现L4级别及以上的自动驾驶车辆。
2.3 ODD(L3及以上)
ODD的全称是Operational Design Domain(运行设计域)。每个自动驾驶系统运作的前提条件及适用范围可能都不太一样。只有当全部条件都满足的时候该自动驾驶才能保证正常运作。相反,欠缺任何一个前提条件,该系统都有可能出现故障,这种情况下就要采取紧急停车措施或是驾驶员手动接管。
2.4 DDT
动态驾驶任务DDT(Dynamic Driving Task)是在道路交通中操作车辆所需的所有实时操作和策略功能,不包括行程安排和目的地和航路点选择等战略功能,包括但不限于以下子任务:
a) 通过转向控制车辆横向运动(操作);
b) 通过加速和减速控制车辆纵向运动(操作);
c) 通过目标和事件检测、识别、分类和响应准备(操作和策略)监控驾驶环境;
d) 对象和事件响应执行(操作和策略);
e) 机动规划(策略);
f) 通过照明、鸣笛、信号、手势等(策略)增强醒目性。
其中子任务c)和d)统称为对象和事件检测与响应(OEDR)
驾驶任务示意图(非控制图)
2.5 OEDR
目标和事件检测与响应OEDR(Object and Event Detection and Response)是DDT的子任务,包括监控驾驶环境(检测,识别和分类对象和事件,并准备按需要做出响应),并对这些对象和事件执行适当的响应(即根据需要完成DDT和/或DDT接管)。
三. 系统框架
自动驾驶系统框架的高级分类
3.1 单车辆系统(Ego-only systems)
即始终在一辆车自身执行所有必要的自动驾驶操作
3.2 互联车辆系统(Connected multi-agent systems)
需要依赖于其他车辆和一些基础设施来完成一些操作,比如现在比较火热的车辆网,V2X等。就目前来说,当然还是单车辆系统更为常见。目前还没有可操作的互联ADS投入使用,但一些研究人员认为,这种新兴技术将是未来驾驶自动化的发展方向。
3.3 模块化系统(Modular systems)
指将传感器输入到执行器输出的中间过程分别构造成一个个独立的模块,比如定位、建图、感知、评估、决策与规划、车辆控制、预测、人机交互等。模块化的基本逻辑就是分而治之,把一个复杂的任务分成若干个较为简单的子任务。除此之外,模块化还有一些隐藏的优势,比如说对一些约束(如紧急制动,超速等),多模块意味着可以从不同角度施加约束,可以保证在其中部分传感器出现偏差的时候仍能提供较为可靠的输出。反过来说,多模块也意外着出错的概率大大增加,某个模块的错误可能会沿着进程传播扩散,如前段时间的特斯拉事故,感知模块误将白色拖车分类为天空,即使后续模块完全正确执行,错误也无法避免。
3.4 端到端系统(End-to-end systems)
指的是直接从感知输入产生输出,常见的端到端系统有三种主要方法:直接监督的深度学习(Direct supervised deep learning)、神经进化(Neuroevolution)和深度强化学习(Deep reinforcement learning)。
端到端系统流程图
端到端系统方法
四. 传感器和硬件
为了保证系统的鲁棒性和可靠性,大多数任务都需要较高的传感器冗余度
4.1 硬件模块分类
外部感知传感器(Exteroceptive sensors),监测车辆自身状态的本体感知传感器(Proprioceptive sensors),通信单元,执行器和计算单元
4.2 外部传感器比较
4.2.1 单目相机(Monocular Cameras)
最常见最廉价的传感器之一,除此之外,二维的计算机视觉算是一个比较成熟的研究领域,虽然理论上无法获得深度,但是现在也有一些基于单目深度的结果,缺点主要还是在精度和容易受环境因素影响上。现在还有一些针对特殊场景而开发的相机,如全景相机(Omnidirection Camera),闪光相机(Flash Camera),热敏相机(Thermal Cameras),事件相机(Event Camera)等。
4.2.2 全景相机(Omnidirection Cameras)
全景相机就是理论上拥有360度视角的相机,事实上,这一类相机的难点并不在捕捉图像而是在图像拼接上,因为球面图像是高度失真的,所以校准的难度很大。
4.2.3 事件相机(Event Cameras)
事件相机是一种比较新颖的概念,传统相机是按时间采用,而事件相机是事件触发型,它对场景中移动造成的变换比较敏感,因此可以用在检测动态目标上。
骑车人和车辆的运动引起亮度的变化,从而触发事件
4.2.4 雷达(Radar)和激光雷达(Lidar)
一般来说,现在都是采用多传感器的形式,用雷达或者激光雷达来弥补相机(包括深度相机)在深度信息上的缺陷。激光雷达和雷达的工作原理其实差不多,只不过激光雷达发射的是红外线而不是无线电波,在200米以内的精度是很高的,但是相对雷达来说,更容易受到天气的影响且尺寸更大。雷达的精度虽然不如激光雷达高,但是由于测距长,成本低,对天气鲁棒性强,目前已经广泛应用于辅助驾驶(ADAS)中,比如接近警告和自适应巡航。
【干扰问题:金属对电磁波的干扰,生物对红外的干扰,相同频段的(激光)雷达互相干扰】
4.3 本体传感器(Proprioceptive sensors)
一般指车辆自身携带的传感器,如里程计,IMU,转速计等。
4.3.1 里程计(odometry)
里程计系统基于机器人的运动提供对机器人位姿和速度的局部准确估计。里程计信息可以从各种来源获得,例如IMU、LIDAR、RADAR、VIO和车轮编码器等。
4.3.2 惯性测量单元 Inertial Measurement Units (IMU)
是一种使用加速度计和陀螺仪来测量物体三轴姿态角(或角速率)以及加速度的装置。狭义上,一个IMU 内在正交的三轴上安装陀螺仪和加速度计,一共 6 个自由度,来测量物体在三维空间中的角速度和加速度,这就是我们熟知的“6轴IMU”;广义上,IMU可在加速度计和陀螺仪的基础上加入磁力计,可形成如今已被大众知晓的“9轴IMU”。其中加速度计检测物体在载体坐标系统独立三轴的加速度信号,而陀螺仪检测载体相对于导航坐标系的角速度信号,测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态。IMU在导航中的核心价值无可替代,为了提高其可靠性,还可以为每个单轴配备更多种类的传感器。为保证测量准确性,一般IMU要安装在被测物体的重心上。
4.4 研究机构及公司整车配置
五. 定位与建图(Localization and Mapping)
定位指的是在环境中找到相对于参考系的位置,对于任何移动机器人来说这个任务都是最基本的。
5.1 常用方法
5.1.1 GPS-IMU融合
GPS-IMU融合的主要原理是用绝对位置数据在一定的时间间隔内修正航位推算(dead reckoning)的累积误差。在GPS-IMU系统中,IMU测量机器人位置和方向的变化,并对这些信息进行处理,以便用航位推算法对机器人进行定位。但是IMU有一个显著的缺点,就是我们常说的累积误差。因此引入GPS的绝对位置信息(相当于一个反馈),可以有效地对IMU误差进行校正。GPS-IMU融合的方法的精度比较低,实际上并不能直接用在车辆定位上。在2004年的DARPA挑战赛中,卡内基梅隆大学(Carnegie Mellon University)的红队就因为GPS错误而未能通过比赛。除此之外,在密集的城市环境中,像隧道、高层建筑等都会影响GPS的精度。尽管GPS-IMU系统本身无法满足自动驾驶的性能要求,但是可以和激光雷达等传感器相结合进行位姿估计。
航位推算 Dead Reckoning
航位推算是一个很常见的定位方法。在知道当前时刻的位置,然后通过IMU等传感器去估计下一个时刻的位置。在自动驾驶车辆定位的时候,GPS提供10Hz的定位信息。这每个GPS信息来临的0.1s的间隔里面,车辆位置也会移动很多。那么这个时候就需要航位推算来判断车辆到底移动了多少距离,在哪个地方。所以,航位推算是自动驾驶车辆最基本的,也是必须的一种算法之一。比如推算车辆在隧道中的位置。把dead理解为死角,测量不到的点,这样就好理解很多了,理解为推算测量不到的位置。
[航位推算1] https://zhuanlan.zhihu.com/p/96899895
[航位推算2] https://zhuanlan.zhihu.com/p/96942004
5.1.2 同步定位与建图 Simultaneous localization and mapping(SLAM)
顾名思义,SLAM是一种在线地图绘制同时定位的行为(理论上的同时)。理论上SLAM不需要关于环境的先验信息,就目前而言,更多是应用在室内环境(室外更多还是基于预先构建的地图进行定位)。
5.1.3 基于先验地图定位 a priori map-based localization
基于先验地图的定位技术的核心思想是匹配:定位是通过比较在线数据同先验地图的信息来找到最佳匹配位置。也就是根据先验的地图信息来确定当前的位姿。这个方法有一个缺陷,一般需要额外的一个地图制作步骤,而且,环境的变化可能会对结果产生负面影响(比如光照变化,参照物移动等)。这类方法大致可以分为两大类:基于地标的搜索和基于点云的匹配。
5.1.3.1 地标搜索 Landmark search
与点云匹配相比,基于地标的定位计算成本要低得多。理论上来说,只要地标的数量足够多,这种定位就是鲁棒的,该方法的主要缺点在于地标的依赖性:在地标数量不足的情况下容易出现故障。
5.1.3.2 点云匹配 point cloud matching
点云匹配一般是指局部的在线扫描点云通过平移和旋转同先验的全局点云进行匹配,根据最佳匹配的位置来推测机器人相对地图的局部位置。对于初始位姿的估计,一般是结合GPS利用航位推算。
5.1.3.3 2D tO 3D MATCHING
基于先验地图方法最大的缺陷就在于先验地图的获取上,实际上制作和维护一个可靠的高精度地图是相当费时又费力的一件事。除此之外,还有一些其他情况,比如跨维度的匹配(二维到三维,三维到二维等)。在初始姿态估计的基础上,利用离线的三维点云地图生成二维图像,并同相机捕捉到的图像进行在线归一化比较。这种方法相当于简化了感知的工作,但是增大了计算的复杂度。
六. 感知(Perception)
感知周围环境并提取可供安全导航的信息是自动驾驶的核心之一,随着近年来计算机视觉研究的发展,相机包括三维视觉逐渐成为感知中最常用的传感器。本节主要讨论基于图像的目标检测、语义分割、三维目标检测、道路及车道线检测和目标跟踪等。
6.1 检测
6.1.1 基于图像的目标检测
包括静态物体识别(红绿灯、交通标志、道路交叉口),动态物体识别(车辆,行人和自行车)。目前最先进的方法基本都依赖于深度卷积神经网络(DCNN),但它们之间目前存在明显的区别:
1)单级检测框架(Single stage detection frameworks)使用单个网络同时生成对象检测位置和类别预测。主流的算法有:YOLO(You Only Look Once), SSD(Single Shot Detector)
2)区域生成检测框架(Region proposal detection frameworks)有两个不同的阶段,首先生成感兴趣的一般区域(候选区域),然后通过单独的分类器网络进行分类。
区域生成检测框架是目前效果最好的方法,但是需要很高的计算能力,并且通常难以实施,训练和微调。同时,单级检测算法往往具有快速的推理时间和较低的存储成本,能够满足无人驾驶实时计算的需求。由于近年来计算能力的提升,讲来RPN(region proposal networks)可能取代单机检测网络,成为自动驾驶的主流检测算法。
照明不良和外观变化
使用相机的主要缺点是照明条件的变化会严重影响其性能。弱光照条件的场景本来就很难解决,更不要说由于强光照射,阴影移动,天气和季节变化导致的照明变化可能导致算法的失败了。一个显而易见的方法是用备份的传感方式进行感知,例如lidar和radar。但是lidar和radar的感知都有受限的场景,因此传感器融合方案可能是最佳的选择。通过红外传感器的热成像也可用于弱光条件下的物体检测,这对行人检测很有效。当然目前还已经开发出尝试直接处理动态照明条件的纯相机方法,已经提出尝试提取照明不变特征和评估特征质量2种方法。
6.1.2 语义分割
这项任务对驾驶自动化特别重要,因为某些目标对象很难通过边界框来定义,特别是道路,交通线,人行道和建筑物。目前用于语义分割的网络还是太慢而且计算代价太昂贵了,作者认为未来会有单一且通用的网络能够解决自动驾驶不同感知任务的可能性。
a.前置摄像头带有边界矩形框 b.MaskRCNN实例分割结果 c.DeepLabv3语义分割遮罩 d.3D激光雷达探测范围
图像分类,目标检测和语义分割的区别
图像分类是给你一堆图,告诉我每张图主要内容的类别,最经典的就是MNIST上的手写数字识别,输出是每张图代表什么数字。目标检测是输入一系列图,把每张图里我感兴趣的目标框出来,比如上面说的用YOLO做行人检测,输出就是用矩形框把每张图里的行人框出来。语义分割的任务是把图像里的每一个像素都归到某个类别里,有点像机器学习中聚类的概念。
6.1.3 3D目标检测
主要依赖点激光雷达的点云数据,通过滤波、聚类,提取特征进行识别。
当然也可以用RGB-D相机获取深度信息,但由于RGB-D的作用范围有限,并且在室外不太可靠,目前没有应用在自动驾驶领域。
6.2 目标跟踪
对于复杂和高速情况下的自动驾驶,仅仅估计位置是不够的,为了避免碰撞,还需要估计动态目标的航向和速度,以便应用运动模型跟踪目标并预测目标未来的运动轨迹。同样的,一般都通过多个相机,激光雷达或者雷达来获取传感器信息,且未来更好地应对不同传感器的局限性和不确定性,通常采用多传感器融合的策略进行跟踪。
常用方法
(1)滤波方法:Bayes滤波器、卡尔曼滤波、粒子滤波等。
(2)深度学习:CNN、多任务网络等。
6.3 道路和车道线检测
(1)可行驶区域检测:检测车道当前行驶车道,可以应用于车道偏离警告,车道保持和自适应巡航控制。
(2)道路复杂语义理解:识别其他车道和方向,合并转向等道路结构信息。
七. 评估(Assessment)
7.1 风险和不确定性评估
量化驾驶场景的不确定性和风险水平,可用贝叶斯方法、隐马尔科夫模型(HMM)和语言模型。
7.2 周围驾驶行为评估
实际环境中的自动驾驶决策与周围驾驶员的行为相关。用隐马尔科夫模型(HMM)预测目标车辆的未来行为。
7.3 驾驶风格识别
主成分分析法、基于GMM的驾驶员模型等。
八. 规划和决策(Planning and Decision making)
8.1 全局规划(Global Planning)
全局规划主要是规划目的地,类似目前用到的地图导航,传统的方法分为以下4个类别:
8.1.1 目标导向(Goal-Directed)
A*是一种标准的目标导向路径规划算法,广泛在各个领域应用了50多年。
8.1.2 基于分割(Separator-Based)
基于分割的逻辑有点像路由算法,删去一些边或者顶点,计算每个子区域间的最短路径,这种方法可以有效加快计算速度。
8.1.3 分级规划(Hierarchical)
道路分为不同的等级:普通公路,高速公路和大动脉,这样导致的问题是最短的距离不一定是最快的(走高速更快),而收缩层次结构法(Contraction Hierarchies)用来处理该问题。
8.1.3 有界跳跃(Bounded-Hop)
预先计算好2个点之间的距离和时间,这样计算的时候只需要查表就可以了,预处理技术是利用空间换时间。
8.2 局部路径规划(Local Planning)
局部规划实际可以理解为为了实现全局规划来找到一条足够优化且能避开障碍物的轨迹。
常见局部规划算法
8.2.1 基于图搜索(Graph Search)
图搜索算法的经典算法是Dijkstra和A*算法,输出的是离散路径而不是连续路径,更高级的图搜索算法是state lattice,对动态环境的路径规划非常有用。基于图搜索常见的做法都是将地图离散成状态格,这种做法在高维的情况下会产生指数爆炸,因此就有了基于采样的方法。
8.2.2 基于采样(Sampling Based)
最常见的基于采样的方法是概率图(PRM)和快速随机搜索树(RRT)。这类方法的缺陷主要是不稳定,在某些特定环境下可能要很长时间才能收敛。
8.2.3 曲线插值(Curve Interpolation)
在一系列已知点上拟合一条可行的轨迹曲线,常见的曲线有回旋线、多项式曲线、贝塞尔曲线等,这种方法的避障策略一般是插入新的无碰撞的轨迹,如果偏离了初始轨迹,则避开障碍之后再返回初始轨迹。这种方法生成的轨迹较光滑,计算量也比较大,但是在实际ADS中,轨迹光滑一般意味着对乘客比较友好。
8.2.4 数值优化(Numerical Optimization)
通过优化功能提高现有路径的质量。
8.2.5 深度学习(Deep Learning)
基于深度学习的缺陷主要是缺乏硬编码的安全措施,除此之外还有泛化能力问题、数据来源问题等,但总的来说,这一类方法应该是未来的趋势之一。利用深度学习的方法输出规划路径,和端到端自动驾驶的区别是输出结果:前者是输出曲线,后者是输出油门刹车和方向盘。
九. 人机交互(Human Machine Interaction)
无人驾驶车通过人机交互接口(HMI)与驾驶员和乘客进行通信。其中最基本的是驾驶任务的交互,例如驾驶目的地的选择。听觉用户界面(AUI)将会是打车交互的好选择,目前车内的噪音以及角色理解可能是很难处理的部分。而且会出现新的交互需求,例如乘客需要了解和监控无人驾驶汽车目前的状况。
十. 数据集和有效工具(Dataset and Available Tools)
10.1 数据集
常见的有:PASCAL VOC、KITTI、DeepDrive等。
自动驾驶数据集
10.2 开源框架
Autoware、Apollo、Nvidia DriveWorks、openpilot等。
10.3 模拟器
CARLA、TORCS、Gazebo 、SUMO等,CARLA可以模仿各种城市场景包括碰撞场景,TORCS是一个赛车仿真模拟器,Gazebo 是一个常见的机器人模拟器,SUMO可以模拟车流量。