ROS 通信机制

news/2025/3/22 19:17:16/

ROS是一个分布式框架,为用户提供多节点(进程)之间的通信服务,所有软件和功能都建立在这种分布式通信机制上,ROS的通信机制是最底层也是最核心的技术。

一、话题通信机制


话题在 ROS 中使用最为频繁,其通信模型也较为复杂。如图所示,在 ROS 中有两个节点:一个是发布者 Talker ,另一个是订阅者 Listener 。两个节点分别发布、订阅同一个话题,启动顺序没有强制要求,此处假设 Talker 首先启动,可分成图中所示的七步来分析建立通信的详细过程。

1.Talker注册
Talker启动,通过1234端口使用RPC向ROS Master注册发布者的信息,包含所发布消息的话题名;ROS Master会将节点的注册信息加入注册列表中。
2. Listener 注册
Listener启动,同样通过RPC向ROS Master注册订阅者的信息,包含需要订阅的话题名。3.ROS Master进行信息匹配
Master根据Listener的订阅信息从注册列表中进行查找,如果没有找到匹配的发布者,则等待发布者的加入;如果找到匹配的发布者信息,则通过RPC向Listener发送Talker的RPC地址信息。
4.Listener发送连接请求
Listener接收到Master发回的Talker地址信息,尝试通过RPC向Talker发送连接请求,传输订阅的话题名、消息类型以及通信协议(TCP/UDP)
5.Talker确认连接请求
Talker接收到Listener发送的连接请求后,继续通过RPC向Listener确认连接信息,其中包含自身的TCP地址信息

6. Listener 尝试与Talker 建立网络连接
Listener接收到确认信息后,使用TCP尝试与Talker建立网络连接。
7. Talker 向 Listener发布数据
成功建立连接后,Talker开始向Listener发送话题消息数据。


从上面的分析中可以发现,前五个步骤使用的通信协议都是RPC,最后发布数据的过程才使用到TCP。ROS Master在节点建立连接的过程中起到了重要作用,但是并不参与节点之间最终的数据传输。节点建立连接后,可以关掉 ROS Master,节点之间的数据传输并不会受到影响,但是其他节点也无法加入这两个节点之间的网络。

二、服务通信机制

服务是一种带有应答的通信机制,通信原理如图所示,与话题的通信相比,其减少了 Listener与Talker之间的RPC通信。

1.Talker注册
Talker启动,通过1234端口使用RPC向ROS Master 注册发布者的信息,包含所提供的服务名;ROS Master会将节点的注册信息加入注册列表中。
2. Listener注册
Listener启动,同样通过RPC 向 ROS Master注册订阅者的信息,包含需要查找的服务名。3.ROS Master进行信息匹配
Master根据 Listener的订阅信息从注册列表中进行查找,如果没有找到匹配的服务提供者,则等待该服务的提供者加入;如果找到匹配的服务提供者信息,则通过RPC向Listener 发送Talker的TCP地址信息。
4.Listener与Talker建立网络连接
Listener接收到确认信息后,使用TCP尝试与Talker建立网络连接,并且发送服务的请求数据。
5.Talker向Listener发布服务应答数据
Talker接收到服务请求和参数后,开始执行服务功能,执行完成后,向Listener发送应答数据。

 三、参数管理机制


参数类似于ROS中的全局变量,由ROS Master进行管理,其通信机制较为简单,不涉
及TCP/UDP的通信,如图所示。


1.Talker设置变量
Talker 使用RPC向 ROS Master发送参数设置数据,包含参数名和参数值;ROS Master
会将参数名和参数值保存到参数列表中。

2Listeer查询参数值
Listener 通过RPC向ROS Master发送参数查找请求,包含所要查找的参数名。


3.ROS Master向 Listener发送参数值
Master 根据 Listener 的查找请求从参数列表中进行查找,查找到参数后,使用RPC将参数值发送给 Listener。

注意:如果 Talker 向Master 更新参数值,Listener在不重新查询参数值的情况下是无法知晓参数值已经被更新的。所以在很多应用场景中,需要一种动态参数更新的机制。

文章来源:https://blog.csdn.net/2301_79503228/article/details/134388188
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/1217347.html

相关文章

OpenHarmony Promise详解

一,定义 作为一个android开发人员,刚接触Promise可能不好理解,因为android中的异步操作都是开启线程操作或者kotlin的协程,但是Promise并不是单独去开启一个线程来处理异步任务,它是在同一个线程中去处理异步任务。异…

11-13 spring整合web

spring注解 把properties文件中的key注入到属性当中去 xml配置文件拆分 -> import标签 注解开发中 import 实现 搞一个主配置类,其他配置类全部导入进来这个这个主配置类 而且其他配置类不需要 加上configuration注解 之前这个注解用于表示这是一个配置文件 …

3、RGB和通道(channel)

在灰度图一节的最后,给出了一个由彩色图片转成灰度图的示例,并且通过 `color_image.mode`获取了图片的格式:彩色图片获取到的格式为 RGBA,灰度图为L。 这一节介绍一下 RGB 图片以及通道的概念,我个人感觉通道在整个深度学习中很重要,并且极为重要。 举个例子:在很多时候…

【STM32/FreeRTOS】SysTick定时器及FreeRTOS系统节拍

目录 一、SysTick定时器 1、SysTick寄存器介绍 (1)控制及状态寄存器 (2)重装载数值寄存器 (3)当前数值寄存器 2、SysTick寄存器配置函数 二、FreeRTOS中的SysTick定时器 1、SysTick配置函数及分析 …

SpringBoot 自定义参数校验(5)

文章目录 前言方式一 @Pattern方式二 自定义参数校验Controller层请求示例前言 本文基于SpringBoot 3.1.2,使用自定义参数规则来处理参数校验。 方式一 @Pattern 使用@Pattern,自定义正则表达式,以下是一个校验IP地址的示例: import jakarta.validation.constraints.Not…

显卡服务器租用价格受哪些因素影响

显卡服务器也叫做GPU服务器,是一种有高性能显卡的服务器系统,显卡服务器能在大数据处理、科学计算等领域有很好的性能表现。今天小编就给大家讲一讲显卡服务器租用价格受哪些因素影响呢? 1.显卡类型和数量:一般说来中高端显卡的租…

Java设计一个简单的能保留计算过程的计算器

介绍 计算器是我们日常生活中常用的工具之一,它能够进行基本的数学运算,如加法、减法、乘法和除法。而在设计一个计算器时,我们可以通过使用Java编程语言来实现一个简单的控制台计算器,并且让它能够保留计算过程。 设计思路 为…

6.4.图标集合图层(ItemizedIconOverlay)

愿你出走半生,归来仍是少年&#xff01; ItemizedIconOverlay可在一个图层中承载多个可符号化的点要素&#xff0c;且每个要素的符号化可自行定义。 1.构造 ItemizedIconOverlay(List<Item> pList, Drawable pDefaultMarker, ItemizedIconOverlay.OnItemGestureListene…