《精通ROS机器人编程(原书第2版) 》 —1.5.6 ROS节点管理器

举报
华章计算机 发表于 2020/02/10 14:09:06 2020/02/10
【摘要】 本节书摘来自华章计算机《精通ROS机器人编程(原书第2版) 》 一书中第1章,第1.5.6节,作者是[印度]郎坦·约瑟夫(Lentin Joseph)[意大利]乔纳森·卡卡切(Jonathan Cacace),张新宇 张志杰 等译 。

1.5.6 ROS节点管理器

ROS节点管理器非常像一个DNS服务器,将唯一的名称和ID与我们系统中活跃的 ROS元素关联起来。当一个节点在ROS系统中启动时,它就会查找ROS节点管理器,并在其中注册节点的名称。因此,ROS节点管理器记录了目前ROS系统中运行的所有节点的详细信息。当节点的任何信息发生变化时,它会生成回调并使用最新的详细信息进行更新。为了将节点彼此连接,这些节点的详细信息就非常有用。

当节点开始发布话题时,节点将话题的详细信息(如名称和数据类型)提供给ROS节点管理器。ROS节点管理器将检查是否有其他节点订阅了同一话题。如果有节点订阅了同一话题,ROS节点管理器会将发布者的节点详细信息共享给订阅节点。获取节点详细信息后,这两个节点将使用基于TCP/IP套接字的 TCPROS协议进行互连。两个节点连接后,ROS节点管理器就不再起作用了。我们可以根据需要,停止发布者节点或停止订阅者节点。停止任何一个节点,都会再次检查ROS节点管理器。ROS服务也采用相同的方法。

节点使用ROS客户端程序 (如 roscpp 和 rospy) 编写。这些客户端程序使用基于XML 远程过程调用 (XMLRPC) 的 API与ROS节点管理器进行交互,这些API充当ROS系统 API的后端。

ROS_master_URI 环境变量包含ROS节点管理器的 IP 和端口。使用这个环境变量,ROS节点可以找到ROS节点管理器。如果该环境变量错误,节点之间将不会有通信。在单机系统中使用ROS时,可以使用本机的 IP 或localhost。但是在分布式网络中,计算发生在不同的物理机上,我们应该以合适的方式定义ROS_master_URI。只有这样,远程节点才能找到彼此并相互通信。在分布式系统中,只需要一个ROS节点管理器。该节点管理器应该运行在某一台计算机上,所有其他计算机都可以正确 ping这台计算机,从而确保远程ROS节点可以访问ROS节点管理器。

图1-8展示了ROS节点管理器如何与发布者节点和订阅者节点进行交互。发布者节点发布了一个字符串类型话题,消息为Hello World,订阅者节点订阅了此话题。

 image.png

图1-8 ROS节点管理器和“Hello World”发布者和订阅者间的通信

当发布者节点开始在某一个话题中发布 Hello World消息时,ROS节点管理器将获取该节点的话题和详细信息。ROS节点管理器将检查是否有其他节点订阅了同一话题。如果当时没有节点订阅该话题,节点间保持未连接状态。如果发布者节点和订阅者节点同时运行,ROS节点管理器会将发布者的详细信息推送到订阅者,这样两个节点将连接,并可以通过ROS消息交换数据。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200