ROS分布式通信
一般的ROS小车都是树莓派是作为主机,而PC则作为从机,关于分布式框架的搭建流程,接下来讲解,按照第三步流程实现即可,不过在实现此流程前,还需要做准备工作:为树莓派连接无线网络,并设置固定IP,实现如下:
第一步**
1.硬件准备:使用显示屏或 HDMI采集卡连接树莓派安装的是ubuntu18.4**并启动;
2.为树莓派连接无线网络;(巨坑就在此,由于显示屏,没有,HDMI采集卡没到。为此我选择了在电脑上使用XDRP和VNC远程登录树莓派,接下来详谈bug,,如果有显示屏挥着HDMI采集卡可以省去bug解决直接看第三步流程)
3.为树莓派配置静态IP,具体操作如图:
第二步:解决xdrp bug
如果你有显示屏或者HDMi采集卡,那么good lucky,以上步骤轻松解决
但是如果你想用vnc或者XDRP远程连接,那么你会遇到一个巨大bug。
安装VNC,xdrp
xdrp远程连接只需按照这个步骤即可。windows远程桌面连接树莓派通过xrdp服务
使用vnc需要再按照这个使用使用VNC远程控制树莓派的Ubuntu18.4
(个人感觉vnc并不好用,需要先通过ssh开启vnc,vnc才能连接到,也有可能是我没有设置吧,如果有设置方法的也可以指教一下。)
bug:
当你点击wifi准备连接时它会一直出现
**Authentication required. System policy prevents WiFi scans**
提示你输入用户密码,本以为可以输入之后就连接,但是Yamamoto, Japan, you Ancestors,当你输入密码之后,wifi列表就消失了。然后陷入循环。。。。
通过不懈的查询,在一篇博客发现是xdrp的bug原文链接
解决办法:
在 /etc/polkit-1/localauthority/50-local.d 目录下新建一个扩展名为 pkla 的文件,在其中写入如下内容:
[Allow Wifi Scan]
Identity=unix-user:*
Action=org.freedesktop.NetworkManager.wifi.scan;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.network-control
ResultAny=yes
ResultInactive=yes
ResultActive=yes
注意原文说是在 /etc/polkit-1/localauthority/50-local-d这里添加,但是我尝试了很多次,都无法用vim添加上述代码(有兴趣的可以尝试一下,会遇到一系列问题,之后不知道脑子抽了什么筋,发现/etc/polkit-1/localauthority/目录下并没有50-local-d,而是50-local.d,最终在50-local.d创建pkla文件成功解决wifi问题)同时报出color认证也是同样类似解决
这样不需要显示屏,也不需要HDMI采集卡等,可以用你的笔记本就可操控树莓派!!!
第三步:
ROS是一个分布式计算环境。一个运行中的ROS系统可以包含分布在多台计算机上多个节点。根据系统的配置方式,任何节点可能随时需要与任何其他节点进行通信。
因此,ROS对网络配置有某些要求:
所有端口上的所有机器之间必须有完整的双向连接。
每台计算机必须通过所有其他计算机都可以解析的名称来公告自己。
实现
1.准备
先要保证不同计算机处于同一网络中,最好分别设置固定IP,如果为虚拟机,需要将网络适配器改为桥接模式;
2.配置文件修改
分别修改不同计算机的 /etc/hosts 文件,在该文件中加入对方的IP地址和计算机名:
主机端:
从机的IP 从机计算机名
从机端:
主机的IP 主机计算机名
设置完毕,可以通过 ping 命令测试网络通信是否正常。
IP地址查看名: ifconfig
计算机名称查看: hostname
3.配置主机IP
配置主机的 IP 地址
~/.bashrc 追加
export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=主机IP
4.配置从机IP
配置从机的 IP 地址,从机可以有多台,每台都做如下设置:
~/.bashrc 追加
export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=从机IP
测试
1.主机启动 roscore(必须)
2.主机启动订阅节点,从机启动发布节点,测试通信是否正常
3.反向测试,主机启动发布节点,从机启动订阅节点,测试通信是否正常
参考