0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ROS1的通信架构的基础通信方式及相关概念

jf_78858299 来源:机器人网 作者:机器人网 2023-05-19 17:23 次阅读

ROS通信架构是ROS的灵魂所在,它包括数据处理,进程运行,消息传递等 。这篇文章主要介绍ROS1的通信架构的基础通信方式和相关概念,因为ROS1和ROS2的通信方式相差很大,文章后面会介绍ROS2 的通信框架和差异。

接下来介绍一下三组概念:master<-->node<-->launch、topic<-->msg、service<-->srv<-->parameter <-->action.

一、master<-->node<-->launch

node: ROS最小的进程单元就是节点node。一个软件包里面有多个可执行文件,可执行文件被运行就是进程(process),这个进程就是节点node。

rosnode list 列出当前运行的node信息

rosnode info node_name 显示出node的详细信息

rosnode kill node_name 结束某个node

rosnode ping 测试链接节点

rosnode machine 列出在特定机器或列表机器上运行的节点

rosnode cleanup 清除不可到达节点的注册信息

master: ROS网络架构的管理中心,管理着各个node。node先在master进行注册,node之间通信需要经过master编排才能点对点的通信。所以ROS程序启动, 第一步先执行roscore指令启动master,执行指令后同时启动的还有rosout(负责日志输出、记录当前系统状态)和parameter server(参数服务器,非node,负责存储参数配置) ,再由节点管理器按照cmakelists.txt、package.xml配置执行rosrun pkgname node_name 依次启动node

launch: 复杂节点启动管理文件。执行roslaunch pkg_name file_name.launch 指令后,首先系统先检测roscore是否启动,如果没有启动会默认自动拉起。然后按照launch配置启动规则,有序启动多个节点,减少终端输入。

二、topic<-->msg

ROS1的通信方式有四种:topic主题,service服务,parameter service 参数服务器 ,actionlib动作库。

topic: ROS通信最常用的一种,对实时性、周期性消息,使用topic传输是最佳选择。简单的说,启动topic 首先需要publisher和subscriber 节点到master进行注册,然后publisher 会发布topic,subscriber在master指挥下会订阅topic,从而建立sub-pub之间的通信。一个topic可以有多个publisher,一个publisher可以同时向多个subscriber发送消息,subscriber 接收消息会进行处理(回调函数 callback),publisher发送消息后就继续执行下一个动作,消息的状态和处理结构都不会影响publisher执行,subscriber只管消息接受和处理,publisher挂死不会对subscriber节点状态影响,所以topic通信实现了node之间的解耦,此通信方式属于异步通信。

rostopic list 列出当前所有topic

rostopic info topic_name 显示某个topic的属性信息

rostopic echo topic_name 显示某个topic的内容

rostopic pub topic_name 向某个topic发布内容

rostopic bw topic_name 查看某个topic的带宽

rostopic hz 查看某个topic的频率

rostopic find topic_type 查看某个类型的topic

rostopic type topic_name 查看某个topic类型的msg

message: 直观查看message就是一种数据格式。严格说按照规定的格式发送的数据就是message消息,所以消息既是内容也是标准格式。基本的msg包括bool、int8、int16、int32、int64(以及uint)、float、float64、string、time、 duration、header、可变长数组array[]、固定长度数组array[C]。

rosmsg list 列出系统消息

rosmsg show msg_name 显示某个msg的格式

---常见消息名称--

Vector 矢量; 向量

twist 转动,旋转

covariance 协方差;协变性;共离散;

Odometry 里程计

quaternion 四元组

此处假设 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 在节点建立连接的过程中起到了重要作用,但是并不参与节点之间最终的数据传输。

三、service<-->srv<-->parameter <-->action

service: 请求--查询双向同步通信模型,service分层两部分,客户端(client)和服务端(server)。客户端(client)发送请求(request)要等服务端(server)处理,反馈回复(reply)才会发送下一个请求到服务端(server).

图片

名称 topic service
通信方式 异步通信 同步通信
实现原理 TCP/IP TCP/IP
通信模型 publisher/subscriber request/replay
映射关系 多对多 多对一
特点 subs收到数据会回调callback 远程过程调用(RPC)服务器端的服务
应用场景 连续、高频的数据发布 偶尔使用的功能、具体任务
举例 激光雷达、里程计发布数据 拍照、逆解计算、开关传感器

注意:远程过程调用(RPC)可以理解为一个进程里面调用另外一个进程的函数。

rosservice list 显示服务列表

rosservice info 打印服务信息

rosservice type 打印服务类型

rosservice uri 打印服务ROSRPC uri(统一资源标识,URI包含URL)

rosservice call 使用所提供的args调用服务

rosservice args 打印服务参数

rosservice find 查找服务

srv: service的数据类型,service通信的数据格式定义在*srv中,包含请求(request)和响应(reply)两部分。

rossrv show 显示服务描述

rossrv list 列出所有服务

rossrv md5 显示服务md5

rossrv package 列出包服务

rossrv packages 列出包含服务的包

  • 服务通信机制

服务是一种带有应答的通信机制,通信原理如下图所示,与话题的通信相比,其减少了 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 发送应答数据。

parameter server: 参数服务器维护的一般是静态数据字典,它使用互联网传输,在节点管理器master中运行,实现整个通信。

rosparam set param_key param_value 设置参数****rosparam get param_key 显示参数 rosparam load file_name 从文件加载参数 (yaml格式) rosparam dump file_name 保存参数到文件 (yaml格式)rosparam delete 删除参数rosparam list 列出参数名称

  • 参数管理机制

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

  • 图片

  1. Talker 设置变量Talker 使用 RPC 向 ROS Master 发送参数设置数据,包含参数名和参数值;ROS Master 会将参数名和参数值保存到参数列表中。
  2. Listener 查询参数值Listener 通过 RPC 向 ROS Master 发送参数查找请求,包含索要查找的参数名。
  3. ROS Master 向 Listener 发送参数值Master 根据 Listener 的查找请求从参数列表中进行查找,查找到参数后,使用RPC 将参数数值发送给 Listener。

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

action: 动作类似service,属于请求--查询双向同步通信模型,但是通信过程连续反馈状态信息和随时终止请求。通信双方在action protocol 下通过消息进行数据交流,client和server为用户提供API来请求目标或者通过函数调用和回调来执行目标。

图片

action protocal: action协议包含三部分,目标(设定终点),反馈(实时状态信息),结果(时长、最终姿态)。

图片

ROS1和ROS2通信架构比对

这里主要给大家介绍ROS2和ROS1的通信架构区别,ROS1和ROS2的架构如下,可以分成3层:OS层、中间层和应用层

图片

  • OS层:ROS1主要构建在Linux上,但ROS2支持多个操作系统
  • 中间层:ROS1通信基于TCPROS/UDPROS,而ROS2通信基于DDS(data distribution service)数据分发服务。它是专门为RTOS设计的数据分发/订阅标准,其技术关键是以数据为核心的发布/订阅 模型 DCPS(data-centric publish-subscribe),DCPS模型类似现在流行的容器命名空间技术,创建了一个全局数据空间,空间内的进程都可以直接访问。另外ROS2的intra-process 和ROS1的nodelet 数据传输方式类似,只是更名了而已,哈哈哈。
  • 应用层:ROS1强依赖于master单点,只要单点就会降低系统的可靠性,所以ROS1只适用于实验室研究,无法商用。ROS2取消了master节点管理器,节点间使用discover发现机制帮助彼此建立链接。

ROS 2 的通信模型

ROS 1的通信模型主要包含话题、服务等通信机制,ROS 2的通信模型会稍显复杂,加入了很多DDS的通信机制。如下图所示:

图片

基于DDS数据分发服务的ROS2模型包含以下几个关键概念。

参与者(Participant) :在 DDS 中,每一个发布者或者订阅者都成为参与者,对应于一个使用 DDS 的用户,可以使用某种定义好的数据类型来 读/写 全局数据空间。

发布者(Publisher) :数据发布的执行者,支持多种数据类型的发布,可以与多个数据写入器(DataWriter)相联,发布一种或多种主题(Topic)的消息。

订阅者(Subscriber) :数据订阅的执行者,支持多种数据类型的订阅,可以与多个数据读取器(DataReader)相联,订阅一种或多种主题(Topic)的消息。

数据写入器(DataWriter) :上层应用向发布者更新数据的对象,每个数据写入器对应一个特定的Topic,类似于ROS 1中的一个消息发布者。

数据读取器(DataReader) :上层应用从订阅者读取数据的对象,每个数据读取器对应一个特定的Topic,类似于ROS 1中的一个消息订阅者。

话题(Topic) :和 ROS 1 中的概念类似,话题需要定义一个名称和一种数据结构,但 ROS 2 中的每个话题都是一个实例,可以存储该话题中的历史消息数据。

质量服务原则(Quality of Service) :简称 QoS Policy,这是 ROS 2 中新增的、也是非常重要的一个概念,控制各方面与底层的通信机制,主要从时间限制、可靠性、持续性、历史记录这几个方面,满足用户针对不同场景的数据需求。

图片

  • 实时性增强:数据必须在 deadline 之前完成更新;
  • 持续性增强:DDS 可以为 ROS 2 提供数据历史服务,新加入的节点也可以获取发布者发布的所有历史数据;
  • 可靠性增强:配置可靠性原则,用户可以根据需求选择性能模式(BEST_EFFORT)或者稳定模式(RELIABLE)。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信
    +关注

    关注

    18

    文章

    5706

    浏览量

    134413
  • 通信方式
    +关注

    关注

    0

    文章

    22

    浏览量

    9062
  • ROS
    ROS
    +关注

    关注

    1

    文章

    272

    浏览量

    16686
收藏 人收藏

    评论

    相关推荐

    基于串口的STM32通过rosserial和ROS系统通信的代码

    前言最初参考网上资料移植了一份基于串口的STM32通过rosserial和ROS系统通信的代码。对于小数据量格式的消息,可以正常通信,但消息量一大便会出错(如:发布ROS提供的odom
    发表于 08-06 08:54

    无线通信概念

    1概念1)无线通信无线通信是利用电波信号可以在自由空间那种传播的特性进行信息交换的一种通信
    发表于 08-06 10:06

    ROS与STM32是如何进行通信

    ROS与STM32通信2020.8.1主要内容制作ROS包,将控制命令传给STM32,并将接收到的数据作为话题进行发布STM32接收数据并将姿态数据传回给ROS接收:期望角速度、期望线
    发表于 08-11 07:25

    串口通信的作用及通信方式

    串口通信一、串口通信概念1、串口通信的作用2、串口通信通信
    发表于 11-18 08:36

    求大佬分享ROS与STM32的串口通信的程序

    求大佬分享ROS与STM32的串口通信的程序
    发表于 12-06 06:57

    ROS的serial是如何进行通信

    怎样去安装seria呢?ROS的serial是如何进行通信的?
    发表于 12-06 06:31

    如何完成ROS与STM32之间的串口通信

    如何去实现ROS与STM32串口通信测试功能?如何完成ROS与STM32之间的串口通信呢?
    发表于 12-10 06:54

    配置STM32-ROS通信常见的问题有哪些?

    配置STM32-ROS通信常见的问题有哪些?
    发表于 12-23 07:32

    RT-Thread实时操作系统与ROS2是怎样进行通信

    已经有了 rosserial 和 micro_ros 软件包分别能和 ROS1/ROS2 通信,同时也有 Kobuki 机器人底盘软件包 [5] 和激光雷达 rplidar 软件包
    发表于 04-01 11:38

    基于无线wifi网络的X3派和PC虚拟机通过ROS2实现跨设备通信

    1、X3派和PC虚拟机都连接无线wifi网络的情况下通过ROS2实现跨设备通信多机通信ROS的基础能力之一,相比于
    发表于 07-13 15:13

    ROS与STM32通信

    ROS与STM32通信2020.8.1主要内容制作ROS包,将控制命令传给STM32,并将接收到的数据作为话题进行发布STM32接收数据并将姿态数据传回给ROS接收:期望角速度、期望线
    发表于 12-24 19:00 11次下载
    <b class='flag-5'>ROS</b>与STM32<b class='flag-5'>通信</b>

    如何初始化ROS并创立链接

    Simulink对机器人操作系统(ROS)的支持使我们能够创建与ROS网络一起工作的Simulink模型。ROS是一个通信层,允许机器人系统的不同组件以消息的形式交换信息。 组件通过将
    的头像 发表于 11-15 17:26 261次阅读
    如何初始化<b class='flag-5'>ROS</b>并创立链接

    ros的基本概念是什么

    基本概念ROS是一个用于在不同进程间匿名的发布、订阅、传递信息的中间件。 ROS2系统的核心部分是ROS网络(ROS Graph)。
    的头像 发表于 11-27 11:21 967次阅读

    ros1ros2的通信模型

    ros1: talker 注册 listener 注册 ROS Master 进行信息匹配 listener 发送链接请求 talker 确认请求 建立连接 talker 给 listener
    的头像 发表于 11-27 11:26 335次阅读
    <b class='flag-5'>ros1</b>和<b class='flag-5'>ros</b>2的<b class='flag-5'>通信</b>模型

    ROS通信接口机制介绍

    ROS通信接口 接口可以让程序之间的依赖降低,便于我们使用别人的代码,也方便别人使用我们的代码,这就是ROS的核心目标,减少重复造轮子。 ROS有三种常用的
    的头像 发表于 12-01 15:03 326次阅读
    <b class='flag-5'>ROS</b><b class='flag-5'>通信</b>接口机制介绍