参考网址——古月居
ROS是一种分布式软件框架,节点之间通过松耦合的方式进行组合,在很多应用场景下,节点可以运行在不同的计算平台上,通过Topic、Service进行通信。但是ROS中只允许存在一个Master,在多机系统中Master只能运行在一台机器上,其他机器需要通过ssh的方式和Master取得联系。所以在多机ROS系统中需要进行一些配置。我们以两台计算机为例,介绍分布式多机通信的配置步骤,其中计算机ros1作为主机运行Master,树莓派rosberry作为从机运行节点。我的计算机(ros1)用的是ubuntu 16.04LTS, 树莓派(rosberry)用的是ubuntu mate 16.04,所以下面两者的颜色和界面有所差异。
设置IP地址
首先需要确定ROS多机系统中的所有计算机处于同一网络,然后分别在计算机ros1、rosberry上使用ifconfig命令查看计算机的局域网IP地址。为了防止每次开机分配的IP地址变化,建议为俩机分配固定IP,下面我使用的这两个IP是我的,ping一下: ros1:192.168.43.2 rosberry:192.168.43.182
手机热点
为方便使用,把ip地址对应的计算机名称添加到hosts文件中,具体方法如下:
在电脑端ros1中执行:sudo gedit /etc/hosts
在结尾处添加:
192.168.43.182 rosberry
在树莓派rosberry中执行:sudo nano /etc/hosts
在结尾处添加:
192.168.43.2 ros1
分别ping一下,电脑上 ping rosberry 树莓派上 ping ros1
因为树莓派3B+的运算能力有限,我会把ros master和图形化工具都在电脑上面运行
设置ROS_MASTER_URI
因为系统中只能存在一个Master,所以从机rosberry需要知道Master的位置。ROS Master的位置可以使用环境变量ROS_MASTER_URI进行定义
export ROS_MASTER_URI=http://ros1:11311
但是以上设置只能在输入的终端中生效,为了让所有打开的终端都能识别,最好使用如下命令将环境变量的设置加入终端的配置文件中。
echo "export ROS_MASTER_URI=http://ros1:11311" >> ~/.bzshrc
多机通信测试
现在ROS多机系统已经配置完成,下面使用小乌龟例程进行测试。
1.从机键盘,主机显示
首先在主机ubuntu上运行小乌龟的仿真器:
roscore
rosrun turtlesim turtlesim_node
然后使用终端pc端ssh登陆rosberry从机
ssh ubuntu@rosberry
设置master位置
export ROS_MASTER_URI=http://ros1:11311
运行键盘控制节点
rosrun turtlesim turtle_teleop_key
这样ssh终端可以通过键盘控制pc机上的小乌龟了。
2.主机键盘,从机显示
首先在主机ros1上运行master:
roscore
然后使用终端pc端ssh登陆rosberry从机
ssh ubuntu@rosberry
设置master位置
export ROS_MASTER_URI=http://ros1:11311
设置屏幕显示位置在从机屏幕上
export DISPLAY=:0
运行小乌龟的仿真器:
rosrun turtlesim turtlesim_node
在主机ros1上新终端运行小乌龟的键盘控制节点:
rosrun turtlesim turtle_teleop_key