基于Apollo分布式可扩展平台的自动驾驶设计

发布者:温柔心情最新更新时间:2018-04-26 来源: Apollo开发者社区关键字:汽车电子  自动驾驶 手机看文章 扫描二维码
随时随地手机看文章

长沙智能驾驶研究院产品研发总监 黄英君

Apollo集中运行感知、决策、控制模块,对资源、实时性、可靠性需求是不同的,对计算平台、操作系统、运行环境的要求也各不相同。黄英君将这些模块进行解耦,分布式集成运行在不同的计算平台和操作系统上,即在一个高可靠的双机备份低成本平台上运行决策与控制模块,在多个低成本高性能技术平台上运行感知模块,实现一个分布式可扩展的解决方案。

以前要搭建Apollo开发平台的初期投入不菲,至少需要几万元。根据他提供的低成本方案,只需5000元左右(最新的价格是教育机构299美元),就能搭建起Apollo的开发平台,大大降低了自动驾驶开发的门槛。(提示:目前还只是能够部署,让Apollo的所有模块跑起来,还无法做到很流畅的实时的跑,这里有待大家一起去努力完善)。

以下是分享的全部内容。

作为一名普通的开发者,我在接触Apollo几个月的时间里,一直把Apollo作为学习的平台和工具。

首先Apollo代码更新很快,但是最近一次大规模的更新是在3月25日左右,后面几天发现有十几个到二十几个文件在更新---建议大家每天早上上班之后先查看GitHub一下。

第一个值得关注的文件是perception_lowcost.sh,这个名字非常有意思,脚本内容如下:

1
run perception "$@"--flagfile=modules/perception/conf/perception_lowcost.conf

这个加载了一个配置文件,打开后发现:

1234567
#Camera node subnodes {     id: 3     name: "CameraProcessSubnode"     reserve: "device_id:camera;"     type: SUBNODE_IN  }

上面这个subnode是新增加的摄像机节点;原来的配置文件中的两个信号灯摄像机节点、激光雷达节点都没有出现:

12345678910111213141516171819
 #TrafficLight Preprocess node.subnodes {    id: 41    name: "TLPreprocessorSubnode"    type: SUBNODE_IN } #TrafficLight process node.subnodes {    id: 42    name: "TLProcSubnode"    type: SUBNODE_OUT } #64-Lidar Input nodes.subnodes {    id: 1    name: "LidarProcessSubnode"    reserve: "device_id:velodyne64;"    type: SUBNODE_IN }

关于这几个摄像机,我们可以在驱动目录里面查看更详细的信息:

2.0版本有两个摄像机。打开目录:pollo\modules\drivers\usb_cam\launch的start_leopard.launch文件,定义了三个摄像机。

123

前两个是用来针对交通信号灯的,第三个针对障碍物,推测这个摄像机就是用来检测障碍物的。

打开源码perception目录,有一个camera目录,这个目录变化最大,也是开放代码量最多的一个目录,增加了车道线功能。我们是不是就可以得出结论,第三个摄像机将是执行障碍物检测和车道线检测。

综上所述,最新版本的Apollo,特别强调低成本,具体的方式是在高速场景下弱化了弱化了激光雷达和两个信号灯检测摄像机,增加了一个摄像机,专门执行障碍物检测和车道线检测。这个变化跨度非常大,一个激光雷达的价格就是70多万(64线),可以说是非常大的一个跨越。

另外说一句题外话,Apollo这个代码写的特别好,写代码的是很资深的架构师,所以Apollo这套代码有非常浓重的谷歌风格,并使用了大量的谷歌系工具,看它的架构非常舒服的,可以作为一个经典的大型c++工程demo,来学习他的c++编程和大型项目的构建。为什么考虑对Apollo进行分布式扩展?

为什么考虑对Apollo进行分布式扩展?

为什么考虑对Apollo进行分布式扩展?因为去年9月份我安排一个实习生,他开始做了几天,就说目录挺多,但是总装不上。后来我发现坑越来越多,问题越来越多。

去年9月份我们订购了PX2,但却缺货。后来代理商把他们自己的一块给我们用了,左边是Apollo推荐的计算平台,是台湾一家公司的,这个工控机非常小巧和紧凑,它的散热做得非常好,但是价格还是有点贵,而且订货周期比较长,还有就是PX2价格是十万。

上图是TX2,256个GPU核,一般性能好的计算机的开发环境对程序员非常友好,东西全,资料非常多,很快上手。最重要的是TX2非常便宜,教育用户版不到三百美元,可以用它做台式机做不了的事情,供应充足,我们公司用TX2做了非常漂亮紧凑的车载盒子。

其他还有一些性能、定位差不多的芯片,比如NXP,它在车企用的非常多,可靠性、安全性都很好。现在新推出的i.MX8性能稳定,是六核的架构,带GPU,但也有供货问题。它在车载和智能仪表领域的占有率非常高。

另一个是Renesas,一家汽车电子老牌厂家,在自动驾驶计算平台占有一席之地。

为什么我要把它做成分布式的?分布式部署真正是由功能和性能决定的。我们把自动驾驶模块划分一下,有两种分法。一种是Apollo分法,分成四个模块:感知、规划、决策和控制,另一种从性能区分,Sensor、Planning和Action。

现在智能驾驶计算平台的现状如何呢?目前没有一个芯片、计算平台、操作系统能够同时满足上述4个指标。

我们让控制模块跑在可靠的、安全的芯片上,但是满足了安全条件,计算力就跟不上了。感知模块要求强大的计算力,但是这种情况下再做安全,可能成本无法承受。所以最好的办法就是让合适的芯片运行合适的模块,让合适的操作系统来承载合适的模块。

我们把Apollo的四个模块拆分开,感知模块可以跑在高性能的感知平台上,控制模块可以跑在高可靠性的操作系统上。

我们提出一个构想,把控制模块跑在高可靠性的芯片上,感知模块用低成本的处理器。即使一台车要接十二个摄像机,一块芯片不能用了,感知部分摄像机宕掉,问题也不大,车还在控制中。但是控制模块出现问题就不行了。

我们增加了TX2对Docker的支持,使用JetPack3.1刷机。内核缺少containers运行所需的支持,这是我们定制刷新内核的文件,这些都是在网上公开的。编译之后更新,然后重启,重启以后只要带container就说明这个内核已经可以安装到Apollo上了。

增加TX2对Docker的支持

Docker onTegra本身有下面的问题:

• TX-2 or other Tegra devices 不支持nvidia-docker

•  使用JetPack3.1刷机,内核缺少containers 运行所需的支持

•  JetPack3.2解决了这个问题(我还没验证)

•  nvidia-docker wrapper在TX2上不能正常运行,无法获取GPU设备

解决方法是:

•  定制内核,增加对containers 的支持

•  传递所需的参数给Docker,使之能够获取GPU设备

通过如上面几幅图中所述,增加TX2对docker的支持、定制内核配置文件、编译内核、修改Apollo docker脚本后,Apollo docker中可以运行cuda程序了。

编译Apollo

接下来编译Apollo:

•  构建缺少的依赖库:caffe(GPU版),vtk,需要自己写build文件,修改workspace配置文件;

•  重新编译arm版本的依赖库:QPSASES,IPopt,libfastcdr,libfastrtps;

•  重新编译版本不一致的依赖库:glog,gflags,protobuf;

•  修改Apollo中某些不兼容的代码;

感知模块Trafficlight中,caffe只提供了X86平台动态库,X86架构下SSE系列,arm平台无法使用,要么改写,要么直接跳过。

在Apollo中构建tensorRT 开发环境

在Apollo中构建tensorRT,存在以下问题:

•  docker内缺少一系列的库;

•  缺少tx2相机驱动;

•  需要使用tegra定制的libGL.so;

•  libgbm版本不匹配;

•  摄像机守护进程在主机端,docker内无法驱动;

解决办法如下:

1、用挂载或者copy的形式准备好所需的动态库,接近100多个;

12345678
cp host /var/nvidia/nvcam/settings -> dockercp host /var/nvidia/nvcam/input -> docker-v/usr/lib/aarch64-linux-gnu:/usr/lib/aarch64-linux-gnu:ro  \-v/usr/lib/aarch64-linux-gnu/gstreamer-1.0:/usr/lib/aarch64-linux-gnu/gstreamer-1.0:ro  \-v/usr/lib/aarch64-linux-gnu/tegra-egl:/usr/lib/aarch64-linux-gnu/tegra-egl:ro    \-v/usr/lib/aarch64-linux-gnu/mesa-egl:/usr/lib/aarch64-linux-gnu/mesa-egl:ro     \-v/run:/run:rw     \-v/lib/firmware/tegra18x:/lib/firmware/tegra18x:ro        \

2、使用libdrm-2.4.80以上版本重新编译;

3、为tegra版本libGL.so建立软连接;

4、修改主机配置,让摄像机守护进程在docker内启动;

  

构建tensorRT完成后,就可以在Apollo Docker中运行tensorRT,实现12-14帧的多目标检测。

目前成果和后续工作

为大家说一下我们的阶段性成果,目前已发布部分资源供测试:

•   Apollo docker on TX-2的完整镜像;

•   使用不同操作系统重刷Jetpack时会遇到编译错,这里提供完整的内核源码,无需自行下载并执行xconfig;

•   一些需要在arm下单独编译的库;

•   修改的Apollo的docker脚本文件;

•   基于Bazel构建的cuda应用程序开发模板

后续我们将做的工作有:

  • 解决ROS跨版本通信问题

  • 全面使用Nvidia Visionworks对图像操作进行改写

  • 使用TensorRT对深度学习相关的功能模块进行inference优化

  • 对其他车载计算平台的测试和验证

  • 针对QNX的移植适配工作

  • 车载嵌入式设备的封装

到2018年5月份,我们会提出专门针对ADAS的QNX开发包。如果说可以解决ROS跨版本通信的问题,那么我们把Apollo往QNX发展是可行的。

关键字:汽车电子  自动驾驶 引用地址:基于Apollo分布式可扩展平台的自动驾驶设计

上一篇:2020年智能汽车及硬件芯片走势及市场分析
下一篇:自动驾驶迎来它的黄金时代_制造一台激光雷达仅用8分钟

推荐阅读最新更新时间:2024-11-14 20:37

铂傲推出扬声器方向盘概念 当汽车自动驾驶时方向盘变为娱乐设备
在未来,汽车更多的用于乘坐,而不是驾驶,而丹麦铂傲音响(Bang & Olufsen)则可让您鱼与熊掌兼得。据外媒报道,Alexandre Picard设计了一款概念方向盘/扬声器,可用于由娱乐为主的未来汽车。该款扬声器的灵感来自于Beolab系列,促使Picard去思考B&O如何为其他室内应用设计扬声器。 Bang & Olufsen概念方向盘/扬声器(图片来源:yankodesign.com) Bang & Olufsen方向盘扬声器无疑是一款与众不同的产品,但是其也让该家音响巨头走上了一条全新的道路,巩固其在豪华汽车领域的地位。Picard的设计保留了方向盘原始的功能性,同时增加了标志的B&O音响触感。该款扬声器单
[汽车电子]
铂傲推出扬声器方向盘概念 当汽车<font color='red'>自动驾驶</font>时方向盘变为娱乐设备
小马智行设计新一代一体式自动驾驶系统,将搭载Luminar激光雷达
小马智行与激光雷达领域头部企业Luminar(纳斯达克股票代码:LAZR)联合发布全新自动驾驶传感系统。该系统使用360度全方位多传感器融合方案,使车辆在复杂城区路况运行时更安全、可靠。双方还将合作打造可量产的车规级传感器融合方案。 小马智行计划于2023年规模化量产车规级自动驾驶系统,届时将搭载Luminar的Iris激光雷达。这也是Luminar首次在中国选择与自动驾驶公司进行战略合作。 小马智行计划将新设计运用于未来量产系统和车队中。此次全新系统的发布正值小马智行全面扩大其自动驾驶出行服务(Robotaxi)规模之时——小马智行Robotaxi服务在中美五个主要城市进一步扩大覆盖范围,包括北京、广州、上海以及加州的尔
[汽车电子]
封闭公路 高通开始自动驾驶技术路测
日前,据外媒报道,美国905号加利福尼亚州州道的部分路段被封闭,高通公司要占用这段道路进行自动驾驶测试。加州交通局专门设立了绕路标示,提醒经过该区域内的驾驶员绕路行驶。 2019年2月,高通发布了智能网联汽车基准平台,希望能够为车辆提供新一代Wi-Fi 6车联网功能。此外,高通的骁龙平台还将为5G时代下智能网联汽车的发展提供助力,包括低延时千兆级别网速、高精度车道导航服务、C-V2X方案等,从而提升车辆及交通基础设施的安全性。 根据高通的战略规划,公司在汽车领域的三大发展方向是汽车与万物互联、变革驾驶员和乘客的用户体验以及为自动驾驶发展铺平道路。相关数据显示,从2019年开始,许多国内外汽车厂商都将逐步实现旗下车型
[汽车电子]
封闭公路 高通开始<font color='red'>自动驾驶</font>技术路测
搭载华为L4级ADS的奥迪车队已逐步规模化路测
华为宣布进军汽车产业已经有一段时间,进展也引人关注。目前华为发布的level 4级别的自动驾驶再一次展现了其技术团队的硬实力。 事件主体: 华为技术有限公司是一家生产销售通信设备的民营通信科技公司,于1987年正式注册成立,总部位于中国广东省深圳市龙岗区坂田华为基地。华为是全球领先的信息与通信技术(ICT)解决方案供应商,专注于ICT领域,坚持稳健经营、持续创新、开放合作,在电信运营商、企业、终端和云计算等领域构筑了端到端的解决方案优势,为运营商客户、企业客户和消费者提供有竞争力的ICT解决方案、产品和服务,并致力于实现未来信息社会、构建更美好的全联接世界。 在华为全联接大会上,华为向外界展示了一系列与汽车相关的技术解决方
[嵌入式]
英特尔联盟网罗飞雅特 自驾车布局增添生力军
   英特尔 (Intel)为了加快 自动驾驶 汽车的布局,现正扩大组成车商和零件供应商联盟,最近新增飞雅特克莱斯勒(FiatChrysler;FCA),对于强化自驾车技术发展,以及减轻开发成本有重大意义。据BusinessInsider报导, 英特尔 自驾车阵线目前包括BMW、DelphiAutomotive和Mobileye,未来目标是开发Level3和全自驾车平台,预定2021年供应全球汽车市场之用,时间与FCA推出自动车吻合,这可能是 英特尔 向FCA招手的原因之一。下面就随汽车电子小编一起来了解一下相关内容吧。   虽然英特尔联盟已经有BMW,但BMW专事生产高档车,2016年销售量200万辆,FCA则为470万辆。F
[汽车电子]
自动驾驶为什么要传感器标定车辆
自动驾驶为什么要传感器标定 传感器标定是自动驾驶感知&规划任务的基础。第一,各个传感器各自感知的结果需要统一到车体系融合表达,比如Mono3D感知的前方车辆和激光感知的前方车辆,都需要转换到车体系,才可以融合并输出给下游。第二,某些感知任务依赖传感器外参标定,比如视觉IPM变换,需要知道相机外参。第三,前融合任务,例如相机和激光前融合,也需要知道相机&激光的外参。所以传感器标定是一切感知任务的基础。 为什么传感器标定很重要 传感器标定的精度决定了感知性能。比如方向角偏了0.5度,100m测距横向就会偏差100*tan(0.5度) = 0.87m,接近1m,可能贴着车道行使的车辆会被误判为侵入车道,引起避让甚至急刹动作。再比如激
[嵌入式]
<font color='red'>自动驾驶</font>为什么要传感器标定车辆
新型探测器可实现NIR/SWIR双波段成像 可提高自动驾驶汽车性能
据外媒报道,德国于利希研究中心(Forschungszentrum Jülich)开发了新的探测器(传感器),可使近红外(NIR,750-1400 nm)和SWIR(短波红外,1400 - 2500 nm)范围的红外辐射可见,从而增强摄像头芯片、自动驾驶汽车和智能手机的性能,而且价格更便宜。而传统的光电二极管和可见光提供的可见性和细节识别性能有限,无法做到这一点。 (图片来源:www.laserfocusworld.com) 根据这项研究,该技术是一种双端双频探测器,“在两个不同的红外波段提供偏倚可切换的光谱响应。具体而言,该设备的光响应可通过在NIR波段和SWIR波段之间“颠倒偏压极性”来进行切换。 参与该项研究的
[汽车电子]
新型探测器可实现NIR/SWIR双波段成像 可提高<font color='red'>自动驾驶</font>汽车性能
以色列公司为奥迪A7推廉价版自动驾驶系统
    据国外媒体报道,以色列一家公司已经开发出相对较为廉价的无人驾驶系统,这或许能够让无人驾驶汽车比我们想象更早的出现在市场当中。     无人驾驶汽车有着大幅降低交通事故、每年在全球挽救数十万人性命的潜力。谷歌一直在努力让无人驾驶汽车成为现实,但是谷歌目前的无人驾驶汽车均装备着代价高昂的摄像头和传感器,这也让谷歌的无人驾驶汽车实现大规模量产几无可能。因为成本过高,此前曾有报道称无人驾驶汽车技术在2025年之前无法成为主流。     以色列公司Mobileye Vision科技公司(以下简称“Mobileye”)为奥迪A7开发出一款无人驾驶系统,这款系统仅需要添加“数百美元”的装备。Mobileye研发高级副总裁加布·海
[汽车电子]
小广播
热门活动
换一批
更多
最新汽车电子文章
更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved