ROS——话题通信

话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息。话题通信的应用场景也极其广泛,比如下面一个场景:

机器人在导航的时候,使用的传感器是雷达,机器人会采集激光雷达感知到信息并计算,然后生成运动控制信息驱动机器人底盘运动。

在上述场景中,就不止一次使用到了话题通信

  • 以激光雷达信息的采集为例,在ROS中有一个节点需要实时的发布当前雷达采集到的数据,导航模块中也有节点会订阅并解析雷达数据。
  • 再以运动消息的发布为例,导航模块会根据传感器采集的数据时时的计算出运动控制信息并发布给底盘,地盘也可以有一个节点订阅运动信息并最终转换成控制电机的脉冲信号。
    概念

以发布订阅的方式是实现不同节点 之间数据交互的通信模式

作用

用于不断更新的,少逻辑处理的数据传输场景

案例

1、实现最基本的发布订阅模型,发布方以固定频率发送一段文本,订阅方接收文本并输出。
2、实现对自定义消息的发布和订阅


1、实现最基本的发布订阅模型,发布方以固定频率发送一段文本,订阅方接收文本并输出。
2、实现对自定义消息的发布和订阅


理论模型

话题通信实现模型是比较复杂的,该模型如下图所示,该模型中涉及到三个角色:

  • ROS Master(管理者)
  • Talker(发布者)
  • Listener(订阅者)
    ROS Master负责保管Talker和Listener注册的信息,并匹配话题相同的Talker与Listener,帮助Talker与Listener连接建立后,Talker 可以发布消息,且发布的消息会被 Listener 订阅。


    整个流程由以下步骤实现:

0.Talker注册

Talker启动后,会通过RPC在 ROS Master 中注册自身信息,其中包含所发布消息的话题名称。ROS Master 会将节点的注册信息加入到注册表中。

1.Listener注册

Listener启动后,也会通过RPC在 ROS Master 中注册自身信息,包含需要订阅消息的话题名。ROS Master 会将节点的注册信息加入到注册表中。

2.ROS Master实现信息匹配

ROS Master 会根据注册表中的信息匹配Talker 和 Listener,并通过 RPC 向 Listener 发送 Talker 的 RPC 地址信息。

3.Listener向Talker发送请求

Listener 根据接收到的 RPC 地址,通过 RPC 向 Talker 发送连接请求,传输订阅的话题名称、消息类型以及通信协议(TCP/UDP)。

4.Talker确认请求

Talker 接收到 Listener 的请求后,也是通过 RPC 向 Listener 确认连接信息,并发送自身的 TCP 地址信息。

5.Listener与Talker件里连接

Listener 根据步骤4 返回的消息使用 TCP 与 Talker 建立网络连接。

6.Talker向Listener发送消息

连接建立后,Talker 开始向 Listener 发布消息。

注意1:上述实现流程中,前五步使用的 RPC协议,最后两步使用的是 TCP 协议
注意2: Talker 与 Listener 的启动无先后顺序要求
注意3: Talker 与 Listener 都可以有多个
注意4: Talker 与 Listener 连接建立后,不再需要 ROS Master。也即,即便关闭ROS Master,Talker 与 Listern 照常通信。