ROS1学习笔记---通信机制

ROS1通信机制的核心是点对点的分布式通信,使用了基于TCP/IP的通信方式,可以实现模块间点对点的松耦连接。有基于异步通信的话题(topic)消息机制,也有基于服务(service)的同步通信。

先介绍几个特别的名词:

节点(node):节点是主要的计算执行过程,也可以理解为是一个可执行的文件。节点之间可以进行交互。

节点管理器(master):用于节点的名称注册和查找等。没有master,就没有节点、服务、消息之间的通信。

消息(message):节点通过消息完成彼此之间的沟通。消息包含一个节点发送到其他节点的消息数据。


上图就是三种常用的通信机制;

1.话题通信机制

     通过话题(topic)进行消息路由不需要节点之间直接连接,也就是发布者(talker)和订阅者(listener)之间不需要知道彼此的是否存在,也就是说当消息发布后,甚至不能确定是否有节点订阅了这些消息。一个主题可以有多个订阅者也可以有多个发布者,这个特点意味着他可以是一个一对多和多对一的机制。但无法获得应答,也就是没有反馈

    ROS提供了一个命令行工具rostopic获取关于主题的相关消息:

  • rostopic list 查看正在运行的主题列表
  • rostopic info /topic 查看主题的信息,包括发布者和订阅者等
  • rostopic hz /topic 显示主题的发布频率(average rate)
  • rostopic echo /topic 将消息输出到屏幕
  • rostopic type /topic 输出主题中发布的消息类型
  • rostopic bw /topic 显示主题所使用的带宽
  • rostopic find message_type 按照类型查找主题
  • rostopic pub /topic types args 将数据发布到主题,允许我们直接从命令行中任意主题创建和发布数据

2.服务调用机制

   服务是一个节点想另一个节点发送消息并等待响应,消息流是双向的(同步通信) 当我们需要直接与节点通信并获得反馈时,我们需要使用服务调用机制。也就是我们讲的一对一通信。

    关于服务的命令行工具有两个:rossrv 和rosservice。rossrv和rosmsg一样,可以用rosmsg show Person来查看自定义的服务类型。其中Person是自定义的.msg话题消息。rosservice可以列出服务列表和查询某个服务具体如下:

  • rosservice list  列出服务清单
  • rosservice type /service 输出服务类型
  • rosservice info /service 输出服务信息
  • rosservice find msg-type 根据服务类型查询服务
  • rosservice call /service args 根据命令行参数调用服务

3.动作机制

    ROS中有一个actinlib的功能包集,实现了action的通讯机制。那么什么是action呢?action也是一种类似于service的问答通讯机制,不一样的地方是action还带有一个反馈机制,可以不断反馈任务的实施进度,而且可以在任务实施过程中,中止运行

动作(action)是一种连续问答机制,带有连续反馈,而且可以在任务过程中中止运行


关于action机制可以参考ROS大佬古月老师的博客:action机制的定义与编程

猜你喜欢

转载自blog.csdn.net/weixin_40863346/article/details/80434241
今日推荐