1. 话题通信介绍
话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息。
话题通信的应用场景: 话题通信适用于不断更新的数据传输相关的应用场景,像雷达、摄像头、GPS… 等等一些传感器数据的采集,也都是使用了话题通信。
概念: 以发布订阅的方式实现不同节点之间数据交互的通信模式。
作用: 用于不断更新的、少逻辑处理的数据传输场景。
2. 话题通信的理论模型
话题通信中角色:
ROS Master (管理者) : 负责保管 Talker 和 Listener 注册的信息,并匹配话题相同的 Talker 与 Listener,帮助 Talker 与 Listener 建立连接,连接建立后,Talker 可以发布消息,且发布的消息会被 Listener 订阅。
Talker (发布者) :发布消息
Listener (订阅者) :订阅消息
2.0 Talker注册
Talker启动后,会通过RPC在ROS Master中注册自身信息,其中包含所发布消息的话题名称。ROS Master会将节点的注册信息加入到注册表中。
RPC(Remote Procedure Call):远程过程调用,简单理解是一个节点请求另一个节点提供的服务。
2.1 Listener注册
Listener启动后,也会通过RPC在 ROS Master 中注册自身信息,包含需要订阅消息的话题名。ROS Master 会将节点的注册信息加入到注册表中。
2.2 ROS Master实现信息匹配
ROS Master 会根据注册表中的信息匹配Talker 和 Listener,并通过 RPC 向 Listener 发送 Talker 的 RPC 地址信息。
2.3 Listener向Talker发送请求
Listener 根据接收到的 RPC 地址,通过 RPC 向 Talker 发送连接请求,传输订阅的话题名称、消息类型以及通信协议(TCP/UDP)。
2.4 Talker确认请求
Talker 接收到 Listener 的请求后,也是通过 RPC 向 Listener 确认连接信息,并发送自身的 TCP 地址信息。
2.5 Listener与Talker件里连接
Listener 根据步骤4 返回的消息使用 TCP 与 Talker 建立网络连接。
2.6 Talker向Listener发送消息
连接建立后,Talker 开始向 Listener 发布消息。
注意1: 上述实现流程中,前0-4使用的RPC协议,5,6使用的是TCP协议
注意2:Talker与Listener的启动无先后顺序要求
注意3:Talker与Listener都可以有多个
注意4:Talker 与 Listener 连接建立后,不再需要 ROS Master。也即,即便关闭ROS Master,Talker 与 Listern 照常通信。