2.07ros话题通信介绍

1、概念

  话题(Topics):节点可以将消息发布到话题,或者通过订阅话题来接收消息。话题是用于标识消息内容的名称。对某种数据感兴趣的节点会订阅到相应的话题。单个话题可能有多个并行发布者(publishers)和订阅者(subscribers),并且单个节点可以同时发布和订阅多个话题,单个节点也可以发布或订阅(监听)多个话题。通常,发布者和订阅者不知道彼此的存在。它们之间是属于解耦合的关系。从逻辑上讲,可以将话题视为强类型的消息总线。每条总线都有一个名称,只要类型正确,任何人都可以连接到总线以发送或接收消息。   消息(Messages):订阅或发布话题时所使用的ROS数据类型。消息是由类型化字段组成。支持标准原始类型(整数、浮点、布尔值等),以及原始类型数组。消息可以包括任意嵌套的结构和数组(很像C结构)。

2、话题通信机制

  话题通信是ROS通信中最常用的一种基于发布和订阅模型的通信方式。用于实时性、周期性、少逻辑处理的数据传输场景。   ROS Node想要通过topic方式来传递消息,首先 publisher 节点和 Subscriber 节点都要到ROS Master(节点管理器)中进行注册节点名称、话题名称、消息类型、URI地址和端口,然后ROS Master向 Subcriber 节点发送 publisher 节点信息, Subscriber 节点根据接收的 publisher 节点信息,向 publisher 节点请求直接连接,它们建立连接后, publisher 节点向 Subscriber 节点发送消息。节点间通信使用一种基于TCP/IP的消息传输,称为TCPROS。

3、话题命令rostopic

  rostopic命令工具能让你获取ROS话题的信息。

命令 功能
rostopic bw 列出消息发布带宽
rostopic delay 显示主题相对于时间戳的延迟
rostopic echo 显示某个话题上发布的数据
rostopic find 根据消息类型查找话题
rostopic hz 报告数据发布的速率
rostopic info 获取指定Topic 当前发布的消息
rostopic list 列出当前所有的Topic
rostopic pub 把数据发布到当前某个正在广播的话题上
rostopic type 查看所有发布话题的消息类型

4、话题通讯的组成:

  1. 发布者(Publisher):发布者节点负责发布消息到指定的话题。它定期或根据某些事件生成数据,并将其发送到话题中。
  2. 订阅者(Subscriber):订阅者节点负责订阅一个或多个话题,并接收发布者发送的消息。当消息到达时,订阅者节点会通过回调函数来处理这些消息。
  3. 话题(Topic):话题是消息的目的地,它是一个命名的通道,用于传递消息。话题名称通常是全局唯一的,并且遵循命名约定,如/namespace/topic_name
  4. 消息(Message):消息是发布者发送到话题的数据。在ROS中,消息必须遵循特定的格式,这些格式通过.msg文件定义。

5、话题通讯的步骤:

  1. 定义消息类型:使用.msg文件定义消息的结构,这是发布和订阅消息的基础。
  2. 创建发布者:在发布者节点中,使用rospy库创建一个发布者对象,并指定话题名称和消息类型。
  3. 创建订阅者:在订阅者节点中,使用rospy库创建一个订阅者对象,并指定话题名称和消息类型。同时定义一个回调函数来处理接收到的消息。
  4. 启动ROS节点:发布者和订阅者节点都需要启动ROS节点,并通过rospy.init_node()函数进行初始化。
  5. 发布和订阅消息:发布者节点定期调用publish()方法发送消息,而订阅者节点通过回调函数接收并处理消息。