原文链接:进阶课程㊶丨Apollo实战——本机演示实战
Apollo是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。
上周阿波君为大家详细介绍了「进阶课程㊵丨Azure仿真平台使用」。
此课程主要介绍了基于微软的一个仿真平台Azure,在该仿真平台运行自己的代码是不需要进行本地编译的,其使用流程有:首先是克隆Apollo在Github上的代码;然后在本地对相应的模块进行修改;最后在微软的Azure仿真平台选择目标场景对更新后的代码进行验证。
本周阿波君将继续与大家分享Apollo实战——本机演示实战的相关课程(本节课程基于Apollo 3.0版本)。下面,我们一起进入进阶课程第41期。
要使用Apollo进行实战,首先要对Apollo的代码结构有一个基本的认识。图1是Apollo项目的基本代码结构。包括Docker和Docs(主要放置一些文档)、Modules(核心模块算法都在该文件夹下)以及Scripts和Tools等。
图1 Apollo项目的代码结构
Modules下的文件目录结构如图2所示。
图2 Module文件夹目录结构
包括之前理论学习的Perception、Localization、Prediction 、高精地图等。Apollo是一个采用抽象类、工厂方法设计的高效易扩展的架构。小伙伴们可以根据自己的实际情况定制,快速搭建适应自己场景的自动驾驶能力。
图3是Apollo软件的架构图,也是核心的关系图。它的整个数据流转过程是:首先是通过高精地图和定位获得车辆周边的场景信息。然后通过感知模块侦测道路上的障碍物,即一些动态信息,比如旁边的车、行人、自行车等等。这些工作完成后将感知的信息传递给Prediction,预测感知障碍物的运行轨迹。最后将预测结果包装再传给Planning模块。Planning根据障碍物和周边静态的情况,比如有哪些车道可选,去规划路线。路线规划完成后,将生成的轨迹传到Control模块。Control模块通过Can总线协议跟车辆交互,例如应该打多大角度的方向盘,车辆现在的加速度是多少,当前是应该踩刹车还是继续跟车等。同时也会从Can总线协议层面了解到车辆本身的信息。
图3 Apollo各个模块之间的关系
从2.5版开始,我们引入了一些小的变更,其中一个是Relative Map逻辑单元。它的引入可以使得我们在一些可能并不需要高精地图的场景进行自动驾驶,包括早期车辆的Demo搭建等,使整个适配过程更加方便。
在3.0版本, 我们升级了系统里一些安全相关的模块,如图4所示,当发生紧急情况的时候可以直接利用熔断机制跳开PNC,直接对车辆下发刹车指令等。
图4 Apollo变更关系图
在介绍完整体的逻辑以及代码逻辑模块之后,接下来就是一步步的实战,图5是软件的安装流程。
图5 Apollo软件安装流程
自动驾驶的门槛比较高,要真正形成一个比较完备的闭环,还需要一辆车。要从事自动驾驶行业,就必须上手,要有实际的车辆,可以是小型实验用车或者真车。实车必须满足线控标准。图6列出了满足Apollo线控标准的车辆指标。
图6 满足Apollo要求的线控车辆指标