【SDC】揭开无人驾驶的神秘面纱

(纯文字版)

1、自动驾驶定义

自动驾驶,可以理解为在驾驶过程中司机与车的职责担当分配,从零自动化的全人工操作,到完全自动化的无人驾驶,美国国家公路交通安全管理局将自动驾驶分为5个等级,从Level0到Level4,内容如下。
Level0:无自动化。没有任何自动驾驶功能,完全由司机负责车的一切行为。对于传统意义上的辅助驾驶技术,如前向碰撞预警,由于需要司机干预车的行为,所以仍属于Level0。
Level1:单一功能自动化。自动驾驶功能是单一的,如自适应巡航、车道保持,其它功能由司机负责,司机不能同时解放手和脚,需要对行车安全负责。
Level2:部分自动化。自动驾驶功能不是单一的,如结合了自适应巡航和车道保持的跟车功能,在特定环境下,司机可以不操作汽车,同时解放手和脚,但仍需要对驾驶安全负责。
Level3:有条件自动化。自动驾驶接管汽车,但这是有条件的,如人流较少的场景,司机可以不操作汽车,同时解放手和脚,而且不必观察周围的环境,车辆安全交给自动驾驶系统负责,遇到复杂路况时,有足够的预警时间让司机接管汽车。
Level4:完全自动化。真正意义上的无人驾驶,全程驾驶由自动驾驶系统负责,不需要人的干预。
另外,美国机动工程师协会,作了类似的自动驾驶分级,不同的是将上面的Level4拆分为Level4和Level5,Level4与Level3的区别是在指定条件下自动驾驶可以完成全部任务,不需要司机作出反应,而Level3在指定条件下只能完成部分任务,需要司机作出反应,Level4与Level5的区别是自动化限制在特定条件下,而Level5不限制条件。
自动驾驶早有,但最近呈爆发趋势。自动驾驶可以解决许多现实问题,如交通安全问题、交通拥堵问题、环境污染问题、资源浪费问题等,并且可以带来舒适的乘车体验,让乘车变成一种娱乐、一种享受。
自动驾驶是一种系统工程,涉及许许多多的高新技术,如硬件突破、算法创新、系统整合等,由此会带来一波技术革新,以及相关的庞大衍生生态。

2、自动驾驶架构

自动驾驶架构大致可划分为三大块,分别是客户端、算法端和云端。客户端包括车载硬件平台和机器人操作系统,算法端包括传感、感知和决策等关键步骤,云端包括数据存储、运动仿真、深度学习模型训练和高精地图绘制。简单来说,客户端融合了多种算法,有严格的性能要求,如实时性、可靠性、资源有限性;算法端从传感模块获取的原始数据中提取有用的信息,然后感知周围的环境,并作出相应的决策;云端存储了大量的数据,通过这些数据,可以进行运动仿真以验证新的算法,可以更新高精地图,可以训练更好的深度学习模型。

车载硬件平台——
现阶段,硬件考虑的是性价比,好的硬件往往造价昂贵,在经济制约的情况下,还需要考虑许多其它问题,如算力问题、功耗问题、散热问题。为了满足系统的可靠性要求,有时需要同时执行两个功能一样的计算单元,其中一个作为备份,主计算单元发生故障时,备份计算单元可以及时救援。在一些性能要求较低的场合,可以使用移动类Soc,基本功能可以得到保障,更主要的是便宜实惠。

机器人操作系统——
机器人操作系统ROS,是适合于自动驾驶的分布式计算框架,类似于许多领域的深度定制的Android系统。ROS提供了硬件抽象描述、底层驱动程序管理、消息管理与传递、程序发行包管理等基本功能,以及相关的应用工具。ROS中最基本的单位是节点,节点可以是一个传感器,也可以是一个机器人任务,还可以是整个机器人,总之,节点概念无处不在,ROS通过节点管理整个系统。节点与节点之间通过消息传递机制进行端到端通信,消息可以按主题分类,也可以包装成远程服务调用。
ROS应用于自动驾驶时需要进行适当的裁剪,利用ROS的优点,补足ROS的缺陷。对于可靠性来说,ROS只有一个主节点,主节点失效时,系统也就崩溃了,后果是很严重的,为此采用类似于ZooKeeper的机制,在主节点的基础上添加一个备用主节点,当主节点失效时,马上启用备用节点恢复现场,而失效的节点还会再次重启,以保证系统的可靠性。对于性能问题,ROS的节点间通信使用TCP/IP全协议栈,时延较长,可以使用共享内存的方式进行通信,而且当ROS节点广播通信时,消息被多次复制与传输,浪费系统带宽,可以使用多路径定向传播来改善这个问题。对于安全问题,ROS没有授权和加密机制,节点被挟持后可能会无休止地分配内存直至内存耗尽,也可能会泄漏数据,为此可以使用容器技术如LXC限制节点资源,使用沙箱机制隔离节点,使用加密协议保护节点安全。

传感——
传感,就是从传感器的原始数据中提取有意义的信息,传感器类型多种多样,各有优劣,因此还需要对这些数据进行融合。GPS定位相对准确,但实时性不足,而IMU实时性强,但位置准确度低,因此常组合使用GPS和IMU提供既准确又实时的位置信息。
激光雷达准确率非常高,一般用作主传感器,用于绘制高精地图、定位、避障。摄像头常安装于多个方位,用于物体识别与追踪。普通雷达和声纳用于检测前进方向上距离最近的障碍物,实现转向、制动等紧急功能。

感知——
感知所用的数据来源于各传感器,用于定位、物体识别与追踪。组合使用GPS和IMU进行定位时,可以使用卡尔曼滤波提取各自的有效信息,然而这种定位方法精度低,约为1米,而且根据GPS本身的特点,多路径问题容易引入噪声干扰,在封闭的环境下也不适合。摄像头通过计算机视觉技术,进行三角刨分、特征检测、特征匹配,也可以定位,但对光照敏感,使用受限。激光雷达,通过对产生的点云进行粒子滤波,可以产生高达10厘米的精度,但容易受到空气中悬浮颗粒的干扰。因此,需要融合多种传感器,提取各自的优点加以利用。激光雷达可提供精准的深度信息,通过现在火热的深度学习技术,如包括卷积层、激活层和汇聚层的卷积神经网络,可达到很好的物体识别与追踪精度,比传统的计算机视觉技术有明显的优势,离线训练好的模型可直接应用在车辆行驶中。

决策——
决策主要包括行为预测、路径规划和避障。行为预测,根据车辆周围的环境,使用随机模型计算相关概率,预测其它车辆下一秒的行为。路劲规划,最理想的是使用完全确定模型,搜索所有可能的路径并用代价函数算出最佳路径,然而对计算性能要求很高,难以保证实时性,所以采用概率模型进行优化。避障,首先通过交通情况预测碰撞行为,如果预测失效,则使用激光雷达重新规划路径,遇到障碍物时紧急避开。

运动仿真——
自动驾驶需要云平台的支持,包括分布式存储和分布式计算,可以使用Spark构建分布式计算平台,使用OpenCL构建异构计算平台,使用Alluxio构建数据存储平台。对于新的自动驾驶算法,首先要进行运动仿真,对算法进行测试,测试成功后再进行真车测试,这样做的目的是为了减少降低真车测试成本和周期。通过云平台的支持,可以加快测试速度。

高精地图——
高精地图的绘制需要处理大量的数据,需要云平台的支持,具体包括原始数据处理、点云生成、点云对齐、2D反射地图生成、高精地图标注、高精地图生成等阶段。

3、激光雷达

激光雷达是一种光学遥感技术,包括发射激光的激光发射器,收集反射点距离与该点发生的时间和水平角度,以及检测返回光的强度的感光部件。激光雷达首先向目标物体发射一束激光,根据接收与反射的时间间隔确定目标物体的实际距离,然后根据距离及激光发射的角度,通过简单的几何变换推导出物体的位置信息。激光的传播受外界影响小,因此激光雷达能够检测的距离一般可达100m以上。传统雷达使用无线电波传播,激光雷达使用激光传播,激光波长一般在600到1000nm,远远低于传统雷达的波长,因此激光雷达在测量物体距离和表面形状有更高的精度,一般为厘米级。
在自动驾驶过程中,车是移动的,激光雷达也在转动,在转动过程中不断地发射激光并收集反射点信息,每个激光发射器都有其固定的编号和垂直角度,激光雷达每转动一周,计算出所有反射点形成的集合便是点云。
激光雷达在自动驾驶中主要应用于高精地图绘制、定位和避障。高精地图是由点云拼接而成的,安装了激光雷达的地图数据采集车在目标线路反复行驶收集点云数据,后期进行人工标注,过滤点云数据中的错误信息,然后对多次收集到的点云进行对齐拼接以形成最终的高精地图。由于GPS的多路径问题,降低了定位精度,所以使用激光雷达进行精准定位,定位使用点云数据,根据贝叶斯法则估计可能位置的概率,可以根据上一次点云数据与当前点云数据进行推算以定位,也可以根据当前点云数据与高精地图进行匹配以定位。传统的摄像头与计算机视觉技术由于深度问题及计算性能,不能很好的进行避障,使用激光雷达可以获得物体的远近、高低及表面形状等,可以达到很好的避障效果。
激光雷达除了自身的优势外,也有些问题亟待解决。激光雷达精度容易受空气中悬浮颗粒物的影响,如雾天或雨天,而且对计算性能的要求很高,更重要的是造价昂贵,很难普及。在实际应用中,我们一方面可以等待激光雷达的普惠,另一方面选择低价的激光雷达,并与其它传感器进行融合,通过算法弥补硬件的不足。

4、GPS与IMU

GPS是一种常用的定位技术,通过三角定位原理,根据三颗卫星发射的无线电信号到信号接收器的时间进行定位,但一般使用四颗卫星,第四颗卫星用于位置确认。根据信号传播时间进行测距定位有一定的误差,时间精度要求很高,而且所有卫星和信号接收器的时钟都必须同步,因此卫星一般都安装了昂贵的原子钟,时间精度为纳秒级,而信号接收器则使用普通石英钟,需要根据卫星的信号矫正自身的误差。为了消除测量误差,地面还安装了基准站,用以纠正目标信号接收器的测量数据误差。GPS的误差不受时间影响,但更新频率低,大概10HZ,实时性不强,而且信号在空气中的悬浮介质和高楼大厦外墙间反射折射的多路径问题,加重了误差,因此需要其它传感器如IMU来辅助定位,提高定位精度。
IMU即惯性传感器,有加速度计和角速度计组成,主要用于测量加速度和旋转运动。IMU的特点是更新频率高,中低端IMU的频率约1KHZ,但误差随着时间积累,主要包括积分引起的位移误差和比例误差,以及背景白噪声、温度影响等,因此需要不断地校正。
GPS和IMU各有优劣,使用卡尔曼滤波可以进行数据融合,提取它们各自的优点加以利用。

5、计算机视觉

在自动驾驶的感知阶段,数据来源于摄像头、超声波雷达、毫米波雷达、激光雷达等,其中摄像头基于计算机视觉技术进行物体识别,超声波雷达用于倒车,毫米波雷达和激光雷达用于中长距离的测距和环境感知。通过摄像头采集到的二维图像信息推断三维世界的物理信息,是成本相对较低的方案,方案是否可行,需要通过一个标准的测试方法,广泛使用的是KITTI数据集。KITTI数据集是实车通过激光雷达、GPS与IMU定位系统和摄像头采集的,面向多个测试任务,包括Stereo与Optical Flow数据集,视觉里程测量数据集,三维物体检测数据集,物体追踪数据集,路面和车道检测数据集。
计算机视觉在自动驾驶中的应用,常见的有交通标志与信号灯的识别,车道的检测定位等,主要分为两部分,一个是基于深度学习技术、Optical Flow运动预测算法的物体识别与跟踪,另一个是基于拓扑与地标、视觉里程的车辆定位。
Optical Flow是图片序列或者视频中像素级的密集对应关系,基于单个摄像头在连续时刻的图像,而立体视觉从两个或更多的视角得到的图像建立对应关系,基于多个摄像头在同一时刻的图像。Optical Flow和立体视觉基于两个假设,一个是不同图像中的对应点都来自物理世界中同一个点的成像,另一个是不同图像中的对应点集合的空间变换基本满足刚体条件。2016年的CVPR大会上,改进了深度学习中的Siamese网络,用一个内积层代替了拼接层,将一对图片的处理时间从一分钟降到1秒。
物体识别,在传统的计算机视觉的基础上,结合现在流行的卷积神经网络,可以提高识别的准确率和速度。物体识别算法的输出一般都是有噪声的,如何获得鲁棒的物体运动轨迹,2015年的ICCV会议上发表了基于马尔科夫决策的多运动物体追踪算法。
通过计算机视觉进行定位时,一种方法是基于拓扑与地标的算法,所有的地标组成一个拓扑图,当车辆检测到地标时,可以根据拓扑图推算出自己的位置所在,特点是需要提前建立精准的拓扑图。另一种方法是基于几何的视觉里程的算法,算法复杂,但不需要提前建立精准的拓扑图,可以在定位的同时扩展地图。视觉里程算法分为两种,一种是单目算法,不能推算出观察到的物体大小,需要假设一个初步的大小,或者与其它传感器结合起来进行定位。另一种是双目算法,可以计算出特征点的深度,然后根据深度信息推算出物体的大小。计算机视觉定位的缺点是对光线敏感,在弱光、反光的场景会受到影响,因此需要与其它定位技术结合起来进行使用。

6、卷积神经网络与增强学习

深度神经网络是一种仿生算法,动物视觉皮层细胞对输入图像有方向选择性和平移不变性,神经元接受局部输入,在神经网络中对图片作卷积操作有类似生物视觉的功能。卷积神经网络是一种深度神经网络,适合于连续值输入信号如声音、图像和视频,与传统的深度神经网络相比,卷积神经网络中一个高层神经元只接受某些低层神经元的输入,同一层中不同神经元的输入权重共享。2012年卷积神经网络刷新了ImageNet图像识别竞赛的世界纪录之后,各种计算机视觉任务纷纷使用卷积神经网络构建模型,同样在自动驾驶中领域也不例外。深度神经网络在自动驾驶中主要用于立体感知和物体识别,立体感知常用的算法是MC-CNN和FlowNet。MC-CNN用于计算匹配程度,后期需要进行平滑约束和优化,而FlowNet可以一步到位。物体识别常用的算法为Faster R-CNN、MS-CNN和SDD,Faster R-CNN速度快,MS-CNN准确率高,SDD则速度快和准确率高兼具。
增强学习是机器学习的一种形式,目的是通过和环境交互学习到如何在相应的观测中采取最优行为,在行为预测与环境反馈中学习,不需要标注,可以应对特殊环境,整个系统是一个整体,闭环,可以容易地学习到一系列行为。常用的增强学习算法有REINFORCE和Deep Q-Learning,REINFORCE算法通过从环境中获得的奖励判断执行的行为的好坏,在模型相对简单、环境的随机性不强的的环境下可以达到很好的效果,不过REINFORCE算法限于存在回合概念的环境,计算出的梯度可能有较大的误差,还可能会收敛到一个局部最优点。DeepMind提出了Deep Q-Learning算法,基于Q函数,基于经验回放的思想,弥补了REINFORCE算法的不足,对于复杂的、每步行为之间存在较强相关性的环境有很好的学习效果。增强学习一般只对环境有短期影响,对于复杂决策的场景,无法从短期的奖励得到最优的行为,如迷宫游戏和围棋对战,需要借助于极小极大值搜索算法。在自动驾驶的决策阶段,对安全性和可靠性有严格的要求,常使用的是基于规则的决策系统,可以用有限状态机表示,缺点是缺乏灵活性,因此常借助于模拟器对决策系统进行验证,模拟出真实的、突发的条件用于增强学习。

7、路径规划与控制

路径规划与控制包括几个模块,分别是路由寻径、行为决策、动作规划和反馈控制。
路由寻径模块解决从始发地到目的地的路由问题,但与传统的导航不同,路由寻径的输出不是面向于驾驶员,而是给行为决策和控制规划模块作为输入,更深入到高精地图的车道级别,计算出一个从起点到终点的最佳道路行驶序列。路由寻径不仅要考虑路径的长短、拥堵情况,还要考虑执行的驾驶动作的难易程度,可以把在高精地图上的车道级别的寻径问题,转化为一个有向带权图上的最短路径搜索问题,常用的算法有Dijkstra算法和A*算法。Dijkstra算法是一种常见的的图论中的最短路径算法,A*算法是一种启发式的搜索算法。
行为决策时一个信息汇聚的地方,包括所有的路由寻径结果、无人车的当前自身状态、无人车的历史信息、无人车周边的障碍物信息、无人车周边的交通标识信息、当地的交通规则等,根据这些信息决策如何驾驶。常见的行为决策方法如有限状态马尔科夫过程,以及基于场景划分和分治原则的行为决策设计。
动作规划阶段将行为决策的宏观指令解释成一条带有时间信息的轨迹曲线,这一阶段可拆分为轨迹规划和速度规划。
反馈控制即指挥车辆的行驶行为,对于车辆的状态来说有个自行车模型的概念,表示车辆处于一个二维的平面坐标系内,车辆的状态的可以由车辆的位移和车身与坐标平面的夹角进行描述。PID反馈控制是一个常用的模型,用以控制方向盘和油门,按照系统规划的路径进行行驶。

8、ROS与Spark

ROS是一个相对成熟的机器人操作系统,很适合使用在自动驾驶中。ROS是2010年发布的开源机器人操作系统,点对点设计,不依赖编程语言,有很强的代码可复用性,有硬件抽象、底层驱动管理、消息传递等功能,采用分布式架构,通过各功能独立的节点实现消息传递的分层次运行。ROS中最重要的概念包括节点,节点管理器,参数服务器,消息,主题,服务和任务等。
ROS 1.0的主要部件包括Master、Node和Service,Master的主要功能是命名服务,存储了启动时需要的运行时参数,消息发布上游节点和接收下游节点的连接名和连接形式,和已有ROS服务的连接名。Node是真正的执行模块,对于收到的消息进行处理,并且发布新的消息给下游节点。Service是一种特殊的Ros节点,相当于有一个服务节点,接受请求并返回请求结果。ROS 2.0为了让ROS符合工业级的应用标准,采用了DDS这个工业级别的中间件负责可靠通信,通信节点动态发现,而且使用共享内存方式使通信效率更高。
ROS应用于自动驾驶中需要去中心化,也就是热备份ROS的重要节点,以备宕机时进行切换。在性能方面,使用共享内存的方式进行通信,以减少不必要的延时和资源消耗,使用组播代替原来的广播通信机制,另外在序列化和饭序列化方面有一定的通信延时,这点需要注意。出于安全方面的考虑,需要考虑沙盒或容器技术、加密技术等。
Spark是一个开源的通用并行计算框架,基于内存实现的分布式计算,拥有Hadoop所具有的有点,与Hadoop不同的是Spark Job的中间输出和结果可以保存在内存中,从而不再需要读写HDFS,能更好地适用于需要迭代的map-reduce算法。Spark操作数据的核心是弹性分布式数据集,它允许程序员以一种容错的方式在一个大型集群上执行内存计算。

9、硬件与安全

自动驾驶系统是多种技术、多个模块的集成,下面看看涉及的硬件有哪些。
传感器包括超声波雷达、激光雷达、毫米波雷达、摄像头等、红外探头等,由于各自的特点,常使用不同类型的传感器进行融合,下面是各种传感器的比较。
这里写图片描述
当硬件传感器收到环境信息后,数据会被导入计算平台,有不同的芯片进行计算,计算平台的设计直接影响到自动驾驶系统的实时性和鲁棒性。CPU已经满足不了要求,取而代之的是GPU、FPGA、DSP、ASIC、TPU、概率芯片,以及国内的寒武纪、中星微等。
汽车控制平台主要包括ECU和通信总线两大部分,通信总线包括LIN、CAN、FlexRay。
对于自动驾驶系统来说安全是最重要的,但传感器、操作系统、控制系统、车联网通信系统等都可能被攻击,这点需要格外注意。

10、高精地图

高精地图作为无人驾驶发展成熟标志的重要支撑,在纵向和横向定位、基于车道模型的碰撞避让、障碍物检测和避让、智能调速、转向和引导等方面发挥着重要作用,是无人驾驶的核心之一。高精地图与传统地图相比,面向的是无人驾驶系统,可以精准的表征路面特征,实时性强。高精地图的产生涉及多种传感器,是一个多传感器融合的过程,可以使用卡尔曼过滤进行融合,这些传感器包括IMU、轮测距器、GPU、激光雷达等。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值