ROS是一种分布式软件框架,节点之间通过松耦合的方式进行组合。
如何实现分布式多机通信
(1)设置IP地址,确保底层链路的联通
在 ubuntu 下输入如下指令,查询 ubuntu 的ip地址:
在树莓派的终端中输入如下指令
Ubuntu vi文本编辑器使用方法
在 hosts 文件中添加ubuntu的ip地址和名称
测试配置的地址是否联通
例如:
在 树莓派 下输入如下指令,查询 树莓派 的ip地址:
然后在树莓派的终端中输入如下指令
添加树莓派的ip地址 和名称
测试配置的地址是否联通
例如:
做完以上操作,如果双向网络畅通,说明底层网络通信已经没有问题,主机与树莓派之间的网络已经联通。
设置ROS_MASTER_URI
接下来是如何实现分布式多机通信
(2)在从机端设置ROS_MASTER_URI,让从机找到ROS Master
主机端 ubuntu 启动ROS Master 与海龟仿真节点
然后在树莓派编辑 .bashrc 文件 设置ROS Master的位置
在 .bashrc 文件最后一行添加以下代码中的任意一个。
或在终端中输入,以下指令在所有终端都有效。
注:ROS Master 默认的端口号为:11311
从机终端输入:
注意:当设置从机 ROS_MASTER_URI 为主机(不为从机本机)后,从机上是不能运行 roscore 的。
主机 ubuntu 启动海龟节点
在从机树莓派上输入:
若能成功显示话题名,则说明成功。
查看具体的节点信息
问题解决
注意:在使用树莓派ping 虚拟机中的 ubuntu ping不通的情况下,显示如下:
如果 ping 不通则关闭 ubuntu 的防火墙或者更改VMware网络连接模式,就可以ping通。以下是解决 ping 不通的方法。
如果linux虚拟机可以ping通树莓派,树莓派无法ping通虚拟机
更改VMware网络连接模式
- 将VMware的网络连接模式修改为 桥接模式
- 查看是否安装 VMware Bridge Protocol
查看当前防火墙状态
在Ubuntu中 我们使用以下命令查看当前防火墙状态。
- inactive状态是防火墙关闭状态
- active是防火墙开启状态。
开启防火墙
在Ubuntu中 使用以下命令来开启防火墙
开启后,查看当前防火墙状态
开启防火墙后的状态为active,说明防火墙开启成功。
关闭防火墙
在Ubuntu中 使用以下命令来关闭防火墙。
关闭后,查看当前防火墙状态
如果是显示的状态位 inactive 说明防火墙已经关闭掉了。
完成以上操作,可以使树莓派ping 通设置的 ubuntu 的 IP 地址