原文地址:http://www.corvin.cn/635.html,转载主要方便随时查阅,如有版权要求,请及时联系。

0x00 为何需要配置ROS多机通信

众所周知ROS是分布式系统,因此可以将机器人需要处理的复杂、计算量大的任务分解在多台机器上分开运行,这样就可以降低主系统出现异常的风险,因此我们就需要配置网络保证各ROS主机之间可以互相通信。另外我们在开发时也经常在本地计算机上来监视远程ROS主系统的运行状态也需要配置多机通信,在这里我们使用zeroconf来配置多机通信,zeroconf的全称是Zero Configuration Networking(零配置网络),是一种用于自动生成可用IP地址的网络技术,不需要额外的手动配置和专属的配置服务器。其目标是让非专业用户也能便捷的连接各种网络设备,例如计算机,打印机等。整个搭建网络的过程都是通过程式自动化实现。如果没有zeroconf,用户必须手动配置一些服务,例如DHCP、DNS,计算机网络的其他设置等。这些对非技术用户和新用户们来说是很难的事情。

当然现在使用的ROS1.0还不是真正的分布式系统,因为仍然是需要一个master主节点来协调各分节点的通信。在不久将来的ROS2.0更高程度上实现了去中心化,使用DDS(Data Distribution Service)即数据分发服务, 目前已经广泛应用于国防、民航、工业控制等领域, 成为分布式实时系统中数据发布/订阅的标准解决方案,更多关于DDS的介绍可以参考后面的参考资料提供的维基百科DDS的网址。


0x01 安装软件包并配置zeroconf

(1)保证多机时间同步

在ROS网络中,由于tf转换和很多消息类型都被标上了时间戳,机器之间的时间同步就非常重要了,一种使各计算机保持时间同步状态的方法就是在各计算机上安装chrony和ntpdate软件包,该软件包会保持计算机的时钟与网络上时间服务器的时钟一致,我们使各计算机的时间与时间服务器时间同步来达到各计算机时间同步的目的,使用如下命令来安装chrony和ntpdate:

sudo apt-get install -y chrony ntpdate

在这里我使用本地装有indigo的台式计算机和树莓派装有kinetic的系统作为演示,当然你选择两个笔记本电脑也是可以的,下面是安装过程:

当安装好软件后就可以来进行时间同步了,时间同步命令如下:

sudo ntpdate -u cn.ntp.org.cn

(2)使用Zeroconf配置ROS主机间通信

在经常使用的Linux系统上,如ubuntu系统使用avahi来实现zeroconf,avahi 是Zeroconf规范的开源实现,其包含了一整套多播DNS(multicastDNS)/DNS-SD网络服务的实现。Avahi允许程序在不需要进行手动网络配置的情况下,在一个本地网络中发布和获知各种服务和主机。例如,当某用户把他的计算机接入到某个局域网时,如果他的机器运行有Avahi服务,则Avahi程式自动广播,从而发现网络中可用的打印机、共享文件和可相互聊天的其他用户。这有点象他正在接收局域网中的各种网络广告一样。Linux下系统实际启动的进程名,是avahi-daemon,通过以下命令可以查看当前系统上是否启动了avahi-daemon守护进程:

ps aux|grep avahi

可以发现两个ROS主机都已经默认启动了avahi-daemon守护进程,那么接下来就可以来配置了:

  • 获取主机名称并测试主机间连通性

    使用hostname来得到主机名称,那么相应的zeroconf主机名就是在该主机名称后面加上“.local”即可:

  • 设置ROS_MASTER_URI和ROS_HOSTNAME变量

在ROS网络中,指定其中一台设备作为ROS master主机,那么该主机将负责运行roscore进程,其他设备必须配置ROS_MASTER_URI环境变量来指向该master主机。对于所有的设备都必须要设置的是ROS_HOSTNAME变量,这个ROS_HOSTNAME变量就是我们上面得到的zeroconf主机名。

接下来我们分别修改台式机和树莓派的home目录下的.bashrc文件,在其中增加如下框中配置,在这里我们把树莓派作为ROS master主机,所以ROS_MASTER_URI指向的是自己robot.local。我们又设置了台式机的ROS_MASTER_URI也指向robot.local,这就说明我们需要把台式机作为ROS的一个从节点设备,当然如果想修改台式机为master主机,树莓派为从节点设备的话只需要将各自的ROS_MASTER_URI中的robot.local修改为台式机的zeroconf主机名workspace.local即可。


0x02 测试ROS主从机之间的通信

当配置好ROS的ROS_HOSTNAME和ROS_MASTER_URI后,我们需要重新打开一个新终端才能使上述的配置生效。接下来我们就可以在master主机上启动roscore来测试主从机的ROS通信是否正常了,在台式机上使用rostopic list来看是否能获取到话题列表,如果能获取到说明ROS的主从机通信正常:

接下来测试使用台式机来遥控master主机上的turtlesim,查看话题能否正常订阅和发布:

  • 在树莓派上启动roscore后,还需要启动turtlesim一个仿真小乌龟的节点:

    rosrun turtlesim turtlesim_node

  • 在台式机上运行键盘遥控小乌龟移动的节点:

    rosrun turtlesim turtle_teleop_key

    还可以启动rqt_plot来同步查看小乌龟的一些数据,直接使用rqt_plot启动即可,我们在rqt_plot中可视化turtle1/pose中各数据,当然我们在本地台式机上打开rviz进行调试也是可以的,经常有小伙伴尝试在树莓派上打开rivz来进行调试,经常无法在树莓派上正常启动,因为rviz特别消耗系统资源,这样我们就可以在本地台式机上进行调试了,具体的测试效果如下所示:

  • 接下来我们使用ssh来进行连接ROS主机就比较方便了,即使我们不知道对方的IP地址也可以连接了,只需要直接连接该主机的zeroconf主机名即可:


0x03 注意事项

[1].需要注意该配置过程是基于ROS主从机在同一个路由器下,即必须要求在同一个IP地址段内,如果想通过互联网将在两个不同地址段的ROS主机通信就比较复杂了(即一台ROS主机在公司,你的ROS从机在家里,想通过在家里直接调试公司里的ROS机器人),不在本教程讨论范围内。


0x04 参考资料

[1].更多关于Zeroconf的介绍可以在官网地址查询[OL]. http://www.zeroconf.org/

[2].维基百科上关于数据分发服务DDS的介绍[OL]. https://en.wikipedia.org/wiki/Data_Distribution_Service

[3].R.帕特里克-戈贝尔 著 J.罗哈斯 刘柯汕 彭也益 刘振东 李家能 黄玲玲 译. ROS入门实例[M]. 广州:中山大学出版社. 2016. 13-17.

[转]在ROS下使用zeroconf配置多机通信的更多相关文章

  1. openvswitch vlan下的虚拟机与物理机通信

    1,安装openvswitch ,图形界面显示等用到的安装包. yum install libvirt openvswitch python-virtinst xauth tigervnc -y 2, ...

  2. ZED 相机 && ORB-SLAM2安装环境配置与ROS下的调试

    注:1. 对某些地方进行了更新(红色标注),以方便进行配置. 2. ZED ROS Wrapper官方github已经更新,根据描述新的Wrapper可能已经不适用与Ros Indigo了,如果大家想 ...

  3. ORB-SLAM2(2) ROS下配置和编译

    1配置USB相机 1.1网友参考: http://www.liuxiao.org/2016/07/ubuntu-orb-slam2-%E5%9C%A8-ros-%E4%B8%8A%E7%BC%96%E ...

  4. Ubuntu虚拟机+ROS+Android开发环境配置笔记

    Ubuntu虚拟机+ROS+Android开发环境配置笔记 虚拟机设置: 1.本地环境:Windows 7:VMWare:联网 2.虚拟环境 :Ubuntu 14.04. 比較稳定,且支持非常多ROS ...

  5. ROS入门笔记(二):ROS安装与环境配置及卸载(重点)

    ROS入门笔记(二):ROS安装与环境配置及卸载(重点) [TOC] 1 ROS安装步骤 1.1 ROS版本 ROS目前只支持在Linux系统上安装部署, 它的首选开发平台是Ubuntu. 发布时间 ...

  6. Linux下安装和配置JDK与Tomcat(升级版)

    在这个版本 Linux下安装和配置JDK与Tomcat(入门版) 的基础上优化升级 1.下载相关软件 apache-tomcat-6.0.37.tar.gz jdk-6u25-linux-i586-r ...

  7. Centos下安装和配置SVN

    1.安装SVN服务 #检查现有版本 rpm -qa subversion #如果存储旧版本,卸载旧版本SVN yum remove subversion #安装SVN yum install subv ...

  8. Win10下Android studio配置

    Win10下Android studio配置 一.安装Android Studio的准备工作 1.下载好JDK,去官网上找一个下载下来 2.安装JDK.并配置环境变量.安装过程:本人将使用的是jdk- ...

  9. LSD-SLAM深入学习(1)-基本介绍与ros下的安装

    前言 借鉴来自RGB-D数据处理的两种方法-基于特征与基于整体的,同样可以考虑整个图片的匹配,而不是只考虑特征点的…… 一般这种稠密的方法需要很大的计算量,DTAM: Dense tracking a ...

随机推荐

  1. Jenkins安装部署项目

    Jenkins安装部署项目 配置JDK git maven 部署到服务器 一.新建任务 二.配置jenkins 三.添加构建信息 四.应用.保存 五.踩坑填坑记录 5.1没有jar包的情况 5.2无法 ...

  2. jenkins 简介和简单操作

    持续集成:Continuous Intergration (CI) 持续交付:Continuous Delivery(CD) 持续部署:Continuous Deployment(CD) jenkin ...

  3. 数据中心网络技术新贵:VXLAN与园区网络虚拟化

    摘要:为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生. 1 概述 传统数据中心网络面临的问题 虚拟机规模受设备表项规格限制 在传统二层网络中,交换机通过查询MAC地址表来转发 ...

  4. docker部署 springboot 多模块项目+vue

    之前学习了docker,今天就来试试将这个项目打包成docker镜像并通过运行一个镜像来运行项目.这里使用的项目是el-admin.是一个开源的springboot后端管理框架(前端vue),有兴趣的 ...

  5. B - How Many Tables (多少桌)

    题目大致意思: 有n个人在一起吃饭,有些人互相认识.认识的人想坐在一起,不想跟陌生人坐.例如A认识B,B认识C,那么A.B.C会坐在一张桌子上. 给出认识的人,问需要多少张桌子 Today is Ig ...

  6. E - E(最短路解决源点到多点,多点到源点的和(有向图))

    问从1号点到各个点的距离+各个点到1号点之间的距离和的最小值 详解键连接https://www.cnblogs.com/csx-zzh/p/13411588.html In the age of te ...

  7. codeforces628D. Magic Numbers (数位dp)

    Consider the decimal presentation of an integer. Let's call a number d-magic if digit d appears in d ...

  8. vi、wc、gzip、bzip2、tar、yum安装、dpek、用户信息操作等命令

    命令模式 输入"dd"即可将这一行删除 按下"p"即可粘贴 插入模式: a:从光标这个位置之后插入 A:在行尾插入 i:从光标之前插入 I:行首插入 o:在光标 ...

  9. 如何用 4 个小时搭建一个新 “Clubhouse” ,引爆声音社交新风口

    Clubhouse,基于实时音频技术的声音社交现象级火爆 最近,让硅谷两位顶级 VC 大打出手争相投资的 Clubhouse 火到了国内,甚至在社交圈里 "一码难求",此种火爆程度 ...

  10. SpringBoot引入openfeign 报错:spring-cloud-starter-openfeign:unknown

    现象: 1.maven报错:Cannot resolve org.springframework.cloud:spring-cloud-starter-openfeign:unknown 解决: 在h ...