参考网址——古月居
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

发表评论