ROS知识:关于如何命名的约定

概述:

命名主要是两个范畴,一个是资源命名。一个是对包进行命名。两种规则有些相同,也有不同。

1 资源和名称

1.1 概述

在运算图中,参与运算的资源有:节点、参数、主题和服务。

资源名称提供了一种分层命名结构,用于ROS计算图中的所有资源,这些名称在ROS中非常强大,对于ROS中如何组成更大、更复杂的系统至关重要,因此了解这些名称如何工作以及如何操作它们至关重要。

在我们进一步描述名称之前,以下是一些示例名称:

  • / (the global namespace)

  • /foo

  • /stanford/robot/name

  • /wg/node1

运算图资源名称是ROS中提供封装的重要机制。存在命名空间的约定和封装:

  • 每个资源都定义在一个名称空间中,它可以与许多其他资源共享。
  • 资源可以在其命名空间内创建资源,并且可以访问其自己命名空间内或之上的资源。
  • 可以在不同名称空间中的资源之间建立连接,但这通常是通过两个名称空间之上的集成代码来完成的。

这种封装将系统的不同部分与意外获取错误命名的资源或全局劫持名称隔离开来。

名称的解析是相对的。因此资源不需要知道它们位于哪个命名空间中。这简化了编程,因为可以像编写顶级名称空间中的节点一样编写协同工作的节点。当这些节点集成到一个更大的系统中时,可以将它们下推到定义其代码集合的命名空间中。例如,可以使用一个斯坦福演示和一个柳树车库演示,并将它们与斯坦福和wg子图合并成一个新的演示。如果两个演示都有一个名为“camera”的节点,它们就不会冲突。顶层节点可以创建需要对整个图形可见的工具(如图形可视化)以及参数(如demo_name)。

1.2 有效名称

有效名称具有以下特征:

  • 第一个字符是字母字符([a-z | a-z])、波浪号(~)或正斜杠(/)
  • 后续字符可以是字母数字([0-9 | a-z | a-z])、下划线(z)或正斜杠(/)

例外:基名称(最顶端节点)中不能有正斜杠(/)或波浪号(~)。

1.3 命名规则

ROS中有四种类型的图形资源名称:base、relative、global和private,它们具有以下语法:

  • base

  • relative/name

  • /global/name

  • ~private/name

默认情况下,解析是相对于节点的命名空间完成的。例如,节点/wg/node1具有名称空间/wg,因此名称node2将解析为/wg/node2。

没有任何名称空间限定符的名称都是基名称。基本名称实际上是相对名称的一个子类,具有相同的解析规则。基本名称最常用于初始化节点名称。

以“/”开头的名称是全局的——它们被认为是完全解析的。应尽可能避免使用全局名称,因为它们限制了代码的可移植性。

以“~”开头的名称是私有的。它们将节点的名称转换为名称空间。例如,namespace/wg/中的node1具有私有名称空间/wg/node1。私有名称对于通过参数服务器将参数传递到特定节点非常有用。

以下是一些名称解析示例:

Node

Relative (default)

Global

Private

/node1

bar -> /bar

/bar -> /bar

~bar -> /node1/bar

/wg/node2

bar -> /wg/bar

/bar -> /bar

~bar -> /wg/node2/bar

/wg/node3

foo/bar -> /wg/foo/bar

/foo/bar -> /foo/bar

~foo/bar -> /wg/node3/foo/bar

1.4 资源名称可以重新映射

当在命令行上启动节点时,可以重新映射ROS节点中的任何名称。有关此功能的详细信息,请参见重新映射参数。

2 对应用包的命名规则

2.1 包资源名称

包资源名称在ROS中与文件系统级概念一起使用,以简化引用磁盘上的文件和数据类型的过程。包资源名称非常简单:它们只是资源所在包的名称加上资源的名称。例如,名称“std_msgs/String”指的是“std_msgs”包中的“String”消息类型。

可以使用包资源名称引用的一些ROS相关文件包括:

包资源名称与文件路径非常相似,只是它们要短得多。这是由于ROS能够在磁盘上定位软件包并对其内容进行额外假设。例如,消息描述始终存储在msg子目录中,并具有.msg扩展名,因此std_msgs/String是path/to/std_msgs/msg/String.msg的缩写。类似地,节点类型foo/bar相当于在具有可执行权限的包foo中搜索名为bar的文件。

2.2 包的有效名称

包资源名称具有严格的命名规则,因为它们通常用于自动生成的代码中。因此,ROS包不能有下划线以外的特殊字符,并且必须以字母字符开头。有效名称具有以下特征:

  • First character is an alpha character ([a-z|A-Z])
  • Subsequent characters can be alphanumeric ([0-9|a-z|A-Z]), underscores (_) or a forward slash (/)

  • There is at most one forward slash ('/').

参考资料:

Names - ROS Wiki

Guess you like

Origin blog.csdn.net/gongdiwudu/article/details/120363007