一个运行中的ROS系统可以包含分布在多台计算机上多个节点。根据系统的配置方式,任何节点可能随时需要与任何其他节点进行通信。但是实现这个分布式通讯,有个必要的条件,就是每个机器都必须在同一个局域网下。本文以树莓派与电脑端(PC)为例,说明如何配置实现分布式通讯。
一、准备工作
1.1、配置
要求:
- 电脑与树莓派连接在同一个局域网下;
- 选一个作为主机,主机需要启动roscore,这里选择树莓派作为主机,电脑作为从机,这里的树莓派需要安装好ros-noetic;
- 在每台设备上安装ssh和chrony包,用于实现同步,可以输入以下指令安装,
sudo apt-get install chrony openssh-server -y
1.2、查询ip地址
两者都连接在同一个局域网下,通过以下命令查询网络ip地址:ifconfig
电脑端
查询到地址是172.20.10.12
树莓派端
查询到地址是172.20.10.2
二、修改配置文件
2.1、电脑端
以电脑端作为从机为例,需要修改电脑的ROS_MASTER_URI为树莓派ip,这里是刚才查询到的
172.20.10.2,终端输入,
sudo gedit ~/.bashrc
输入密码后,在文件最下边添加,
export ROS_MASTER_URI=http://172.20.10.2:11311
保存后退出,重新打开终端刷新环境变量生效。
然后,修改/etc/hosts文件,
sudo gedit /etc/hosts
如上图所示,加上树莓派的ip和机器名字,保存后退出。
2.2、树莓派端
修改的文件和步骤与上边差不多一致,唯一不同的是,树莓派的ROS_MASTER_URI需要换成本机的ip,也就是172.20.10.2。/etc/hosts文件就在后边加上电脑的ip和机器名字即可,两个文件分别如下,
~/.bashrc
sudo vim ~/.bashrc
/etc/hosts
sudo vim /etc/hosts
同样的,保存后退出,重新打开终端或者source一下终端刷新环境变量。
注意:两个文件中的IP对应关系
三、开启分布式通讯
我们验证一下是否配置成功,首先,在主机(这里是树莓派),启动roscore,主机终端输入,
roscore
然后,在从机(电脑)运行小海龟节点,从机终端输入,
rosrun turtlesim turtlesim_node
从机端出现小海龟,
然后,我们在主机(树莓派)启动小海龟键盘控制节点,主机终端输入,
rosrun turtlesim turtle_teleop_key
点击键盘控制终端,即可用上下左右按键控制虚拟机端的小海龟进行运动,