【ROS学习】使用ROS实现多机通讯
ROS的通信机制不仅可以在进程间之间通讯,而且可以在不同设备间进行通讯,只需要简单几句语句,即可实现多电脑之间的Topic共享,远程控制等功能。本文指导如何通过绑定IP和主机名实现主从通讯,包括下载包、网络检测、ROS环境配置和小乌龟历程测试。实现双向通讯
一、绑定IP和主机名
要实现多机通信,首先要求主从电脑连接同一个局域网(WIFI),然后分别打开终端查看对应的IP地址和主机名
1.1 获取IP和主机名
终端输入ifconfig即可查看IP地址;hostname查看主机名字。
我使用的主机为ubuntu的虚拟机,从机为nuc13。



1.2 修改hosts文件进行绑定
修改hosts文件的目的是将电脑的IP和主机名绑定,这样两台电脑之间就可以通过hostname找到对方了。如果没有绑定,直接去ping对方主机名是无法解析对方主机名的。分别对两个电脑的/etc/hosts文件,从第三行开始插入对方电脑的ip地址和主机名hostname.
在电脑A中插入以下加粗的指令
127.0.0.1 localhost
127.0.0.1 [hostname_A]
[IP_A] [hostname_A]
[IP_B] [hostname_B]
在电脑B中插入以下加粗的指令
127.0.0.1 localhost
127.0.0.1 [hostname_B]
[IP_B] [hostname_B]
[IP_A] [hostname_A]
1.3 重启网络
sudo /etc/init.d/networking restart
二、开始通讯并检测
2.1检测通讯
设置完之后,可以简单的通过ping命令测试网络是否联通。ping是用来检测本机与网络中的另一主机之间网络是否联通。
```
主机侧: ping 192.168.31.171 //或者ping isvl-NUC13ANKi7
从机侧: ping 192.168.31.189 //或者ping ubuntu
```
ping成功后会出现以下数据传输结果。双向网络能正常联通,则底层网络通信实现

2.2设置ROS_MASTER_URI
在两台电脑中选择其中一台作为主机器人(master),并设置对应的ROS master,在从机上设置ROS_MASTER_URI。
直接在./bashrc配置文件中添加环境变量。
sudo gedit ~/.bashrc
在主机上设置
export ROS_HOSTNAME=192.169.31.189 # 主机IP或名称
export ROS_MASTER_URI=http://192.168.31.189:11311 #主机ip或名称
在从机上设置
export ROS_HOSTNAME=192.169.31.191 # 从机IP或名称
export ROS_MASTER_URI=http://192.168.31.189:11311 #主机ip或名称
source ~/.bashrc
2.3 多机器人通信测试,使用turtlesim小乌龟测试
在主机上运行小乌龟仿真
roscore
rosrun turtlesim turtlesim_node
在从机上运行键盘控制器,控制主机的小乌龟运动
rosrun turtlesim turtle_teleop_key
三、结论
ROS中所谓的主从机,并不是只有主机能控制从机,从机不能控制主机。实际上是一个双向通信的过程,只不过是roscore的位置是在主机上运行的。
注意: 如果网络ping通过了,但是数据没有传输,可能原因是电脑防火墙问题。
参考文献:
https://www.xitongzhijia.net/xtjc/20220907/248705.html # 虚拟机如何连接物理机的无线网。
https://blog.csdn.net/qq_52548731/article/details/129534279 # ROS实现多机通信

浙公网安备 33010602011771号