注意双方是如何解耦的。所有hokuyo_node节点都是 发布扫描,不知道是否有人订阅。所有 rviz确实是订阅扫描,而不知道是否 有人发布它们。这两个节点可以启动,终止和 以任何顺序重新启动,不会导致任何错误情况。
我们都知道这些使用主题的语句,解耦ROS节点。但是,阅读有关如何建立节点之间的连接的文档让我质疑这个陈述。但是在运输部分中声明如下:
给定发布者URI,订阅节点协商连接, 通过XMLRPC与该发布者一起使用适当的传输。该 协商的结果是两个节点连接在一起 消息从发布者流向订阅者。
每个传输都有自己的消息数据协议 交换。例如,使用TCP,协商将涉及到 发布者向订户提供IP地址和端口 呼叫连接。 订阅者然后创建一个TCP / IP套接字 指定的地址和端口。节点交换连接头 其中包括消息类型的MD5总和等信息 主题的名称,然后发布者开始发送序列化 消息数据直接通过套接字。
所以我的问题是,发布者和订阅者真的脱钩了吗?毕竟,为了使订户获得消息,它必须打开发布者端口的TSP / IP连接。如果发布者是n,则订户需要打开n个连接。这意味着,如果其中一个发布者失败,则用户不会感到困扰,这并不完全正确。那么这个声明究竟意味着节点是分离的?
参考: http://wiki.ros.org/ROS/Technical%20Overview
答案:
我也在ROS论坛上问了这个问题,我从link得到了相当不错的答案。