百度技术沙龙第84期 开源有道,Apollo 3.5自动驾驶平台技术全解读

4月27日,84期百度技术沙龙【开源有道,Apollo 3.5自动驾驶平台技术全解读】专场如期举行。

 

 

 

当天,外面虽然下着雨,但仍挡不住开发者对Apollo的热情,大家从各地赶来相聚在此。现场一位头发花白的老先生吸引了我们的目光。

 

 

在人山人海的现场,这位老先生的话让我们感慨万千。

 

当天,还有不少开发者把孩子带到了现场。屏幕中的无人车的身影映进了他们眼中的光里,深深地打动了我们。透过这一辈自动驾驶工程师们的“言传身教”,未来无人驾驶或将借由他们,真正地走进千家万户。

 

不论是耄耋之年情意满满的父爱,还是外傅之年切实的梦想。百度开发者中心始终为开发者提供平等便捷的路径,让他们更接近自己的目标。

 

或许此次百度技术沙龙的内容对于老先生来说难于理解,但是小编希望,这次活动可以让老先生载一车思念来,载一车亲情归。

 

正如Apollo 3.5,不断的迭代为陪伴更优秀的你。

 

 

一、陪伴是最长情的告白

 

“时间变了,地点变了,不变的是对Apollo的热爱。”

 

在活动开场,百度Apollo资深技术布道师胡旷这样感慨道。

 

从去年1月份到今天,Apollo 历经了2.0、3.0,再到 3.5 的升级。百度技术沙龙也伴随着 Apollo 走过了一个又一个的春秋冬夏。在这里,Apollo 发布了阿波龙自动接驳小巴,研发了低耗能、低成本的自动驾驶方案。

 

目前,Apollo 的合作伙伴已超过140+,社群服务的开发者超过1.5万名,遍布全球97个国家,开放了39万行的代码。

 

据悉,此次新发布的 Apollo 3.5 是首个能够应用于复杂城市交通环境的开源自动驾驶平台。加入了诸多新功能,能够应对城市驾驶环境。

 

升级主要体现在四大能力:1. 城市道路自动驾驶能力;2. 硬件平台的全新升级;3. 实时计算框架-Cyber RT; 4. 应用于智慧交通的V2X。

 

Apollo Cyber RT系统是 Apollo 开源软件平台层的一部分,作为运行时计算框架,处于实时操作系统 (RTOS) 和应用模块之间。 Apollo Cyber RT作为基础平台,支持流畅高效的运行所有应用模块。

 

Apollo Cyber RT 系统为技术开发者带来三大助益:

 

  • 加速自动驾驶技术的研发进程。

 

  • 提供更为便捷的部署体验。基于 Apollo Cyber RT 框架的自动驾驶技术方案在运行时具有更高的性能表现,无需大量复杂配置。

     

  • Apollo Cyber RT 系统是一个独立运行时框架,可以更加轻松构建自动驾驶技术方案。

 

▲Apollo 3.5 框架图

 

胡旷老师提到,在以往的自动驾驶场景中,Apollo 使用同一个配置来处理不同的用户场景问题。但面对复杂城市道路时,就会出现更多的用户场景。为了避免几个场景优化之间的矛盾,Apollo 3.5提出了基于 Scenario 的规划。

 

另外,在传感器套件方面,Apollo 3.5 可以覆盖120米以上的探测范围,其中包括128束高分辨率激光雷达、3个16束激光雷达覆盖盲区、前视及后视雷达扩展、10个车规摄像头保证360度环绕视野,以及双天线GNSS以保证静止模式下车辆的导航航向确认能力。

 

在车路协同技术方面,Apollo 3.5 首次推出搭载 V2X OBU(车联网车载单元)的车路协同技术,由硬件、软件和云共同实现。

 

最后,胡旷老师在分享中介绍,在3月底,Apollo 发布了自动驾驶开发套件,软硬车一体,帮助降低 Apollo 开放平台使用门槛,拓展自动驾驶场景应用。

 

二、只想用最简单的方式给你关怀

 

“简单而单一的开发环境,减轻底层细节负担。”

 

第二个Session由百度资深研发工程师何玮为大家详解Cyber RT——全球首个自动驾驶高性能开源计算框架的设计理念。

 

 

在分享中,何玮老师介绍了ROS(机器人操作系统)在实践中的挑战、Cyber RT的运行流程、从内核到用户空间、编排调度策略、经典调度策略以及Cyber RT框架等内容。

 

Cyber RT 处于Apollo 3.5 框架中的中间层,是操作系统和上层的一个算法模块的中间件,Cyber RT为给程序开发人员提供了一个简单而单一的开发环境,让算法工程师可以更加专注于在算法的研究而不需要关注底层操作系统的细节,从而大大减少工程师技术上的负担。

 

据何玮老师介绍,Cyber RT 包括如下软件模块,如下图所示: 

 

▲Cyber RT 框架图

 

最下面一层是基础库,为了高效,Cyber RT 实现了自己的基础库。比如实现了 Lock-Free 的对象池,实现了 Lock-Free 的队列,并且随着成熟,会陆续开放更多。除了框架自身外,将来也会逐渐应用于算法模块。

 

再往上是通信相关的,包括服务发现,还有 Publish-Subscribe 通信机制。

 

Cyber RT 也支持跨进程、跨机通信,上层业务逻辑无需关心,通信层会根据算法模块的部署,自动选择相应通信机制。 

 

通信层之上是数据缓存/融合层,多路传感器之间数据需要融合,而且算法可能需要缓存一定的数据。比如典型的仿真应用,不同算法模块之间需要有一个数据桥梁,数据层起到了这个模块间通信的桥梁的作用。

 

再往上是计算模型,计算模型包括调度和任务。

 

计算模型之上是为开发者提供的接口。Cyber RT为开发者提供了Component 类,开发者的算法业务模块只需要继承该类,实现其中的 Proc 接口即可。该接口类似于 ROS 中的 Callback,消息通过参数的方式传递,用户只要在Proc中实现算法、消息处理相关的逻辑。Cyber RT 也基于协程,为开发者提供了并行计算相关的接口。

 

除此之外,Cyber RT 也为开发者提供了开发调试、录制回放等工具,未来还会开放性能调试工具。

 

三、多一些感知,让我更了解你

 

“视觉、感知的融合,让决策控制更精准。”

 

熟悉 Apollo 的开发者都会注意到,在3.5的版本中,Apollo对感知模块进行了全面升级,不仅增加了盲区检测传感器以及雷达,还有用于盲区检测的传感器套件以及新的128线的激光雷达。

 

那么在第三部分的分享中,来自百度IDG主任研发架构师王亮,就基于Apollo 3.5的硬件平台,为开发者全面解读Apollo 3.5中的环境感知技术升级。

 

 

无人车环境感知系统主要解决包括障碍物检测,环境语义理解和三维建模等复杂问题。采用深度学习技术,通过数据采集标注、特征提取以及模型训练计算复杂环境中物体的位置、速度和类别等信息,帮助计算机精准的对无人车周边环境进行建模。

 

▲Apollo 3.5 感知模块系统框架图

 

Apollo障碍物感知系统分为信号预处理,视觉(2D)障碍物检测,激光点云(3D)障碍物检测和多传感器融合等主要模块。与之前的版本相比,全新的 Apollo 3.5全方位感知系统支持激光雷达,摄像头,毫米波雷达三种传感器间的信息融合。融合算法优化了整体感知效果的同时通过建立三层冗余提升了系统的安全性。

 

同样从安全角度出发,Apollo 3.5在车辆周边增加了低线数激光雷达专门覆盖盲区内的感知。此外,场景语义理解方面Apollo 3.5可支持多个交通信号灯的识别。

 

另外,王亮老师介绍称,Apollo3.5 的感知系统在仿真系统的助力下比之前版本测试的更为充分 —— 相较上一版本,驾驶环境模拟数量增加10倍,新添20项新功能。

 

Apollo项目组基于游戏引擎打造了一套全新仿真系统,允许在仿真环境中对场景进行3D建模和编辑,可根据测试需要定制化车流量、天气情况和驾驶场景等影响感知效果的关键因素,实现了感知系统在丰富场景变化下的仿真测试。

 

四、我想住进你的心里

 

“虽与之前的版本不兼容,但是我们用最简单的方法迁移进来。”

 

Apollo 3.5是一个全新的代码仓库,与之前的版本几乎不兼容,不能在原有代码的基础上更新,而必须重新从GitHub仓库重新下载代码。

 

来自CiDi 智驾平台总监,Apollo开发者社区荣誉布道师贺志国,就为大家介绍了Apollo项目代码迁移到Cyber RT框架的方法。

 

Apollo Cyber RT框架基于组件的概念构建、加载各功能模块。

 

Localization、 Perception、Prediction、Planning、Control等功能模块均作为Apollo Cyber RT框架的一个组件而存在,基于Cyber RT提供的调度程序Mainboard加载运行。

 

基于Apollo Cyber RT框架创建和发布新的功能模块组件,需执行以下五个基本步骤:

 

设置组件文件结构

 

基于路径

${APOLLO_HOME}/modules/planning(${APOLLO_HOME}

表示Apollo项目的根目录。

 

Docker外部为

/home/davidhopper/code/apollo

Docker内部全部为

/apollo

 

头文件:

planning_component.h

 

实现文件:

planning_component.cc

 

构建文件: 

BUILD

 

DAG配置文件: 

dag/planning.dag

 

Launch配置文件: 

launch/planning.launch

 

实现组件类

 

基于模板类Component派生出规划模块的组件类PlanningComponent;

在派生类PlanningComponent中重载虚函数Init()&Proc()函数;

使用宏 CYBER_REGISTER_COMPONENT(PlanningComponent)

注册组件类 PlanningComponent,以便Cyber RT能正确创建并加载该类对象。

 

提供构建文件

 

列出/apollo/modules/planning/BUILD文件中与Cyber RT相关的内容。可见基于planning_component_lib库,并最终生成一个共享库文件libplanning_component.so。

 

提供配置文件

 

DAG配置文件是Cyber RT调度程序,mainboard动态加载Planning模块的最终配置文件。

 

启动组件

 

基于Cyber RT接收消息分两种情形:

 

第一种是在虚函数PlanningComponent::Proc()中处理指定的消息类型。这类消息是周期性触发,但最多只能接收4种(因为cyber::Component的模板参数最多只有4个),一般用于模块主要输入消息的接收。

 

第二种是直接创建消息接收器。一般用于接收非周期性消息或模块的次要输入消息。

 

在完成创建发布器对象和填充消息两步后,即可发布消息。

 

五、从零到一,你走过的路我也想走一次

 

“Apollo自动驾驶开发套件将助力更多开发者实现自己的自动驾驶梦。”

 

百度Apollo自动驾驶开发套件是全球首款自动驾驶开发套件,也是国内首个适配Apollo整套硬件传感器的自动驾驶硬件集成平台,结合百度Apollo的自动驾驶框架和软件算法模块,为自动驾驶开发者提供一套包括“硬件+软件算法”在内的一体化解决方案。

 

来自百度IDG战略运营部Apollo产品设计师朱鑫,为大家分享了Apollo自动驾驶套件的设计理念,希望开发者能从中挖掘属于自己的自动驾驶应用。

 

 

Apollo自动驾驶开发套件由“纯电无人线控底盘+高扩展性硬件结构平台+多传感器套件”组成,整车长1.7米,宽0.86米,高0.99米。全车质量在200KG左右,续航最高可达60公里,巡航速度最高可达20KM/h。

 

 

据朱鑫介绍,该车适配Apollo的整套硬件传感器集成方案,能满足市面上绝大多数自动驾驶工况的算法研发验证。本次推出的选型是开发者套件的选型之一,未来还可以扩展更多选型。该开发套件具有纯线控底盘、高扩展硬件结构平台、搭配多传感器套件以及多冗余安全机制设计等优势。

 

Apollo自动驾驶开发套件还将提供使用手册以及丰富的开源文档、教材、课程等资源,帮助开发者更清楚了解到百度Apollo技术背后的运行机制,助力开发者自动驾驶研发从0到1,持续成长。

 

看着你长大,陪着你成长

 

不论是情意满满的父爱,还是干货满满的内容,小编相信此次百度技术沙龙都带给了开发者不一样的体验。

 

正如百度开发者中心的宗旨,坚持做一个有温度、以内容为主、汇聚干货的技术社区

 

同时,我们希望更多优秀的开发者可以加入到社区中,与百度开发者中心一起,不断进步与成长。

收藏 评论(4)
分享到:
共4条回复 最后由乐观的徐小小 回复于2019-09-02 00:55
#2 代开深圳票 回复于2019-08-02

棒棒哒

0
#3 Q1058204131 回复于2019-08-04

棒棒哒

0
#4 筱Myselfkv 回复于2019-08-04

棒棒哒

0
#5 乐观的徐小小 回复于2019-09-02

棒棒哒

0