ROS下多机器人实现通信

来源:互联网 发布:双截棍 知乎 编辑:程序博客网 时间:2024/06/08 08:13

在运行所有的ROS节点之前,一定要先使用指令roscore,实际上roscore指令是运行了一个ros master,ros master相当于一个服务器,所有节点都可以通过ros master发布和订阅消息、服务和参数,只有连接在相同ros master下的节点才能互相通信。如何才能知道节点是运行在哪个master下的呢?实际上:ROS中默认一个机器上只运行一个ros master,其运行的端口默认为:http://localhost:11311。该端口默认值存于ROS环境变量ROS_MASTER_URI中。

下面来梳理一下实现ROS多机通讯的实现方法。

1. 保证多机之间网络连接无误:
在/etc/hosts中添加想要连接的那台机器的ip地址和主机名称,使用ping指令检查本机的网络连接和其他机器的网络连接。这里需要注意,如果不止两台机器连接,需要把所有需要和本机通讯的机器的ip和主机名添加到hosts文件里。
注意:这里建议主机从机都要将对方的IP hostname添加到自己的 /etc/hosts 中,如果不填加,将无法反向控制如:主机的hosts文件中没有添加从机的信息,从机只能接收到从主机发来的信息,而无法向主机发送信息。
2、修改ROS环境变量
与网络通讯相关的ROS环境变量主要有3个,分别是:
ROS_MASTER_URI、ROS_IP、ROS_HOSTNAME
因为这种通讯方式只能运行一个ros master,因此,选定一台机器作为master,将所有机器的ROS_MASTER_URI设置为master机器的ROS_MASTER_URI值,举个例子,我的主机名为administer,则我的ROS_MASTER_URI应该设置为http://administer:11311,则所有连接到我这个ros master的机器上的ROS_MASTER_URI都应该设置为http://administer:11311,设置环境变量值用export指令,ROS_IP和ROS_HOSTNAME则分别是本机的IP地址和主机名。
3. 简单测试
为了测试通讯是否成功,只要用rostopic pub指令在一台机器上发布一条消息,如果通讯成功,其他所有和该机器连接的机器上,就能使用rostopic echo接收到消息了。

原创粉丝点击