原文链接;进阶课程㊸丨Apollo实战——障碍物感知和路径规划能力实战
环境感知在自动驾驶汽车应用中占据了核心地位。一辆车要实现自动驾驶,障碍物感知是最基础也是最核心的功能。
上周阿波君为大家详细介绍了「进阶课程㊷丨Apollo实战——车辆与循迹驾驶能力实战」。
此课程主要介绍了在搭建完自动驾驶车辆的软、硬件环境以后,通常采用循迹测试进行验证,以及进行验证的步骤有:第一步是要实现一个适配层;第二步是Can卡的管理;第三步是控制模块。
本周阿波君将继续与大家分享Apollo实战——障碍物感知和路径规划能力实战的相关课程(本节课程基于Apollo 3.0版本)。下面,我们一起进入进阶课程第43期。
相比于最基本的Apollo 1.0版本,Apollo 2.0版增加的主要功能模块是感知和规划。首先,我们回顾Apollo的感知模块。每种传感器都有自己的优势和劣势,如图1所示。从图中可以看出没有一种设备可以满足所有的场景,只有将各种设备融合在一起才能达到相对稳定感知结果。也就是从Apollo 2.0开始,我们开始使用多传感器融合的方式做感知。多传感器融合需要对不同的传感器进行标定。
图1 Apollo中感知模块涉及传感器的属性列表
感知的核心功能是进行障碍物的识别、分类、语义分析和障碍跟踪,如图2所示。
图2 感知模块的主要功能
规划的目的是告诉车辆按一条什么样的路经行驶,其代码逻辑如图3所示。顶层左边部分是规划的容器。它有几个核心元素:参考线、高精地图、规划器Planner、轨迹发布。
图3 规划模块的逻辑结构
在根据教程搭建了具备感知和规划能力的平台之后,开发者更希望根据自己的场景进行深度定制。为加速研发过程,百度提出了“云+端”的研发迭代模式,所谓的“云”大家都能理解, “端”指的是车辆端,如图4所示。
图4 百度提供的云+端的研发迭代环境
大概的流程是首先从车辆路测中积累海量的数据,将积累的数据传递到云端,然后利用云端服务器集群的强大计算能力去生成深度学习模型,并在云端做回归测试。最后将经过验证的模型更新到车辆上,赋予它新的迭代能力。
一般来说,我们将数据分为几类,如图5所示。
图5 自动驾驶数据分类
原始数据,各种传感器、车辆、驾驶员行为等。数据种类繁多,维度不同,数据量大,而且大多是非结构化数据,对于存储、传输、处理提出非常大的挑战。
标注数据,视觉的2D障碍物数据、红绿灯数据、3D点云数据等。
逻辑数据,包括完美感知、环境的抽象以及车辆动力学模型等。
仿真数据,包括参数模糊化数据、三维重建数据等。
Apollo建立了一个数据平台,对数据的采集、存储、使用进行管理,其基本功能如图6所示。
图6 Apollo的数据管理平台
首先我们通过data recorder工具按预先定义的格式生成数据,利用云端的传输机制将数据快速传递到云端。其次,我们构建了一个自动驾驶数据仓库,将海量数据成体系地组织在一起,可以快速搜索,灵活使用。最后,云端拥有基于异构系统的自动驾驶的计算平台,提供强大的计算能力。
当前,Apollo开放了六类训练数据,如图7所示。
图7 Apollo开放的数据
2D红绿灯,用来识别交叉路口红绿灯数据,可以用做训练、测试和验证。
2D障碍物,比如车辆、行人、自行车,还有其他未知类别的图像数据。
3D障碍物,其实是激光雷达点云。
端到端的数据,提供适合end-to-end模块的数据。
场景解析,像素级的语义标注,比如车辆、背景、交通指示牌、障碍物等,可以用来做整体环境的识别。
障碍物预测,用来训练预测算法的数据集。
此外,Apollo还发布了一个叫Apollo Scape的学术性项目。Apollo Scape开放的数据在量级、复杂程度和精度方面都比业界有名的Kitty、citi scapes大一个数量级,目的是推动整个自动驾驶行业的发展,如图8所示。
图8 Apollo scape项目
Apollo在云端提供了与车端一致的硬件计算能力,如图9所示。该计算平台基于Docker和GPU的集群构建,并且部署了PaddlePaddle、TensorFlow、 Caffe 等主流深度学习框架。此外,还有一个可视化展现平台,供大家了解结果。
图9 Apollo训练平台
最后我们再来回归一下开发的流程。
作为一个开发者,开发流程从本地开始,本地开发之后可以通过Docker镜像传到云端。然后在云端的计算环境中,通过调度云端的计算资源去训练算法,通过数据接口层调用六大类数据进行训练。
之后可以通过数据集验证算法的效果。依此不断迭代,直接在云端完成算法训练,提升整体的效率,如图10所示。
图10 基于云+端的迭代开发流程