ROS中的分布式通讯(树莓派与虚拟机)

ROS中的分布式通讯(树莓派与虚拟机)

  • 一、前言
  • 二、树莓派连接WIFI
  • 三、查找局域网下的其他设备 IP
  • 四、确定可以ping通
  • 五、配置文件修改
  • 六、配置主机 IP
  • 七、配置从机 IP
  • 八、测试
  • 九、可能会遇到的问题

一、前言

在移动机器人开发过程中,RVIZ 是一个非常好用的可视化工具,但是运行ROS系统的硬件平台往往都是放在机器人上随机器人运动的,不利于我们外接显示屏去使用RVIZ。

所以,在本篇文章中,将介绍如何在ROS中进行分布式通信,实现效果是在树莓派(树莓派安装在机器人上)上运行roscore时,在个人PC中即使不运行roscore也可以正常运行RVIZ。

在正式介绍实现过程前,先确保以下几点:
1、树莓派安装好 ubuntu 以及 ROS 系统;个人PC中安装好 虚拟机、 ubuntu 以及 ROS 系统。在本文中,虚拟机用的是VMWare,ubuntu是20.04版本,ROS是 noetic 版本。
2、使树莓派与个人PC处于同一局域网下;

二、树莓派连接WIFI

树莓派终端输入下面指令打开编辑文本:

sudo gedit /etc/netplan/50-cloud-init.yaml

改为以下格式即可(注意每行的缩进,一个缩进为4个空格,不能使用TAB键):
ROS中的分布式通讯(树莓派与虚拟机)_第1张图片

然后使用sudo reboot指令重启树莓派,使配置生效。

三、查找局域网下的其他设备 IP

通过命令行输入arp -a指令就可以看到树莓派的 IP 地址。

方法1、在个人PC端输入arp -a指令:
ROS中的分布式通讯(树莓派与虚拟机)_第2张图片
PS:树莓派的 IP 一般不会是.1.255结尾的,并且前缀是和本机的IP一样的,如上图所示,所以树莓派IP应该是 192.168.43.8。

方法2、在树莓派端输入arp -a指令可以看到其他设备IP:
ROS中的分布式通讯(树莓派与虚拟机)_第3张图片但是这种方法不能看到本机 IP,只能看到其他设备的 IP

方法3、树莓派端输入iwconfig指令可以看到 WIFI 名称:
ROS中的分布式通讯(树莓派与虚拟机)_第4张图片方法4、树莓派端输入ifconfig -a指令可以看到本机 IP:
ROS中的分布式通讯(树莓派与虚拟机)_第5张图片

四、确定可以ping通

找到 IP 后,可以使用ping 对方IP的指令看看是否能ping通,如:
ROS中的分布式通讯(树莓派与虚拟机)_第6张图片如果虚拟机无法ping通树莓派,可以看看本文第九章内容。

五、配置文件修改

分别修改不同计算机的 /etc/hosts 文件,在该文件中加入对方的IP地址和计算机名:

主机端:
从机的IP 从机计算机名
ROS中的分布式通讯(树莓派与虚拟机)_第7张图片

从机端:
主机的IP 主机计算机名
ROS中的分布式通讯(树莓派与虚拟机)_第8张图片

六、配置主机 IP

配置主机的 IP 地址:

树莓派端输入以下命令配置.bashrc文件:

sudo gedit ~/.bashrc

加入以下代码:

export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=主机IP

如:
设置完后,保存退出。

然后是最最最关键的一步:一定要source一下,不然运行不了roscore

source ~/.bashrc

ROS中的分布式通讯(树莓派与虚拟机)_第9张图片

七、配置从机 IP

配置从机的 IP 地址,从机可以有多台,每台都做如下设置:

我这里从机是我的笔记本电脑,所以我在虚拟机端输入以下命令配置.bashrc文件:

sudo gedit ~/.bashrc

加入以下代码:

export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=从机IP

如:
设置完后,保存退出。

然后是最最最关键的一步:一定要source一下,不然运行不了roscore

source ~/.bashrc

ROS中的分布式通讯(树莓派与虚拟机)_第10张图片

八、测试

1、主机(树莓派)启动 roscore

2、主机启动RVIZ,可以启动则为配置成功

九、可能会遇到的问题

1、虚拟机无法ping通树莓派:
在ping的时候出现网络不可达或者目标不可达的情况,并且右上角的网络小图标也不见了。
ROS中的分布式通讯(树莓派与虚拟机)_第11张图片

可尝试以下操作:

sudo service network-manager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start

执行到这一步可以尝试使用ping指令测试网络是否通畅。

如果图标或者网络还不正常可以继续尝试下面两条命令。

sudo gedit /etc/NetworkManager/nm-system-settings.conf

把false改成true

sudo service network-manager restart

2、树莓派端运行roscore没有反应,要按几次ctrl+c才能中断运行:
这种情况一般是由于切换了 WiFi 造成的,切换 WIFI 后必须安装本文第五六七章修改对应文件才可以,并且一定要source一下:

source ~/.bashrc

你可能感兴趣的:(ROS,分布式,自动驾驶,ubuntu)