本文主要是介绍彻底搞懂ros多机通信机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ros可以在两台机器上共享运行,我们该如何配置呢?
以我的电脑PC和嵌入式板卡RV1126进行操作:
1.首先,两台机器肯定要相互通信(有线,无线都可以),我的是无线。运行ifconfig,搞清楚两台机器的ip。
PC
RV1126
注意我的是通过usb实现的无线通信,所以rv1126的ip在usb0那里。
通过上面两张图,你已经知道
我的pc机 :
hostname = aipan-Z370-HD3
ip = 172.168.5.1
RV1126:
hostname = RV1126_RV1109
ip = 172.169.5.125
为了防止通信问题,最好各自ping一下,在pc端ping 172.168.5.125,在rv1126端ping 172.168.5.1
知道这两个信息,就可以愉快的配置了。
2. 我们要选择一台机器作为主机,也就是在哪台机器运行roscore啦。我选择RV1126作为主机,那PC就是从机。所以我们需要在两台机器上面都设置:
export ROS_MASTER_URI=http://172.168.5.125:11311
ROS_MASTER_URI就是告诉大家,master的ip地址是多少,大家才知道去哪里连接ros嘛。如果你只需要从机订阅主机消息,即单向通信,到这里就可以愉快的工作了。
3. 如果你想主机也可以订阅到从机的消息。以上设置就不够啦,在主机上面订阅从机发布的话题,话题内容会为空。那是因为我们没有设置从机的ROS_HOSTNAME,很好理解,你都不知道从机的地址,怎么能订阅到数据呢?一般我们会设置好两台机器各自的ROS_HOSTNAME(主机不设置也行,最好都设置)
PC端的配置:
export ROS_HOSTNAME=172.168.5.1
export ROS_MASTER_URI=http://172.168.5.125:11311
rv1126端的配置:
export ROS_HOSTNAME=172.168.5.125
export ROS_MASTER_URI=http://172.168.5.125:11311
这样就可以相互通信了,就这么简单!!!
- 如果你觉得这样写ip太麻烦了,想直接用机器的hostname代替,那么你可以在/etc/hosts 里面写入配置
这个配置纯粹是让机器知道名字对应的ip, 比如RV1126_RV1109对应的ip是172.168.5.125
那么你在ros的配置就可写成:
PC端的配置:
export ROS_HOSTNAME=aipan-Z370-HD3
export ROS_MASTER_URI=http://RV1126_RV1109:11311
rv1126端的配置:
export ROS_HOSTNAME=RV1126_RV1109
export ROS_MASTER_URI=http://RV1126_RV1109:11311
- 如果哪天你不想多机交互了,想单机运行了,切记把配置改回来呀,不然roscore就会报错。
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
这样你就又可以愉快的单机运行了。
设置写在哪个文件里?pc上面一般是在home目录下面的.bashrc里面,嵌入式的可能因人而异。这就是环境变量的配置,写在可以配置环境变量的文件里都可以。
这篇关于彻底搞懂ros多机通信机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!