首发 | Apollo“云+端”研发迭代新模式实战
上周,我们举办了一次课程直播《Apollo“云+端”研发迭代新模式实战》,着重为大家介绍了Apollo数据开放平台与训练平台实战,下面是此次课程的全部内容,错过直播的开发者可以通过此篇文章了解详细干货!
大家好,我是来自百度自动驾驶事业部的杨凡。这次公开课分享的主要内容包括几个部分。
首先我会对百度Apollo进行简要介绍;接着帮助大家了解本机演示方式的实战以及车辆与循迹自动驾驶能力的实战;之后是本次公开课的核心部分,障碍物识别和路径规划能力的实战。在此基础上,我们会介绍云端训练平台训练红绿灯感知能力,这是使用云端算法来加强自动驾驶能力的实战;最后简要介绍用云端仿真能力来完成验证实战。
在最开始,先向大家介绍一下百度做自动驾驶的背景:
百度总裁COO陆奇在开发者大会上讲的,相信不少朋友已经了解到了——百度已经是一家AI公司。我们可以看到科技大潮的演进,已经从命令行、客户服务器、互联网、移动互联网一路走来,进入了AI时代。
在百度AI开放生态战略中,体系分成云和端,支撑的云技术是智能云和百度大脑,而端的输出就是自动驾驶Apollo生态和唤醒外物的DuerOS生态。
Apollo生态是百度AI重要的、最先落地的生态之一。
Apollo作为百度推出的一个开放、完整、安全的自动驾驶平台。在Apollo中,首先,我们把多年积累的自动驾驶能力有序地开放出来;在这个基础上,我们会在生态中,与大家一起共享资源,另一方面开发者们也可以在这个平台上分享自己的资源,因为分享越多,收获也就越多。通过开放能力和共享资源的方式,可以有效加速自动驾驶整体性的创新,最后实现共赢。
开放的框架是学术界、科技界、产业界的共同需求,Apollo技术框架由4层构成,分别为:
· Reference Vehicle Platform
· Reference Hardware Platform
· Open Software Platform
· Cloud Service Platform
各层各模块的基本介绍:
具体来讲,首先我们需要一辆能够接收电子信号控制的车辆——线控车,我们会与很多车厂及Tier1共同推进这一层。
Reference Hardware层,想让车辆具备自动驾驶能力,我们需要计算单元、GPS/IMU、Camera、激光雷达、毫米波雷达、人际交互设备、BlackBox等硬件的支持。
开放软件层,分为三个子层:实时的操作系统、承载所有模块的框架层、RTOS。高精地图与定位告诉车辆身在何处,感知模块告知车辆周围环境,决策规划模块决定全局与细节规划。控制模块负责将决策规划产出的轨迹生成为具体的控制命令。
百度自动驾驶在云端有非常强的能力。高精地图在云端计算集群中生产,模拟驾驶的仿真服务也在云端,它加速了自动驾驶的研发效率。我们积累了大量的数据和对数据的理解,并且在云端数据平台中开放出来,使得数据研发的闭环可以在云端来完成。同时在云端还有我们的安全和OTA服务。
百度智能驾驶事业群组总经理李震宇提到,低成本低功耗一定是自动驾驶平台所追求的目标,但其实在从实验室走入量产产品这个过程中,安全最重要,百度首要解决的一定是安全问题。
Apollo 2.0新开放的模块包括了Security、Camera、Radar和Black Box,这意味着Apollo平台包括云端服务、服务平台、参考硬件平台以及参考车辆平台在内的四大模块已全部点亮。Apollo 2.0新开放的安全和OTA升级服务,只允许正确和被保护的数据进入车内,并进一步强化了自定位、感知、规划决策和云端方阵等能力。其中Black Box模块包括了软件和硬件系统,能够实现安全存储和大容量数据集传输,可以帮助我们及时发现异常情况,提升整个平台的安全可靠性。
硬件方面,增加两个前向摄像头(长焦+短焦)主要用于识别红绿灯,正前方保险杠上方新安装了毫米波雷达。所以很明显,在Apollo 2.0开放了Camera和Radar的模块后,整个平台更强调了传感器融合的能力,已进一步增加其对昼夜简单城市道路工况的适应能力。
https://v.qq.com/txp/iframe/player.html?vid=w0553n31obg&width=500&height=375&auto=0
(百度Apollo无人车在春晚)
就在刚刚过去的春节,熟悉自动驾驶的朋友很有可能已经注意到,春晚上在京港澳大桥上的那幕精彩的表演!实际上大桥有坡度,而且车辆非常密集,行驶方式更是非常特殊,其实这对自动驾驶来说是很高的挑战。
基于Apollo技术,我们高效地完成了春晚演出任务,给全国人们呈现了一幕科技与技术的设宴。通过完整的框架,开发者很快就可以开发迭代出具有特色的自动驾驶能力。
本机演示方式的实战
首先介绍一下Apollo的目录结构。
通过一目了然的目录我们可以看到一些功能模块,如Docs、Modules。这里挑几个重点介绍,Modules是整个Apollo所有模块的位置;Scripts包括一些常用的操作工具脚本;Third-party涉及到一些官方库,Tools则包含一些工具。
在Modules中,可以看到Apollo的各个主要模块。
Apollo采用base class和class factory架构,具有新模块、新功能的拓展能力。
Apollo主要模块间的关系如图所示。
首先,由HD-Map支持的Localization模块产生地图和定位信息,整个系统都以高精地图和定位信息为基础;
接着,感知模块完成障碍物和红绿灯的识别;
预测模块基于感知结果做障碍物的行为预测;
Planning模块根据障碍物预测的结果和Routing模块的信息做Trajectory决策规划;
Control模块根据Planning的结果通过Canbus模块控制车辆行驶。
Apollo系统是基于ROS平台的。ROS是大家在机器人领域非常熟悉的平台,我们达成了深入合作来降低开发者的门槛。ROS的特点主要包括完整的开发工具包,完整的计算调度模型,还有众多的调试工具及已有的软件系统等。为了增强ROS在自动驾驶方面的能力,Apollo做了多项定制优化,如果在真实车辆上测试自动驾驶,建议开发者使用Apollo平台提供的ROS版本。
ROS的通信是基于ROS Topic的,Apollo主要的ROS Topic如图所示。开发者可以使用ROS原生工具查看调试Apollo。
我们先演示一下没有实际的整车,也可以了解验证Apollo的离线演示方式。
Apollo的操作系统是Ubuntu 14.04.3(实际车辆,推荐更换Apollo内核);推荐开发者Fork并clone github.com/ApolloAuto/apollo,方便后续修改;并使用Apollo工具安装并进入Apollo Docker容器。
bash docker/scripts/install_docker.sh
# 退出并重新登录,这样可以非sudo运行Docker
docker ps # 确认Docker可以非sudo运行
bash docker/scripts/dev_start.sh –C #启动并使用中国镜像加速
bash docker/scripts/dev_into.sh
在Docker容器内编译并启动Demo:
rosbag play docs/demo_guide/demo.bag --loop
打开Chrome浏览器,在地址栏输入 localhost:8888 即可访问Apollo。至此,就可以在浏览器上看到Apollo的DreamView演示。
接下来我们介绍车辆与循迹驾驶能力实战,这个步骤可以验证线控车和软硬件集成的基础能力,也就是Apollo1.0的能力。如上图所示,车辆循迹主要依靠的就是定位能力和控制能力。
如我们Apollo架构中介绍的,最底层的是Apollo1.0的车辆平台,需要由车厂来完成线控改装。
在车辆平台上需要完成硬件设备的安装以及工控机配置,具体的安装方式可见Apollo的安装指南。
在车辆和硬件平台之上,Apollo提供相应的软件能力支持,比如制动、动力、转向控制以及一些信息交互。
开发者可以通过Vehicle接口来增加自己的车辆:
· 实现新车控制器
· 实现新消息管理器
· 在工厂类中注册新车
· 更新配置文件: canbus/conf/canbus_conf.pb.txt
可参考:
【https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_add_a_new_vehicle.md】
随后通过CAN Card接口增加车辆:
· 实现新CAN卡类CanClient
· 在工厂类CanClientFactory中注册新CAN卡
· 更新配置文件: canbus/proto/can_card_parameter.proto
然后通过Control Algorithm接口增加车辆:
· 创建一个控制器
· 在control_config文件,为新控制器添加配置
· 注册新控制器
在车辆的基础上,Apollo提供高精的定位能力,具体可以参考我们的论文和随后的课程,在此就不展开介绍了。
之后通过GPS Receiver接口增加车辆:
· 继承Parse类,实现新GPS接收机的数据解析
· 在Parse类为新GPS接收机增加新接口
· 在配置文件config.proto,增加新GPS接收机的数据格式
· 为data_parser.cpp中方法 create_parser,增加新接收机的实现逻辑
完成上述步骤后,就可以试着启动循迹自动驾驶了:
· 录制
在Quick Record下,单击Setup以启动所有模块并执行硬件运行状况检查。如果硬件健康检查通过,单击 Start 按钮开始记录驱动程序轨迹。到达目的地后,点击Stop 按钮停止录制。
· 执行
在Quick Play下,单击 Setup 启动所有模块并执行硬件运行状况检查。确保驾驶员准备好了! 点击 Start按钮开始自动驾驶。到达目的地后,点击 Stop 按钮停止重放录制的轨迹。
https://v.qq.com/txp/iframe/player.html?vid=a13361oyibf&width=500&height=375&auto=0
(Apollo 1.0演示)
在这一系列工作完成后,就完成了Apollo1.0的自动驾驶能力。可以看到,经过高精定位能力的输出,实际上循迹自动驾驶可以完成非常精准的动作,两车可以非常精准的交错行驶。
障碍物感知和路径规划能力实战
接下来,我们介绍感知和规划能力实战。通过加入Perception、Prediction、Planning模块的逻辑,Apollo车辆可以实现城市道路的自动驾驶能力。
Apollo支持多种传感器,Camera、Radar、LiDAR各有所长,分别有各自使用的场景,Apollo通过传感器融合架构实现较好的感知效果。
首先是关于摄像头、雷达和激光雷达的关系。每一种传感器的特性都既有长处也有短板。例如Camera对于障碍物分类有很好的表现,但如果想对障碍物速度做准确判断,其实是很困难的。
对于Radar来说,障碍物有很多距离以及速度,特别是在极端分析的情况下,它的穿透力会非常好,但对于障碍物的分类能力,Radar能力相对弱一些。
关于激光雷达,因为是通过主动发射能量,依靠回波来检测,所以对于判断障碍物的远近,例如暗光条件下障碍物的状态有非常大的好处。但在一些极远距离的探测上,可能表现也不是那么完美。
所以,我们要把所有这些传感器融合在一起,发挥各自检测所长。
为了有效使用多个传感器,我们需要对车辆上的传感器完成标定。因为我们在车辆安装时,很难把安装做到极精密,所以通过标定来了解安装的具体误差,然后计算来补偿。
对于感知模块,可以用在Object detection、Object classification、Semantic parsing、Object tracking中,我们在Apollo 1.5中开放了点云检测算法,在2.0中我们增加了视觉方案"红绿灯感知识别",能在距离路口100多米外识别红绿灯。
我们以3D障碍物检测为例,介绍感知的流程。
基于LiDAR的3D障碍物感知,其好处是可以不分昼夜并连续检测。我们在框架中使用深度学习,这样就可以很精准地识别一些传统规则并解决很多疑难问题;我们使用NVIDIA GPU,这样可以把巨大运算负载放在GPU上完成,从而高效率的进行感知处理。
为了识别一个障碍物,主要步骤是通过高精地图配置一个ROI过滤器,过滤出我们认为有效的的数据;接着把特征值计算出来,通过CNN来完成每个区域的Segmentation,这样就可以有效地识别出物体;再通过MinBox,完成障碍物边框的构建;最后,通过HM对象跟踪就可以感知到障碍物的轨迹,计算速度。
多传感器融合,依赖于Perception fusion DAG框架。如上图所示,通过构造算法subnode,并且通过DAG描述连接到一起,开发者就可以完成定制的多传感器感知和融合。
如图所示,Planning Structure由ReferenceLine、HD-Map 、EM Planner等几部分构成。其中Em Planner,主要分 Traffic Decider、DP Path、Path Decider、Speed Decider、QP Path和QP Speed 六部分。
通过DP路径算法,我们将求解过程离散化。
好处是受道路中心线影响低;成本函数形式不单一,适应复杂路况;天然适合并行化。解决了decision 的基于规则优化的痛点。
另一方面,这一步DP算法的结果,并不完美,不是最优解,衔接点处形式固定,虽然平滑但路线较为僵硬,复杂情况处理不够平滑。
如上图所示,通过一样的DP逻辑,我们可以完成s,t,坐标系下的DP规划。在此基础上,进一步做QP优化和迭代调整,就可以得到有效的Planning结果。
创建一个新的Planner,然后将新的Planner配置添加到modules/planning/conf/planning_config.pb.txt文件中,最后在Planning.cc中注册一个新的Planner。
智能自动驾驶汽车需要一颗聪明的车载大脑。我们在自己的研发中一路探索过来,智能汽车的“云+端”研发迭代新模式是我们对于加速自动驾驶汽车研发效率提出的解决办法。
我们在车辆上积累了海量的数据,把这些积累的数据用云端的服务器集群高效地生成人工智能的模型,也就是车辆大脑。把汽车大脑更新到车辆上,就为车辆赋予了自动驾驶的能力。
自动驾驶数据可以分为四大类:
自动驾驶车辆产生的数据首先是原始数据,主要是传感器数据、车辆自身数据和驾驶行为数据等。这些数据的特点是数据量极大、类型多样、以非结构化和半结构化数据为主,无论对于存储、传输,还是处理都构成了比较大的挑战。
为了在深度学习中使用数据,我们还需要大量标注数据。主要有红绿灯数据集、障碍物数据集(2D、3D)、语义分割数据集、自由空间数据集和行为预测数据集等。
为了刻画自动驾驶行为,我们还需要将数据抽象成逻辑数据。主要是完美感知数据、环境抽象数据、车辆动力学模型等。
最后,我们会用仿真构建仿真数据,主要是参数模糊化数据、三维重建数据、互动行为数据等。
数据平台是我们支撑智能汽车的“云+端”研发迭代新模式的核心平台。由数据采集与传输、自动驾驶数据仓库、自动驾驶计算平台三个部分构成。
首先是数据采集与传输部分。使用Data-Recorder会按Apollo数据规范产生完整的、精确记录的数据包,可以完成问题复现,同时也可以完成数据积累。通过传输接口,可以将数据高效地传输到运营点和云集群中。
接着是自动驾驶数据仓库部分,会将全部海量数据成体系地组织在一起,快速搜索,灵活使用,为数据流水线和各业务应用提供数据支撑。
最后是自动驾驶计算平台部分,基于云资源异构计算硬件提供超强算力,通过细粒度容器调度提供多种计算模型,来支撑起各业务应用,如训练平台、仿真平台、车辆标定平台等其他平台。
Apollo开放了6个标注数据集:
· 激光点云障碍物检测分类
提供三维点云标注数据,标注四类障碍物:行人、机动车、非机动车及其他,可用于障碍物检测和分类算法的研发和评测。
· 红绿灯检测
提供了常见的竖式红绿灯图像数据,采集时段为白天,采集天气覆盖晴天、阴天和雾天,分辨率为1080P。
· Road Hackers
本数据集有两种主要类型数据,街景图像和车辆运动状态。街景图像提供车前图像,车辆运动状态数据则包括车辆的当前速度和轨迹曲率。
· 基于图像的障碍物检测分类
数据采集涵盖城市道路和高速场景,由人工标注出四大类障碍物:机动车、非机动车、行人及静态障碍物,可用于视觉障碍物检测识别算法的研发和评测。
· 障碍物轨迹预测
采样数据来源于多源传感器的综合抽象特征,每组数据提供62维车辆和道路相关信息,可用于障碍物行为预测算法的研发和评测。
· 场景解析
数据包括了上万帧的高分辨率RGB视频和与其对应的逐像素语义标注,同时,提供了具有语义分割测量级别的稠密点云、紧急情况的立体视频以及立体全景图像。
此外,我们还开放了ApolloScape数据集,目前规划到20万帧级别,在3月8日已经开放了第一批,有8万帧的数据集,是用相机以及扫描的一个场景,而且还是用点集的标记。
ApolloScape对整个学术界都会有比较大的帮助,已经公开的数据中无论是数据本身还是质量都有一些特色。我们还跟会在近期发布一些,希望大家也能参与到整个算法中来。【数据集下载:请访问http://apolloscape.auto】
我们还通过Apollo训练平台为每一个数据集提供配套的计算能力。Apollo训练平台的特色是:
· 通过Docker+GPU集群,提供与车端一致的硬件计算能力。
· 集成多种框架,提供完整的深度学习解决方案。
· 通过交互式可视化结果分析,方便算法调试优化。
我们在自动驾驶的算法开发中,最大的痛点之一就是需要对海量数据集,反复尝试。我们通过将深度学习算法的研发流程(开发、训练、验证、调试)在云端实现,可以在充分利用云端大量计算资源的同时,将数据的流动仅在云端的服务器内完成,从而大幅提高算法研发效率。
具体来说,首先开发者在本地开发机中基于Docker开发算法,并部署依赖环境。接着将开发好的环境推到云端的私有Docker Repository中。
接下来在平台上挑选数据集,发起训练任务。Apollo训练平台的云计算调度就会将任务调度到计算集群上执行。这个过程中,在云集群的内部,开发者的程序使用数据获取接口,从而获得自动驾驶数据仓库中的数据集。
最终由业务管理框架将执行过程、评估的结果和Model返回给可视化平台,完成可视化的调试。
我们的Demo中提供了作者原本的Caffe版,以及Paddle版。
仿真验证实战
首先,可以看到仿真场景数据集。
仿真场景数据包括人工编辑以及真实采集的场景,覆盖多种路型、障碍物类型以及道路环境,同时开放云端仿真平台,支持算法模块在多场景中并发在线验证,加速算法迭代速度。
点击两个仿真数据集下的“立即使用”按钮,可以进入到仿真场景数据集详情页。
https://v.qq.com/txp/iframe/player.html?vid=c13362r8a46&width=500&height=375&auto=0
在打开的仿真平台中,可以以默认Apollo模块运行仿真场景,也可以提交自己的模块运行仿真场景。Apollo仿真的具体使用,会有单独分享,这里由于时间关系就不再具体展开了。
欢迎大家进一步关注官网 apollo.auto 和 GitHub 获取最新信息。也可以关注“Apollo 开发者社区”公众号,关注最新进展。谢谢大家!
以上就是本次直播课程分享的全内容,点击【阅读原文】可观看课程视频。此外,我们已将直播中大家的留言提问整理汇总,请关注近期的【Apollo直答号】获取回复,若还有其他相关问题,也可以在后台留言告诉我们。
后续我们会在Apollo开发者社群中分享更多课程内容,如果你还没有加入Apollo开发者社群,请在公众号右下角菜单栏-互动交流-交流社群中添加Apollo开发者社区小助手,带你找到组织!
点击阅读原文,看课程回放