赞
踩
最近在做无人驾驶相关的调研,主要调研目前主流无人驾驶公司的数据来源,软件平台,硬件平台相关的内容,现整理如下,权当做个笔记~
接下来我将以Waymo公司的无人驾驶技术来详细讲讲这里面的一些细节。
waymo理所当然是目前全球领域最顶尖的无人驾驶技术公司了,依托于Google这个庞大的技术平台(16年末从Alphabet拆分出去)。很可惜waymo人家不开源,因此我们只能从他们的官网以及官方技术博客(本质上是科普博客)中找到点蛛丝马迹。
###无人驾驶技术概述
无人驾驶技术是多个技术的集成,包括了传感器、定位与深度学习、高精地图、路径规划、障碍物检测与规避、机械控制、系统集成与优化、能耗与散热管理等等。虽然现有的多种无人车在实现上有许多不同,但是在系统架构上都大同小异。如下图所示:
上图中,GPS、光学雷达与高精地图主要用来定位,这里主要就是采用一些诸如卡尔曼滤波的滤波算法与高精地图做对比或者Iterative Closest Point(迭代最近点算法),实现定位的功能;光学雷达与照相机主要用来做物体识别,这里我们可以用一些视觉算法来做物体识别,下面会讲述;最后通过定位与物体识别,我们根据位置信息以及识别出的图像信息(如红绿灯)实时调节车辆的行车计划,并把行车计划转化成控制信号操控车辆(这里面还会用到增强学习算法来优化决策过程)。全局的路径规划可以用类似A-Star的算法实现,本地的路径规划可以用DWA(局部避障的动态窗口算法)等算法实现。
waymo作为最早一批致力于无人驾驶技术的公司。迄今为止waymo有300万英里的实际路况场景数据,这些数据采集的来源就是各种sensor,根据Waymo的自动驾驶报告指出,这些sensor秒产生0.75G的数据。
(Waymo也在Carcraft软件中做虚拟仿真,里面的数据更多了,咱们不做讨论)
对于早期的waymo来说,这些sensor都来自于各种厂商,早年Google公布了其无人车的成本15万美金,其中众所周知的激光雷达就占成本的一半,后来人家就准备全部自己造,于是集合了一帮人工智能专家来定义产品,最终waymo官方说自家的产品,闭环开发,适合自家的软件系统,关键成本低,其中著名的LIDAR激光雷达成本就降到了几千美金。waymo的sensor系统主要有三大部分深度集成:激光雷达、毫米波雷达、视觉系统(这可不单单是咱们说的摄像头)。接下来我们来详细看看人家的sensor。
LiDAR
如图所示,LiDAR激光雷达是全自动无人驾驶汽车中最强大的传感器之一。总之你只要知道这个东西精度高,实时性好就行了。人家激光雷达有三个,其中中短途扫描的有两个,远距离扫描的有一个。这个些激光雷达覆盖的范围大约了两个足球场那么大吧。
虽然这个激光雷达功能强劲但是他也面临很多的挑战。比如说:计算性能挑战:计算量大,为什么说他的计算量大呢,因为激光雷达在工作原理就是发射激光然后收集反射点的信息。那么这些反射点有多少呢。我们看看人家官方给出的数据参考。
Model | Channel | Number of points per second |
---|---|---|
Velodyne HDL-64E | 64 Channels | 2,200,000 |
Velodyne HDL-32E | 32 Channels | 700,000 |
Velodyne VLP-16 | 16 Channels | 300,000 |
看看咱们哪怕用最差的Velodyne来作为车上的激光雷达,如果咱们用一个的话,每秒钟产生30万个反射点,你产生了反射点还需要经过浮点运算,三角函数运算,然后再转换成坐标信息,转换成坐标信息后你还要做坐标变换来进一步处理。很明显这种sensor对计算资源的计算能力要求是相当高的。 | ||
尽管无人驾驶技术渐趋成熟,但LiDAR始终是一个绕不过去的坎。纯视觉与GPS/IMU的空间定位以及避障方案虽然价格低,却还不成熟,很难应用到室外场景中;但同时LiDAR价格高居不下,消费者很难承受动辄几十万美元定价的无人车。因此,当务之急就是快速把系统成本特别是LiDAR的成本大幅降低。其中一个较有希望的方法是使用较低价的LiDAR,虽然会损失一些精确度,但可以使用其它的低价传感器与LiDAR做信息混合,较精准地推算出车辆的位置。换言之,就是通过更好的算法去弥补硬件传感器的不足,相信这是无人车近期的发展方向。而高精度LiDAR的价格由于市场需求大增也将会在未来的一两年内出现降幅,为无人车的进一步普及铺路。 | ||
视觉系统 | ||
waymo的视觉系统是由8个视觉模块组成,这个八个视觉模块都是有摄像头加很多传感器组合而成,能够达到白天黑夜多种复杂场景下的360度全景捕捉。如下图所示 | ||
在无人驾驶技术中,感知是最基础的部分,没有对车辆周围三维环境的定量感知,就有如人没有了眼睛,无人驾驶的决策系统就无法正常工作。为了安全与准确的感知,无人驾驶系统使用了多种传感器,其中可视为广义“视觉”的有超声波雷达、毫米波雷达、激光雷达(LiDAR)和摄像头等。超声波雷达由于反应速度和分辨率的问题主要用于倒车雷达,毫米波雷达和激光雷达承担了主要的中长距测距和环境感知,而摄像头主要用于交通信号灯和其他物体的识别。 | ||
传统计算机视觉领域的主要研究方向是基于可见光的摄像头的视觉问题,从摄像头采集的二维图像推断三维物理世界的信息。 | ||
计算机视觉在无人驾驶感知方面的前沿研究,包括光流(Optical Flow)和立体视觉、物体的检测和跟踪以及视觉里程计算法。其中光流算法我在TI实习期间有接触过,但没有深入去研究,哭晕。 | ||
计算机视觉在无人车上的使用有一些比较直观的例子,比如交通标志和信号灯的识别(Google)、高速公路车道的检测定位(特斯拉)。 | ||
计算机视觉在无人车场景中解决的最主要的问题可以分为两大类:物体的识别与跟踪,以及车辆本身的定位。 |
- 物体的识别与跟踪:通过深度学习的方法,我们可以识别在行驶途中遇到的物体,比如行人、空旷的行驶空间、地上的标志、红绿灯以及旁边的车辆等。由于行人以及旁边的车辆等物体都是在运动的,我们需要跟踪这些物体以达到防止碰撞的目的,这就涉及到Optical Flow等运动预测算法。
- 车辆本身的定位:通过基于拓扑与地标算法,或者是基于几何的视觉里程计算法,无人车可以实时确定自身位置,满足自主导航的需求。
Optical Flow和立体视觉
在2016年6月于美国拉斯维加斯召开的CVRP大会上,多伦多大学的Raquel Urtasun教授和她的学生改进了深度学习中的Siamese网络,用一个内积层代替了拼接层,把处理一对图片的时间从一分钟左右降低到一秒以内。Exploiting Semantic Information and Deep Matching for Optical Flow
物体的识别与追踪
物体识别是计算机视觉的核心问题之一,最近几年由于深度学习的革命性发展,计算机视觉领域大量使用CNN,物体识别的准确率和速度得到了很大提升,但总的来说物体识别算法的输出一般是有噪音的:物体的识别有可能不稳定,物体可能被遮挡,可能有短暂误识别等。自然地,MOT问题中流行的Tracking-by-detection方法就要解决这样一个难点:如何基于有噪音的识别结果获得鲁棒的物体运动轨迹。在ICCV 2015会议上,斯坦福大学的研究者发表了基于马尔可夫决策过程(MDP)的MOT算法来解决这个问题。
这个基于MDP的算法在KITTI数据集的物体追踪评估中达到了业界领先水平
视觉里程计算法
基于视觉的定位算法有两大分类:一种是基于拓扑与地标的算法,另一种是基于几何的视觉里程计算法。基于拓扑与地标的算法把所有的地标组成一个拓扑图,然后当无人车监测到某个地标时,便可以大致推断出自己所在的位置。基于拓扑与地标的算法相对于基于几何的方法容易,但是要求预先建立精准的拓扑图,比如将每个路口的标志物做成地标。基于几何的视觉里程计算法计算比较复杂,但是不需要预先建立精准的拓扑图,这种算法可以在定位的同时扩展地图。
纯视觉定位计算的一个很大问题是算法本身对光线相当敏感。在不同的光线条件下,同样的场景不能被识别。特别在光线较弱时,图像会有很多噪点,极大地影响了特征点的质量。在反光的路面,这种算法也很容易失效。这也是影响视觉里程计算法在无人驾驶场景普及的一个主要原因。一个可能的解决方法,是在光线条件不好的情况下,更加依赖根据车轮以及雷达返回的信息进行定位。
Radar
如图所示,这个雷达和传统的雷达也不一样,人家自研,精度更高,功能更强大。
总之,Waymo自主研发的这些Sensor因为是服务于自己的软件平台,因此极大地降低了成本,提高了可靠性。
怎么说呢,你想调研一个技术壁垒比较严重的领域,你很难找到一些可靠的信息。就好比Waymo的处理器平台。在Hot Chips 2016 conference上,我看完整个youtube视频:传送门,Waymo只透露了他们用了一些数量的CPU与GPU集成电路。但是一年后9月份,也就是前几个月,人家Intel在博客上说了,从09年他们就开始和Waymo合作了。人家英特尔已经为waymo开发了两代的人工智能处理芯片了。Waymo的计算平台由两计算盒组成。每个计算盒配备了一颗英特尔至强E5处理器(12核)和四到八颗NVIDIA K80 GPU加速器,彼此使用PCI-E总线连接。CPU运算峰值速度可达400帧/秒,消耗400W的功率。每个GPU运算峰值速度可达8Tops/s,同时消耗300W的功率。因此,整个系统能够提供64.5 TOP/S的峰值运算能力,其功率需求为3000W。计算盒与车辆上安装的十二个高精度摄像头相连接,以完成实时的物体检测和目标跟踪任务。车辆顶部还安装有一个激光雷达装置以完成车辆定位及避障功能。为了保证可靠性,两个计算盒执行完全相同的任务。一旦第一个计算盒失效,第二个计算盒可以立即接管。在最坏的情况下两个计算盒都在计算峰值运行,这意味着将产生超过5000瓦的功耗并急聚大量的热量,散热问题不容忽视。此外,每个计算盒的成本预计为2至3万美元,这是普通消费者根本无法承受的整体解决方案。
那么现在国内外其他厂商的计算平台主要有哪些呢?
NVIDIA的PX平台是目前领先的基于GPU的无人驾驶解决方案。每个PX2由两个Tegra SoC和两个Pascal GPU图形处理器组成,其中每个图像处理器都有自己的专用内存并配备有专用的指令以完成深度神经网络加速。为了提供高吞吐量,每个Tegra SOC使用PCI-E Gen 2 x4总线与Pascal GPU直接相连,其总带宽为4 GB/s。此外,两个CPU-GPU集群通过千兆以太网项链,数据传输速度可达70 Gigabit/s。借助于优化的I/O架构与深度神经网络的硬件加速,每个PX2能够每秒执行24兆次深度学习计算。这意味着当运行AlexNet深度学习典型应用时,PX2的处理能力可达2800帧/秒
德州仪器提供了一种基于DSP的无人驾驶的解决方案。其TDA2x SoC拥有两个浮点DSP内核C66x和四个专为视觉处理设计的完全可编程的视觉加速器。相比ARM Cortex-15处理器,视觉加速器可提供八倍的视觉处理加速且功耗更低。类似设计有CEVA XM4。这是另一款基于DSP的无人驾驶计算解决方案,专门面向计算视觉任务中的视频流分析计算。使用CEVA XM4每秒处理30帧1080p的视频仅消耗功率30MW,是一种相对节能的解决方案。
当时在那里实习,人家就在推这个方案了。主要优势就是能耗低。
Altera公司的Cyclone V SoC是一个基于FPGA的无人驾驶解决方案,现已应用在奥迪无人车产品中。Altera公司的FPGA专为传感器融合提供优化,可结合分析来自多个传感器的数据以完成高度可靠的物体检测。类似的产品有Zynq专为无人驾驶设计的Ultra ScaleMPSoC。当运行卷积神经网络计算任务时,Ultra ScaleMPSoC运算效能为14帧/秒/瓦,优于NVIDIA Tesla K40 GPU可达的4帧/秒/瓦。同时,在目标跟踪计算方面,Ultra ScaleMPSoC在1080p视频流上的处理能力可达60fps。
Mobileye是一家基于ASIC的无人驾驶解决方案提供商。其Eyeq5 SOC装备有四种异构的全编程加速器,分别对专有的算法进行了优化,包括有:计算机视觉、信号处理和机器学习等。Eyeq5 SOC同时实现了两个PCI-E端口以支持多处理器间通信。这种加速器架构尝试为每一个计算任务适配最合适的计算单元,硬件资源的多样性使应用程序能够节省计算时间并提高计算效能。
###计算平台体系结构设计探索
有了这些解决方案,那么需要对计算平台体系结构设计探索下:
尝试对以下问题形成一些初步认识:
- 各种计算单位最适合什么样的工作负载;
- 能否使用移动处理器执行无人驾驶计算任务;
- 如何设计一个高效的无人驾驶计算平台。
我们试图了解哪些计算单元最适合执行卷积和特征提取类应用,这是无人驾驶场景中最计算密集型工作负载。我们在现有的ARM SOC上完成了实验验证,此ARM SOC一个四核CPU、GPU、 DSP组成。为了研究研究各种异构硬件的能耗与性能行为,我们分别在CPU、GPU、DSP实现并优化了特征提取和卷积这两类计算负载,同时测量了芯片级能耗。
首先,我们分别在CPU、GPU、DSP实现了卷积应用,这是在对象识别和目标跟踪任务中最常用、计算也最为密集的阶段。当在CPU上运行时,每次卷积大约需要8毫秒来完成,能耗为20MJ;在DSP上运行时,每次卷积需要5毫秒来完成,能耗为7.5MJ;在GPU运行时,每次卷积只需要2毫秒来完成,能耗也仅需4.5MJ。这表明,无论是性能和能耗表现,GPU是执行卷积任务最有效的计算单元。
接下来,我们实现了分别在CPU、GPU、DSP特征提取应用。特征提取为无人驾驶的定位产生特征点,这是定位阶段计算量最大的工作负载:在CPU上运行时,每个特征提取的任务大约需要20毫秒来完成,耗能50MJ;在GPU上运行时,每个特征提取的任务需要10毫秒来完成,耗能22.5 MJ;在DSP中运行时,每个特征提取的任务仅需要4毫秒,仅消耗6MJ。这些结果表明,从性能和能耗的角度出发,DSP是特征提取分析最佳单元,这是因为对GPU和DSP这类专注于并行的硬件而言,上述任务侧重于控制逻辑GPU因而得不到高效执行。
我们来尝试了解无人驾驶系统在上述ARM移动SoC上的执行情况,并探索支持自动驾驶的最低硬件平台配置。下图显示了一个面向基于视觉的无人驾驶驾驶的移动SoC系统组成。在这个移动SoC实现中,他们利用DSP处理传感器数据,如特征提取和光流;并使用GPU完成深度学习任务,如目标识别;采用两个CPU线程完成定位任务以实现车辆实时定位;他们使用一个CPU线程实现实时路径规划;使用另一个CPU线程进行避障操作。如果CPU尚未被全占有,多个CPU线程则可以在同一CPU核心上运行。
令人惊讶的是,实验数据证明,无人驾驶系统在ARM SOC上运行的性能并不差。定位流水线每秒可处理25帧图像,图像生成速度为每秒30帧图像,这说明产生的图像大部分可以得到及时处理,不会产生大规模的丢帧。深度学习流水线每秒能够执行2到3个目标识别任务。规划和控制流水线目标是在6MS内完成路径规划。当使用ARM移动端SOC进行无人驾驶时,他们能够以5英里/小时的速度行驶车辆,并且不损失任何定位信息;同时,整个SOC平均功耗为11W。移动SoC的硬件资源有限,能够支持有限范围内的无人驾驶系统确实是非常令人惊喜的发现。这说明如果增加更多的计算资源,硬件平台就能够处理更多的数据,并支持车辆以更快的速度行驶,最终满足产品级无人驾驶系统的需要。
如上图所示:一个无人驾驶系统包含了多个传感器,包括长距雷达、激光雷达、短距雷达、摄像头、超声波、GPS、陀螺仪等。每个传感器在运行时都不断产生数据,而且系统对每个传感器产生的数据都有很强的实时处理要求。比如摄像头需要达到60FPS的帧率(30FPS是一般录像的常用帧数,60是一般游戏的常用帧数。30FPS在快速动作的时候会感觉不流畅),意味着留给每帧的处理时间只有16毫秒。但当数据量增大之后,分配系统资源便成了一个难题。例如,当大量的激光雷达点云数据进入系统,占满CPU资源,就很可能使得摄像头的数据无法及时处理,导致无人驾驶系统错过交通灯的识别,造成严重后果。
如上图所示:无人驾驶系统整合了多个软件模块(包括路径规划、避障、导航、交通信号监测等)和多个硬件模块(包括计算、控制、传感器模块等),如何有效调配软硬件资源也是一个挑战。具体包括三个问题:第一,当软硬件模块数据增加,运行期间难免有些模块会出现异常退出的问题,甚至导致系统崩溃,此时如何为提供系统自修复能力?第二,由于模块之间有很强的联系,如何管理模块间的有效通信(关键模块间的通信,信息不可丢失,不可有过大的延时)?第三,每个功能模块间如何进行资源隔离?如何分配计算与内存资源?当资源不足时如何确认更高的优先级执行?
在详细调研后,我们发现机器人操作系统ROS比较适合无人驾驶场景,因为关于ROS的详细介绍,大家可以参考:传送门。因为对系统知识匮乏,因此不做深入调研。
无人驾驶系统是一个复杂的系统工程,在它的整个研发流程中,测试工作至关重要同时也繁重复杂。显然将全部测试工作都集中在真车上进行是一种成本异常高昂且安全系数非常低的方案。通过综合考虑测试中各种可能发生的正常或异常状况,软件模拟成为了面向无人驾驶系统的更安全且更经济有效的替代测试手段。Waymo有Carcraft软件来做模拟仿真。这些模拟仿真需要有处理大量数据的能力于是就催生了分布式无人驾驶模拟平台(比如:基于Spark与ROS的分布式无人驾驶模拟平台)
无人驾驶是一个复杂的系统,如图1所示,系统主要由三部分组成:算法端、Client端和云端。其中算法端包括面向传感、感知和决策等关键步骤的算法;Client端包括机器人操作系统以及硬件平台;云端则包括数据存储、模拟、高精度地图绘制以及深度学习模型训练。
算法子系统从传感器原始数据中提取有意义的信息以了解周遭环境情况,并根据环境变化做出决策。Client子系统融合多种算法以满足实时性与可靠性的要求。举例来说,传感器以60HZ的速度产生原始数据,Client子系统需要保证最长的流水线处理周期也能在16ms内完成。云平台为无人车提供离线计算以及存储功能。通过云平台,我们能够测试新的算法、更新高精度地图并训练更加有效的识别、追踪、决策模型。
算法系统由几部分组成:第一,传感并从传感器原始数据中提取有意义信息;第二,感知,以定位无人车所在位置以及感知现在所处的环境;第三,决策,以可靠安全抵达目的地。
传感
通常来说,一辆无人驾驶汽车装备有许多不同类型的主传感器。每一种类型的传感器都各有优劣,因此,来自不同传感器的传感数据应该有效地进行融合。现在无人驾驶中普遍使用的传感器包括以下几种。
- GPS/IMU:通过高达200Hz频率的全球定位和惯性更新数据以帮助无人车完成自我定位。GPS是一个相对准确的定位用传感器,但是它的更新频率过低,仅仅有10HZ,不足以提供足够实时的位置更新。IMU的准确度随着时间降低,在长时间内并不能保证位置更新的准确性,但是,它有着GPS所欠缺的实时性,IMU的更新频率可以达到200HZ或者更高。通过整合GPS与IMU,我们可以为车辆定位提供既准确又足够实时的位置更新。
- LiDAR:激光雷达可被用来绘制地图、定位以及避障。雷达的准确率非常高,因此在无人车设计中雷达通常被作为主传感器使用。激光雷达是以激光为光源,通过探测激光与被探测无相互作用的光波信号来完成遥感测量。激光雷达可以用来产生高精度地图,并针对高精地图完成移动车辆的定位;以及满足避障的要求。以Velodyne 64-束激光雷达为例,它可完成10HZ旋转并每秒可达到130万次读数。
- 摄像头:被广泛使用在物体识别以及物体追踪等场景中,像是车道线检测、交通灯侦测、人行道检测中都以摄像头为主要解决方案。为了加强安全性,现有的无人车实现通常在车身周围使用至少八个摄像头,分别从前、后、左、右四个维度完成物体发现、识别、追踪等任务。这些摄像头通常以60HZ的频率工作,当多个摄像头同时工作时,将产生高达1.8GB每秒的巨数据。
- 雷达和声呐:雷达通过把电磁波能量射向空间某一方向,处在此方向上的物体反射碰到的电磁波;雷达再接收此反射波,提取有关该物体的某些信息(目标物体至雷达的距离,距离变化率或径向速度、方位、高度等)。雷达和声呐系统是避障的最后一道保障。雷达和声呐产生的数据用来表示在车的前进方向上最近障碍物的距离。一旦系统检测到前方不远有障碍物出现,则有极大的相撞危险,无人车会启动紧急刹车以完成避障。因此,雷达和声呐系统产生的数据不需要过多的处理,通常可直接被控制处理器采用,并不需要主计算流水线的介入,因为可实现转向,刹车、或预张紧安全带等紧急功能。
感知
在获得传感信息之后,数据将被推送至感知子系统以充分了解无人车所处的周遭环境。在这里感知子系统主要做的是三件事:定位、物体识别以及物体追踪。
决策
在决策阶段,行为预测、路径规划以及避障机制三者结合起来实时完成无人驾驶动作规划
##总结
最近市场上有几家无人驾驶初创公司有很强的技术把控能力,包括NURO.AI、PONY.AI、以及AutoX.AI,NURO.AI与PONY.AI应该属于传统的LiDAR流派,而AutoX应该是视觉流派的佼佼者。对无人驾驶技术感兴趣的人可以去了解下那几家公司。最后说下调研感想,借用调研看到的一篇文章中的评论:技术行业隔行如隔山。这个无人驾驶整合的技术点实在太多了。。。
- waymo官网 https://waymo.com/
- waymo官方技术博客 https://medium.com/waymo
- waymo自动驾驶报告 https://www.geonovum.nl/sites/default/files/Self-DrivingVehiclesReport.pdf
- ECCV2016 Exploiting Semantic Information and Deep Matching for Optical Flow
- ICCV2015 http://cvgl.stanford.edu/projects/MDP_tracking/
- Intel官方博客 https://newsroom.intel.com/editorials/waymo-intel-announce-collaboration-driverless-car-technology/
- Novell软件开发中心 Cloud Based Self Driving Cars http://ieeexplore.ieee.org/document/7015485/
- 麻省理工的 A Cloud-Assisted Design for Autonomous Driving
https://homes.cs.washington.edu/~gshyam/Papers/carcel.pdf- 机器人操作系统ROS2 http://design.ros2.org/
- Implementing a Cloud Platform for Autonomous Driving
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。