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通了,如下图:

相关推荐
morning_judger20 小时前
【设计模式系列】桥接模式(十三)
java·设计模式·桥接模式
无敌岩雀2 天前
C++设计模式结构型模式———桥接模式
c++·设计模式·桥接模式
ROS机器人学习与交流4 天前
虚拟机桥接模式连不上,无法进行SSH等远程操作
桥接模式
wrx繁星点点8 天前
桥接模式:解耦抽象与实现的利器
android·java·开发语言·jvm·spring cloud·intellij-idea·桥接模式
zzzhpzhpzzz12 天前
设计模式——桥接模式
算法·设计模式·桥接模式
没刮胡子13 天前
CentOS6升级OpenSSH9.2和OpenSSL3
linux·openssh·centos6·升级openssl
dc爱傲雪和技术14 天前
桥接模式、NAT模式 和 主机模式(Host-Only)区别
网络·桥接模式
wyh10611514 天前
07 设计模式-结构型模式-桥接模式
java·设计模式·桥接模式·1024程序员节
自古圣贤皆寂寞15 天前
VirtualBox虚拟机桥接模式固定ip详解
桥接模式·固定ip·virtualbox虚拟机桥接·虚拟机动态ip·桥接模式有什么好处·虚拟机网络设置推荐
X先生__15 天前
基于SpringBoot设计模式之结构型设计模式·桥接模式
spring boot·设计模式·桥接模式