ROS 分布式通信-爱代码爱编程
ROS是一种分布式软件框架,节点之间通过松耦合的方式进行组合。
如何实现分布式多机通信
(1)设置IP地址,确保底层链路的联通
在 ubuntu 下输入如下指令,查询 ubuntu 的ip地址:
ifconfig
在树莓派的终端中输入如下指令
sudo vi /etc/hosts
Ubuntu vi文本编辑器使用方法:https://blog.csdn.net/qq_44989881/article/details/115870950
在 hosts 文件中添加ubuntu的ip地址和名称
测试配置的地址是否联通
ping [配置的计算机名称]
例如:
ping ubuntu
在 树莓派 下输入如下指令,查询 树莓派 的ip地址:
ifconfig
然后在树莓派的终端中输入如下指令
sudo gedit /etc/hosts
添加树莓派的ip地址 和名称
测试配置的地址是否联通
ping [配置的计算机名称]
例如:
ping huike
做完以上操作,如果双向网络畅通,说明底层网络通信已经没有问题,主机与树莓派之间的网络已经联通。
设置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
从机终端输入:
source ~/.bashrc
source /etc/init.d/networking
注意:当设置从机 ROS_MASTER_URI 为主机(不为从机本机)后,从机上是不能运行 roscore 的。
主机 ubuntu 启动海龟节点
rosrun turtlesim turtlesim_node
在从机树莓派上输入:
rostopic list
若能成功显示话题名,则说明成功。
查看具体的节点信息
rosnode info /rosout
问题解决
注意:在使用树莓派ping 虚拟机中的 ubuntu ping不通的情况下,显示如下:
如果 ping 不通则关闭 ubuntu 的防火墙或者更改VMware网络连接模式,就可以ping通。以下是解决 ping 不通的方法。
如果linux虚拟机可以ping通树莓派,树莓派无法ping通虚拟机
更改VMware网络连接模式
-
将VMware的网络连接模式修改为 桥接模式
-
查看是否安装 VMware Bridge Protocol
查看当前防火墙状态
在Ubuntu中 我们使用以下命令查看当前防火墙状态。
sudo ufw status
- inactive状态是防火墙关闭状态
- active是防火墙开启状态。
开启防火墙
在Ubuntu中 使用以下命令来开启防火墙
sudo ufw enable
开启后,查看当前防火墙状态
sudo ufw status
开启防火墙后的状态为active,说明防火墙开启成功。
关闭防火墙
在Ubuntu中 使用以下命令来关闭防火墙。
sudo ufw disable
关闭后,查看当前防火墙状态
sudo ufw status
如果是显示的状态位 inactive 说明防火墙已经关闭掉了。
完成以上操作,可以使树莓派ping 通设置的 ubuntu 的 IP 地址