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

前言

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

ROS系列文章

节点的连接

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

ros016

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向TTalker
发送连接请求,传输订阅的话题名、消息类型以及通信协议。

⑤发布者Talker确认连接请求

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

Listener尝试与Talker建立网络连接

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

TalkerListener发布消息

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

总结

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

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

引用说明

本文的部分截图来自书籍《ROS机器人开发实践》 胡春旭 著

参考

ROS官方wiki

ROS笔记(7) 话题通信

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章