ROS分布式演练,多台设备进行通信的配置

1、概述

前面我们做的操作都是在单个设备上进行,也就是分别开启多个终端,在不同终端上启动节点等相关操作,这里我们使用两台设备来控制,一台虚拟机和一台无人车 (使用VNC Viewer连上去,也可以看做一台Linux虚拟机)

VNC Viewer有兴趣的可以查阅:远程连接VNC-Viewer与安全传输WinSCP软件

2、安装Chrony包与SSH服务器

2.1、介绍

ChronyNTP(Network Time Protocol)网络时间协议 的替代品,能更精确、更快的同步时钟,传统NTP需要几个小时,而Chrony仅需要数秒种或数毫秒就可以完成时间同步。

安装这个时间同步服务是很有意义的,因为每台设备的运行环境等都不一样,本地时钟可能会不一致,虽然有校正过,但是过一段时间之后,又可能不一致了,那么对于分布式架构来说,就会造成不好的结果,我们需要不同的设备协同完成,所以需要统一时间。

Chrony由两个程序组成,分别是chronyd和chronyc。
chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步,确定计算机增减时间的比率,并对此进行补偿。
chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。

OpenSSH是SSH协议的免费开源实现,功能包括:实现SSH协议,可以让本地计算机和远程服务器之间建立安全的连接,提供安全的传输通道,保护数据的传输安全。

2.2、安装

分别在两台设备上安装chrony包以及ssh服务器用来实现同步
sudo apt-get install chrony openssh-server

分别输入ifconfighostname 命令,找出其IP地址和主机名
虚拟机(主机)

192.168.1.128 YAB

无人车(从机)

192.168.1.11 jetson-desktop

2.3、修改hosts

修改hosts文件,将两者的IP与主机名都写入里面

所有用户加个可写权限:sudo chmod a+w /etc/hosts

修改hosts文件:gedit /etc/hosts

192.168.1.128 YAB

192.168.1.11 jetson-desktop

修改好了之后,在两台设备上都输入下列命令重启网络,实现两台设备间通信:
sudo /etc/init.d/networking restart

确认服务是否启动
ps -e | grep ssh

也可以互相ping主机名测试下,是否可以ping通,能够ping通就没有问题。

2.4、设置环境变量

接下来就设置环境变量,最好是加入到.bashrc文件
虚拟机(主机)

bash 复制代码
echo "export ROS_HOSTNAME=YAB" >> ~/.bashrc
echo "export ROS_MASTER_URI=http://YAB:11311" >>~/.bashrc
source ~/.bashrc

无人车(从机)

bash 复制代码
echo "export ROS_HOSTNAME=jetson-desktop" >> ~/.bashrc
echo "export ROS_MASTER_URI=http://YAB:11311" >>~/.bashrc
source ~/.bashrc

2.5、启动节点

虚拟机(主机)启动ROS管理节点Master:roscore

无人车(从机)

启动乌龟
rosrun turtlesim turtlesim_node

启动键盘控制
rosrun turtlesim turtle_teleop_key

这样就可以在从机上控制乌龟了,这里也可以看出分布式的优势,可以让相互独立的节点能够相互通信,非常棒。如下图:

当然上面的URI也可以使用IP地址,这个看个人的具体情况吧。

3、不同网段处理

这里可能大家会遇到一个不在同一个网段的情况,这样就不能互相通信,这里以本人的为例,怎么更改虚拟中的IP网段。

本人电脑是有线网络,IP是在192.168.3.xx的网段,虚拟机一般都是直连物理网络,所以IP地址也是在192.168.3.xx这个网段

而无人车使用的是无线USB网卡(Realtek 8188GU Wireless LAN 802.11n USB NIC) ,IP地址是192.168.1.11

由于虚拟机跟无人车不在同一个网段里面,所以不能相互通信,这个时候我们需要使用到**"虚拟网络编辑器"**,如下图:

点击进来之后,右下角点击"更改设置",如下图:

将出现一个新的VMnet0 选择,我们点击**"桥接模式(将虚拟机直接连接到外部网络)(B)",其中已桥接至:选择无人车的无线USB网卡**即可。如下图:

最后我们来到虚拟机的设置,点击**"网络适配器",网络连接,这里我们选择"自定义(U):特定虚拟网络",选择上面配置好的VMnet0**即可。如下图:

重启网络:sudo /etc/init.d/networking restart

我们在两台设备上面分别互相ping下,不出意外是可以互相ping通了,如下图:

相关推荐
刷帅耍帅9 小时前
设计模式-桥接模式
设计模式·桥接模式
小白爱电脑10 小时前
WIFI网速不够是不是光猫的“路由模式”和“桥接模式”配置错了?
网络·智能路由器·桥接模式
engchina2 天前
WSL2 中配置桥接模式、虚拟交换机及固定 IP
网络协议·tcp/ip·桥接模式
且随疾风前行.6 天前
技术成神之路:设计模式(十九)桥接模式
设计模式·桥接模式
LKID体9 天前
桥接模式和NET模式的区别
桥接模式
java_heartLake10 天前
设计模式之桥接模式
java·设计模式·架构·桥接模式
仙魁XAN12 天前
Unity 设计模式 之 结构型模式 -【适配器模式】【桥接模式】 【组合模式】
unity·设计模式·组合模式·桥接模式·适配器模式
学步_技术17 天前
Python编码系列—Python桥接模式:连接抽象与实现的桥梁
开发语言·python·桥接模式
丶白泽17 天前
重修设计模式-结构型-桥接模式
java·设计模式·桥接模式
查士丁尼·绵18 天前
openssh8.6p1编译安装
openssh