综述文章::自动驾驶技术和机器人技术

综述文章::自动驾驶技术和机器人技术_第1张图片

 综述文章::自动驾驶技术和机器人技术_第2张图片

综述文章::自动驾驶技术和机器人技术_第3张图片

(41条消息) 无人驾驶技术架构—百度Apollo介绍_清平乐的技术专栏的博客-CSDN博客_百度apollo自动驾驶系统架构

综述文章::自动驾驶技术和机器人技术_第4张图片

三、开源软件架构

开源软件架构分为三层,分别为

1.RTOS:

        RTOS(实时操作系统):可确保在给定的时间内完成特定的任务。我们看下图这个例子:

        当传感器检测到自车前方的移动障碍物时,短时间内基于RTOS的软件模块,需要分析出障碍物是行人、车辆或其他的什么,预测该障碍物未来的运动方向和速度,以此确定自车是减速还是停止,然后,车辆需要按照上述决策执行对应的操作,在该过程中,实效性是系统稳定性和驾驶安全性的基础。 Appllo RTOS 是 Ubuntu Linux操作系统与Apollo内核相互结合的成果。
        什么是Ubuntu,这里对Ubuntu进行一定的解释。 Ubuntu是一个以桌面应用为主的Linux操作系统,它是业内顶级Linux发行版之一,也是最流行的操作系统,原始的Ubuntu系统其实并不是实时操作系统,百度通过加入Apollo设计的内核,使其成为RTOS。


2.运行框架

        运行框架是Apollo的操作系统,它是在ROS的基础上进行二次开发的版本。那什么是ROS呢,我们就来了解一下。

        ROS(Robot Operating System)是机器人操作系统,它提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等诸多功能。ROS遵守BSD开源许可协议。

        ROS在机器人行业有着悠久的历史,目前有三四千个基础库支持应用程序的快速开发,ROS根据功能将自治系统划分为多个模块,每个模块负责接收、处理和发布自己的消息,由于这些模块相互独立,只能通过运行时框架进行通信,因此调整任何单一模块都会很容易。这个其实很像微服务的概念,通过高内聚,低耦合的方式实现各个模块的稳定性。

        为了使ROS能更好的和无人驾驶相结合,百度Apollo团队改进了共享内存的功能和性能、去中心化和数据兼容性。
(1)共享内存
        共享内存降低了需要访问不同模块时的数据复制需求,对于一对多的传输方案,共享内存支持“一次写入 多次读取”的模式,例如我们只收到了一帧的点云,这些点云可以同时运行障碍物检测、定位和GUI工具,而需要点云数据的模块自行读取即可。这一点也非常像MQTT这种发布-订阅模式的协议,一方在一个主题内发送消息,需要该消息的角色订阅该主题即可。

这样做的最大好处就是可以更加高效的进行数据传输,增加了通信的速度。
(2)去中心化
        去中心化解决了单点故障的问题。我们先来看看现成的ROS是怎么样的。现成的ROS是由许多的节点组成的,每个节点都有对应的功能,例如一个节点可以负责收集摄像头的图像、另一个节点可能负责路径规划,而第三个节点可以负责将控制命令发送到CAN总线上等。但是存在一个问题,上述的节点在ROS中,都需要由单个ROS主节点来控制,问题显而易见,如果这个主节点挂了,那么和他相关的所有节点都无法工作了。

        为了避免这种问题,Apollo将所有的节点放在一个公共域中,域中每一个节点都有关于这个域中其他节点的信息,如下图所示:

通过这种去中心化的方案,公共域取代了原来的ROS主节点,因此就消除了单点故障的风险。
(3) 数据兼容
        对于无人驾驶来说,由于项目本身的规模很大,数据兼容性至关重要,不同的ROS节点通过名为ROS消息的接口语言相互通信,ROS消息需要使用通用接口语言,使每个节点都可以解读来自其他节点的消息数据,如果消息文件的格式发生了变化,与节点期望的格式稍有不同,则会通信失败,这就导致了严重的兼容性问题。我们举个例子,比如我们对一个接口进行升级升级,结果数据不通会导致系统奔溃,对此解决方法是我们通过一次又一次的数据转换来拼凑出合适的数据,并且还需要考虑之前所记录的测试数据需要适应新的消息格式,这种做法的弊端显而易见,这一定不是最优解。

        Apollo使用一种名为protobuf的接口语言来替代了原生ROS消息,Protobuf是一种结构化数据序列化方法,这对于开发用于通过电线彼此通信或用于存储数据的程序非常有用,它可以将新的字段添加到消息格式中而不会破坏向后兼容性,新的二进制文件可以在解析过程中接受旧的消息格式,这样说有些难以理解,我们来举个例子,比如我们约定好去上班签到需要提供姓名、时间,后来公司给每个人分配了工号,你每次签到都会报一次工号,对于签到这个行为而言并不会因为你多报了工号而导致无法完成签到,因为你虽然多报了工号,但是之前约定的姓名和时间依然是存在的,所以可以签到成功。

3 软件模块
        软件平台具有各种模块,这些模块包括MAP引擎、定位、感知、规划、控制、端到端驾驶以及人机接口,每个模块都有自己的算法库,且模块之间的关系非常复杂,这些模块我们后续会在单独的章节进行描述。
 

物体|双目_无人驾驶 | 自动驾驶技术和机器人技术的对比

 定位技术_无人车定位技术

流动站|车道_万字详解自动驾驶定位技术

你可能感兴趣的:(#,无人车,机器人:原理与综述,自动驾驶,机器人,人工智能)