ROS入门学习记录(二) 多机分布式通讯踩坑

1723
0
2020年4月15日 18时02分

笔记本作为桌面电脑,树莓派(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 后面的)ifconfig

如果你已经使用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

修改为如下内容(这段古月老师有讲,可以参考他之前的博文和视频),提醒一下,别名最好不要修改,你打开终端之后@后面的名字是啥就写成啥最好

我这里给本地环回也添加了一个识别名称,亲测好用

工控机和主控机都需要配置相关内容,方便互相查找

127.0.0.1 localhost
127.0.1.1 ubuntu
192.168.0.25 ubuntu
192.168.0.7 Lap

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文件后最好重启一下网络,否则设置可能不会立即生效

以上。

 

发表评论

后才能评论