本文主要是介绍ROS多机通讯(unable to communicate with master 解决),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、设置IP地址
分别在主机、从机上使用 ifconfig、host 命令查看计算机的局域网IP地址和 hostname
ifconfig
主机:
从机可看到相同画面。
分别在两台计算机系统的 /etc/host 文件中加入对方的IP地址和对应的计算机名。
ip地址 name
例如:
主机上
从机ip + 从机name
#kuai,/etc/hosts
192.168.123.115 raspi2
从机上
主机ip + 主机name
# @raspi2,/etc/hosts
192.168.123.90 kuai
设置完毕后,分别在主机、从机上使用 ping 命令测试网络是否连通。
例:
主机
ping raspi2
从机
ping kuai
如果双向网络畅通,说明底层网络通信已经没有问题。
二、设置ROS_MASTER_URI
在从机上运行:
注意自行替换主机名。
echo "export ROS_MASTER_URI=http://主机name:11311">>~/.bzshrc
三、多机通信测试
在主机上开启 ros master(roscore
),在从机上输入 rostopic list
,若能成功显示话题名,则说明成功。
四、问题解决
首次多机通信成功后,再次尝试多机通信,报错:
unable to communicate with master
再次检查上述文件,没有发现问题,最终参考 博客 解决。
修改从机 ~/ .bashrc(~/.zshrc)文件:
注意只修改从机就可以了。
export ROS_MASTER_URI=http://主机ip:11311 #11311是默认ROS端口
export ROS_HOSTNAME=主机hostname
从机终端输入:
source ~/.bashrc
source /etc/init.d/networking
再次测试,成功。
五、注意
请注意:当设置从机 ROS_MASTER_URI 为主机(不为从机本机)后,从机上是不能运行 roscore 的。
六、经验
在树莓派上跑SLAM首先要完成多机通讯的配置,有关ROS多机通讯的博客很多,但个人总结下来最简洁的方法是:
①将树莓派设为主机,PC设为从机;
②分别在各自的 /etc/hosts 文件中添加对方的 IP 和 name (测试能否相互ping通)
③在从机(PC)上的 .zshrc / .bashrc 中设置 ROS_MASTER_URI
原因(坑):
1、将PC设为主机,树莓派设为从机,则树莓派上无法使用 roslaunch
命令,这将带来极大的麻烦。需要在launch文件中使用 <machine>
标签指定运行机器,并提供环境变量文件 env-loader,已有的 launch 文件都得修改;而在PC机上,即使ROS_MASTER_URI 不是本机,只要树莓派启动 roscore 并能正常通讯,则PC机仍旧可以使用roslaunch
命令(不知道为什么,请大佬们指教)。
2、树莓派算力较低,利用 ssh + vncviwer 的远程操作十分缓慢,修改配置文件十分难受,而且出现修改后,环境变量长时间未更新,source
命令多次也没用的情况。
这篇关于ROS多机通讯(unable to communicate with master 解决)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!