这里面很重要的一点就是说出了
转载自:https://blog.csdn.net/cookie909/article/details/79842334
ROS----名字空间namespace
cookie909 2018-04-07 16:00:00 1317 收藏
1名称
1.1图资源名称Graph ResourceNames
图形资源名称提供了一个分层命名结构,用于ROS计算图中的所有资源,例如节点,参数,主题和服务。这些名称在ROS中非常强大,并且是ROS如何构建更大和更复杂的系统的核心,因此了解这些名称的工作方式以及如何操作它们至关重要。在我们进一步描述名称之前,以下是一些示例名称:
/(the global namespace)
/foo
/wg/node1
图形资源名称是ROS提供封装的重要机制。每个资源都是在一个名称空间内定义的,它可以与许多其他资源共享。一般而言,资源可以在其名称空间内创建资源,并且可以访问自己的名称空间内或上方的资源。可以在不同名称空间中的资源之间建立连接,但通常通过名称空间上方的集成代码完成。这种封装将系统的不同部分隔离起来,以免意外攫取错误的命名资源或全局劫持名称。
名称独立的被解析,所以资源不需要知道它们在哪个名称空间。这简化了编程,因为一起工作的节点可以被写入,就好像它们全部在顶层名称空间中一样。当这些节点被集成到一个更大的系统中时,它们可以被下推到一个定义它们代码集合的名称空间中。例如,人们可以采取斯坦福演示和Willow Garage的演示,并把它们合并成一个新的演示斯坦福和WG子图。如果两个演示都有一个名为“摄像头”的节点,它们不会发生冲突。工具(如图表可视化)以及需要对整个图形可见的参数(例如demo_name)可由顶级节点创建。
1.1.1有效名称
有效的名称具有以下特征:
- 第一个字符是字母字符([a-z | A-Z]),代字符(〜)或正斜杠(/)
- 后续字符可以是字母数字([0-9 | a-z | A-Z]),下划线(_)或正斜杠(/)
例外:基本名称(如下所述)不能在其中包含正斜杠(/)或折线(〜)。
1.1.2解决
ROS中有四种类型的图形资源名称:base,relative,global和private,它们的语法如下:
Base
relative/name
/global/name
~private/name
默认情况下,解析是相对于节点的名称空间完成的。例如,节点/ wg / node1具有名称空间/ wg,因此名称node2将解析为/ wg / node2。
没有命名空间限定符的名称是基本名称。基本名称实际上是相对名称的一个子类,并具有相同的解析规则。基本名称最常用于初始化节点名称。
以“/”开头的名称是global----它们被视为完全解析。尽可能避免使用全局名称,因为它们限制了代码的可移植性。
以“〜”开头的名称是私人的。它们将节点的名称转换为名称空间。例如,节点1在命名空间/ WG /拥有私有命名空间/ WG /节点1。专用名称有利于通过参数服务器将参数传递给特定节点。
以下是一些名称解析示例:
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.1.3重新映射
当节点在命令行启动时,可以重新映射ROS节点中的任何名称。有关此功能的更多信息,请参阅重新映射参数。
1.2包资源名称
软件包资源名称用于ROS和Filesystem-Level概念,以简化引用磁盘上的文件和数据类型的过程。包资源名称非常简单:它们只是资源所在的包的名称以及资源的名称。例如,名称“std_msgs / String”引用“std_msgs”包中的“String”消息类型。
一些可能使用包资源名称引用的ROS相关文件包括:
包资源名称与文件路径非常相似,除非它们更短。这是由于ROS在磁盘上定位软件包的能力以及对其内容做出其他假设的原因。例如,消息描述总是存储在msg子目录中,并具有.msg扩展名,所以std_msgs / String是path / to / std_msgs / msg / String.msg的简写。同样,节点类型foo / bar等同于在包foo中以可执行权限搜索名为bar的文件。
1.2.1有效名称
包资源名称具有严格的命名规则,因为它们通常用于自动生成的代码。出于这个原因,ROS包不能包含除下划线以外的特殊字符,并且它们必须以字母字符开头。有效的名称具有以下特征:
第一个字符是一个字母字符([a-z | A-Z])
后续字符可以是字母数字([0-9 | a-z | A-Z]),下划线(_)或正斜杠(/)
最多只有一个斜线('/')。
代码API
roscpp ::名称API参考(ROS Indigo)
http://wiki.ros.org/Names#Graph