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相關文件包括:
-
Message (msg) types
-
Service (srv) types
-
Node types
包資源名稱與文件路徑非常相似,只是它們要短得多。這是由于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
總結
以上是生活随笔為你收集整理的ROS知识:关于如何命名的约定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS知识:ros和硬件的连接点---R
- 下一篇: ROS知识: vanilla(香草) C