1、不同版本的ROS之间可以进行通讯
安装了不同版本ROS的不同设备之间是可以进行通信的,甚至可以建立一台主机和多台从机之间的联系,但从目前完成的连接来看仅能够支持主机控制一台从机。但从机之间可以获取彼此topic。
2、ROS多机通讯部署过程
2.1、将进行通讯的ROS设备置于同一个局域网内
不同的ROS系统将在同一局域网内进行通信,若通过使用路由器,则需要固定路由器分配给各个设备的IP,通过路由器设置将分配的IP地址与设备的MAC地址绑定,使路由器分配给各个设备的IP地址固定不变。以TP-LINK的易展路由器设置为例。
IP与MAC映射表(TP-LINK路由器易展版)
将路由器分配的IP与对应设备的MAC地址绑定
2.2、查看各个设备的IP地址
在Terminal窗口输入 ifconfig,查看本设备IP地址。
查看本机设备IP地址
2.3、修改hosts文件
使用 sudo gedit /etc/hosts 命令打开hosts文件,分别输入各个设备分配的IP地址以及对应名字,名字可自己命名,如下图,4-5行为补充内容。作为主机的设备要把所有的设备IP以及自己命名的设备名称写入文件。从机只需要填写主机和自己对应的IP、名字。
hosts文件
2.4、修改.bashrc文件
在所有设备上使用命令行 sudo gedit ~/.bashrc打开.bashrc文件,在最后分别加入两行代码,如下图119-120行代码:应输入:
export ROS_HOSTNAME=本设备命名
export ROS_MASTER_URI=http://主机设备名:11311
修改.bashrc文件
2.5、远程控制小乌龟模拟
主机控制台窗口输入:roscore,启动ros
从机输入:rosrun turtlesim turtlesim_node
主机再打开新的控制台窗口,输入:rosrun turtlesim turtle_teleop_key,便可以使用主机方向键控制从机中的小乌龟移动。
笔记本为主机进行控制
P.S.本次实验使用一台Dell G5和两台DJI Manifold2-C,笔记本安装了Ubuntu20.04、ROS版本为Noetic,两台Manifold2-C预装Ubuntu16.04,ROS版本为Kinetic。不同ROS版本间不受影响,有其他教程中遇到不同版本ROS在通信时出现问题,在修改文档中设备名后添加.local得到解决。