【ROS学习】使用ROS实现多机通讯

ROS的通信机制不仅可以在进程间之间通讯,而且可以在不同设备间进行通讯,只需要简单几句语句,即可实现多电脑之间的Topic共享,远程控制等功能。本文指导如何通过绑定IP和主机名实现主从通讯,包括下载包、网络检测、ROS环境配置和小乌龟历程测试。实现双向通讯

一、绑定IP和主机名

要实现多机通信,首先要求主从电脑连接同一个局域网(WIFI),然后分别打开终端查看对应的IP地址和主机名

1.1 获取IP和主机名

终端输入ifconfig即可查看IP地址;hostname查看主机名字。
我使用的主机为ubuntu的虚拟机,从机为nuc13。

img

img

img

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成功后会出现以下数据传输结果。双向网络能正常联通,则底层网络通信实现

img

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实现多机通信

posted @ 2025-02-23 14:16  遥感摆烂人  阅读(1468)  评论(0)    收藏  举报