笔记本作为桌面电脑,树莓派(Rasp)作为机器人终端进行多机通讯
先看一下实现效果
在Rasp上运行Master和键盘控制节点,在本机运行GUI界面
0.准备
1、连入同一局域网的两个安装好ROS的设备(在树莓派上安装ROS可参考我上一篇文章)
2、两设备间能进行SSH通讯
1.经典历程尝试
如果网络配置没有问题,可以使用如下方法进行多机通讯,多机通讯的原理其实可以和单机进行类比,在一台机器上运行ROS各种程序可以看做ROSMaster运行在了本地环回的网络上(ifconfig 出来的 lo网卡),到了多机通讯,相当于要在网络上寻找Master并在网络上发布和订阅相关消息
主要参考:
https://blog.csdn.net/hehedadaq/article/details/82898307?ops_request_misc=&request_id=&biz_id=102&utm_source=distribute.pc_search_result.none-task-blog-SOBAIDUWEB-1#bug_113
1.1配置网络
使用
ifconfig
首先查看本机ip 我这里的ip是192.168.0.7(inet 后面的)
如果你已经使用SSH连接到了其他电脑,查看IP这一步应该没有问题,另外还要明晰Rasp的IP
这里有一个小建议,最好把本机和工控机的IP设置成静态IP,否则IP可能会变,给日后的学习和开发造成不必要的麻烦,具体方法有两个
1.1.1图形化界面配置静态IP
右上角找到连接到的局域网,点击WIFI设置,在IPV4选项卡中修改为手动,然后键入之前的IP,子网掩码和网关
1.1.2修改网络配置文件设置静态IP
远程登录到工控机后
sudo vi /etc/network/interfaces
修改文件
前两行是本地环回,尽量不要修改
第三行开始,wlan0 是网卡名,根据自己在ifconfig中查到的进行修改
尤其第四行,意思是把wlan0的inet设置成静态
后面跟上需要设置的相关属性
保存退出
设置完成后重启一下网络
sudo /etc/init.d/networking restart
1.2配置主机(host)
我在第一次尝试多机通讯的时候没有配置这一项,但是后来重启之后发现找不到ROSMaster了,所以,大家可以考虑配置一下主机,其实就是和配置SSH的IP别名一样,告诉计算机某个IP的别名
sudo vi /etc/hosts
修改为如下内容(这段古月老师有讲,可以参考他之前的博文和视频),提醒一下,别名最好不要修改,你打开终端之后@后面的名字是啥就写成啥最好
我这里给本地环回也添加了一个识别名称,亲测好用
工控机和主控机都需要配置相关内容,方便互相查找
<code class="has-numbering">127.0.0.1 localhost 127.0.1.1 ubuntu 192.168.0.25 ubuntu 192.168.0.7 Lap</code>
1.3配置路径
网络配置好两个机器能ping通之后需要配置路径文件,让ROS知道Master在哪原理很简单,就和之前让ROS找功能包一样。
sudo vi .bashrc
在路径文件末尾添加
#设置ROSMaster为机器人IP
export ROS_MASTER_URI=http://192.168.0.25:11311
#设置本机局域网IP(此处为本机IP)
export ROS_IP=192.168.0.25
一定要注意最后面的要写成本机IP,也就是说在工控机上的配置文件要修改成它的IP地址
保存退出source一下
source .bashrc
截止目前,如果没有什么问题,就可以在多机间进行愉快的通讯了,比如在Rasp运行键盘控制节点就能控制笔记本上海龟,不过踩坑才刚刚开始
2.1 网络配置问题,无法运行ROSMaster,报错网络配置有误
很大一部分问题都可能出现在HOST文件的配置上,请再次检查上述文件
主要参考:http://wiki.ros.org/ROS/NetworkSetup#Full_connectivity
如果你能ping通但是运行不了ROSMaster,在排除上述过程中提到的配置方案时,还有可能是其他的网络配置文件被修改了,因为作为一个小白,我在学习的过程中十分勇敢的sudo vi 各种文件并且不备份原始文件,导致多次网络无法链接,这里提醒大家在修改系统文件的时候一定要先备份一份再修改,大家可以看一看本机和Rasp中在前文修改过的
sudo vi /etc/network/interfaces
中是否有输入错而,或者键入文件名错误,系统帮你创建了一个别的名字文件,我就创建了一个inerfaces文件
另外,一个比较简单的方法就是使用工控机访问一下互联网,如果可以,那么绝大多数情况都是可以进行ROS多机通讯的
还可以使用nc(有的版本是netcat)进行端口间通讯实验
Rasp:
ubuntu@ubuntu:~$ nc -l 1234
工控机:
neauzsy@Lap:~$ nc ubuntu 1234
1234是随机选择的端口,(需大于1024,否则需要超级用户权限)
相当于二者共同监听了一个1234端口
这样可以检测是否网络配置无误
相当于高级的ping
如果尝试了无数次上述命令还是无效
可以最后看看防火墙配置是否禁止了相关信息,但是一般默认不会有这种问题
2.2 能够在topiclist中查看消息但是无法订阅
主要参考:https://blog.csdn.net/qq_38441692/article/details/98205852?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158692799919725247653531%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=158692799919725247653531&biz_id=0&utm_source=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-1
还是HOST文件配置问题,详细查看步骤1.2
提醒一下,在修改HOST文件后最好重启一下网络,否则设置可能不会立即生效
以上。