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

Linnea ·
更新时间:2024-11-10
· 505 次阅读

文章目录前言ROS系列文章节点的连接①发布者`Talker`注册②订阅者`Listener`注册③节点管理器`ROS Master`进行话题匹配④订阅者`Listener`向`Talker`发送连接请求⑤发布者`Talker`确认连接请求⑥`Listener`尝试与`Talker`建立网络连接⑦`Talker`向`Listener`发布消息总结引用说明参考 前言

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

ROS系列文章

【ROS入门-1】手把手教你在Ubuntu18.04安装ROS Melodic

【ROS入门-2】带你看ROS文件系统及其工具

【ROS入门-3】嘴对嘴讲解ROS的核心概念——节点与节点管理器

【ROS入门-4】嘴对嘴讲解ROS的核心概念——ROS话题通信机制

【ROS入门-5】深入了解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入门 ros

需要 登录 后方可回复, 如果你还没有账号请 注册新账号