介绍
ROS是一个分布式计算环境。一个运行中的ROS系统可以包含分布在多台计算机上多个节点。根据系统的配置方式,任何节点可能随时需要与任何其他节点进行通信。简单来说,即一个ROS功能的实现,需要启动多个节点,例如之前的小乌龟案例,需要启动roscore节点、乌龟界面turtlesim_node节点以及键盘控制节点turtlr_teleop_key节点,我们之前进行实现时,是在一台电脑打开三个终端界面,分别键入命令来实现,调用这台电脑的资源,通信也是在这一台电脑上实现,ROS分布式通信可以让你在一台的电脑上启动部分节点,另外几台电脑启动其余节点,保证启动ROS功能所需启动的所有节点即可,不同电脑间可以远程进行不同节点间的通信。即ROS是进程也就是节点是分布式框架,ROS中的进程可分布于不同主机,不同主机协同工作,从而分散计算压力。
网络配置要求
-
所有端口上的所有机器之间必须有完整的双向连接。
-
每台计算机必须通过所有其他计算机都可以解析的名称来公告自己
实现
准备
保证不同计算机处于同一网络中,最好分别设置固定的IP地址,如果是在虚拟机中,需要将网络适配器改为桥接模式。
虚拟机将网络适配器改为桥接模式方法:
(在虚拟机软件界面:设置->网络->连接方式,选择桥接网卡)。
设置固定IP地址方法(主从机都要设置):
(在ubuntu系统中:有线设置->网络->有线->IPV4->手动,分别填入IP地址、子网掩码以及网关)
IP地址与子网掩码查询方式,在终端中键入以下命令:
sudo apt install net-tools
ifconfig
图片中红色框起来的inet后的10.0.2.15为此台电脑的IP地址,netmask为此台电脑的子网掩码。
网关查询方式:
键入以下命令:
route -n
图中红色框起来的10.0.2.2为此台电脑网关。
查询方式不唯一,可以自行查询学习。
配置文件修改
分别修改不同计算机的 /etc/hosts 文件,在该文件中加入对方的IP地址和计算机名,在主机端加入从机的IP地址和从机的计算机名,在从机端加入主机的IP地址和主机的计算机名。
键入如下命令:
cd /etc
sudo gedit hosts
命令解释:cd /etc为进入etc文件夹,sudo gedit hosts命令为编辑hosts文件,键入后会打开hosts文本文件。主机的hosts文件中有主机本身的IP地址和计算机名,如果没有修改过是在第二行,需要在其下面一行添加上从机的IP地址和计算机名。同理从机的hosts文件在本身IP地址和计算机名下一行添加上主机的IP地址和计算机名。
这里需要注意,hosts文件修改后需要重启电脑以使hosts文件生效。
测试主机hosts文件生没生效,可在主机中打开一个终端,键入 ping + 从机IP地址或从机计算机名,若有响应则说明生效;同理从机hosts文件生没生效,在可在从机中打开一个终端,键入 ping + 主机IP地址或主机计算机名,若有响应则说明生效。
配置主机IP
主机为你启动roscore节点的电脑
在主机主文件夹下找到.bashrc文件(.bashrc文件为隐藏文件,需要在主文件夹下ctrl+h显示所有文件才能找到)双击打开.bashrc文件,在最下面加上如下两行内容:
export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=主机IP
注意复制粘贴后需要将主机IP改为你的主机的IP地址。修改后保存退出,打开终端,键入 source .bashrc 使修改的.bashrc文件生效。
配置从机IP
在从机主文件夹下找到.bashrc文件(.bashrc文件为隐藏文件,需要在主文件夹下ctrl+h显示所有文件才能找到)双击打开.bashrc文件,在最下面加上如下两行内容:
export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=从机IP
注意复制粘贴后需要将主机IP和从机IP改为你的主机和从机的IP地址。修改后保存退出,打开终端,键入 source .bashrc 使修改的.bashrc文件生效。从机如果有多台,每一台都需要进行上述从机的所有操作。
测试
以小乌龟案例进行测试,主机打开一个终端,启动roscore节点
roscore
主机再打开一个终端,键入下面命令打开小乌龟订阅节点
rosrun turtlesim turtlesim_node
而后在从机打开一个终端,键入下面命令打开小乌龟发布节点
rosrun turtlesim turtle_teleop_key
将鼠标光标置于从机启动发布节点的终端,通过键盘控制小乌龟运动,主机小乌龟界面响应从机发出的运动控制命令而运动,则说明配置成功。