【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) 话题通信


 上一篇
【ROS入门-6】ROS工作空间、package 及 catkin 编译系统 【ROS入门-6】ROS工作空间、package 及 catkin 编译系统
引言其实从前几篇文章中我也有提及过ROS 工作空间,而且代码也是在工作空间中编译、运行的。 其实在 ROS 中,我们创建的软件代码,都会被组织成功能包的形式,所以在我们开始代码之前,第一步是创建一个容纳我们的工作空间。 因此本文将介绍ROS
2020-04-08
下一篇 
【ROS入门-4】嘴对嘴讲解ROS的核心概念——ROS话题通信机制 【ROS入门-4】嘴对嘴讲解ROS的核心概念——ROS话题通信机制
前言我要给大家来介绍一下ROS当中一些核心的概念,帮助大家去在后面的ROS学习当中更快地吸收这些概念,今天讲解的是ROS中的通信机制——话题通信。 ROS系列文章 【ROS入门-1】手把手教你在Ubuntu18.04安装ROS Melodi
2020-04-06
  目录