在移动机器人开发过程中,RVIZ 是一个非常好用的可视化工具,但是运行ROS系统的硬件平台往往都是放在机器人上随机器人运动的,不利于我们外接显示屏去使用RVIZ。
所以,在本篇文章中,将介绍如何在ROS中进行分布式通信,实现效果是在树莓派(树莓派安装在机器人上)上运行roscore
时,在个人PC中即使不运行roscore
也可以正常运行RVIZ。
在正式介绍实现过程前,先确保以下几点:
1、树莓派安装好 ubuntu 以及 ROS 系统;个人PC中安装好 虚拟机、 ubuntu 以及 ROS 系统。在本文中,虚拟机用的是VMWare,ubuntu是20.04版本,ROS是 noetic 版本。
2、使树莓派与个人PC处于同一局域网下;
树莓派终端输入下面指令打开编辑文本:
sudo gedit /etc/netplan/50-cloud-init.yaml
改为以下格式即可(注意每行的缩进,一个缩进为4个空格,不能使用TAB键):
然后使用sudo reboot
指令重启树莓派,使配置生效。
通过命令行输入arp -a
指令就可以看到树莓派的 IP 地址。
方法1、在个人PC端输入arp -a
指令:
PS:树莓派的 IP 一般不会是.1
或.255
结尾的,并且前缀是和本机的IP一样的,如上图所示,所以树莓派IP应该是 192.168.43.8。
方法2、在树莓派端输入arp -a
指令可以看到其他设备IP:
但是这种方法不能看到本机 IP,只能看到其他设备的 IP
方法3、树莓派端输入iwconfig指令可以看到 WIFI 名称:
方法4、树莓派端输入ifconfig -a
指令可以看到本机 IP:
找到 IP 后,可以使用ping 对方IP
的指令看看是否能ping
通,如:
如果虚拟机无法ping通树莓派,可以看看本文第九章内容。
分别修改不同计算机的 /etc/hosts
文件,在该文件中加入对方的IP地址和计算机名:
配置主机的 IP 地址:
树莓派端输入以下命令配置.bashrc
文件:
sudo gedit ~/.bashrc
加入以下代码:
export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=主机IP
如:
设置完后,保存退出。
然后是最最最关键
的一步:一定要source
一下,不然运行不了roscore
source ~/.bashrc
配置从机的 IP 地址,从机可以有多台,每台都做如下设置:
我这里从机是我的笔记本电脑,所以我在虚拟机端输入以下命令配置.bashrc
文件:
sudo gedit ~/.bashrc
加入以下代码:
export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=从机IP
如:
设置完后,保存退出。
然后是最最最关键
的一步:一定要source
一下,不然运行不了roscore
source ~/.bashrc
1、主机(树莓派)启动 roscore
2、主机启动RVIZ,可以启动则为配置成功
1、虚拟机无法ping通树莓派:
在ping的时候出现网络不可达
或者目标不可达
的情况,并且右上角的网络小图标也不见了。
可尝试以下操作:
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