Apollo自动驾驶入门课(1)——无人驾驶概览

本课程由Apollo团队面向对自动驾驶感兴趣的开发者免费开放的课程,可以从微信公众号“Apollo开发者社区”中学习,也可以从“Apollo开发者”官网学习。

无人驾驶开源部分的主要内容,包括高精地图HD Maps、定位Localization、感知Perception、预测Prediction、规划Planning、控制Control等模块。
高精度地图几乎支持着软件栈的所有其他模块,包括定位、感知、规划、决策。

1.自动驾驶主要模块

Apollo自动驾驶入门课(1)——无人驾驶概览
定位模块用以确认车辆所在位置。车辆利用激光和雷达数据将这些传感器感知的内容与高分辨率地图进行对比,使车辆能够以个位数厘米级精度进行定位。
感知模块相当于车辆的“眼睛”,用以感知这个世界。深度学习是一个重要而强有力的感知工具,卷积神经网络构成深度学习的分支,对感知任务至关重要,如分类、检测和分割。这些方法适用于几种不同无人驾驶车传感器的数据来源,包括摄像头、雷达和激光雷达。Apollo自动驾驶入门课(1)——无人驾驶概览
预测模块用以预测其他车辆或行人可能的移动状态。递归神经网络是其中的一种预测方法,可对其他物体随时间的运动进行跟踪,并使用该时间序列数据预测未来。Apollo自动驾驶入门课(1)——无人驾驶概览
规划模块是结合预测与路线生成车辆轨迹,是构建无人驾驶车最困难的部分之一。Apollo自动驾驶入门课(1)——无人驾驶概览
控制模块是通过转向、油门和制动来执行规划轨迹。不同的控制器从简单到复杂,其性能却从弱到强。Apollo自动驾驶入门课(1)——无人驾驶概览

2.无人驾驶车简介

人类交通历史的发展:Apollo自动驾驶入门课(1)——无人驾驶概览
人类需要无人驾驶车原因:

  • 安全。全球每年有超100万人死于车祸 。
  • 可靠。无人驾驶车不会向人类一样分心、疲惫以及犯一些其他不必要的错误。
  • 学习能力极强。无人驾驶车可以向路上行驶的其他无人驾驶车学习,也可以从自身的经验中学习,“富有经验”的驾驶员。
  • 没有停车麻烦。

无人驾驶车发展历史:Apollo自动驾驶入门课(1)——无人驾驶概览
2017年百度发布了名为Apollo的开源无人驾驶项目,该平台帮助合作小伙伴整合自有车辆和硬件系统以构建完整的无人驾驶系统。
无人驾驶车辆由专用计算机和传感器组成,自主计算单元比个人倍计算机快十倍甚至更多倍。在Apollo系统中,车载计算单元受到大规模且强有力的云集群支持。任何给定的无人驾驶车辆都有许多先进的传感器用以执行感知和定位等任务,借助人工智能和传感器,车辆可以独立于任何人类驾驶员实现自主操作。

Sebastian Thrun (Founder & President, Udacity)

3.无人驾驶车的运作方式

无人驾驶车包括5个核心部件,计算机视觉、传感器融合、定位、路径规划、控制。
Apollo自动驾驶入门课(1)——无人驾驶概览
计算机视觉是通过摄像头图像捕获周围世界的信息,传感器融合是合并来自其他传感器的数据(如激光、雷达)从而更加深入了解周围环境,定位是通过对环境的了解精确地确定车辆所处位置,路径规划是绘制车辆所在位置与目标地点的行驶路线,控制是使汽车保持在规划的轨道上行驶。本质上来讲,其他一切无人车都是这些核心功能更复杂的实现。

4.参考车辆和硬件平台

Apollo自动驾驶入门课(1)——无人驾驶概览

硬件 功能及特点
线控驾驶车辆 一款可通过电子控制的基础车辆,不仅是通过实体方向盘、油门踏板和刹车踏板来控制
控制区域网络(CAN) 车辆的内部通信网络,计算机系统通过CAN卡连接汽车内部网络发动加速、制动和转向信号
全球定位系统(GPS) 通过绕地卫星接收信号,这些信号帮助确定位置
惯性测量装置(IMU) 测量车辆的运动、位置,是通过跟踪位置、速度和加速度等其他因素
激光雷达(LiDAR) 由一组脉冲激光器组成,Apollo使用激光雷达可360度扫描车辆周围,通过激光束的反射形成软件可用于了解环境的点云
摄像头 捕获图像信息,可以使用计算机视觉来提取这些图像的内容并了解周围环境,例如,摄像头可以感知颜色,用于检测和了解交通灯
雷达 用于检测障碍物,雷达分辨率低,难以检测障碍物类别,但雷达的优势在于经济实惠,适用于各种天气和照明条件,雷达擅长测量其他车辆的速度

5.开源软件架构

开方式软件层分为三个子层 :实时操作系统、运行时框架和应用程序模块层
实时操作系统(RTOS) 可确保在给定时间内完成特定任务,“实时”是指无人驾驶车的操作系统能够及时进行计算、分析并执行相应操作,这些使在汽车传感器收集到外界数据后的短时间内完成的。实时性能是确保系统稳定性和驾驶安全性的重要要求。
Apollo RTOS是Ubuntu Linux操作系统与Apollo内核相互结合的成果。Ubuntu是业内*Linux发行版之一,也是最流行的云操作系统。
运行时框架 是Apollo的操作环境,是ROS的定制版,即机器人操作系统,实际上是一个在Apollo RTOS上运行的软件框架。ROS根据功能将自治系统划分为多个模块,每个模块负责接收、处理和发布自己的消息,这些模块相互独立,只能通过运行时框架进行通信,因此调整任一单一框架都很容易。为使ROS适应无人驾驶车,Apollo团队改进了共享内存的功能和性能、去中心化和数据兼容性。

  • 共享内存降低了需要访问不同模块时的数据复制需求。对于一对多的传输方案,共享内存支持“一次写入,多次读取”模式,这样可以加快通信速度。例如,收到一次点云,可以同时进行障碍物检测、定位和GUI工具。Apollo自动驾驶入门课(1)——无人驾驶概览
  • 去中心化解决了单点故障问题。现成的ROS有许多节点组成,每个节点有其对应的功能,所有节点都需要由单个ROS主节点来控制,主节点故障,则整个系统失效。为了避免这一问题,Apollo将所有节点放在一个公共域中,域中的每个节点都有关于域中其他节点的信息。通过这种去中心化的方案,公共域取代了原来的ROS主节点,因此消除了单点故障风险。Apollo自动驾驶入门课(1)——无人驾驶概览
  • 数据兼容性是很重要的特性。无人驾驶车本身的项目规模很大,不同的ROS节点通过名为ROS信息的接口语言相互通信,ROS信息需要使用通用接口语言,使每个节点都可以解读来自其他节点的消息数据,如果消息文件格式与节点所期望的格式稍有不同,通信会失败,导致严重的兼容性问题。例如,当一个接口升级,数据不兼容通常会导致系统故障。为了解决这一问题,Apollo团队使用一种名为protobuf的接口语言来代替原生ROS信息。Protobuf是一种结构化数据序列化方法,这对开发用于通过电线通信或用于存储数据的程序非常有用,可以将新字段添加到信息格式中而不破坏后向兼容性,新的二进制文件可以在解析过程中接收旧的消息格式。Apollo自动驾驶入门课(1)——无人驾驶概览

应用程序模块 Apollo软件平台有各种模块,包括MAP引擎、定位、感知、规划、控制、端到端驾驶以及人机接口(HMI),每个模块有自己的算法库,模块之间的关系很复杂。
Apollo自动驾驶入门课(1)——无人驾驶概览

6.云服务

Apollo云服务是在云中运行的一套应用程序。云是描述通过互联网访问服务器的术语,只要有互联网连接和授权账户,就可以将电子数据放入云中并从任何地方访问。Apollo云服务不仅仅是存储数据,它提供了许多应用程序,其中包括可加快建构和训练无人驾驶车软件过程的工具。Apollo云服务包含高精度地图(HD Map)、仿真数据(Simulation)、数据平台(Data Platform)、安全(Security)、空中软件升级(OTA)以及被称为DuerOS的智能语音系统。
仿真环境平台是Apollo开放软件栈的重要工具,该平台允许每个人出于自身需要来构建仿真环境,该平台还聚合了大量驾驶数据,使开发人员能够检验和验证无人驾驶软件系统。仿真环境是Apollo车辆不仅可以查看环境,还可以了解道路情况和场景。
仿真环境平台具有许多功能:

  • 允许开发人员配置不同的驾驶场景。比如障碍物、路线和交通灯状态。
  • 执行模式为开发人员提供了一个在多个场景中运转的完整模式。在执行模式中,开发人员可以在Apollo环境中上传和验证模块。
  • 自动评分系统,从几个指标对场景进行评估,其中包括:碰撞检测、交通灯识别、速度限制、障碍物检测和路线逻辑。
  • 三维可视化描述了实时路况,在显示无人驾驶车状态的同时,使模块输出可视化。
    无人驾驶数据可能来自模拟场景或道路测试,Apollo为这些类别提供了各种各样的数据。仿真场景数据有两个不同的来源:记录场景和虚拟场景。可以使用记录场景重放在实际道路测试中已经观察到的传感器数据,可以借助虚拟场景使用编辑器创建新的驾驶场景,这有助于快速检验与验证算法。

为了训练像深度学习网络那样的机器学习模型,需要带标签的注释数据,包括交通信号灯数据、带边框的障碍物数据、语义分割数据。此外,Apollo已向公众发布了Apollo Scape数据集,它涵盖了各种复杂路况,例如,ApolloScape在单个图像中列入并注释了多达160辆车或80名行人。同时开放数据集使用语义分割对图像进行逐像素标记,这使得ApolloScape成为世界上最复杂又最精确的无人驾驶数据集。
Apollo云服务也提供了信息安全、DuerOS和无线更新等其他模块内容,访问apollo.auto。