全局命名空间

/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”是不同的,在这些编程语言中,系统中的其他部分是不能访问某个类的私有成员变量的。

由浅到深理解ROS(3)-命名空间相关推荐

  1. 由浅到深理解ROS(1)

    ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率.ROS能够提供类似传统操作系统的诸多功能,如硬件抽象.底层设备控制.常用功能 ...

  2. 由浅到深理解ROS(5.1)- roslaunch 学习

    oslaunch 用处:将多个rosnode 结合起来,一起运行.这样就不需要一个个的运行. roslaunch格式 (add_two.launch) <launch>         & ...

  3. 由浅到深理解ROS URDF教程

    创建自己的URDF文件 1.1创建树形结构文件 在这部分教程中要创建的将是下面的图形所描述的机器人的urdf文件 图片中这个机器人是一个树形结构的.让我们开始非常简单的创建这个树型结构的描述文件,不用 ...

  4. 由浅到深理解ROS(8)-线程管理

    转自 单线程Spinning ros::spin()是最简单的单线程自旋, 它会一直调用直到结束 用法:  ros::spin(); 另一个单线程spinning是ros::spinOnce(),它定 ...

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

    转自 相信许多爱好者止步于昂贵的机器人价格.虽然有了Arduino,但一个载重能力很弱的机器人小车成本也得一两百块钱.搭建自己的机器人更是费时费力. 所以如果你只是普通机器人爱好者,或者还没想好要拿机 ...

  6. 由浅到深理解ROS(4)

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

  7. 由浅到深理解ROS(9)- 几个基本概念的理解 坐标系 包

    1.坐标系 最常用的就是map,odom,base_link,base_laser坐标系,这也是开始接触gmapping的一些坐标系. map:地图坐标系,顾名思义,一般设该坐标系为固定坐标系(fix ...

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

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

  9. 由浅到深理解ROS(2)

    ROS文件系统 用户可以直接参看官网: http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem ROS文件系统中的两个最基本的概念:Pack ...

最新文章

  1. 技术不是大数据第一生产力,数据交易才能带来应用爆发
  2. 优化SQL步骤——查看SQL执行频率 || 定位低效率执行SQL
  3. STM32时钟源时钟系统配置
  4. (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(2)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅰ
  5. rocketmq 消息 自定义_RocketMQ消息轨迹-设计篇
  6. 计时器小程序——由浅入深实例讲解
  7. Java Web学习总结(39)——JavaEE常用的Jar详解
  8. Http状态码梳理汇总
  9. 株洲市码高机器人编程_码高机器人教育
  10. [Codeforces 920E]Connected Components?
  11. okHttp3自用封装
  12. [英语阅读笔记]Creating Master Detail Pages using GridView
  13. js中0.1+0.2 与0.3的对比
  14. js基础-6-作用域、执行流程、this指向
  15. RHEL6 开启远程桌面
  16. 用神经网络实现手写数字识别
  17. [Python Nonebot]QQ自动聊天机器人
  18. 求大于某数的最小素数Python版
  19. 手机/笔记本电脑看电视直播
  20. linux虚拟机之ubuntu的软件包管理(6/10)

热门文章

  1. 手机网页里的模态对话框
  2. PHP中的正则表达式函数preg_
  3. Java概览(java语言编程艺术笔记)
  4. poj 3009 Curling 2.0 (dfs的应用)
  5. xvhfeng的工作回忆总结(第二年)阅读手记
  6. 算法五——字符串匹配(中)
  7. codeup 1128: 出租车费 贪心|找规律
  8. 【发现问题】Java中PrintWriter和BufferedWriter的区别
  9. anaconda对应python版本_Python基础——如何查看python版本、如何查看多个python版本
  10. for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题