目录

ROS入门-5深入了解ROS话题通信机制的过程

【ROS入门-5】深入了解ROS话题通信机制的过程

文章目录

前言

在上一篇文章中简单了解了ROS话题通信机制,但是它内部的通信过程,很多人都是不知道的,今天我看了 ,又加深了对ROS话题通信的理解,打算接着讲解一下其过程是怎么样的。

ROS系列文章

节点的连接

一个节点需要与系统中其他节点进行通信才有意义,系统中任何单独的一个节点其实都是没有意义的。下图是一个话题通讯的过程示意图,一个节点通过节点管理器连接到另一个节点,最终请求话题数据流。

https://i-blog.csdnimg.cn/blog_migrate/e91831575ed37501aaed9f3235fd4e1a.png

ps:在ROS中有两个节点:一个是发布者 Talker ,另一个是订阅者 Listener ,两个节点分别发布、订阅同一个话题 bar

①发布者 Talker 注册

在系统中,节点与节点是没有任何关系的,都靠节点管理器来处理相关的请求与服务,首先第一步,发布者 Talker 需要向节点管理器 ROS Master 注册相关信息,包括节点的信息、需要发布的话题名等,然后节点管理器 ROS Master 会记录下来 Talker 节点的信息。

②订阅者 Listener 注册

同理订阅者 Listener 也需要向节点管理器 ROS Master 注册相关信息,这其实是启动两个节点时候就已经做了的事情。

③节点管理器 ROS Master 进行话题匹配

因为发布者 Talker 与订阅者 Listener 节点都在节点管理器 ROS Master 注册了信息,那么节点管理器 ROS Master 就会发现有相同的话题信息,此时它就需要将订阅与发布话题的两个节点匹配在一起,会通过RPC向订阅者 Listener 发送 Talker 节点的RPC地址信息。

④订阅者 ListenerTalker 发送连接请求

订阅者 Listener 知道发布者 Talker 后,就会主动找到它,并且通过RPC向T Talker

发送连接请求,传输订阅的话题名、消息类型以及通信协议。

⑤发布者 Talker 确认连接请求

Talker 接收到 Listener 发送的连接请求后,继续通过RPC向 Listener 确认连接信息,同时发送自身相关的信息。

Listener 尝试与 Talker 建立网络连接

Listener接收到确认信息后,使用TCP尝试与 Talker 建立网络连接。

TalkerListener 发布消息

成功建立连接后, Talker 开始向 Listener 发送话题消息数据。

总结

在节点与节点建立连接前,他们的通信协议都是RPC,而这主要都是依赖于节点管理器的,在节点与节点建立连接后,就直接是使用TCP协议进行数据传输,而不需要依赖节点管理器,此时节点管理器允许被关闭,但在关闭后,其他节点就不能订阅、发布这个话题消息了。

总之节点管理器 ROS Master 在节点建立连接的过程中起到了重要作用, 但是并不参与节点之间最终的数据传输。

引用说明

本文的部分截图来自书籍 。

参考