由浅到深理解ROS(3)-命名空间

全局命名空间

/rosout前面的反斜杠“/”表明该节点名称属于全局命名空间。之所以叫做全局名称因为它们在任何地方(包括代码、命令行工具、图形界面工具等的任何地方)都可以使用。无论这些名称用作众多命令行工具的参数还是用在节点内部,它们都有明确的含义。这些名称从来不会产生二义性,也无需额外的上下文信息来决定名称指的哪个资源。如/turtle1/cmd_vel 由斜杠分开的一系列命名空间(namespace),每个斜杠代表一级命名空间。命名空间用于将相关的计算图源(节点、话题、服务和参数统称为计算图源而每个计算图源由一个叫计算图源名称(graph resource name)的短字符串识)归类在一起。

为了指明一个计算图源,需要完整列出其所属的命名空间,尤其是有时候命名空间层次比较多,这可能会让你抓狂。这时,一个主要替代方案是让ROS为计算图源提供一个默认的命名空间,具有此特征的名称叫做相对计算图源名称(ralative graph resource name),或简称为相对名称(relative name)。 

 

相对名称

相对名称的典型特征是它缺少全局名称带有的前斜杠“/”。例如:cmd_vel 及 count_and_log/set_logger_level理解相对名称的关键是,如果不知道ROS 解析某个计算图源时所使用的默认命名空间,相对名称并不能和特定计算图源匹配。

解析相对名称:将相对名称转化为全局名称的过程相当简单。ROS将当前默认的命名空间的名称加在相对名称的前面,从而将相对名解析为全局名称。比如,如果我们在默认命名空间为/turtle1 的地方使用相对名称cmd_vel,那么ROS 通过组合方法得 /turtle1 + cmd_vel ⇒ /turtle1/cmd_vel    

 

相对名称也可以以一系列的命名空间开始,这些命名空间被看作是默认命名空间中的嵌套空间。举个例子,如果我们在默认命名空间为/a/b/c/d/e/f 的地方使用相对空间g/h/i/j/k,ROS 将会将其进行组合为全局命名空间/a/b/c/d/e/f /g/h/i/j/k/l 得到的全局名称就可以用于确定一个特定的计算图源,就像前面介绍全局名称的使用时一样。

当一个节点内的计算图源全部使用相对名称时,这本质上给用户提供了一种非常简单的移植手段,即用户能方便地将此节点和话题移植到其他的(比如用户自己程序的) 命名空间,而节点的原设计者并不一定参与这个过程。这种灵活性可以使得一个系统的组织结构更清晰,更重要的是能够防止在整合来自不同来源的节点发生名称冲突。作为对比,如果所有节点都使用全局名称命名自己的计算图源, 就很难实现这种高效资源整合。所以,除非一些特殊情况有特殊要求,否则编写节点时并不推荐使用全局名称。

 

私有名称

私有名称,以一个波浪字符(~)开始,是第三类也是最后一类计算图源名称。和相对名称一样,私有名称并不能完全确定它们自身所在的命名空间,而是需要ROS 客户端库将这个名称解析为一个全局名称。与相对名称的主要差别在于,私有名称不是用当前默认命名空间,而是用的它们节点名称作为命名空间。例如,有一个节点,它的全局名称是 /sim1/pubvel,ROS 将其私有名称∼max_vel 转换至如下全局名称:/sim1/pubvel + ~max_vel⇒ /sim1/pubvel/max_vel 这种命名方式适用的地方是每个节点内部都有这样一些资源,这些资源只与本节点有关,而不会与其他节点打交道,这些资源就可以使用私有名称,与松耦合性相对的。私有名称的关键字“private”仅仅表示其他节点不会使用它们所在的命名空间,也就是仅在命名空间层面上有意义。对于其他节点来讲,只要知道私有名称解析后的全局名称,都可以通过其全局名称访问这些计算图源。这和C++等其他类似编程语言中的关键字“private”是不同的,在这些编程语言中,系统中的其他部分是不能访问某个类的私有成员变量的。

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

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

相关文章

(5)队列

目录 队列知识点: 循环队列: 队列的操作: 创建队列: 判断队列是否已满: 入队: 遍历队列: 判断队列是否为空: 出队: 这篇笔记是根据郝斌老师的上课讲义整理而得&…

【LightOJ - 1038】Race to 1 Again(概率dp,数学期望)

题干: Rimi learned a new thing about integers, which is - any positive integer greater than 1 can be divided by its divisors. So, he is now playing with this property. He selects a number N. And he calls this D. In each turn he randomly choose…

使用matplotlib进行简单的数据展示

import numpy as np import matplotlib.pyplot as plt# 解决中文乱码 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号# 建立一个坐标系 plt.subplot(1, 1, 1) # 指明x和y值 x np.array([1, 2…

(6)递归

目录 递归知识点: 递归操作: 阶乘的循环实现: 阶乘的递归实现: 经典的汉诺塔问题: 这篇笔记是根据郝斌老师的上课讲义整理而得。 递归知识点: 定义:一个函数自己直接或间接调用自己 。 …

由浅到深理解ROS(4)

消息和消息类型 节点能相互传递消息,节点之间通信也是基于消息。消息类型也就是数据类型数据类型,理解消息的类型很重要,因为它决定了消息的内容。也就是说,一个话题的消息类型能告诉你该话题中每个消息携带了哪些信息&#xff0…

【CodeForces - 1197C】Array Splitting(水题)

题干: You are given a sorted array a1,a2,…,ana1,a2,…,an (for each index i>1i>1 condition ai≥ai−1ai≥ai−1holds) and an integer kk. You are asked to divide this array into kk non-empty consecutive subarrays. Every element in the array…

Django项目部署在Centos7

把Django项目部署在Centos7下 先有一个Django项目 一个员工管理系统(ems) 员工管理系统 使用VMware创建一个虚拟的Linux系统 Centos7下安装MySql5.7 详细安装 Centos7下安装Python3.5 详细安装 Centos7下安装Django2.0.6 - 安装数据库驱动&#xf…

(7)树

目录 树的知识点: 定义: 专业术语: 操作(重点): 树的操作: 创建二叉树: 先序遍历: 中序遍历: 后序遍历: 这篇笔记是根据郝斌老师的上课讲义整理而得。 树的知识点&#xf…

由浅到深理解ROS(5)- launch启动文件的理解与编写

ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file)。事实上,在ROS功能包中,启动文件的使用是非常普遍的。任何包含两个或两个以上节点的系统都可以利用启动…

【CodeForces - 1199C】MP3(思维,离散化)

题干: One common way of digitalizing sound is to record sound intensity at particular time moments. For each time moment intensity is recorded as a non-negative integer. Thus we can represent a sound file as an array of nn non-negative integers…

Centos7下安装MySql

1、安装方式 1.1 方式一 yum安装(推荐使用该方式) 在CentOS中默认安装有MariaDB,这个是MySQL的分支 如果必须要安装MySQL,首先必须添加mysql社区repo通过输入命令: rpm -ivh http://dev.mysql.com/get/mysql-commu…

(8)排序

排序&#xff1a; 排序和查找的关系&#xff1a;排序是查找的前提&#xff0c;排序是重点。 冒泡 插入 选择 归并排序 快速排序&#xff1a;一次确定一个数的位置 #include <stdio.h>void QuickSort(int *a, int low, int high) {int pos;if(low < high){pos FindP…

由浅到深理解ROS(6)-坐标转换

转自 ROS 中对于多坐标系的处理是使用树型表示&#xff0c;在机器人自主导航中&#xff0c;ROS会构建这几个很重要的坐标系&#xff1a; base_link: 一般位于tf tree的最根部&#xff0c;物理语义原点一般为表示机器人中心&#xff0c;为相对机器人的本体的坐标系。(base_foot…

Centos7下安装Python3.5

1、安装依赖 - yum -y install python-devel openssl-devel bzip2-devel zlib-devel expat-devel ncurses-devel sqlite-devel gdbm-devel xz-devel tk-devel readline-devel gcc - yum -y groupinstall "Development tools"如上两步&#xff0c;汇总安装了p…

【BZOJ - 3450】Tyvj1952 Easy(数学期望,期望的线性性)

题干&#xff1a; 某一天WJMZBMR在打osu~~~但是他太弱逼了&#xff0c;有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有n次点击要做&#xff0c;成功了就是o&#xff0c;失败了就是x&#xff0c;分数是按comb计算的&#xff0c;连续a个comb就有a*a分&#xff0c;comb就…

吐血推荐收藏的学位论文排版教程(完整版)

目录 01.保存的高级选项设置 02.纸张设置为A4纸大小 03.设置页边距和装订线距离 04.度量衡的设置 05.创建“论文正文”样式 06.修改论文正文样式 07.设置并修改标题样式 08.给中英文摘要、附录、等大标题套用样式 09.两个Word文档之间进行并排查看 12.一键生成多级列…

由浅到深理解ROS(7)-URDF

转自 相信许多爱好者止步于昂贵的机器人价格。虽然有了Arduino&#xff0c;但一个载重能力很弱的机器人小车成本也得一两百块钱。搭建自己的机器人更是费时费力。 所以如果你只是普通机器人爱好者&#xff0c;或者还没想好要拿机器人做什么&#xff0c;那我们还是从模拟器开始…

Apollo进阶课程 ① | 带你纵览无人车

目录 1&#xff09;无人驾驶级别的分类 2&#xff09;无人驾驶技术的关键点 3&#xff09;火热的无人驾驶 不缺独角兽 原文链接&#xff1a;Apollo进阶课程 ① | 带你纵览无人车 Apollo自动驾驶进阶课程是由百度Apollo联合北京大学共同开设的课程&#xff0c;邀请百度Apoll…

linux基本简介

Linux基础知识点 Linux是一套免费使用的类Unix操作系统&#xff0c;继承了Unix一网络为核心的设计思想&#xff0c;是一个性能稳定的多用户操作系统。 特点&#xff1a;免费、安全、可靠、稳定、多平台 Linux的目录结构 bin &#xff1a;存放二进制可执行文件sbin&#xff1…

【BZOJ - 4318】OSU!(概率dp,数学期望,期望的线性性)

题干&#xff1a; osu 是一款群众喜闻乐见的休闲软件。 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作&#xff0c;每次操作只有成功与失败之分&#xff0c;成功对应1&#xff0c;失败对应0&#xff0c;n次操作对应为1个长度为n的01串。在这个串中连续的 X个…