ROS2软件架构全面解析-学习如何设计通信中间件框架
前言
ROS(Robot Operating System) 2 是一个用于开发机器人应用的软件平台,也称为机器人软件开发工具包 (SDK)。
ROS2是ROS1的迭代升级版本 ,最主要的升级点是引入DDS(Data Distribution Service)为基础的底层通信系统。
为解决ROS1存在主要几个缺陷:
- 为解决一个主节点通信故障(ROSMaster),需要对所有现有的Client库进行单独的补丁处理,并且每个补丁都是定制的解决方案。因为ROS1中Client和Master是高度耦合,一旦Master节点需要修复bug,那所有的Client节点功能都需要修改。
- 对于ROS系统安全问题通过SROS 项目增强,但它难以维护,并且需要进一步开发以满足不断变化的安全趋势。
ROS2软件架构
我先用一句话来总结ROS2:为机器人设计以DDS为底座的通信中间件
让我们来看一下总体通信架构图
最上层是User Application,就是机器人系统自己写代码开发的功能,基于一种特定场景解决功能问题。
第二层是API接口层,对Application提供功能接口,比如:create_publisher、create_subscription、ActionClient、ActionServer,因为ROS2支持Python、C++、Java所以API接口层在图片上有三种类别,推荐使用Python接口代码最美观。
第三层(rcl)是API实现层,对API层提供通用功能的底层逻辑实现。
第四层(rmw)是通信API定义层,这是对适配各种DDS组件功能的API规范化,可以使用各种vendor 厂商的DDS。类似于Android AIDL,规定好API让Vendor厂商按照rmw标准适配API,实现更好的模块解耦。
最下面一层就是DDS通信层,可以选择各种DDS实现代码框架:Cyclone DDS、Fast DDS。
为什么ROS2选择DDS
DDS(Data Distribution Service) 规范描述了一种用于分布式应用程序通信和集成的数据中心发布-订阅(DCPS)模型。该规范定义了应用程序接口(API)和通信语义(行为和服务质量),从而实现信息从信息生产者到匹配消费者的高效传递。
上面是DDS的定义,但是这并不能解释标题问题,继续来看官方文档。
- DDS 提供一个发布-订阅传输,它与 ROS 的发布-订阅传输非常相似。
- DDS提供的默认发现系统,需要使用DDS的发布-订阅传输,是一个分布式发现系统。这允许任何两个 DDS 程序进行通信,而无需像 ROS Master这样的工具。
-DDS让ROS 2 旨在获得一流的安全性、嵌入式和实时支持、多机器人通信以及在非理想网络环境中的操作能力。
回答解决部分疑惑,但是我认为还有以下原因: - 机器人操作系统很重要的一点就是实时性和低延迟,无人飞行机器人对环境的反应是否低延时,能够实时的调整飞行姿态,对障碍做出避让行为。在这种场景下通信过程中重要就是数据流程,设计这种系统的通信中间件最看重数据采样、发送、接收、处理,一切以数据为核心进行整个系统的状态流转。
- ROS2就是为机器人各种场景设计的通信中间件,通信的实时性和低延迟就是最核心的要求,所以就要以数据为核心流转,而DDS这样的以数据为中心的分布式通信规范刚好满足其需求。
我之前一直很疑惑ROS2为什么不选择以为someip核心的通信中间件,并且也都是有Client、server模式那和someip有什么区别,而且也有文章表现车载中间件中的DDS和someip之争(参考文献二)。
本人认为还是应用场景的区别,现在的整车操作系统各个ECU的功能都会以服务的形式把能力提供出来,让其他模块来使用,以服务为通信核心,注重服务订阅、发布、通知,所以从整车通信架构范围来说肯定是someip通信协议使用范围广。但是在聚焦某一部分实时、低延迟性、大数据量业务,就可以考虑使用DDS。对于主机厂肯定会考虑到两种协议的兼容性问题,所以现在主流做法的是写一套像ROS2一样的SOA(Service Oriented Architecture)服务,其中整合someip和DDS区分场景来自动化选用。
这篇博客关注ROS2软件架构的目的就是想要借鉴、分析ROS2这套通信中间件是怎么设计的,来启发、讨论如何设计一套好的通信中间件。
未完待续!持续更新!欢迎大家关注!!!
rclpy软件框架
rcl软件框架
rmw软件框架
如何设计一个好的通信中间件?
参考文献
- Robot Operating System 2: Design, Architecture, and Uses In The Wild: link
- 自动驾驶中间件之二:通信中间件,DDS与SOME/IP 谁主沉浮?: link
- ROS on DDS: link
相关文章:
ROS2软件架构全面解析-学习如何设计通信中间件框架
前言 ROS(Robot Operating System) 2 是一个用于开发机器人应用的软件平台,也称为机器人软件开发工具包 (SDK)。 ROS2是ROS1的迭代升级版本 ,最主要的升级点是引入DDS(Data Distribution Service)为基础的…...
基于微信小程序的校园自助打印系统
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…...
Linux命令——3.网络与用户
文章目录 一、网络1.网络测试与诊断2.网络接口配置3.无线网络配置4.防火墙与网络管理6.防火墙管理1)firewalld命令2)iptables命令 二、用户和群组1.管理员模式2.用户账户管理1)useradd创建2)usermod修改3)userdel 删除…...
2、redis的持久化
redis的持久化 在redist当中,高可用的技术包括持久化,主从复制,哨兵模式,集群。 持久化是最简单的高可用的方法,作用就是备份数据。即将数据保存到硬盘,防止进程退出导致数据丢失。 redis持久化方式&…...
建造者模式 Builder Pattern
在创建一个对象的时候,构造器参数有点多,而且有些参数还是可选的,再者还有不少同类型的,那就更应该使用 builder 模式了。 使用 Builder 模式的初衷是 把易变性(mutability)移动到Builder类,而…...
制作一个类似ChatGPT的AI对话网站,模型能力使用ChatGPT
要快速搭建一个类似ChatGPT的AI对话网站,并且使用类似ChatGPT的模型能力,可以考虑以下技术和工具: ### 1. **使用现有的AI模型平台** - **OpenAI API**: 如果你希望使用类似于ChatGPT的能力,OpenAI提供了强大的API服务(…...
LinuxC高级day2
1.在家目录下创建目录文件,dir a.dir下创建dir1和dir2 b.把当前目录下的所有文件拷贝到dir1中, c.把当前目录下的所有脚本文件拷贝到dir2中 d.把dir2打包并压缩为dir2.tar.xz e.再把dir2.tar.xz移动到dir1中 f.解压dir1中的压缩包 g.使用tree工具&#x…...
Word格式修改
经常修改格式,留下这篇汇总 Word的累加符号上下标变右标指定目录:word如何取消封面或者目录下方的页码,页码从正文开始加参考文献:【Word】怎样给论文添加引用参考文献删空白页: word中无法删除空白页怎么办ÿ…...
深度学习-稀疏卷积
步骤: 1、构建输入输出哈希表; 输入哈希表的键为激活点的索引,值为激活点的坐标;输出哈希表的键为激活点对应的输出点的索引,值为输出点的坐标。 2、构建规则书; 规则书的每一行包含4个值,分别是…...
Microsoft Visual Studio中的/MT, /MTd,/MD,/MDd分别是什么意思?
1. /MT,/MTd,/MD,/MDd的含义 /MT,/MTd,/MD,/MDd是 Microsoft Visual C 编译器的运行时库链接选项。它们决定了程序如何链接 C 运行时库(CRT)。具体含义如下: /MT&#x…...
交换机关于环路、接口绑定、链路聚合的相关知识
文章目录 1、对交换机SW-1进行配置,仅允许Host-1通过Ethernet0/0/1接口与Host-3和Host-4通信,Host-2无法与其他主机通信。2、关闭生成树协议,验证环路造成的影响3、关闭生成树协议通过链路聚合实现两条链路正常通信并提高链路可靠性。 内容包…...
5.微服务灰度发布落地实践(rocketmq增强)
文章目录 前言发送端灰度增强订阅端灰度增强 前言 上一篇分析了,在灰度发布实现中为什么要对消息队列灰度发布进行增强。本篇主要介绍如何实现rocketmq 灰度发布的增强. 发送端灰度增强 订阅端灰度增强...
32单片机从入门到精通之开发环境——库文件(六)
每个人都有自己的追求和梦想,但要实现这些梦想并不容易。在追逐梦想的路上,我们会遇到各种困难和挫折,甚至会感到无助和失望。然而,正是这些困难和挫折让我们更加坚韧和坚定地追求自己的目标。不要害怕失败,失败只是暂…...
大电流和大电压采样电路
大电压采样电路: 需要串联多个电阻进行分压,从而一级一级降低电压,防止电阻损坏或者短路直接打穿MCU。 为什么需要加电压跟随器:进行阻抗的隔离,防止MCU的IO阻抗对分压产生影响: 大电流检测电路ÿ…...
用户态和内核态?
目录 一、定义与特点 二、功能与权限差异 三、安全性与稳定性 四、系统调用与交互 五、参考 用户态和内核态是操作系统中的两种基本运行状态,它们各自具有不同的特点和权限,共同构成了操作系统的运行基础。以下是对用户态和内核态的详细解释&#x…...
Qt天气预报系统设计界面布局第四部分左边
Qt天气预报系统设计 1、第四部分左边的第一部分1.1添加控件1.2修改控件名字 2、第四部分左边的第二部分2.1添加控件2.2修改控件名字 3、第四部分左边的第三部分3.1添加控件3.2修改控件名字 4、对整个widget04l调整 1、第四部分左边的第一部分 1.1添加控件 拖入一个widget&…...
【Spring MVC 常用注解】注解驱动开发的魔法
在 Spring MVC 中,注解可以说是开发者的“魔法棒”,通过简单的注解配置,开发者能够实现请求处理、参数绑定、响应返回等复杂功能,真正做到“少写代码多干活”。 我们接下来就来一起看看 Spring MVC 中常用的注解,它们的…...
FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.4,SDP协议分析
SDP在4566 中有详细描述。 SDP 全称是 Session Description Protocol, 翻译过来就是描述会话的协议。 主要用于两个会话实体之间的媒体协商。 什么叫会话呢,比如一次网络电话、一次电话会议、一次视频聊天,这些都可以称之为一次会话。 那为什…...
STM32 高级 WIFi案例1:测试AT指令
需求描述 测试AT指令是否能够正常控制ESP32的wifi,比如重启、读取设备信息等。 思路: stm32通过串口usart2向ESP32发布命令。ESP32通过串口1返回信息。 配置: 第一步:对ESP32芯片烧录可以读取stm32命令的固件(fac…...
Mono里运行C#脚本18—mono_image_load_names
前面已经分析完成加载CLR的流表,接着下来就是使用前面分析的数据,更进一步来处理了。下面就是通过函数mono_image_load_names获得程序集的名称和模块名称。 在CLI定义的文档里,表Assembly : 0x20: Assembly表结构信息,以下是该表各列的简要说明: HashAlgId: 这是一个4字…...
Java和Python区别: 应用领域与性能抉择的深度解析
文章目录 1. 引言2. 语言特性对比:灵活性与严谨性的碰撞3. 应用场景分析:专注任务的工具选择3.1 数据库交互:Java 的优势所在3.2 图像识别与计算:Python 的专长3.3 Web 开发 4. 高并发请求处理:架构设计与硬件选择4.1 …...
SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者
SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者 文章目录 目录 前言 一、启动SQL server服务的三种方法 1.不启动SQL server服务的影响 2.方法一:利用cmd启动SQL server服务 3.方法二:利用SQL Serv…...
基于Docker+模拟器的Appium自动化测试(二)
模拟器的设置 打开“夜神模拟器”的系统设置,切换到“手机与网络”页,选中网络设置下的“开启网络连接”和“开启网络桥接模式”复选框,而后选择“静态IP”单选框,在IP地址中输入“192.168.0.105”,网关等内容不再赘述…...
CSS系列(47)-- Animation Timeline详解
前端技术探索系列:CSS Animation Timeline详解 ⏱️ 致读者:探索动画时间线的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS Animation Timeline,这个强大的动画控制特性。 基础概念 🚀 时间线定义 …...
1、pycharm、python下载与安装
1、去官网下载pycharm 官网:https://www.jetbrains.com/pycharm/download/?sectionwindows 2、在等待期间,去下载python 进入官网地址:https://www.python.org/downloads/windows/ 3、安装pycharm 桌面会出现快捷方式 4、安装python…...
【翻译】优化加速像素着色器执行的方法
中文翻译 在回复我的 Twitter 私信时,我遇到了一个关于如何提高像素/片段着色器执行速度的问题。这是一个相当广泛的问题,具体取决于每个 GPU/平台和游戏内容的特性,但我在本帖中扩展了我“头脑风暴”式的回答,以便其他人也觉得有用。这不是一份详尽的清单,更像是一个高层…...
ZLib库使用详细教程 以及标准ZLib函数和QT自带压缩函数比较
1. 下载Zlib 官网下载地址如下:http://www.zlib.net/ 2. 利用cmake编译zlib 有两种方法可以打开cmake-gui winR输入cmd打开命令行,在命令行中输入cmake-gui可以直接打开应用界面找到你一开始安装cmake的文件夹,在bin子文件夹中双击cmake-…...
android stdudio环境: gradle一直安装失败
一、一直显示如下错误 The specified Gradle distribution file:/home/wangqingyuan/.gradle/wrapper/dists/gradle-8.6-bin/gradle-8.6-bin.zip does not exist. 经分析,是因为应用本身设置了gradle版本的地址为本地: 应用目录:gradle/gra…...
2024年12月31日Github流行趋势
项目名称:free-programming-books 项目地址url:https://github.com/EbookFoundation/free-programming-books项目语言:HTML历史star数:344575今日star数:432项目维护者:vhf, eshellman, davorpa, MHM5000, …...
音视频入门基础:MPEG2-TS专题(24)——FFmpeg源码中,显示TS流每个packet的pts、dts的实现
音视频入门基础:MPEG2-TS专题系列文章: 音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载 音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件 音视频入门基础…...
设计模式の状态策略责任链模式
文章目录 前言一、状态模式二、策略模式三、责任链模式 前言 本篇是关于设计模式中的状态模式、策略模式、以及责任链模式的学习笔记。 一、状态模式 状态模式是一种行为设计模式,核心思想在于,使某个对象在其内部状态改变时,改变该对象的行为…...
TI毫米波雷达原始数据解析之Lane数据交换
TI毫米波雷达原始数据解析之Lane数据交换 背景Lane 定义Lane 确认确认LVDS Lane 数量的Matlab 代码数据格式参考 背景 解析使用mmWave Studio 抓取的ADC Data Lane 定义 芯片与DCA100之间的数据使用LVDS接口传输,使用mmWave Studio 配置过程中有一个选项是LVDS L…...
Python-Pdf转Markdown
使用pdfminer.sixmarkdownify pdfminer.six可以提取Pdf文本内容markdownify可以将文本内容写markdown文件 安装 pip install pdfminer.six pip install markdownify实现 from pdfminer.high_level import extract_text from markdownify import markdownifydef pdf2markdo…...
win32汇编环境下,双击窗口程序内生成的listview列表控件的某行,并提取其内容的示例程序
;运行效果 ;双击后 ;上源码,仔细研究里面的几条备注就理解原理了 ;提取窗口程序内生成的listview列表控件的内容示例程序 ;抄下面源码,可以在radasm里面直接编译运行。主要的部分加了备注。 ;>>>>>>>>>>>>>>…...
对45家“AI+安全”产品/方案的分析
一. 关键洞察 “AI+安全”创新非常活跃,一片百家争鸣之势,赛道选择上,以事件分诊Incident Triage、 安全辅助Security Copilots、自动化Automation三者为主为主,这充分反映了当前安全运营的主要需求,在产品理念选择上以 AI 和 自动化为主,这确实又切合上了在关键…...
家用电器销售系统|Java|SSM|JSP|
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...
小程序租赁系统构建指南与市场机会分析
内容概要 在当今竞争激烈的市场环境中,小程序租赁系统正崭露头角,成为企业转型与创新的重要工具。通过这个系统,商户能够快速推出自己的小程序,无需从头开发,节省了大量时间和资金。让我们来看看这个系统的核心功能吧…...
《XML Schema 字符串数据类型》
《XML Schema 字符串数据类型》 1. 引言 XML Schema 是一种用于描述和验证 XML 文档结构和内容的语言。在 XML Schema 中,字符串数据类型是一种基本的数据类型,用于表示文本数据。本文将详细介绍 XML Schema 中的字符串数据类型,包括其定义…...
探索框架领域的新兴技术:微框架与插件化框架的崛起
近年来,随着软件开发技术的快速发展,开发者对框架的需求也在不断变化。从传统的重量级框架到轻量级微框架,以及支持高度扩展性的插件化框架,技术生态系统日新月异。本文旨在介绍这些新兴框架技术中的一些小众但创新的理念与实现&a…...
【数据结构-单调队列】力扣2762. 不间断子数组
给你一个下标从 0 开始的整数数组 nums 。nums 的一个子数组如果满足以下条件,那么它是 不间断 的: i,i 1 ,…,j 表示子数组中的下标。对于所有满足 i < i1, i2 < j 的下标对,都有 0 < |nums[i1…...
【复盘】2024年终总结
工作 重构风控系统 今年上半年其实就是整体重构系统,经历了多次加班的,其中的辛酸苦辣只有自己知道,现在来看的话,其实对自己还有一定的成长,从这件事情上也明白 绩效能不能拿到A,在分配的任务的时候就决…...
QT 学习第十四天 QWidget布局
QT 学习十四天 布局 布局管理Qt Widgets 布局布局管理器简介基本布局管理器栅格布局管理器窗体布局管理器综合使用布局管理器设置部件大小可扩展窗口 布局管理 今天讲 Qt Widgets 和 Qt Quick 中的布局。 前者主要用布局管理器 后者除了布局管理器还有基于锚的布局(…...
各个Spring Cloud版本有何主要差异
Spring Cloud 的各个版本之间确实存在一些关键差异,这些差异主要体现在功能更新、性能优化、对新技术的支持以及对旧有技术的替代等方面。 1. Spring Cloud Dalston 这是 Spring Cloud 的一个早期版本,它提供了微服务架构所需的基本组件,如服…...
开发AI电子宠物 参考资料
开发AI电子宠物涉及多个方面,包括但不限于硬件选择、软件编程、人工智能算法的应用等。下面我将提供一个概览性的指南,并列出一些资源链接,帮助您开始自己的AI电子宠物项目。 AI电子宠物开发教程概览 1. 确定需求与规划 定义目标ÿ…...
数据结构与算法之动态规划: LeetCode 62. 不同路径 (Ts版)
不同路径 https://leetcode.cn/problems/unique-paths/description/ 描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “…...
操作系统论文导读(八):Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个
Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个关键性规范的零星任务的可调度性分析 目录 一、论文核心思想 二、基本定义 2.1 关键性指标 2.2 任务及相关参数定义 2.3 几个基础定义 三、可调度性分析 3.1 调度算法分…...
Android IO 问题:java.io.IOException Operation not permitted
问题描述与处理策略 1、问题描述 java.io.IOException: Operation not permittedjava.nio.file.FileSystemException: /storage/emulated/0/test/test.txt: Operation not permittedjava.io.IOException: Operation not permitted:异常为操作不被允许 java.nio.f…...
Unity Mesh生成Cube
1. 配置一个Cube的每个面的数据 一共是6个面,每个面包含的数据包括4个顶点的相对顶点坐标(Cube的中心为原点),法线方向,UV坐标,顶点渲染顺序,以及这个面用到的材质,因为这里是Top&am…...
Wend看源码-Java-Collections 工具集学习
摘要 java.util.Collections它提供了一系列静态方法,用于对集合(如List、Set、Map等)进行操作。这些操作包括排序、查找、替换、同步等多种功能,帮助开发者更方便地处理集合数据。以下是Collections 提供的一些主要方法的总结。…...
怎样用 Excel 做数据分析?
与其单纯地学习怎么使用Excel,不如结合AI工具来进行数据分析。 接下来就来盘一盘AI在Excel做数据分析方面会带来哪些改进和帮助。 原本不能非常复杂的公式,变成聊天的方式。Excel门槛被大大降低,以前技术大佬才能干的活,现在前台…...