《精通ROS机器人编程(原书第2版) 》 —1.5.6 ROS节点管理器
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,订阅者节点订阅了此话题。
图1-8 ROS节点管理器和“Hello World”发布者和订阅者间的通信
当发布者节点开始在某一个话题中发布 Hello World消息时,ROS节点管理器将获取该节点的话题和详细信息。ROS节点管理器将检查是否有其他节点订阅了同一话题。如果当时没有节点订阅该话题,节点间保持未连接状态。如果发布者节点和订阅者节点同时运行,ROS节点管理器会将发布者的详细信息推送到订阅者,这样两个节点将连接,并可以通过ROS消息交换数据。
- 点赞
- 收藏
- 关注作者
评论(0)