[转]在ROS下使用zeroconf配置多机通信

原文地址: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的系统作为演示,当然你选择两个笔记本电脑也是可以的,下面是安装过程:

Screenshot from 2018-04-27 13:08:42.png

Screenshot from 2018-04-27 13:14:48.png

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

sudo ntpdate -u cn.ntp.org.cn

Screenshot from 2018-04-27 13:48:39.png

(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

Screenshot from 2018-04-27 14:09:06.png

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

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

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

    Screenshot from 2018-04-27 14:18:11.png

  • 设置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即可。

Screenshot from 2018-04-27 14:54:38.png

 


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

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

Screenshot from 2018-04-27 15:13:23.png

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

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

    rosrun turtlesim turtlesim_node

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

    rosrun turtlesim turtle_teleop_key

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

    1.gif

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

  • Screenshot from 2018-04-27 15:57:56.png


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NGINX原理 之 SLAB分配机制(转)

1 引言 众所周知,操作系统使用伙伴系统管理内存,不仅会造成大量的内存碎片,同时处理效率也较低下。SLAB是一种内存管理机制,其拥有较高的处理效率,同时也有效的避免内存碎片的产生,其核心思想是预分配。其按…

dynamic web module消失不见

2019独角兽企业重金招聘Python工程师标准>>> 方法1:在project Facets选项中勾选Dynamic Web Module即可 方法2: 我用eclipse对项目进行修改名称,修改成功后。项目就没有Deployment Descriptor(如下图红色框中&#xff…

576. 出界的路径数

576. 出界的路径数 给你一个大小为 m x n 的网格和一个球。球的起始坐标为 [startRow, startColumn] 。你可以将球移到在四个方向上相邻的单元格内(可以穿过网格边界到达网格之外)。你 最多 可以移动 maxMove 次球。 给你五个整数 m、n、maxMove、star…

telnet命令发送邮件

下面的例子是用qq的smtp服务器。 set localecho 本地回显启用 telnet smtp.qq.com 25 220 smtp.qq.com Esmtp QQ Mail Server helo sis 250 smtp.qq.com//服务器返回250 smtp.qq.com STARTTLS 220 Ready to start TLS//服务器返回 220 准备开启TLS通讯 auth login 334 VXNlcm5h…

2.18 特殊权限set_uid 2.19 特殊权限set_gid 2.20 特殊权限stick_bit 2.21 软链接文件 2.22 硬连接文件...

2019独角兽企业重金招聘Python工程师标准>>> 特殊权限set_uid set_uid:该权限针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限; 通俗一点讲就是,普通用户想要访问一个没有其他用户可执行权限的目录时,暂时…

【HAVENT原创】Node Express API 通用配置

为什么80%的码农都做不了架构师?>>> ( 基于 Express 4.x ) 启动文件 /app.js: var express require(express); var bodyParser require(body-parser); var proxy require(http-proxy-middleware); var path require(path);var index re…

Linux串口设置参数

为什么80%的码农都做不了架构师?>>> 在Linux环境下,串口名从ttyS0开始依次是ttyS1、ttyS2等。在本程序中,使用ttyS0作为通信串口。在打开ttyS0的时候选项 O_NOCTTY 表示不能把本串口当成控制终端,否则用户的键盘输入信…

STM32F013 十元板

我大拇指般大小。STM32F103C8T6,64K Flash,20K RAM,m3的核。十元,应该是价格极限了吧。 通过USB供电(5V),也可以排针3.3V供电。可惜没有引出5V排针。USB口可以供电和USB通讯,没有USB…

作为一名前端开发工程师,你必须掌握的WEB模板引擎:Handlebars

为什么需要使用模板引擎? 关于为什么要使用模板引擎,按照我常说的一句话就是:不用重复造轮子了。 简单来说,模板最本质的作用是“变静为动”,一切利于这方面的都是优势,不利于的都是劣势。要想很好地实现“…

Zabbix3.4安装详细步骤

Zabbix3.4安装的详细步骤一、zabbix介绍现在大多数公司都会用到监控软件,主流的监控软件就是Zabbix了,当然还会有Nagios等其他的软件:zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种…

cs231n---语义分割 物体定位 物体检测 物体分割

1 语义分割 语义分割是对图像中每个像素作分类,不区分物体,只关心像素。如下: (1)完全的卷积网络架构 处理语义分割问题可以使用下面的模型: 其中我们经过多个卷积层处理,最终输出体的维度是C*H…

array_combine()

转载于:https://www.cnblogs.com/xiaobiaomei/p/8392728.html

composer windows安装

一.前期准备: 1.下载安装包,https://getcomposer.org/download/ 2.在php.ini文档中打开extensionphp_openssl.dll 3.下载php_ssh2.dll、php_ssh2.pdb,http://windows.php.net/downloads/pecl/releases/ssh2/0.12/ 4.把php_ssh2.dll、php_ssh2.pdb文件放php的ext文件夹 5.重启ap…

spring整合mybatis采坑

本来这个错误是整合spring和mybatis遇到的错误,但是一直没有解决,但是在做SpringMVC时也了出现了这样的错误org.springframework.beans.factory.BeanCreationException: Error creating bean with name sqlSessionFactory defined in class path resourc…

处理测试环境硬盘爆满

测试环境经常会收到这类告警 第一步 登陆机器查看硬盘使用 执行df 好吧,使用情况真不妙,根目录占用过大 第二步 确定哪个文件太大或者文件过多 进入爆满的目录,如这里是根目录 cd / 然后找下面哪个文件夹或者文件太大,有几种方式: 1.dusudo du -h --max-depth1 | sort -hr 越前…

LeetCode-46. Permutations

一、问题描述 就是全排列问题。 二、问题解决 应该哪一本数据结构的书上都有讲了。 void get_permute(vector<int>& nums, int pos, vector<vector<int>>& result) {if (nums.size() pos) {result.push_back(nums);return;}for (int i pos; i <…

789. 逃脱阻碍者

789. 逃脱阻碍者 你在进行一个简化版的吃豆人游戏。你从 [0, 0] 点开始出发&#xff0c;你的目的地是 target [xtarget, ytarget] 。地图上有一些阻碍者&#xff0c;以数组 ghosts 给出&#xff0c;第 i 个阻碍者从 ghosts[i] [xi, yi] 出发。所有输入均为 整数坐标 。 每一…

计算机视觉-自定义对象检测器

1、模板匹配 运行指令&#xff1a;python template_matching.py --source 3.jpg --template 2.jpg import argparse import cv2ap argparse.ArgumentParser() ap.add_argument("-s", "--source", requiredTrue, help"Path to the source image"…

297. 二叉树的序列化与反序列化

297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个算法来实现…

Python 08 面向对象

Python 面向对象 1、编程范式 2、面向对象特性 3、属性、方法 4、三大特性 5、高级方法 6、类的特殊成员方法 7、反射 8、异常处理 9、单例模式 一、编程范式 编程&#xff1a;程序员用特定的语法数据结构算法组成的代码来告诉计算机如何执行任务的过程 &#xff0c; 实现一个…