ROS分布式多机通信(结合Docker跨容器主从通信)

ROS分布式多机通信(结合Docker跨容器主从通信)

写在前文

由于在我们使用ROS进行机器人开发的时候,比如,调试机器车或者机器人,硬件资源有限或者不能直接进行开发、计算的时候,我们常常会进行主从机配置。在ROS1中有Master的概念,节点可以运行在不同的计算平台上,但是ROS1中只允许存在一个Master ,在多机系统中Master只能运行在一台机器上,其他机器需要通过ssh的方式和Master取得联系。

这次我使用昨天在KALI上随便搭建好的Docker容器连接的另外一个Jetson nano作为测试。当然你的PC机器任何操作系统都可以,只要安装了Docker,在Docker中安装了ROS就行。我PC机器是KALI,仅仅是个人喜好。

实验环境

主:Jetson nano IP:192.168.1.64
从:KALI(Docker容器) 主机IP:192.168.1.4 容器IP:172.17.0.3

配置需求

为什么我要这样配置主从节点呢,主要是结合实际需求配置,我这样把性能不高的Jetson nano配置成了主节点运行launch文件主要是我可以用Rviz或者rqt_graph直接在本机查看各个节点的状态等。一般情况下我们会选取PC机作为作为主机,跑网络,进行处理数据等主要工作;安装在机器人上的英伟达Jetson Nano作为从机,主要用来采集各种传感器采集来的环境数据。我们这次的目的是主要完成远端检测的功能。因此我使用Jetson Nano作为主机。

网上很多人都是跑小乌龟进行测试,感觉并无多少实际的学习意义,我使用巨匠的测试demo中一个launch文件在Jetson nano上跑,使用我本机的Docker测试检测一下是否连接成功。
懂网络知识配置分布式ROS其实非常容易,多机通信的前提是网要通,各个主机能彼此找到对方,如果不在同一个网络中不管是加路由还是做其他操作,都要先让各个主机彼此互通即可,这就和我以前写过的KALI入侵安卓手机或者PC机时网络通信是什么样的类似。

开始配置

确保两台机器能ping通,在KALI和Jetson nano上的hosts文件里面都添加对方的IP和主机名:

##查看主机名
hostname
##在jetson nano上/etc/hosts文件下任意位置添加如下
sudo vim /etc/hosts
192.168.1.4     kali
##在kali上/etc/hosts文件下任意位置添加如下
sudo vim /etc/hosts
192.168.1.64     robot

使用ping命令先确保两台机器的连通性
然后在KALI上打开我们上一篇文章Docker内运行ROS(melodic版本)以及使用Rviz中所用的镜像

sudo xhost +local: 
sudo docker run -it --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix  --env="DISPLAY=$DISPLAY"  --name=rocker osrf/ros:melodic-desktop-full  /bin/bash

接下来在Jetson nano 上运行launch文件,当然你也可以运行roscore测试
ROS分布式多机通信(结合Docker跨容器主从通信)_第1张图片
然后在容器内的~/.bashrc下面添加

##容器的IP
export ROS_HOSTNAME=172.17.0.3
##Jetson nano 运行的ROS_MASTER_URI的IP:端口 (上图中的ROS_MASTER_URI)
export ROS_MASTER_URI=http://192.168.1.64:11311/

ROS分布式多机通信(结合Docker跨容器主从通信)_第2张图片
分别查看KALI和nano的网络情况
ROS分布式多机通信(结合Docker跨容器主从通信)_第3张图片ROS分布式多机通信(结合Docker跨容器主从通信)_第4张图片
这个时候我们在KALI的docker中使用rviz和rqt_graph查看是否顺利连接上nano,如果能正常启动则说明配置正确。
ROS分布式多机通信(结合Docker跨容器主从通信)_第5张图片

ROS分布式多机通信(结合Docker跨容器主从通信)_第6张图片
本文只是简述了一下操作的过程,进行了简单的实验,如果不通过容器的话可以参考下面的这篇文章,这篇文章写的较为详细。
https://blog.csdn.net/qq_45152498/article/details/117573478
文中
想获取一些其他ROS学习资料或者购买一套以学习ROS为目的机器人,可以查看巨匠机器人。

你可能感兴趣的:(ROS,Docker,Jetson,nano,分布式,机器人)