ROS的概念分為三個(gè)層次:文件系統(tǒng)層、計(jì)算圖層、社區(qū)層,這些層次以及概念將會(huì)在接下來(lái)的章節(jié)介紹。
除了這三個(gè)層次的概念,ROS同樣定義兩個(gè)names類型,包資源名稱和圖形資源名稱。
1、ROS文件系統(tǒng)層次
文件系統(tǒng)層概念主要指在硬盤(pán)里能看到的ROS目錄和文件, 例如:
- Packages : Packages是在ROS中整理及組織軟體的主要單元。一個(gè)Packages包含節(jié)點(diǎn)(ROS runtime processes)、ROS程式庫(kù)(ROS-dependent library)、數(shù)據(jù)集(datasets)、配置文件(configuration files)??等等。Packages是您在ROS中能建立及分享的最小單元。
- Metapackages : Metapackages 是一組具體的服務(wù)相關(guān)的功能包。大部分的metpackages 只作為轉(zhuǎn)換rosbuild Stacks的向后兼容的備選。
- Package Manifests : Manifests (package.xml) 描述一個(gè)package的元信息,包括了package的名字,版本,功能簡(jiǎn)述,證書(shū)信息,依賴關(guān)系,以及一些其他的被export的package所有的信息。關(guān)于package.xml 的文件說(shuō)明,參考REP-0127.
- Repositories : 代碼倉(cāng)庫(kù)是使用VCS版本控制系統(tǒng)的軟件包集合,軟件包利用版本控制維持同一版本,它能使用catkin自動(dòng)發(fā)布工具bloom進(jìn)行發(fā)布。這些代碼倉(cāng)庫(kù)常通過(guò)映射來(lái)進(jìn)行轉(zhuǎn)換 rosbuild Stacks.倉(cāng)庫(kù)可以是只有一個(gè)軟件包。
- Message (msg) types : 存儲(chǔ)在my_package/msg/MyMessageType.msg的Message文件,主要定義了ROS系統(tǒng)的messages傳輸?shù)臄?shù)據(jù)結(jié)構(gòu)。
- Service (srv) types : 存儲(chǔ)在 my_package/srv/MyServiceType.srv的服務(wù)services文件,定義了ROS的服務(wù)通信時(shí)的請(qǐng)求(request )和響應(yīng)(response )相關(guān)的數(shù)據(jù)結(jié)構(gòu)。
2、ROS計(jì)算圖層次
- 計(jì)算圖*是ROS在點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)里整合并處理數(shù)據(jù)的過(guò)程。基本計(jì)算圖概念是 節(jié)點(diǎn) , 主機(jī) , 參數(shù)服務(wù)器 , 消息 , 服務(wù) , 話題 , 和 數(shù)據(jù)包 ,它們通過(guò)不同的方式提供數(shù)據(jù)給圖層。
這些概念是在ros_comm庫(kù)里實(shí)現(xiàn)的:
- Nodes : 節(jié)點(diǎn)主要執(zhí)行計(jì)算處理 。ROS被設(shè)計(jì)為細(xì)粒度的模塊化的系統(tǒng);一個(gè)機(jī)器人控制系統(tǒng)通常有很多節(jié)點(diǎn)組成 。例如,一個(gè)節(jié)點(diǎn)控制激光測(cè)距儀,一個(gè)節(jié)點(diǎn)控制輪電機(jī),一個(gè)節(jié)點(diǎn)執(zhí)行定位,一個(gè)節(jié)點(diǎn)執(zhí)行路徑規(guī)劃,一個(gè)節(jié)點(diǎn)提供系統(tǒng)圖形界面,等等。一個(gè)ROS節(jié)點(diǎn)通過(guò)ROS客戶端庫(kù) client library編寫(xiě),例如 roscpp 或rospy
- Master : ROS Master 為計(jì)算圖的其余部分提供名稱注冊(cè)和查找。沒(méi)有 Master,節(jié)點(diǎn)將無(wú)法找到彼此、交換消息或調(diào)用服務(wù)。
- Parameter Server : 參數(shù)服務(wù)器允許將數(shù)據(jù)按密鑰存儲(chǔ)在一個(gè)中央位置。它目前是 Master 的一部分。
- Messages : 節(jié)點(diǎn)之間通過(guò)傳遞消息進(jìn)行通信。消息只是一種數(shù)據(jù)結(jié)構(gòu),包括類型化字段。支持標(biāo)準(zhǔn)基本類型(整數(shù)、浮點(diǎn)數(shù)、布爾值等),以及基本類型數(shù)組。消息可以包括任意嵌套的結(jié)構(gòu)和數(shù)組(很像 C 結(jié)構(gòu))。
- Topics : 消息通過(guò)具有發(fā)布/訂閱語(yǔ)義的傳輸系統(tǒng)進(jìn)行路由。節(jié)點(diǎn)通過(guò)將消息發(fā)布到給定主題來(lái)發(fā)送消息。主題是用于標(biāo)識(shí)消息內(nèi)容的名稱。對(duì)某種數(shù)據(jù)感興趣的節(jié)點(diǎn)將訂閱適當(dāng)?shù)闹黝}。一個(gè)主題可能有多個(gè)并發(fā)發(fā)布者和訂閱者,一個(gè)節(jié)點(diǎn)可能發(fā)布和/或訂閱多個(gè)主題。通常,發(fā)布者和訂閱者并不知道彼此的存在。這個(gè)想法是將信息的生產(chǎn)與其消費(fèi)分離。從邏輯上講,可以將主題視為強(qiáng)類型消息總線。每條總線都有一個(gè)名稱,任何人都可以連接到總線來(lái)發(fā)送或接收消息,只要它們是正確的類型。
- Services : 發(fā)布/訂閱模型是一種非常靈活的通信范式,但其多對(duì)多、單向傳輸不適用于請(qǐng)求/回復(fù)交互,而這在分布式系統(tǒng)中通常是必需的。請(qǐng)求/回復(fù)是通過(guò)服務(wù)完成的,服務(wù)由一對(duì)消息結(jié)構(gòu)定義:一個(gè)用于請(qǐng)求,一個(gè)用于回復(fù)。提供節(jié)點(diǎn)以某個(gè)名稱提供服務(wù),客戶端通過(guò)發(fā)送請(qǐng)求消息并等待回復(fù)來(lái)使用該服務(wù)。ROS 客戶端庫(kù)通常將這種交互呈現(xiàn)給程序員,就好像它是一個(gè)遠(yuǎn)程過(guò)程調(diào)用。
- Bags : Bags 是一種用于保存和回放 ROS 消息數(shù)據(jù)的格式。袋子是存儲(chǔ)數(shù)據(jù)(例如傳感器數(shù)據(jù))的重要機(jī)制,這些數(shù)據(jù)可能難以收集,但卻是開(kāi)發(fā)和測(cè)試算法所必需的。
ROS Master 在 ROS 計(jì)算圖中充當(dāng)名稱服務(wù)。它存儲(chǔ) ROS 節(jié)點(diǎn)的主題和服務(wù)注冊(cè)信息。節(jié)點(diǎn)與 Master 通信以報(bào)告其注冊(cè)信息。當(dāng)這些節(jié)點(diǎn)與 Master 通信時(shí),它們可以接收有關(guān)其他注冊(cè)節(jié)點(diǎn)的信息并進(jìn)行適當(dāng)?shù)倪B接。當(dāng)這個(gè)注冊(cè)信息發(fā)生變化時(shí),Master 也會(huì)對(duì)這些節(jié)點(diǎn)進(jìn)行回調(diào),這允許節(jié)點(diǎn)在新節(jié)點(diǎn)運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建連接。
節(jié)點(diǎn)直接連接到其他節(jié)點(diǎn);Master 只提供查找信息,很像 DNS 服務(wù)器。訂閱主題的節(jié)點(diǎn)將從發(fā)布該主題的節(jié)點(diǎn)請(qǐng)求連接,并將通過(guò)商定的連接協(xié)議建立該連接。ROS 中最常用的協(xié)議稱為 TCPROS,它使用標(biāo)準(zhǔn)的 TCP/IP 套接字。
這種架構(gòu)允許解耦操作,其中名稱是構(gòu)建更大和更復(fù)雜系統(tǒng)的主要手段。名稱在 ROS 中具有非常重要的作用:節(jié)點(diǎn)、主題、服務(wù)和參數(shù)都有名稱。每個(gè) ROS 客戶端庫(kù)都支持名稱的命令行重映射,這意味著可以在運(yùn)行時(shí)重新配置已編譯的程序以在不同的計(jì)算圖拓?fù)渲羞\(yùn)行。
例如,要控制 Hokuyo 激光測(cè)距儀,我們可以啟動(dòng) hokuyo_node 驅(qū)動(dòng)程序,它與激光通信并在掃描主題上發(fā)布 sensor_msgs/LaserScan 消息。為了處理這些數(shù)據(jù),我們可能會(huì)使用laser_filters 編寫(xiě)一個(gè)節(jié)點(diǎn)來(lái)訂閱關(guān)于掃描主題的消息。訂閱后,我們的過(guò)濾器會(huì)自動(dòng)開(kāi)始接收來(lái)自激光的消息。
注意兩側(cè)是如何解耦的。hokuyo_node 節(jié)點(diǎn)所做的只是發(fā)布掃描,不知道是否有人訂閱。過(guò)濾器所做的只是訂閱掃描,而不知道是否有人發(fā)布它們。這兩個(gè)節(jié)點(diǎn)可以按任意順序啟動(dòng)、終止和重新啟動(dòng),而不會(huì)引發(fā)任何錯(cuò)誤情況。
稍后我們可能會(huì)為我們的機(jī)器人添加另一個(gè)激光器,因此我們需要重新配置我們的系統(tǒng)。我們需要做的就是重新映射使用的名稱。當(dāng)我們開(kāi)始我們的第一個(gè) hokuyo_node 時(shí),我們可以告訴它重新映射 scan 到 base_scan,并對(duì)我們的過(guò)濾器節(jié)點(diǎn)做同樣的事情?,F(xiàn)在,這兩個(gè)節(jié)點(diǎn)都將使用 base_scan 主題進(jìn)行通信,而不會(huì)聽(tīng)到關(guān)于 scan 主題的消息。然后我們可以為新的激光測(cè)距儀啟動(dòng)另一個(gè) hokuyo_node。
3、ROS 交流社區(qū)
ROS 社區(qū)級(jí)概念是 ROS 資源,使不同的社區(qū)能夠交換軟件和知識(shí)。這些資源包括:
- Distributions : ROS 發(fā)行版是您可以安裝的版本化堆棧的集合。發(fā)行版與 Linux 發(fā)行版扮演著類似的角色:它們使安裝一組軟件變得更加容易,并且它們還可以在一組軟件中保持一致的版本。
- Repositories :ROS 依賴于代碼存儲(chǔ)庫(kù)的聯(lián)合網(wǎng)絡(luò),不同的機(jī)構(gòu)可以在其中開(kāi)發(fā)和發(fā)布自己的機(jī)器人軟件組件。
- The ROS Wiki : ROS 社區(qū) Wiki 是記錄有關(guān) ROS 信息的主要論壇。任何人都可以注冊(cè)一個(gè)帳戶并貢獻(xiàn)自己的文檔、提供更正或更新、編寫(xiě)教程等等。
- Bug Ticket System :有關(guān)文件票的信息,請(qǐng)參閱票證。
- Mailing Lists : ros-users 郵件列表是有關(guān) ROS 新更新的主要溝通渠道,也是詢問(wèn)有關(guān) ROS 軟件問(wèn)題的論壇。
- ROS Answers : 用于回答您的 ROS 相關(guān)問(wèn)題的問(wèn)答網(wǎng)站。
- Blog : 柳葉車庫(kù)博客提供定期更新,包括照片和視頻。
4、名稱
4.1、圖資源名稱
圖資源名稱提供分層命名結(jié)構(gòu),用于 ROS 計(jì)算圖中的所有資源,例如節(jié)點(diǎn)、參數(shù)、主題和服務(wù)。這些名稱在 ROS 中非常強(qiáng)大,并且對(duì)于 ROS 中如何組成更大、更復(fù)雜的系統(tǒng)至關(guān)重要,因此了解這些名稱的工作原理以及如何操作它們至關(guān)重要。
在我們進(jìn)一步描述名稱之前,這里有一些示例名稱:
- / (全局命名空間)
- /foo
- /stanford/robot/name
- /wg/node1
圖資源名稱是ROS中提供封裝的重要機(jī)制。每個(gè)資源都定義在一個(gè)命名空間中,它可以與許多其他資源共享。通常,資源可以在其命名空間內(nèi)創(chuàng)建資源,并且它們可以訪問(wèn)在其自己的命名空間內(nèi)或之上的資源。可以在不同命名空間中的資源之間建立連接,但這通常由兩個(gè)命名空間上方的集成代碼完成。這種封裝隔離了系統(tǒng)的不同部分,以免意外獲取錯(cuò)誤命名的資源或全局劫持名稱。
名稱是相對(duì)解析的,因此資源不需要知道它們?cè)谀膫€(gè)命名空間中。這簡(jiǎn)化了編程,因?yàn)榭梢跃帉?xiě)一起工作的節(jié)點(diǎn),就好像它們都在頂級(jí)命名空間中一樣。當(dāng)這些節(jié)點(diǎn)被集成到一個(gè)更大的系統(tǒng)中時(shí),它們可以被下推到一個(gè)定義它們代碼集合的命名空間中。例如,可以將一個(gè)斯坦福演示和一個(gè) Willow Garage 演示合并到一個(gè)帶有 stanford 和 wg 子圖的新演示中。如果兩個(gè)演示都有一個(gè)名為“camera”的節(jié)點(diǎn),它們就不會(huì)發(fā)生沖突。需要對(duì)整個(gè)圖形可見(jiàn)的工具(例如圖形可視化)以及參數(shù)(例如 demo_name)可以由頂級(jí)節(jié)點(diǎn)創(chuàng)建。
4.1.1、有效名稱
有效名稱具有以下特征:
1.第一個(gè)字符是字母字符 ([a-z|A-Z])、波浪號(hào) (~) 或正斜杠 (/)
2.后續(xù)字符可以是字母數(shù)字 ([0-9|a-z|A-Z])、下劃線 (_) 或正斜杠 (/)
例外:基本名稱(如下所述)中不能包含正斜杠 (/) 或波浪號(hào) (~)。
4.1.2、解決
ROS中有四種類型的圖資源名稱:base、relative、global和private,它們的語(yǔ)法如下:
- base
- relative/name
- /global/name
private/name”開(kāi)頭的名稱是私有的。它們將節(jié)點(diǎn)的名稱轉(zhuǎn)換為命名空間。例如,命名空間 /wg/ 中的 node1 具有私有命名空間 /wg/node1。私有名稱可用于通過(guò)參數(shù)服務(wù)器將參數(shù)傳遞到特定節(jié)點(diǎn)。
默認(rèn)情況下,解析是相對(duì)于節(jié)點(diǎn)的命名空間完成的。例如,節(jié)點(diǎn) /wg/node1 具有命名空間 /wg,因此名稱 node2 將解析為 /wg/node2。
沒(méi)有命名空間限定符的名稱是基本名稱?;麑?shí)際上是相對(duì)名的一個(gè)子類,具有相同的解析規(guī)則。基本名稱最常用于初始化節(jié)點(diǎn)名稱。
以“/”開(kāi)頭的名稱是全局的——它們被認(rèn)為是完全解析的。應(yīng)盡可能避免使用全局名稱,因?yàn)樗鼈兿拗屏舜a的可移植性。
以“
以下是一些名稱解析示例:
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 |
4.1.3、重新映射
在命令行啟動(dòng)節(jié)點(diǎn)時(shí),可以重新映射 ROS 節(jié)點(diǎn)中的任何名稱。有關(guān)此功能的更多信息,請(qǐng)參閱重新映射參數(shù)。
4.2、包資源名稱
包資源名稱在具有文件系統(tǒng)級(jí)概念的 ROS 中使用,以簡(jiǎn)化引用磁盤(pán)上文件和數(shù)據(jù)類型的過(guò)程。包資源名稱非常簡(jiǎn)單:它們只是資源所在的包的名稱加上資源的名稱。例如,名稱“std_msgs/String”指的是“std_msgs”包中的“String”消息類型。
可以使用包資源名稱引用的一些與 ROS 相關(guān)的文件包括:
- Message (msg) types
- Service (srv) types
- Node types
包資源名稱與文件路徑非常相似,只是它們要短得多。這是因?yàn)?ROS 能夠在磁盤(pán)上定位包并對(duì)它們的內(nèi)容做出額外的假設(shè)。例如,消息描述始終存儲(chǔ)在 msg 子目錄中并具有 .msg 擴(kuò)展名,因此 std_msgs/String 是 path/to/std_msgs/msg/String.msg 的簡(jiǎn)寫(xiě)。同樣,Node 類型 foo/bar 相當(dāng)于在 Package foo 中搜索具有可執(zhí)行權(quán)限的名為 bar 的文件。
4.2.1、有效名稱
包資源名稱具有嚴(yán)格的命名規(guī)則,因?yàn)樗鼈兘?jīng)常用于自動(dòng)生成的代碼中。因此,一個(gè) ROS 包不能有除下劃線以外的特殊字符,它們必須以字母字符開(kāi)頭。有效名稱具有以下特征:
1.第一個(gè)字符是字母字符 ([a-z|A-Z])
2.后續(xù)字符可以是字母數(shù)字 ([0-9|a-z|A-Z])、下劃線 (_) 或正斜杠 (/)
3.最多有一個(gè)正斜杠 ('/')。
4.3、 代碼接口
roscpp::names 接口參考 (ROS Indigo)
-
計(jì)算
+關(guān)注
關(guān)注
2文章
442瀏覽量
38705 -
ROS
+關(guān)注
關(guān)注
1文章
276瀏覽量
16942
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論