ROS学习笔记4 计算图源命名

来源:互联网 发布:春晚 知乎 编辑:程序博客网 时间:2024/06/03 07:45

(1)全局名称
节点、话题、服务和参数统称为计算图源,而每个计算图源都有一个叫计算图源名称(graph resource name)的短字符串标识。常见的全局名称:

    /teleop_turtle    /turtlesim    /turtle1/cmd_vel    /turtle1/pose    /run_id    /count_and_log/set_logger_level

全局名称的特点是它们无论在任何地方(代码、命令行工具、图形界面工具)都可以使用。这些名称不存二义性问题。

前面的反斜杠表示这个名称为 全局名称

由反斜杠分开的一系列称为命名空间(namespace)。

基本名称:teleop_turtle、cmd_vel 等。

(2)相对名称
使用全局名称面临着命令空间太多,从而导致名称长度过长的问题。因此,ROS为计算图源提供了一个默认的名称空间,这样的名称叫做相对计算图源名称(relative graph resource name),也可以简称为相对名称(relative name)。相对名称的典型特征是其缺少全局名称所具有的前斜杠/,下面是一些相对名称:

    teleop_turtle    turtlesim    cmd_vel    turtle1/pose
如果不知道ROS解析某个计算图源时所使用的默认命名空间,相对名称并不能和特定的计算图源匹配。

将相对名称转化为全局名称的过程非常简单,ROS将当前的默认名称空间加在相对名称的前面,从而将相对名称解析为全局名称。假如默认命名空间为/turtle1,使用的相对名称为cmd_vel。则有如下解析过程:
/turtle1(默认命名空间) + cmd_vel(相对名称) = /turtle1/cmd_vel(全局名称)

设置默认命名空间
默认命名空间是单独地为每个节点设置的,而不是在系统范围内进行的。如果不为节点设置默认命空间,则节点使用全局命名空间(/)作为该节点的默认命名空间。
为一个节点选择一个不同的默认命名空间的最好也是最常用的方法是在启动文件中使用命名空间(ns)属性。
设置命名空间的语句:
__ns:default-namespace

在shell中为执行的ROS程序设置默认命名空间:
Export ROS_NAMESPACE = default-namespace

使用相对名称的意义
当一个节点内的计算图源全部使用相对名称时,就为用户提供了一种非常简单的移植手段。即用户可以方便地将此节点移植到其它的命名空间。

私有名称
私有名称,以一个波浪符号开始(~),私有名称也不能确定自身所在的命名空间,而是需要ROS客户端库将其解析为全局名称。
在节点内部都存在一些资源,这种资源只和本节点有关,而不会和其它节点有关系。这样的资源就可以使用私有名称。

参考文献 《机器人操作系统浅析》