无人驾驶技术架构—百度Apollo介绍

article/2025/8/20 12:00:03

今天我们以百度Apollo为例,讲讲无人驾驶的技术架构。通过本文的学习,希望大家可以初步建立起了对百度Apollo的架构的认知。

一、Apollo架构

先来看一张百度Apollo技术框架图:
在这里插入图片描述
可以看到该架构分为四层,其中除了Cloud Service Platform部分是运行在云端的,其他的都是车端的系统。

Open Software Platform

自动驾驶系统最为重要的软件层。这一层包含了最底层的RTOS(Real Time Operation System)和第二层的运行软件所需的框架环境(Runtime Framework),再到更上层的各个子模块(地图引擎、定位、感知、规划、控制、端到端、人机界面)。

Reference Hardware Platform

自动驾驶系统所依赖的硬件层。这里包含了控制器、GPS/IMU、HMI Device(其实就是显示器)、LiDAR、Camera、Radar、和Black Box等。

Drive-by-wire Vehicle

是线控的底层,不开放这个接口,就无法控制汽车。

下面我就对这几部分进行阐述。

二、参考硬件平台和车辆平台

我们想开发一辆无人车,我们首先需要一款可通过电子控制的车辆,这种类型的车辆具有特殊的名称,叫做线控驾驶车辆。在线控车中有一个非常重要的模块,它就是CAN总线,也就是控制器区域网络,它是车辆内部通信的网络。CAN和计算机是通过CAN卡进行连接的,计算机通过CAN线发送加速、制动和转向信号。除了线控车辆之外,我们还需要各种各样的传感器来作为无人车的一部分,我们来简单看一下:

•全球定位系统(GPS):通过绕地卫星确定定位
•惯性测量装置(IMU):通过速度、加速度、和其他一些因素判断车辆的运动和位置。
•激光雷达(LiDar):由一组脉冲激光器组成,雷达可以360度扫描车辆周围,根据激光反射形成一系列的点云。
•摄像头(Camera):通过捕获图像数据,再利用计算机视觉来进行提取信息,以此来了解自车周围的环境。摄像头可以感知颜色,这可以很好的检测车道线、红绿灯等一些信息。
•毫米波雷达(Radar):Radar也用于检测障碍物,Radar分辨率低,难以分辨出检测到了哪种障碍物,但是其经济实惠、适用于各种天气和照明条件等优势也让它能在无人驾驶中发挥很大的作用。

下图我们来展示在一辆线控汽车上安装的主要硬件:
在这里插入图片描述

三、开源软件架构

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

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引擎、定位、感知、规划、控制、端到端驾驶以及人机接口,每个模块都有自己的算法库,且模块之间的关系非常复杂,这些模块我们后续会在单独的章节进行描述。

四.云服务平台

Apollo云服务平台提供了高精度地图(HD Map)、仿真平台(Simulation)、数据平台(Data Platform)、Security(安全)、OTA(空中软件升级)及DuerOS(智能语音系统)等能力。可以看出,Apollo的云服务不仅提供了存储的功能,更重要的是它提供了很多有助于我们快速搭建无人驾驶系统的工具。我们这里重点介绍一些仿真和数据平台。

1.仿真环境

仿真环境平台是Apollo开放软件平台提供的非常重要的工具,该平台可以允许每个开发者出于自身的需求,来构建仿真环境。除此之外,该平台还有大量的驾驶数据,开发人员可以检验和验证无人驾驶软件系统。仿真环境可以使Apollo车辆不仅可以查看环境,还可以了解道路情况和场景。仿真环境平台支持开发者配置不同的驾驶场景,比如障碍物、路线和交通灯状态。执行模式为开发者提供了一个在多场景中运转的完整设置,在执行模式中,开发者可以在Apollo环境中上传和验证模块,当前的自动评分系统,从几个指标对场景进行评估,其中包括碰撞检测、交通灯识别、速度限制、障碍物检测和路线逻辑,最后,三维可视化可以去描述实时路况,在显示无人驾驶车状态的同时,使模块输出可视化。

2.数据平台

我们知道数据对于无人车而言是非常重要的,Apollo的数据平台提供了非常丰富的数据。仿真场景的数据有两个不同的来源,分别是记录场景和虚拟场景:

•记录场景:我们可以使用记录的场景数据来重放我们在实际道路测试中已经观察到的传感器的数据。
•虚拟场景:我们可以借助虚拟场景,使用虚拟编辑器创建新的驾驶场景,这有助于快速检验与验证算法。

除此之外,为了训练像深度学习网络那样的机器学习模型,Apollo 数据平台还提供了带标签的注释数据,例如下图所示的交通灯数据、带边界框的障碍物数据以及语义分割数据。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/ulnFr2UD.shtml

相关文章

无人驾驶关键技术

无人驾驶关键技术 1、前言 如果从谷歌无人车原型机开始算,无人驾驶概念从提出到逐步量产化,已经有11年了,中间经历过概念化、模式分级、技术路线图的百花齐放,核心零部件的量产化、无人驾驶平…

无人驾驶技术(交通标志识别)

国内开源数据集TT100K(安全标志数据集) TT100K数据集中提供了annotations。json标注文件,train文件夹里有3000多张图片,test文件夹中有3000多张图片。 无人驾驶技术一般分为自主式和网连化 **自主式:**通过搭载多种先进…

无人驾驶技术架构、方向及技能要求

目录 一 前言二 无人驾驶技术架构2.1 车辆认证平台2.2 开源硬件平台2.3 开源软件平台2.4 云端服务平台 三 无人驾驶软件技术方向四 无人驾驶软件技能要求 一 前言 之前研究过百度Apollo平台,个人认为其作为一个开源开放的智能驾驶平台很适合初学者学习&#xf…

无人驾驶技术

目录 1.什么是无人驾驶 2.无人驾驶技术的发展历史 3.无人驾驶技术给人类带来的福利 4.无人驾驶技术的潜在危害 5.无人驾驶技术未来的发展趋势 1.什么是无人驾驶 无人驾驶,又称自动驾驶或自动驾驶汽车,是指不需要人类驾驶员干预的汽车系统。它使用各种…

科技学习:第1篇 无人驾驶技术概述

科技学习:第1篇 无人驾驶技术概述 放眼全球,近年来,无人驾驶技术很火。Google、Tesla、Baidu争相研发无人驾驶汽车,该领域的市场潜力很大,是汽车产业未来的一个方向。无人驾驶技术值得我们深入研究学习、思考总结。今…

无人(自动)驾驶知识概述

概要:在学习或者接触自动驾驶相关技术之前,大家来一起了解无人驾驶车也就是自动驾驶车的相关概念和知识。 文章目录 前言一、什么是无人(自动)驾驶汽车?二、无人(自动)驾驶的等级分类三、无人&a…

无人驾驶汽车的相关技术,无人驾驶相关技术知识

无人驾驶涉及哪些技术 无人驾驶汽车依靠人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作,通过电脑实现无人驾驶,可以在没有任何人类主动的操作下,自动安全地操作机动车辆。 无人驾驶依赖几种先进技术,这些互为补充的…

无人驾驶技术简谈

文章目录 无人驾驶综述无人驾驶级别无人驾驶政策无人驾驶技术关键技术环境感知技术导航定位技术路径规划技术决策控制技术自动控制技术 关键技术点ADAS(高级驾驶员辅助系统)激光雷达毫米波雷达超声波雷达高清地图摄像头AUTOSAR其他 无人驾驶综述 (cheyun.com) 自动驾驶芯片&a…

分页存储存储管理方式详解

分页存储存储管理方式详解 离散分配方式分页储存管理方式页面与页表页面物理块逻辑地址结构页表快表(TLB,Translation Look aside Buffer) 一级页表的缺陷两级多级页表反置页表反置页表的提出基于反置页表的地址转换过程 相关例题: 笔法较为粗糙&#xf…

存储管理(6)

存储管理 1 程序的装入与链接 编译:源代码——目标代码 链接:目标代码所需库函数装入模块 装入:将装入模块装入内存,该过程也叫做地址重定位,也称地址映射 地址空间: 源程序经编译后得到的目标程序&…

存储管理——段式存储管理

一、基本思想 分段存储器的逻辑地址由两部分组成 段号:单元号 注:段号加单元号是用户自己设置,而页号加单元号由系统自己切割的。 段式存储管理基于可变分区存储管理实现,一个进程要占用多个分区。 硬件需要增加一组用户可见的段…

分区存储管理

分区存储管理是一种很早期的内存管理方案,其基本思想是将内存区域划分为多个区,给每个作业分配一个区使用,并且每个作业只能在被分配的区中运行。 按照划分方式不同,主要有三种不同的分区方式:固定分区,可变…

操作系统实验之存储管理

一、实验目的 1、了解虚拟存储技术的特点,掌握请求页式存储管理的主要页面置换算法原理。 2、掌握请求页式存储管理中页面置换算法的模拟设计方法。 3、通过随机产生页面访问序列开展有关算法的测试及性能比较。 二、实验内容 设计一个虚拟存储区和内存工作区&…

操作系统:9、存储管理之页式存储管理

操作系统:9、存储管理之页式存储管理 进程的存储管理页式存储管理段式存储管理段式存储和页式存储对比段页式存储管理 进程的存储管理 进程内存空间管理主要以下方三种进行: 页式存储管理段式存储管理段页式存储管理 三种方法本质上都是将进程的内存空…

段式存储管理

一、基本原理 前面介绍的各种存储管理中,供用户使用的逻辑地址都是连续的,用户在编制大型程序时就会感到不方便。一个实际的程序往往是由若干段组成的,例如一个主程序段、若干子程序段、若干数据段和工作区段组成,如图3.22所示。 每个段都具有…

存储管理-存储管理的功能

存储管理-存储管理的功能 存储器为什么比较重要? 存储器是计算机系统的重要资源之一。任何程序和数据以及各种控制用的数据结构都必须占用一定的存储空间,因此,存储管理直接影响系统性能。 存储器的组成 内存:存由顺序编址的块组成,每块包含…

操作系统——存储管理方式

目录 1.分区存储管理 1-1单一连续分配 1-1-1基本原理: 1-1-2单一连续分区存储管理的地址变换与地址保护 1-1-3管理特点 1-2固定分区分配 1-2-1基本原理 1-2-2分区划分 1-2-3主存空间的分配与回收 1-2-4地址转换与存储保护 1-2-5管理特点 1-3动态分区分配…

页式存储管理、段式存储管理、段页式存储管理

目录 页式存储管理段式存储管理分页和分段存储管理的主要区别段页式存储管理 页式存储管理 1. 基本原理 页式存储管理是把主存储器划分成大小相等的若干区域,每个区域称为一块,并对它们加以顺序编号,如0#块、1#块等等。与此对应&#xff0c…

Android 存储管理

文章目录 保存数据的方式应用专属文件访问内部存储的专属空间持久化数据目录操作缓存数据目录操作 访问外部存储的专属空间验证存储空间的可用性选择物理存储位置访问和存储持久性文件操作缓存文件应用专属媒体内容 共享存储空间媒体内容请求必要权限检查媒体文件的更新打开媒体…

存储器管理之分区存储管理

分区式管理是满足多道程序的最简单的存储管理方案。它的基本思想是将内存划分成若干个连续区域,称为分区。每个分区只能存储一个程序,且程序也只能在它所驻留的分区中运行。 ⑴固定分区 操作系统预先把可分配的主存空间分割成若干个连续区域&#xff0…