ROS分布式多机通信(结合Docker跨容器主从通信)
ROS分布式多机通信(结合Docker跨容器主从通信)写在前文由于在我们使用ROS进行机器人开发的时候,比如,调试机器车或者机器人,硬件资源有限或者不能直接进行开发、计算的时候,我们常常会进行主从机配置。在ROS1中有Master的概念,节点可以运行在不同的计算平台上,但是ROS1中只允许存在一个Master ,在多机系统中Master只能运行在一台机器上,其他机器需要通过ssh的方式和Maste
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测试
然后在容器内的~/.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/
分别查看KALI和nano的网络情况
这个时候我们在KALI的docker中使用rviz和rqt_graph查看是否顺利连接上nano,如果能正常启动则说明配置正确。
本文只是简述了一下操作的过程,进行了简单的实验,如果不通过容器的话可以参考下面的这篇文章,这篇文章写的较为详细。
https://blog.csdn.net/qq_45152498/article/details/117573478
文中
想获取一些其他ROS学习资料或者购买一套以学习ROS为目的机器人,可以查看巨匠机器人。
更多推荐
所有评论(0)