课程介绍

Apollo是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统、快速搭建一套属于自己的自动驾驶系统。

一、本机演示实战

首先进入GitHub存储的git代码,将其拷贝使用。接着我们将对代码进行学习和运行。

下图是Apollo软件的架构图,也是核心的关系图。它的整个数据转过程是:通过高精度地图和定位获得车辆周边的场景信息。然后通过感知模块侦测道路上的障碍物,即一些动态信息,比如旁边的车、行人、自行车等等。这些工作完成后将感知的信息传递Prediction,预测感知障碍物的运行轨迹。最后将预测结果包装再传给Planning模块。Planning根据障碍物和周边静态的情况,比如有哪些车道可选,去规划路线。路线规划完成后,将生成的轨迹传到Control模块。Control模块通过Can总线协议跟车辆交互,例如应该打多大角度的方向盘,车辆现在的加速度是多少,当前是应该踩刹车还是继续跟车等。同时也会从Can总线协议层面了解到车辆本身的信息。


在3.0版本, 我们升级了系统里一些安全相关的模块,如图4所示,当发生紧急情况的时候可以直接利用熔断机制跳开PNC,直接对车辆下发刹车指令等。


在介绍完整体的逻辑以及代码逻辑模块之后,接下来就是一步步的实战,图5是软件的安装流程。


自动驾驶的门槛比较高,要真正形成一个比较完备的闭环,还需要一辆车。要从事自动驾驶行业,就必须上手,要有实际的车辆,可以是小型实验用车或者真车。实车必须满足线控标准。图6列出了满足Apollo线控标准的车辆指标。


本节的学习到此结束,下节学习马上开始!

二、 车辆与循迹驾驶能力实战

循迹自动驾驶是指车辆按照录制好的轨迹进行自动驾驶,其涉及到自动驾驶中最基本的地盘线控能力、定位能力、控制能力,最自动驾驶系统的一个最小子集。

在搭建自动驾驶车辆的软件、硬件环境以后,通常采用循迹测试进行验证,如下所示:


循迹测试涉及最底下的几个模块,只需要定位、控制以及Canbus这三个模块,是Apollo的最小子集,通过循迹可以验证车的线控能力以及模块的整体集成能力。

那么如何做循迹测试呢?首先在硬件上,我们需要一辆线控车辆、一个工控机以及惯导系统GPS和IMU,如图所示。


如果大家使用的是参考硬件搭建的车辆,不需要进行适配,可以直接进行验证。

如果你不是用参考车辆来做这件事,需要做以下几步:

首先实现一个适配器层。


第二步是Can卡的管理。


第三步是控制模块。


接着就是定位模块,这是非常核心的一部分。如下所示,该图是目前定位整体的逻辑框架。


目前Apollo定位的方式主要有两种,一种是PTK定位方式,是基于基站的方式。另一种是MSF(多传感器融合)的定位方式。需要利用LiDAR的3D点云来做匹配认证。

最后就是在搭建完成之后,启动循迹自动驾驶。


三、障碍物感知和路径规划能力实战

环境感知在自动驾驶汽车应用中心占据了核心地位。一辆车要实现自动驾驶,障碍物感知是最基础也是最核心的功能。

Apollo2.0版本在1.0版本上有很大升级,主要是增加了感知和规划模块。下图是2.0所涉及的传感器的属性列表。


感知的核心是进行障碍物的识别、分类、语义分析和障碍物跟踪。如下所示:


规划的目的是告诉汽车按照什么样的一条路径行驶,其代码逻辑如下所示。


如图顶层左边部分是规划容器,它有几个核心元素:参考线、高精度地图、规划器Planner、轨迹发布。

在根据教程搭建了具备感知和规划能力的平台之后,开发者更希望根据自己的场景进行深度定制。为加速研发过程,百度提出了“云+端”的研发迭代模式,所谓的“云”大家都能理解, “端”指的是车辆端。

在运行整个流程时,所积累的海量数据,时通过云端进行传递的。当然对于传递的数据,我又可以分为以下几个类型。

1.原始数据,各种传感器、车辆、驾驶员行为等,数据种类繁多,维度不同,数据量大,而且大多是非结构化数据,对于传输、处理、存储提出了非常大的挑战。
2.标注数据,视觉的2D障碍物数据、红绿灯数据、3D点云数据等。
3.逻辑数据,包括完美感知,环境的抽象以及车辆动力学模型等。
仿真数据,包括参数模糊化数据;三维重建数据等。

为此Apollo建立了一个数据平台,对数据的采集、存储、使用进行管理。

首先我们通过data recorder根据按照预先定义的格式生成数据,利用云端的传输机制将数据快速传递到云端。

其次,我们构建了一个自动驾驶数据仓库,将海量数据成体系地组织在一起,可以快速搜索,灵活使用。

最后,云端拥有基于异构系统的自动驾驶计算平台,提供强大的计算能力。

当前,Apollo开放了六类训练数据,如下:

1.2D红绿灯,用来识别交叉路口红绿灯数据,可以用来训练、测试和验证。
2.2D障碍物,比如汽车、行人、自行车,还要其他未知类别的图像数据。
3.3D障碍物,其实是激光雷达点云。
4.端到端的数据,提供适合end-to-end模块的数据。
5.场景解析,像素级的语义标注,比如车辆、背景、交通标识牌、障碍物,可以用来做整体环境识别。
6.障碍物预测,用来训练预测算法数据集。

最后的最后,我们再来回顾以下开发流程。

作为一个开发者,开发流程从本地开始,本地开发之后通过Docker镜像传到云端。然后再云端的计算环境中,通过调度云端的计算资源去训练算法,通过数据接口层调用六大数据进行训练。

之后通数据验证算法的效果。依次不断迭代,直接再云端完成算法训练,提升整体效率,如下所示:


本次进阶课程到此就告一段落了,下次我会 分享我的学习心得,和更进一步的研究成果。谢谢大家。