原文地址: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.

转载于:https://www.cnblogs.com/qiuheng/p/9133010.html

[转]在ROS下使用zeroconf配置多机通信相关推荐

  1. ROS下使用stm32 与rosserial进行通信的开发说明及源代码示例

    关于stm32下的ROS开发环境介绍说明,此开发环境是在Linux下使用stm32的标准库"STM32F10x_StdPeriph_Driver3.5",进行stm32开发,整体开 ...

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

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

  3. 【ROS】学习笔记一 ubuntu16.04下vs code配置ros环境并编写helloworld程序

    [ROS]ubuntu16.04下vs code配置ros环境并编写helloworld程序 一.vs code下载 1.相关配置要求: (1)系统为ubuntu16.04 (2)已安装好kineti ...

  4. 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 ...

  5. ROS下配置镭神智能c16雷达信息

    ROS下配置镭神智能c16雷达信息 用户配置写入协议(UCWP) 介绍 3.0 头部 3.1 电机 代码详情 3.2 以太网 3.3 时间 用户配置写入协议(UCWP) 介绍 用户配置写入协议:Use ...

  6. 话题通信下ROS项目的结构配置

    话题通信下ROS项目的结构配置 ① 创建符合ROS标准的项目框架 ② 添加构建ROS标准项目文件的库 当我们使用vscode打开ROS标准项目文件时,按下Ctrl+Shift+B可以进行编译,但是我们 ...

  7. Xsens MTi传感器 ROS下配置

    Xsens MTi传感器 ROS 1. 概述 2. MTI设置 MTmanager 3. ROS下信息发布 MTSDK 4. 找不到设备 5. 参考链接 6. 延伸阅读 传感器配置 节点程序分析 经典 ...

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

    1 ROS安装步骤 1.1 ROS版本 ROS目前只支持在Linux系统上安装部署, 它的首选开发平台是Ubuntu. 注:如果Ubuntu版本和ROS版本不对应的话,安装就不会成功了- 笔者使用的平 ...

  9. 深入理解ROS技术 【2】ROS下的模块详解(66-128)

    概述: 本篇以字典方式,列出所有的Ros下模块,给出初步解释.并针对其重要程度,用星级标出重要性.这些概念解释中,还列出其它文章的链接. 模块表述: 65 interactive_marker_tut ...

最新文章

  1. 时间戳的转换和星期转换
  2. 斗地主程序设计c语言,C语言斗地主游戏v0.1
  3. python 命令行参数—argparse模块的使用
  4. 远程研发能有多高效?手淘新版本上线只用了5天!
  5. 每日程序C语言46-函数之间的调用
  6. “被狗啃”的按钮引发的开源社区信任危机
  7. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (3) - 流水线概述
  8. Python把列表中的数字尽量等分成n份
  9. javax包 rpc_javax.xml.rpc和javax.wsdl分别属于哪个jar包?
  10. 数据结构上机实践第11周项目3 - 图遍历算法实现
  11. mysql 试题_超经典MySQL练习50题,做完这些你的SQL就过关了
  12. 网易云音乐 linux x32,网易云音乐 for Mac
  13. 企业信息化规划与设计
  14. Java 项目中使用 TongLink/Q 实现消息队列传输
  15. 怎样批量处理编辑图片?这3个方法你一定要会
  16. 一条Insert语句怎么优化和解构
  17. Phyton Socket发送接收Modbus数组
  18. 计算机课板书图片,小学信息技术课《插入图片及剪贴画》说课稿
  19. [Java] 类和对象(简介,封装,内存机制,构造方法)
  20. Android高级UI系列教程(二)

热门文章

  1. 物联网基础知识_联网| 基础知识能力问答 套装1
  2. C#省市二级联动(王者荣耀挑选英雄为例)
  3. Java——网络编程练习
  4. JAVA JDK环境渲染
  5. ffplay分析(视频解码线程的操作)
  6. CodeForces 560A,B,C
  7. Qt编译错误:无法解析的外部符号 __imp__CloseServiceHandle __imp__OpenSCManager
  8. ffmpeg简单使用小记
  9. C++ 对引用的理解5
  10. 【数据结构】普通二叉树的实现