ROS multi-master——multimaster_fkie配置

多主站ROS配置和mutimaster_fkie

ROS版本:kinetic

操作系统:Ubuntu 16.04。

multimaster_fkie:github

1网络配置

1.1路由器

  • 设置无线路由器并连接两台计算机/机器人。
  • 为这两台计算机设置静态IP地址。
  • 相互测试ping命令和ssh。

1.2主机

我们将计算机0定义为主计算机C0,将计算机1定义为客户端计算机C1。

在C0和C1上,备份其/ etc / hosts文件并修改这些文件以注册其IP地址。

注意:最好使用计算机名作为C0和C1的主机名。在这里,“计算机名称”是/ etc / hosts文件中“ 127.0.1.1”旁边出现的名称。ROS和multimaster_fkie的node_manager以不同的方式对待不同种类的“主机名”。只是不要尝试“配置”它们。您最好再次检查/ etc / hostname的内容是否与/ etc / hosts中的名称一致。

一个/ etc / hosts文件示例如下图1所示。现在,让我们使用我自己的计算机作为C0(主机名:yyhu-live)。客户端计算机为C1(主机名:ai-airlab)。

<img>图1 C0上的示例/ etc / hosts文件。
图1 C0上的/ etc / hosts文件示例。↑yyhu-live是我的计算机的主机名。127.0.0.1和192.168.5.101被分配了相同的主机名。

从两端使用新定义的主机名对C0和C1进行ping操作。

1.3 ROS网络

本节主要通过参考pdf组成。(“ Sergi Hernandez Juan和Fernando Herrero Cotarelo的“多主ROS系统”)

在每台计算机上,将此行放入其.bashrc文件中。

export ROS_MASTER_URI=http://yyhu-live:11311

要通过SSH使用ROS,在Ubuntu 16系统上,用户必须在其.bashrc文件中注释以下行,如图2所示。(请参见此处。multimaster_fkie的官方网站也提到了此问题。)

<img>图2在.bashrc文件中要注释的行。 (第6至9行)
图2 .bashrc文件中要注释的行。(第6至9行)↑

 

在每台计算机上使用以下命令检查是否启用了多播功能。

cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

在每台计算机上使用以下命令暂时启用多播功能。

sudo sh -c "echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts"

要永久启用多播功能,请编辑/etc/sysctl.conf文件,添加以下行。

net.ipv4.icmp_echo_ignore_broadcasts=0

并使用以下命令重新启动相关服务。

sudo service procps restart

使用此命令显示当前定义的多播组。通常,应该有一个224.0.0.1组。

netstat -g

使用此命令查看是否所有计算机都响应广播。

ping 224.0.0.1

1.4测试多主ROS网络的可用性

在C0上启动roscore,然后启动master_discovery节点。终端输出如图3所示。

rosrun master_discovery_fkie master_discovery _mcast_group:=224.0.0.1

<img>图3在C0上启动master_discovery节点后的终端输出。
图3在C0上启动master_discovery节点后的终端输出。↑

在C1上,请使用不同的节点名称启动相同的节点。(参考。)

rosrun master_discovery_fkie master_discovery _mcast_group:=224.0.0.1 __name:=master_discovery_ai

注意:name参数前有两个下划线。

如果节点名称相同,则C0将抱怨这种情况并自行终止。

在C0上启动master_sync节点(终端输出如图4所示)。

rosrun master_sync_fkie master_sync

<img>图4启动master_sync节点号C0后的终端输出。
图4启动master_sync节点号C0后的终端输出。↑

在C1上,启动具有不同节点名的 master_sync节点。

rosrun master_sync_fkie master_sync __name:=master_sync_ai

目前,每个master_sync节点都应打印同步信息。此信息将在几秒钟的间隔内刷新。

通过每台计算机上的“ rostopic列表”和“ rosnode列表”列出当前主题和节点,应该会看到相同的结果。如图5所示。

<img>图5主题和节点列表。 在C0上执行。
图5主题和节点列表。在C0上执行。↑

如果一切正常,现在让我们尝试发布和订阅真实数据。在两台计算机中的任何一台上,使用以下命令启动一个匿名节点。

rostopic pub -r 1 /test std_msgs/Int32 1

上面的命令将启动一个匿名节点,并发布一个名称为“ / test”的主题。此节点每秒将发布一个Int32类型值1。现在使用“ rostopic列表”和“ rosnode列表”查看新主题和节点是否存在。结果将类似于图6。

<img>图6新的匿名节点。
图6新的匿名节点。↑

如果/ test在C1上,请使用

rostopic hz /test

在C0上查看C0是否真的可以接收任何实际数据。结果如图7所示。

<img>图7对ROS主题的频率测试。
图7对ROS主题的频率测试。↑

2个node_manager GUI

现在,我们已经配置了一个有效的多主ROS网络,我们可以使用node_manager GUI可视化ROS网络中节点的信息并与这些节点进行交互。

2.1准备一个测试ROS节点

我们将测试node_manager的一些功能,这需要一个示例ROS节点才能使用。

创建一个简单的ROS节点。该节点将仅每秒发布一次字符串消息。该节点是用Python编写的,应该准备启动文件。关联的ROS软件包称为“ test_pub”,而Python脚本称为“ simple_pub.py”。脚本和启动文件可以在这里找到。

由于node_manager严重依赖于名为“ screen”的工具,因此我们必须将其安装在系统中。

目前,任何ROS节点都应在“屏幕”中启动。node_manager假定“屏幕”具有与ROS节点的“名称”相关联的特定“名称”。在“屏幕”中启动ROS节点时,我们必须明确指定“屏幕名称”和“ ROS节点名称”。以test_pub包为例,我们使用以下命令启动其ROS节点(由于已配置了系统范围的ROS_MASTER_URI,因此需要在C0上运行roscore)。

screen -S _simple_pub_launch -dm roslaunch test_pub simple_pub.launch

其中,“ screen”的-S参数指定“ screen”的名称,而“ screen”的-dm参数告诉“ screen”以分离模式启动,并执行指定为其余命令行参数的命令。注意,-S参数和“屏幕”的名称之间有一个空格字符。一旦发出此命令,就可以使用

screen -ls

查看启动是否正常以及“屏幕”的名称是否正确设置。

将此示例节点存储在C1上,以备后用。

2.2测试node_manager

现在,停止C0和C1上所有正在运行的节点,让roscore在C0上运行。在C0上,通过以下方式启动node_manager

node_manager

如图8所示,将显示node_manager的GUI。

<img>图8 node_manager。
图8 node_manager。↑

目前,“ ROS网络”面板(左上角,图8中的#1)显示没有启用的网络。这是因为网络中没有运行master_discovery节点。在“ {SYSTEM}”叶(图8中的#2)下,只有其他两个ROS节点在运行。我们通过单击“ ROS网络”面板上的“开始”按钮(图8中的#3)来启用网络。然后,我们将看到“开始发现”对话框窗口,如图9所示。

<img>图9“开始发现”对话框窗口。
图9“开始发现”对话框窗口。↑

将所有内容保留为默认值(“ MCast组”除外),然后单击“确定”。一个新的master_discovery节点(图10中的#1)将显示在{SYSTEM}叶子下,而新启用的ROS网络id:0将显示在“ ROS Network”面板中(图10中的#2)。图10显示了此视图。

<img>图10 master_discovery节点已启动。
图10 master_discovery节点已启动。↑

现在,我们可以使用图11(#1)中所示的按钮启动master_sync节点。

<img>图11在node_manager中启动master_sync节点。
图11在node_manager中启动master_sync节点。↑

然后,此按钮更改其颜色,并启动一个新的master_sync节点(图11中的#2)。

为了让ROS网络发现新的客户端,我们必须在客户端上手动启动master_discovery节点,本例中为C1。在C1上,使用“其他”节点名称在“屏幕”内启动新的master_discovery节点。如图12所示,我们将看到C1的信息。

screen -S _master_discovery_ai -dm rosrun master_discovery_fkie master_discovery _mcast_group:=224.0.0.1 __name:=master_discovery_ai

<img>图12 master_discovery节点在远程客户端上启动。
图12 master_discovery节点在远程客户端上启动。↑

如果master_discovery节点成功启动,我们可以在node_manager中看到其信息。

现在我们可以通过以下方式在C1上启动示例节点

screen -S _simple_pub_launch -dm roslaunch test_pub simple_pub.launch

启动后,C0上的node_manager将显示其信息,如图13(#1)所示。

<img>图13 / simple_pub_launch节点在远程计算机上启动。
图13在远程计算机上启动的/ simple_pub_launch节点。↑

我们可以使用node_manager提供的工具(图13中的#2)在C0上打开SSH会话,以访问在C1上运行的“屏幕”。选择“ yyhu-live @ ai-airlab [http:// yyhu-live:11311 /]”下的任何节点,单击按钮(图13中的#2),或使用快捷方式“ F3”启动到SSH会话。包含该节点的“屏幕”。将弹出一个对话框,如图14所示,以请求SSH会话的用户名和密码。用户可能必须在打开的SSH会话中第二次输入他/她的密码。

<img>图14 SSH登录对话框。
图14 SSH登录对话框。↑

使用“ Ctrl + a,d”分离并关闭此窗口。

在C1上,用户可以使用

screen -ls

签出“屏幕”列表。

在C0上,用户可以通过单击node_manager的GUI左侧的“停止选择的服务”按钮(图13中的#3)来停止/ simple_pub_launch节点。单击后,将终止C1上的“屏幕”进程,命令“ rosnode list”将不显示/ simple_pub_launch的迹象。

2.3 default_cfg

现在,用户仍然必须手动在C1上(在“屏幕”中)启动ROS节点,以使node_manager看到并与其交互。实际上,multimaster_fkie提供了一种在远程客户端中启动节点的方法。这是通过default_cfg节点实现的。

default_cfg节点需要启动文件。在该启动文件中,用户列出了他/她希望让C0上的node_manager管理的所有节点。default_cfg节点提供了一些其他功能,例如自动启动和重生,延迟启动和条件启动。鼓励用户查看官方文档以了解所有可能的功能。

使用我们的test_pub包,我们为default_cfg组成了一个新的启动文件,如图15所示。

<img>图15 default_cfg节点的test_pub启动文件。
图15 default_cfg节点的test_pub启动文件。↑

请注意,我们为simple_pub_launch节点(在此启动文件中配置的ROS节点名称)配置了延迟的自动启动。然后,我们准备了另一个启动文件,如图16所示,用于启动default_cfg本身(文件名为“ default_cfg_test.launch”) )。

<img>图16用于启动default_cfg本身的启动文件。
图16启动文件以启动default_cfg本身。↑

在此启动文件中,我们启用了自动启动功能,并告知defualt_cfg要启动的节点的信息。然后,我们可以像往常一样使用“屏幕”启动default_cfg。

<span style="color:#111111"><code>screen -S _default_cfg -dm roslaunch default_cfg_fkie default_cfg_test.launch
</code></span>

然后如图17所示,在C0上,我们可以看到有两个新节点被启动。

<img>图17在远程客户端上启动了defult_cfg。
图17在远程客户端上启动的defult_cfg。↑

如果我们可以快速操作计算机(或设置较大的延迟时间来自动启动),则可以看到/ simple_pub节点在请求的延迟后被启动,如图15所示的启动文件中所示。

现在,用户可以通过单击C0上的node_manager的“开始选择的服务”和“停止选择的服务”按钮(图13中的#4和#3)来停止或重新启动ROS节点,以远程控制该节点。

2.4其他

要停止整个ROS网络,请退出node_manager,并停止roscore,请使用节点面板(较大的红叉)上的红叉按钮(请参见图18)。单击后,“ Close / Stop / Shutdown”(关闭/停止/关闭)对话框将显示在最前面,如图19所示。选择“ stop ROS”以同时退出roscore。请注意,选择“关闭主机”将关闭C0计算机。

<img>图18较大的红叉。
图18较大的红叉。↑

<img>图19“关闭/停止/关闭”对话框。
图19“关闭/停止/关闭”对话框。↑

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

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

相关文章

Docker入门

1. Docker简介: docker是一个基于LXC的高级容器引擎。简单地说&#xff0c;docker是一个轻量级的虚拟解决方案&#xff0c;或者说它是一个超轻量级的虚拟机&#xff08;容器&#xff09;。 Docker是一个开源的引擎&#xff0c;可以轻松的为任何应用创建一个轻量级的、可移植的、…

Gmapping——从原理到实践

概述 在SLAM中&#xff0c;机器人位姿和地图都是状态变量&#xff0c;我们需要同时对这两个状态变量进行估计&#xff0c;即机器人获得一张环境地图的同时确定自己相对于该地图的位置。我们用x表示机器人状态&#xff0c;m表示环境地图&#xff0c;z表示传感器观测情况&#xf…

【机器学习经典算法源码分析系列】-- 逻辑回归

1.逻辑回归&#xff08;Logistic Regression&#xff09;又常被成为“逻辑斯蒂回归”&#xff0c;实质上是一个二元分类问题。 逻辑回归代价函数&#xff1a; 代价函数导数&#xff1a; Matlab实现&#xff1a; 采用matlab中自带的无约束最小化函数fminunc来代替梯度下降法&…

ROS——不同版本间ROS进行通信

在相同版本间的ROS进行通信不在赘述了&#xff0c;修改/etc/hosts文件即可。 最近项目遇到在Ubuntu16.04 与Ubuntu18.04两个系统间进行ROS通信&#xff0c;ROS版本分别为Kinetic和Melodic。配置网络后&#xff0c;两边都能够ping通&#xff0c;但是在获取ros数据是&#xff0c…

大数据开发实战:数据流图及相关数据技术

1、大数据流程图 2、大数据各个环节主要技术 2.1、数据处理主要技术 Sqoop&#xff1a;&#xff08;发音&#xff1a;skup&#xff09;作为一款开源的离线数据传输工具&#xff0c;主要用于Hadoop(Hive) 与传统数据库&#xff08;MySql,PostgreSQL&#xff09;间的数据传递。它…

跨时钟域电路设计——亚稳态及双锁存器

一、同步电路 定义&#xff1a;电路中所有受时钟控制的单元&#xff0c;全部由一个统一的时钟控制。 优点&#xff1a;在同步设计中&#xff0c;EDA工具可以保证电路系统的时序收敛&#xff0c;避免电路设计中的竞争冒险。 缺点&#xff1a;时钟树综合需要加入大量延迟单元&…

跨时钟域电路设计——单bit信号

前面提到了简单的双电平锁存器&#xff0c;下面是一些单bit同步电路。 一、慢时钟域向快时钟域 边沿检测同步器 将慢时钟域的脉冲搬移并缩小为快时钟域的脉冲。 既可以检测上升沿&#xff0c;也可以检测下降沿。 如上图&#xff0c;慢时钟下一个有效脉冲的最短周期为慢时钟的…

C语言100例01 PHP版(练习)

题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f; 程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 代码&#xff1a; 1 for($i1;$i&l…

跨时钟域电路设计——结绳法

信号从快时钟域到慢时钟域过渡时&#xff0c;慢时钟可能无法对快时钟变化太快的信号进行采样。 之前的同步器法对两个时钟间的关系有要求&#xff0c;结绳法适用于任何时钟域之间的过渡。 结绳法的原理是将快时钟信号的脉冲周期延长&#xff0c;等到慢时钟周期采样后再“解绳”…

我之理解---计时器setTimeout 和clearTimeout

今天在写个图片切换的问题 有动画滞后的问题&#xff0c;才动手去查setTimeout 和clearTimeout。之前写的图片播放器也有类似的问题&#xff0c;有自动start按钮 和stop按钮&#xff0c; 其他都正常&#xff0c;问题出在每次多次快速的点击start按钮时&#xff0c;图片播放的速…

关于二维码分块上色(彩色二维码)的算法研究

原文:关于二维码分块上色&#xff08;彩色二维码&#xff09;的算法研究众所周知&#xff0c;二维码通常是黑白的&#xff0c;而且是由若干个长方形或正方形小块平铺而成。但从人们的审美角度来看&#xff0c;常见的黑白二维码不免让人审美疲劳。本文试着从分块上色的角度对二维…

20145309信息安全系统设计基础第12周学习总结后篇

指针与声明 声明 1、C语言中变量的声明 类型&#xff08;type&#xff09; 声明符&#xff08;declarator&#xff09; 2、最简单的声明是变量 3、指针数组 指针数组是一个数组数组里的元素都是指针例&#xff1a;int *daytab[13]4、数组指针 数组指针是一个指针指针指向一个类…

跨时钟域电路设计——多bit信号FIFO

多个bit信号的跨时钟域仅仅通过简单的同步器同步时不安全的。 如下图&#xff1a; 虽然信号都同步到目的时钟域&#xff0c;可完成的功能却与设计的初衷不相符。 解决方案之一为对信号进行格雷码编码&#xff0c;但此方案只适用于连续变化的信号。另一种方案为增加新的控制信号…

WPF 打印实例

原文:WPF 打印实例在WPF 中可以通过PrintDialog 类方便的实现应用程序打印功能&#xff0c;本文将使用一个简单实例进行演示。首先在VS中编辑一个图形&#xff08;如下图所示&#xff09;。 将需要打印的内容放入同一个<Canvas>中&#xff0c;并起名为“printArea”&…

静态时序分析——基础概念

一、简述 静态时序分析是检查系统时序是否满足要求的主要手段。以往时序的验证依赖于仿真&#xff0c;采用仿真的方法&#xff0c;覆盖率跟所施加的激励有关&#xff0c;有些时序违例会被忽略。此外&#xff0c;仿真方法效率非常的低&#xff0c;会大大延长产品的开发周期。静…

静态时序分析——单周期

一、建立时间的检查 建立时间的检查是指检查电路里每一个触发器的数据和时钟的关系是否满足建立时间的要求。 我们以上图为例进行建立时间检查。由图可知&#xff0c;我们主要针对第二个触发器UFF1进行检查。我们可以梳理时序关系如下&#xff1a; 通过这个图&#xff0c;我们…

自己搭建的CISCO实验环境

交换机&#xff1a;设备型号&#xff1a; CISCO 3750 24-TS 3台CISCO 3750 48-PS 1台路由器&#xff1a;设备型号&#xff1a;1.CISCO 2821 3台2.CISCO 3745 3台 物理拓扑图如下&#xff1a; 转载于:https://blog.51cto.com/zxs3026/2156424

CMOS组合逻辑

1. 静态互补CMOS 实际上就是静态CMOS反相器扩展为具有多个输入。更反相器一样具有良好的稳定性&#xff0c;性能和功耗。 静态的概念&#xff1a;每一时刻每个门的输出通过低阻抗路径连到VDD或VSS上。任何时候输出即为布尔函数值。动态电路通常依赖把信号暂存在高阻抗节点的电…

绘制泰森多边形

使用到的数据文件&#xff0c;内容如图&#xff1a; 代码&#xff1a; clc; clear; close all; % 导入需要的坐标数据成矩阵 a load(test.txt); x a(:,1); y a(:,2); x x;%获取坐标的横坐标 y y;%获取坐标的纵坐标 %根据点 绘制泰森多边形 voronoi(x,y); %设定x轴的边界 x…

(八)限定某个目录禁止解析php、限制user_agent和PHP相关配置

2019独角兽企业重金招聘Python工程师标准>>> 限定某个目录禁止解析php 对于使用php语言编写的网站&#xff0c;有一些目录是有需求上传文件的。如果网站代码有漏洞&#xff0c;让黑客上传了一个用PHP写的木马&#xff0c;由于网站可以执行PHP程序&#xff0c;最终会…