ROS 分布式通信

ROS是一种分布式软件框架,节点之间通过松耦合的方式进行组合。

如何实现分布式多机通信

(1)设置IP地址,确保底层链路的联通

在 ubuntu 下输入如下指令,查询 ubuntu 的ip地址:

ifconfig

ROS 分布式通信_第1张图片

在树莓派的终端中输入如下指令

sudo vi /etc/hosts

Ubuntu vi文本编辑器使用方法:https://blog.csdn.net/qq_44989881/article/details/115870950

在 hosts 文件中添加ubuntu的ip地址和名称
ROS 分布式通信_第2张图片

测试配置的地址是否联通

ping [配置的计算机名称]

例如:

ping ubuntu

ROS 分布式通信_第3张图片

在 树莓派 下输入如下指令,查询 树莓派 的ip地址:

ifconfig

ROS 分布式通信_第4张图片

然后在树莓派的终端中输入如下指令

sudo gedit /etc/hosts

添加树莓派的ip地址 和名称
ROS 分布式通信_第5张图片

测试配置的地址是否联通

ping [配置的计算机名称]

例如:

ping huike

ROS 分布式通信_第6张图片

做完以上操作,如果双向网络畅通,说明底层网络通信已经没有问题,主机与树莓派之间的网络已经联通。

设置ROS_MASTER_URI

接下来是如何实现分布式多机通信
(2)在从机端设置ROS_MASTER_URI,让从机找到ROS Master

主机端 ubuntu 启动ROS Master 与海龟仿真节点

roscore

然后在树莓派编辑 .bashrc 文件 设置ROS Master的位置

vi .bashrc

在 .bashrc 文件最后一行添加以下代码中的任意一个。

export ROS_MASTER_URI=http://ubuntu:11311                          #(当前终端有效)
export ROS_HOSTNAME=ubuntu

或在终端中输入,以下指令在所有终端都有效。

echo "export ROS_MASTER_URI=http://hcx-pc:11311">> ~/.bzshrc  
echo "export ROS_HOSTNAME=ubuntu">> ~/.bzshrc 

注:ROS Master 默认的端口号为:11311
ROS 分布式通信_第7张图片

从机终端输入:

source ~/.bashrc
source /etc/init.d/networking

注意:当设置从机 ROS_MASTER_URI 为主机(不为从机本机)后,从机上是不能运行 roscore 的。

主机 ubuntu 启动海龟节点

rosrun turtlesim turtlesim_node

ROS 分布式通信_第8张图片
在从机树莓派上输入:

 rostopic list

若能成功显示话题名,则说明成功。

ROS 分布式通信_第9张图片

查看具体的节点信息

rosnode info /rosout

ROS 分布式通信_第10张图片

问题解决

注意:在使用树莓派ping 虚拟机中的 ubuntu ping不通的情况下,显示如下:
在这里插入图片描述

如果 ping 不通则关闭 ubuntu 的防火墙或者更改VMware网络连接模式,就可以ping通。以下是解决 ping 不通的方法。

如果linux虚拟机可以ping通树莓派,树莓派无法ping通虚拟机

更改VMware网络连接模式

  • 将VMware的网络连接模式修改为 桥接模式
    ROS 分布式通信_第11张图片

  • 查看是否安装 VMware Bridge Protocol

ROS 分布式通信_第12张图片

查看当前防火墙状态

在Ubuntu中 我们使用以下命令查看当前防火墙状态。

sudo ufw status
  • inactive状态是防火墙关闭状态
  • active是防火墙开启状态。

在这里插入图片描述

开启防火墙

在Ubuntu中 使用以下命令来开启防火墙

sudo ufw enable

开启后,查看当前防火墙状态

sudo ufw status

开启防火墙后的状态为active,说明防火墙开启成功。
ROS 分布式通信_第13张图片

关闭防火墙

在Ubuntu中 使用以下命令来关闭防火墙。

sudo ufw disable

关闭后,查看当前防火墙状态

sudo ufw status

如果是显示的状态位 inactive 说明防火墙已经关闭掉了。
ROS 分布式通信_第14张图片
完成以上操作,可以使树莓派ping 通设置的 ubuntu 的 IP 地址

你可能感兴趣的:(ROS)