无人车开源软件架构

2023-09-20 11:19:32

参考视频:Apollo自动驾驶入门课程

开源软件架构

开放式软件层分为三个子层:实时操作系统、运行时框架和应用程序模块层

  1. 实时操作系统(RTOS)

可确保在给定时间内完成特定任务,“实时”是指无人车的操作系统能够及时进行计算,分析并执行相应的操作。以上是在汽车传感器收集到外界数据后的短时间内完成。
在这里插入图片描述
在这里插入图片描述
假设无人车的传感器检测到车辆前方移动的障碍物,短时间内,基于RTOS的Apollo软件模块,必须分析障碍物是行人,还是汽车或是其他东西。预测其未来的运动方向和速度,并确定减速还是停止,然后车辆必须执行该决定。
实时性能是确保系统稳定性和驾驶安全性的重要要求
Apollo RTOS是Ubuntu Linux操作系统与Apollo内核相互结合的成果

  1. 运行时框架

运行时框架Apollo的操作环境,是ROS的定制版,虽然是机器人操作系统,但他实际上是一个在Apollo RTOS上运行的软件框架。

ROS根据功能将自治系统划分为多个模块,每个模块负责接收、处理和发布自己的消息。由于这些模块相互独立,只能通过运行时框架进行通信,因此调整任何单一模块都很容易。所有这些功能使ROS成为理想的Apollo开发与集成框架。

为了使ROS适应无人车,Apollo团队改进了共享内存的功能和性能、去中心化和数据兼容性
(1)共享内存
共享内存降低了需要访问不同模块时的数据复制需求
在这里插入图片描述
对于一对多传输方案,共享内存支持"一次写入 多次读取"模式。例如,如果只收到一次点云,可以同步运行障碍物检测,定位和GUI工具,可以加快通信速度。
(2)去中心化
去中心化解决了单点故障的问题
在这里插入图片描述
现成的ROS由许多节点组成,每个节点都有自己的功能。例如,一个节点可能负责收集摄像头图像,另一个节点可能负责规划轨迹,而第三个节点可能负责将控制命令发送到CAN总线上的车辆。但是所有的节点都需要由单个ROS主节点来控制,如果这个主节点发生故障,整个系统都会失效。
解决方案:Apollo将所有的节点放在一个公共域中,通过这种去中心化方案,公共区域取代了原来的ROS主节点,因此消除了单点故障风险
在这里插入图片描述
(3)数据兼容性
对于无人车,由于项目本身的规模很大,数据兼容性至关重要,不同的ROS节点通过名为ROS消息接口语言相互通信
在这里插入图片描述

ROS消息需要使用通用接口语言,使每个节点都可以解读来自其他节点的消息数据。如果消息文件的格式与节点期望的格式稍有不同,通信就会失败。这可能导致严重的兼容性问题,例如,当一个接口升级,数据不兼容通常会导致系统故障,此外必须一次又一次地转换之前所记录的测试数据以适应新的消息格式。
解决方案:
Apollo使用了一种名为protobuf的接口语言替代原生ROS消息。Protobuf是一种结构化数据序列化方法,对于开发用于通过电线彼此通信或用于存储数据的程序非常有用。可以将新字段添加到消息格式中,而不会破坏向后兼容性
在这里插入图片描述

  1. 应用程序模块
    在这里插入图片描述
    Apollo的软件平台具有各种模块,这些模块包括MAP引擎、定位、感知、规划、控制、端到端驾驶以及人机接口(或HMI),每个模块都有自己的算法库,模块之间的关系非常复杂。
更多推荐

向量数据库,能让AI再次起飞吗?

9月7-8日,深圳国际会展中心18号馆来了,来了,腾讯面向产业互联网领域规格最高、规模最大、覆盖最广的年度科技盛会-——-腾讯全球数字生态大会。9月7日,我们将聚焦产业未来发展新趋势,针对云计算、大数据、人工智能、安全、SaaS等核心数字化工具做关键进展发布,并联合生态伙伴推出最新行业场景解决方案。同时,携手全球权威商

mysql:列类型之float、double

mysql:列类型之float、double_mysqldouble_普通网友的博客-CSDN博客环境:window10vs2022.net6mysql8.0.25DBeaver参考:《MSDN:浮点数值类型(C#引用)》《mysql:11.1.4Floating-PointTypes(ApproximateValue

Flutter开发桌面应用的一些探索分享

引言在移动应用开发领域,Flutter已经赢得了广泛的认可和采用,成为了跨平台移动应用开发的瑞士军刀。然而,Flutter的魅力并不仅限于移动平台,它还可以用于开发桌面应用程序,为开发人员提供了一种全新的选择。本文将深入探讨Flutter在桌面应用开发中的应用,以及目前国内新颖的跨端开发技术。桌面应用开发的现状在过去,

RHCE---Linux的计划任务

文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言如果想要让自己设计的备份程序可以自动地在系统下面运行,而不需要手动来启动它,这是该如何处理?这些任务可以分为【单一】任务和【循环】任务,在系统内又是哪些服务在负责?有的工作是例行性的,而有些任务是临时发生的。但是计算机不在身边这时就可以使用计

【C语言】字符串函数

文章目录前言1.strcat2.strncpy3.strncat4.strncmp5.strstr6.strtok7.strerror8.strcat的模拟实现9.strstr的模拟实现总结添加链接描述前言大家好呀,今天给大家分享一下字符函数和字符串函数C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类

可转债实战与案例分析——成功的和失败的可转债投资案例、教训与经验分享

实战与案例分析——投资案例研究股票量化程序化自动交易接口一、成功的可转债投资案例成功的可转债投资案例提供了有价值的经验教训,以下是一个典型的成功案例:案例:投资者B的成功可转债投资投资者B是一位懂得风险管理的投资者,他在某家知名科技公司发行的可转债上发现了投资机会。以下是他的投资故事:投资背景:投资者B注意到该科技公司

大气化学在线耦合模式WRF/Chem

查看原文:区域气象-大气化学在线耦合模式(WRF/Chem)在大气环境领域实践随着我国经济快速发展,我国面临着日益严重的大气污染问题。近年来,严重的大气污染问题已经明显影响国计民生,引起政府、学界和人们越来越多的关注。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因素是控制大气污染的关键自然

【自然语言处理】【大模型】RWKV:基于RNN的LLM

相关博客【自然语言处理】【大模型】RWKV:基于RNN的LLM【自然语言处理】【大模型】CodeGen:一个用于多轮程序合成的代码大语言模型【自然语言处理】【大模型】CodeGeeX:用于代码生成的多语言预训练模型【自然语言处理】【大模型】LaMDA:用于对话应用程序的语言模型【自然语言处理】【大模型】DeepMind

分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)

目录可靠消息最终一致性分布式事务实现_RocketMQ事务消息可靠消息最终一致性分布式事务实战_案列业务介绍数据库表设计可靠消息最终一致性分布式事务实战_Docker安装RocketMQ部署RocketMQ的管理工具可靠消息最终一致性分布式事务实战_实现订单微服务可靠消息最终一致性分布式事务实战_订单微服务业务层实现可

淘宝分布式文件存储系统( 二 ) -TFS

淘宝分布式文件存储系统(二)->>TFS目录:大文件存储结构哈希链表的结构文件映射原理及对应的API文件映射头文件的定义大文件存储结构:采用块(block)文件的形式对数据进行存储,分成索引块,主块,扩展块。所有的小文件都是存放到主块中的,扩展块用来保存溢出的数据,也就是当我们的主快存储不下的时候,数据就会保存到扩展块

kafka 分布式的情况下,如何保证消息的顺序消费?

目录一、什么是分布式二、kafka介绍三、消息的顺序消费四、如何保证消息的顺序消费一、什么是分布式分布式是指将计算任务分散到多个计算节点上进行并行处理的一种计算模型。在分布式系统中,多台计算机通过网络互联,共同协作完成任务。每个计算节点都可以独立运行,并且可以相互通和协调。这种分布式的架构可以提高计算能力和可靠性,充分

热文推荐