【ROS学习】(十)ROS Network(2)

上一篇所提到的ROS系统之间的网络通讯,是通过将所有机器连接到一个ros master端口,实现不同机器之间消息的传递。这种方式有个潜在的缺陷,那就是整个网络中只能存在一个ros master,相当于只有一个服务器,所有机器发布和订阅的消息都必须经过该服务器,当数据量大时,可能会导致服务器负载过重(仅为猜测,未实际验证)。因此有必要探究一下能否实现两台机器之间分别运行自己的ros master,并且能够互相通信的方法。
从ROS wiki中找到了一下几种其他的通讯方案

rocon_multimaster
multimaster_fkie
foreign_relay
wifi_comm
multimaster

比较一下感觉最后一个方案最为便捷,只需要做一些简单的配置而不涉及代码的修改。从链接中下载multimaster程序包,放在catkin_ws下的src文件夹,编译程序包

cd ~/catkin_ws
rosmake multimaster

修改config.yaml的参数

local_pubs: [local_topics_to_register_at_foreign_master]
foreign_pubs: [foreign_topics_to_register_at_local_master]
local_services: [local_services_to_register_at_foreign_master]
foreign_services: [foreign_services_to_register_at_local_master]

将要发布的话题名称放在local_pubs中,不同的话题用“,”隔开,其他几个选项类似。

看一下master.launch里的内容

<launch>
  <arg name="master" />
  <node pkg="multimaster" type="master_sync.py" name="master_sync" output="screen"> 
    <param name="foreign_master" value="http://$(arg master):11311" />      
    <rosparam command="load" file="$(find multimaster)/config.yaml" />
  </node>
</launch>

可以知道外面只需要一个远程master的ip地址作为参数,可以直接在launch文件里修改,也可以在运行launch文件时输入。如果在/etc/hosts文件中已经添加了远程计算机的ip地址和主机名,这里的参数直接使用主机名即可。

运行master.launch

roslaunch multimaster master.launch master:=remote_host

这样,在两台计算机上分别运行master.launch后,就可以在命令行中看到远程计算机的ip与端口,发布和接收的消息,通讯就成功了。这个方案还有个好处是与第一种方案没有冲突,也就意味着我们可以选择某两台计算机作为服务器, 每个服务器又可以各自管理几台计算机,这样就可以降低第一种方案中一个服务器的压力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值