赞
踩
阿波罗是一种高性能、灵活的架构,可加速自动驾驶汽车的开发、测试和部署。官网在此
华为 vs 百度
2017年7月Apollo 1.0 循迹自动驾驶发布
架构如下:
车辆参考平台(Reference Vehicle Platform)
最底下一层是线控车辆平台,执行Apollo无人驾驶平台生成的车辆控制指令,可以实现实现电子化的控制,也就是线控汽车
那么,什么是线控车辆呢?
那么,什么是Reference呢?Reference的含义是:我提供了一个Specific的东西,但是你可以根据我这个Specific的东西来创建你自己的Specific的东西。
那么对于Reference VehiclePlatform来说,这个特定东西是什么呢?
参考硬件平台(Reference Hardware Platform)
这一层主要包含计算机硬件和传感器
当然这些都可以买,百度唯一可以做的工作就是像Reference Vehicle Platform层一样,写个软件把这些数据采集进来。
软件开放平台(Open Software Platform)
这一层是核心,也是Apollo要开源的东西
开放式软件平台以RTOS(实时操作系统)为基础,在其上搭建运行框架(runtime framework)和应用层。
这个框架又叫AUTOSAR架构。AUTOSAR是Automotive Open System Architecture(汽车开放系统架构)的首字母缩写,是一家致力于制定汽车电子软件标准的联盟,基于汽车开发的Apollo系统自然得符合这一标准。而这一标准的目标便是:
- RTOS
我们来看一看Apollo 使用的RTOS是如何构成的。
- runtime framework
运行时框架为操作系统提供运行环境,简单点说就是底层操作系统发出的指令如何传达到应用层,这时候就需要RTE层帮忙传输,他就像个传达室的师傅,把信息传递到位。这个职责看着简单,实则非常复杂,毕竟自动驾驶汽车传递的信号千千万,其中一个都不能岔了,一个都不能传错,当系统复杂度上升到一定数量级之后,再简单的工作也不再简单。故而百度仍旧为稳妥起见采用业界最常用的机器人操作系统(ROS)来承担这一传递信息的重任。视频中为此还特意解释道:“虽然ROS是一个操作系统,但在这里它被用作在Apollo RTOS 上运行的软件框架”。ROS在机器人界非常出名,几乎每一款机器人的开发都会用到这个操作系统或是在此基础上衍生出来的版本。
ROS最大的特点便是按功能划分模块。每个模块都会有输入的数据流、如何处理数据以及输出的数据流,在编写代码时,便可按照功能划分模块,例如定位就会作为一个模块,其下还包含了定位的数据处理、数据融合、更新迭代等多个类,非常便于捋清整体逻辑,从而构建起庞大的代码架构。但是由于这些模块相互独立,因此只能通过RTE这个框架来进行通信。当然,没有任何一种系统能够完全适合新开发的Apollo项目,因此百度在此基础上又进行了一通捣鼓:改进共享内存的功能和性能、去中心化和数据兼容,这个修改后的代码叫做Apollo-platform。
- 共享内存
共享内存降低了需要访问不同模块时的数据复制需求,对于一对多的传输方案,共享内存支持“一次写入 多次读取”的模式,例如我们只收到了一帧的点云,这些点云可以同时运行障碍物检测、定位和GUI工具,而需要点云数据的模块自行读取即可。这一点也非常像MQTT这种发布-订阅模式的协议,一方在一个主题内发送消息,需要该消息的角色订阅该主题即可。
- 去中心化
去中心化解决了单点故障的问题。ROS1.0由许多的节点组成的,每个节点都有对应的功能,例如一个节点可以负责收集摄像头的图像、另一个节点可能负责路径规划,而第三个节点可以负责将控制命令发送到CAN总线上等。但是存在一个问题,上述的节点在ROS中,都需要由单个ROS主节点来控制,问题显而易见,如果这个主节点挂了,那么和他相关的所有节点都无法工作了。
为了避免这种问题,Apollo将所有的节点放在一个公共域中,域中每一个节点都有关于这个域中其他节点的信息,因此就消除了单点故障的风险。如下图所示:
- 数据兼容
- 应用层
应用程序主要包括了定位、控制、HMI等应用。每个模块都有自己的算法库,他们之间的联系也错综复杂。
云端服务平台(Cloud Service Platform)
- 数据平台(Data Platform)
我们知道数据对于无人车而言是非常重要的,Apollo的数据平台提供了非常丰富的数据。仿真场景的数据有两个不同的来源,分别是记录场景和虚拟场景:
除此之外,为了训练像深度学习网络那样的机器学习模型,Apollo 数据平台还提供了带标签的注释数据
目录
从上图中我们可以看出,我们最感兴趣的部分都在modules中:
2017年9月发布了Apollo 1.5 固定车道自动驾驶。
架构如下,黄色模块是升级或者添加:
可以看到它做了如下改变
参考硬件平台(Reference Hardware Platform)
软件开放平台(Open Software Platform)
云端服务平台(Cloud Service Platform)
添加了高精度地图、仿真环境
- HD Map:高精度地图
- 仿真环境
架构如下,红色模块是升级或者添加:
架构如下
架构分析
架构分析:还是基于经典的四层架构。Apollo 3.5对四大核心能力进行了升级。
车辆认证平台
线控车辆是做自动驾驶的第一道门槛。Apollo 3.5的开放车辆认证平台其实就是降低大家的第一道门槛:
硬件开发平台
在Apollo 3.5中,硬件开发平台整体传感器套件变化非常大。
在Apollo 3.0的传感器套件方案中,车的顶部是64线主感知雷达,还有前方的一个毫米波雷达以及三个摄像头,还有GPS、IMU惯导系统。
Apollo 3.5的变化非常之大。首先主感知激光雷达从64线升级到了128线,同时还增加了三个16线激光雷达,分别布置在车辆的正前方,以及车后部两侧,毫米波雷达也从之前的正前方的一个变成现在两个,分别是正前方一个,车后部一个,这也是为了支持倒车的场景。摄像头现在也是做环式,增加到10个。
另外新增了很多的适配硬件,大家可以根据自己的场景做更深入的适配,而且还包括一些符合车规级的感知设备,主要是为将来的量产做准备。
软件开放平台
包括规划、感知模块、Cyber RT等
(1)基于场景的规划:
(2)多视觉感知
(3)Cyber RT
Cyber RT是系统应用层和操作系统层的一个中间件, Apollo之前是使用ROS,为什么Apollo 3.5要替换成Cyber RT呢?
大家都知道ROS是基于在机器人行业用得非常的广泛的实时通信系统,但是把它用在自动驾驶场景里会面临很多的挑战。
使用Cyber RT有以下优势:
Cyber中通过Components来封装每个算法模块,通过有向无环图(DAG)来描述Components之间的逻辑关系。对于每个算法模块,也有其优先级、运行时间、使用资源等方面的配置。系统启动时,结合DAG、调度配置等,创建相应的任务,从框架内部来讲,就是协程,调度器把任务放到各个Processor的队列中。然后,由Sensor输入的数据,驱动整个系统运转。
(4)基于智慧交通的V2X
Apollo 6.0在功能上主要有5个方面的升级。
集成了无人驾驶的相关内容
对系统进行了升级
自动驾驶开放平台作为百度多元汽车机器人落地的重要支撑,本次升级发布的Apollo7.0实现了从代码到工具、从开源平台到工具化平台的里程碑式完整进化。在云端服务、开源软件、硬件开发、车辆认证四大开源平台基础上,Apollo 7.0提供了包括一站式实践云平台Apollo Studio、业内领先仿真服务、高效新模型在内的一系列升级,不仅代码全能力开放,更能提供自动驾驶全栈工具链,更易用、更领先、更高效的帮助开发者运用平台能力。
代码结构
软件开放平台(Open Software Platform)在此, 包括下面几个东西
(1)apollo-kernel是个什么?
(2)apollo-platform干了啥?
(3)Apollo里有什么
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。