序
ROS 多机通信就是多个装有 ROS 的不同计算机之间共用同一个 ROS 主机 (Master) 实现节点与话题共享, 本人经验建议当你遇到以下问题时候可以尝试使用多机通信解决:
Case: 一个 team 多个成员共同开发一个 ROS 项目, 但是不同成员可能安装的 ubuntu 版本与 ROS 版本不同, 当需要将各个成员完成的模块进行集成调试时可以使用多机通信;
Case: 当你要使用一个 ROS 包却发现使用软件源下载提示未发现软件包, 这种问题的基本原因就是你要下载的包不匹配你的 ubuntu 版本(包括 32 位, 64 位区分),ros 版本, 这种情况你可以找一台装有匹配的 ROS 版本的电脑(或者虚拟机再安装一个 ubuntu 及 ROS), 在两台计算机上进行交互调试.
下面就直接开始设置, 假设你有两台计算机 A 和 B(在同一局域网下), 现在要设置 A 为主机.
一, 网络设置
1. 分别查看两台计算机 IP 与名称
- // 分别打开 A,B 两台计算机终端并在其中输入:
- $ ifconfig
- // 查看 ip
- $ hostname
- // 查看 name
IP 查看结果(当然点击右上角系统设置, 直接打开网络也可以看到 ip 地址):
Name 查看结果:
2. 查看计算机之间能否通信
方法: 在 A,B 计算机终端分别 ping 对方 IP 地址, 命令如下:
- // 在 A 机终端输入: ping B 机 IP :
- $ ping 192.168.0.104 //IP 根据自己实际情况
- //B 机终端同上
若通信成功, 可以看到显示接收到包的 time, 通常是 0.3ms 左右;
若显示以下结果, 则通常是物理连接的问题, 检查你的网线跟路由器设置:
From 192.168.1.2 icmp_seq=3 Destination Host Unreachable
3. 修改 A,B 机 hosts 文件内容, 并重启网络设置使其生效
在 A,B 机上分别打开 hosts 文件终, 端命令:
$ sudo gedit /etc/hosts
然后在文件末添加 A,B 的 IP 与 hostname(IP 与 hostname 为上面步骤 1 查看的结果)并保存(其中红色区域为添加的部分, 注意这里在 A,B 添加的内容是一样的, 添加时候不带[]):
添加完成后重启 A,B 两机网络设置, 终端命令:
sudo /etc/init.d/networking restart
二, ROS 环境设置
分别在 A,B 两机上打开~/.bashrc 文件, 在文件最后添加 ROS 主机与分机环境变量(这里 A,B 两机修改内容一样, add 为修改内容), 命令:
$ sudo gedit ~/.bashrc // 打开 hosts 文件
- export ROS_HOSTNAME=hostname_B #add
- export ROS_MASTER_URI=http://hostname_A:11311 #add
- //hostname 为上面步骤 1 的查看结果
以下为本人电脑上设置, 其中 X230 为主机:
三, 通信测试
打开主机 A, 终端 roscore 启动 ROS, 在主机 B 中直接 rostopic list 查看话题, 如下图若可以查看到话题则表示成功:
来源: https://blog.csdn.net/Ricardo_lun/article/details/79998298