ROS新兵上路(二)ROS架構與檔案系統

來源:互聯網
上載者:User

轉載自古-月:http://blog.csdn.net/hcx25909

小菜鳥上校:http://blog.csdn.net/xiaocainiaoshangxiao
一、  總體結構        根據ROS系統代碼的維護者和分布來標示,主要有兩大部分:      (1)main:核心部分,主要由Willow Garage公司和一些開發人員設計、提供以及維護。它提供了一些分散式運算的基本工具,以及整個ROS的核心部分的程式編寫。      (2)universe:全球範圍的代碼,有不同國家的ROS社區組織開發和維護。一種是庫的代碼,如OpenCV、PCL等;庫的上一層是從功能角度提供的代碼,如Face Service,他們調用下層的庫;最上層的代碼是應用級的代碼,讓機器人完成某一確定的功能。        一般是從另一個角度對ROS分級的,主要分為三個層級:計算圖級、檔案系統級、社區級。
二、  計算圖級        計算圖是ROS處理資料的一種點對點的網路形式。程式運行時,所有進程以及他們所進行的資料處理,將會通過一種點對點的網路形式表現出來。這一級主要包括幾個重要概念:節點(node)、訊息(message)、主題(topic)、服務(service)。
       (1)  節點        節點就是一些直行運算任務的進程。ROS利用規模可增長的方式是代碼模組化:一個系統就是典型的由很多節點群組成的。在這裡,節點也可以被稱之為“軟體模組”。我們使用“節點”使得基於ROS的系統在啟動並執行時候更加形象化:當許多節點同時運行時,可以很方便的將端對端的通訊繪製成一個圖表,在這個圖表中,進程就是圖中的節點,而端對端的串連關係就是其中弧線串連。        (2)  訊息        節點之間是通過傳送訊息進行通訊的。每一個訊息都是一個嚴格的資料結構。原來標準的資料類型(整型,浮點型,布爾型等等)都是支援的,同時也支援原始數群組類型。訊息可以包含任意的嵌套結構和數組(很類似於C語言的結構structs)。
       (3)  主題
       訊息以一種發布/訂閱的方式傳遞。一個節點可以在一個給定的主題中發布訊息。一個節點針對某個主題關注與訂閱特定類型的資料。可能同時有多個節點發布或者訂閱同一個主題的訊息。總體上,發行者和訂閱者不瞭解彼此的存在。        (4)  服務         雖然基於話題的發布/訂閱模型是很靈活的通訊模式,但是它廣播式的路徑規劃對於可以簡化節點設計的同步傳輸模式並不適合。在ROS中,我們稱之為一個服務,用一個字串和一對嚴格規範的訊息定義:一個用於請求,一個用於回應。這類似於web伺服器,web伺服器是由URIs定義的,同時帶有完整定義類型的請求和回複文檔。需要注意的是,不像話題,只有一個節點可以以任意專屬的名字廣播一個服務:只有一個服務可以稱之為“分類象徵”,比如說,任意一個給出的URI地址只能有一個web伺服器。
        在上面概念的基礎上,需要有一個控制器可以使所有節點有條不紊的執行,這就是一個ROS的控制器(ROS Master)。         ROS Master 通過RPC(Remote Procedure Call Protocol,遠端程序呼叫)提供了登記列表和對其他計算圖表的尋找。沒有控制器,節點將無法找到其他節點,交換訊息或調用服務。
        比如控制節點訂閱和發布訊息的模型如下:
        ROS的控制器給ROS的節點儲存了主題和服務的註冊資訊。節點與控制器通訊從而報告它們的註冊資訊。當這些節點與控制器通訊的時候,它們可以接收關於其他以註冊及節點的資訊並且建立與其它以註冊節點之間的聯絡。當這些註冊資訊改變時控制器也會回饋這些節點,同時允許節點動態建立與新節點之間的串連。
        節點與節點之間的串連是直接的,控制器僅僅提供了查詢資訊,就像一個DNS伺服器。節點訂閱一個主題將會要求建立一個與出版該主題的節點的串連,並且將會在同意連線協定的基礎上建立該串連。          另:ROS控制器控制服務:

三、  檔案系統級         ROS檔案系統級指的是在硬碟上面查看的ROS原始碼的組織形式。
        ROS中有無數的節點、訊息、服務、工具和庫檔案,需要有效結構去管理這些代碼。在ROS的檔案系統級,有以下幾個重要概念:包(package)、堆(stack)、         (1)  包
        ROS的軟體以包的方式組織起來。包包含節點、ROS依賴庫、資料套、設定檔、第三方軟體、或者任何其他邏輯構成。包的目標是提供一種便於使用的結構以便於軟體的重複使用。總得來說,ROS的包短小精幹。         (2)  堆
        堆是包的集合,它提供一個完整的功能,像“navigation stack”。Stack與版本號碼關聯,同時也是如何發行ROS軟體方式的關鍵。
        ROS是一種分散式處理架構。這使可執行檔能被單獨設計,並且在運行時鬆散耦合。這些過程可以封裝到包(Packages)和堆(Stacks)中,以便於共用和分發。下圖是在包和堆在檔案中的具體結構:          Manifests (manifest.xml):提供關於Package中繼資料,包括它的許可資訊和Package之間依賴關係,以及語言特性資訊像編譯旗幟(編譯最佳化參數)。
         Stack manifests (stack.xml):提供關於Stack中繼資料,包括它的許可資訊和Stack之間依賴關係。
四、  社區級         ROS的社區級概念是ROS網路上進行代碼發布的一種表現形式。結構如下圖所示:
        程式碼程式庫的聯合系統。使得協作亦能被分發。這種從檔案系統層級到社區一級的設計讓獨立地發展和實施工作成為可能。正是因為這種分布式的結構,似的ROS迅速發展,軟體倉庫中包的數量指數級增加。

 ROS檔案系統中的兩個最基本的概念:Package和Manifest,即包和資訊清單檔。

     Package是組織ROS代碼的最基本單位,每一個Package都可以包括庫檔案,可執行檔,指令碼及其它的一些檔案。

     Manifest檔案是對Package的相關資訊的一個描述。他提供了Package之間的依賴性,以及一個包的元資訊,比如版本、維護著和許可證等資訊。

     檔案系統提供了幾個很有用的命令列的工具,專門用來對ROS的檔案系統進行操作。

     rospack被用來擷取一個包的相關資訊,這裡只介紹它的find選項,用法如下: [html]  view plain copy # rospack find [package_name]  

[html]  view plain copy    您可以在一個新開啟的終端中輸入如下命令: [html]  view plain copy rospack find roscpp  

就可以找到roscpp這個包的位置資訊,可能會返回類似於下面的這種結果: [html]  view plain copy /opt/ros/hydro/share/roscpp  

     roscd命令允許您利用包的名字直接切換到相應的檔案目錄下,當然這是對ROS檔案系統而言,它的使用方法如下:
[html]  view plain copy roscd [locationname[/subdir]]  
舉一個例子,直接在終端輸入: [html]  view plain copy roscd roscpp  

就可以直接切換到roscpp這個檔案的目錄下,可以使用如下命令來進行驗證: [html]  view plain copy pwd  

返回的結果類似與如下形式: [html]  view plain copy /opt/ros/hydro/share/roscpp  


roscd將只能開啟存在與環境變數ROS_PACKAGE_PATH中的目錄及其子目錄,您可以使用如下命令來查看ROS_PACKAGE_PATH中的內容:

[html]  view plain

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.