ROS分布式多机通信

背景

今天在测试时需要配置两台计算机通过ROS进行通信,在此记录下来。
以下内容为胡春旭编撰的《ROS机器人开发实践》中的内容,个人认为写得非常简洁实用。

ROS分布式多机通信

ROS是一种分布式软件框架,节点之间通过松耦合的方式进行组合,在很多应用场景下,节点可以运行在不同的计算平台上,通过Topic、Service进行通信。但是“一山不容二虎”,ROS只允许存在一个Master,在多机系统中Master只能运行在一个机器上,其他机器需要通过 ssh 的方式和Master取得联系。所以在多级ROS系统中需要一些配置。
我们以两台计算机为例,介绍分布式多机通信的配置步骤,其中计算机hcx-pc作为主机运行Master,计算机raspi2
作为从机运行节点。

设置IP地址

首先需要确定ROS多机系统中的所有计算机处于同一网络,然后分别在计算机hcx-pc、raspi2上使用ifconfig命令查看计算机的局域网IP地址。
分别在两台计算机系统的/etc/hosts文件中加入对方的IP地址和对应的计算机名:

# @hcx-pc,/etc/hosts
192.168.31.14      raspi2

# @raspi2,/etc/hosts
192.168.31.198      hcx-pc

设置完毕后,分别在两台计算机上使用ping命令测试网络是否连通。

# @hcx-pc
ping  raspi2

# @raspi2
ping  hcx-pc

如果双向网络都畅通,就说明底层网络的通信已经没有问题,接下来设置ROS相关的环境变量。

设置ROS_MASTER_URI

因为系统中只能存在一个Master,所以从机raspi2需要知道Master的位置。ROS Master的位置可以使用环境变量ROS_MASTER_URI进行定义,在从机raspi2上使用如下命令设置ROS_MASTER_URI:

export ROS_MASTER_URI=http://hcx-pc:11311

但是以上设置只能在输入的终端中生效,为了让所有打开的终端都能识别,最好使用如下命令将环境变量的设置加入终端额配置文件中。

echo ''export ROS_MASTER_URI=http://hcx-pc:11311'' >> ~/.bashrc

你可能感兴趣的:(ROS分布式多机通信)