ROS探索總結(二)——ROS總體框架

一、 ?總體結構

? ? ? ?根據ROS系統代碼的維護者和分布來標示,主要有兩大部分:
? ? ?(1)main:核心部分,主要由Willow Garage公司和一些開發者設計、提供以及維護。它提供了一些分布式計算的基本工具,以及整個ROS的核心部分的程序編寫。
? ? ?(2)universe:全球范圍的代碼,有不同國家的ROS社區組織開發和維護。一種是庫的代碼,如OpenCV、PCL等;庫的上一層是從功能角度提供的代碼,如人臉識別,他們調用下層的庫;最上層的代碼是應用級的代碼,讓機器人完成某一確定的功能。
? ? ? ?一般是從另一個角度對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迅速發展,軟件倉庫中包的數量指數級增加。

參考資料:
(1)《開源機器人操作系統——ROS》 張建偉等著
(2)《an open-source Robot Operating System》 paper
(3) ?willowgarage公司網站:http://www.willowgarage.com/
(4) ?ROS官方wiki:http://www.ros.org

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255766.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255766.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255766.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 阿貍的進階之路(4)

裝飾器 #1、開放封閉原則:對擴展開放,對修改是封閉#2、裝飾器:裝飾它人的,器指的是任意可調用對象,現在的場景裝飾器-》函數,被裝飾的對象也是-》函數#原則:1、不修改被裝飾對象的源代碼 2、不修…

【深度學習】——利用pytorch搭建一個完整的深度學習項目(構建模型、加載數據集、參數配置、訓練、模型保存、預測)

目錄 一、深度學習項目的基本構成 二、實戰(貓狗分類) 1、數據集下載 2、dataset.py文件 3、model.py 4、config.py 5、predict.py 一、深度學習項目的基本構成 一個深度學習模型一般包含以下幾個文件: datasets文件夾:存放…

二叉樹的序遍歷

時間限制: 1 s空間限制: 32000 KB題目等級 : 白銀 Silver題目描述 Description求一棵二叉樹的前序遍歷,中序遍歷和后序遍歷 輸入描述 Input Description第一行一個整數n,表示這棵樹的節點個數。 接下來n行每行2個整數L和R。第i行的兩個整數Li和Ri代表編號…

GUI登錄界面

在這次的作業中,我先使用單選按鈕,輸入框,復選框設計了一個簡單地登錄界面。接著我使用了MouseListener將登陸按鈕與下一個“查詢界面”連接起來。最后我使用了我們本周所學的JFrame框架與事件處理機制設計了一個簡單地界面。我所設計的登錄界…

淺談ROS操作系統及其應用趨勢

ROS操作系統是最先由斯坦福開發的開源機器人操作系統,目前由willowgarage公司開發和維護,相關的開發社區也很成熟( http://www.ros.org , http://answers.ros.org, http://www.willowgarage.com), 經過幾年的發展API也逐漸穩定&a…

Raft學習傳送門

Raft官網 官方可視化動畫1 官方可視化動畫2 論文中文翻譯 論文英文地址 Paxos Made Simple論文翻譯 Raft理解 技術分享 《分布式一致性raft算法實現原理》 狀態機 MIT: raft實現 分布式系統學習2-Raft算法分析與實現 分布式系統MIT 6.824學習資源 知乎大神的&#…

【Python生成器與迭代器的區別】

目錄 一、迭代 二、迭代器 1)創建迭代器——兩種方法 iter()方法 利用()和range結合使用 2)具體案例 3、生成器 4、二者的異同 1)、共同點 2)、不同點 a、語法上 b、用法上 一、迭代 首先理解一…

BZOJ4426 : [Nwerc2015]Better Productivity最大生產率

如果一個區間包含另一個區間,那么這兩個區間是否在一起的生產率是一樣的。 將所有這種包含了其他區間的區間放入數組$b$,其余的放入數組$c$,有多個相同的時候則從$b$移一個到$c$。 那么$c$里所有區間左端點遞增,右端點也遞增&…

[codevs1105][COJ0183][NOIP2005]過河

[codevs1105][COJ0183][NOIP2005]過河 試題描述 在河上有一座獨木橋,一只青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由于橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的…

ABB機器人套接口通信 機器人部分

ABB機器人套接口通信 機器人部分 文章機器人部分,描述如何運行機器人從機程序,使機器人根據上位機節點發送的命令,執行具體運動。 ABB機器人執行3個任務。這些任務都配置為SEMISTATIC(背景程序)的任務,第三任務是正常動作任務。下文描述如…

CRM項目總結

CRM項目總結 一:開發背景 在公司日益擴大的過程中,不可避免的會伴隨著更多問題出現。 對外 : 如何更好的管理客戶與公司的關系?如何更及時的了解客戶日益發展的需求變化?公司的產品是否真的符合客戶需求?以…

【面經——《速騰聚創科技有限公司——深度學習算法工程師》】

自我介紹 實習項目 1)項目主要應用的領域? 2)難點在哪?——機械臂吸盤大小和目標大小之間坐標的協調 3)難點不在于算法,在于數據的處理和均衡性?對于數據均衡方面有什么理解&#xf…

js變量和數據類型

轉載于:https://www.cnblogs.com/songyinan/p/6181421.html

offline .net3.5

1.加載虛擬光驅 2.dism.exe /online /enable-feature /featurename:netfx3 /Source:D:\sources\sxs轉載于:https://www.cnblogs.com/BillLei/p/5294082.html

(九)模板方法模式詳解(包含與類加載器不得不說的故事)

作者:zuoxiaolong8810(左瀟龍),轉載請注明出處,特別說明:本博文來自博主原博客,為保證新博客中博文的完整性,特復制到此留存,如需轉載請注明新博客地址即可。 模板方法模…

阿里云openapi接口使用,PHP,視頻直播

1.下載sdk放入項目文件夾中 核心就是aliyun-php-sdk-core,它的配置文件會自動加載相應的類 2.引入文件 include_once LIB_PATH . ORG/aliyun-openapi/aliyun-php-sdk-core/Config.php; 3.配置客戶端對象,需要Access Key ID,Access Key Secret $iClientProfile Defa…

【面經——《廣州敏視數碼科技有限公司》——圖像處理算法工程師-深度學習方向】

目錄 筆試 HR面 專業面——60多分鐘 主管面 反問: 筆試 8道題——簡答題 1道編程 蘋果、香蕉、梨、菠蘿,彩色圖像如何進行分類?一輛帶車牌的汽車,圖像亮度整體呈現偏亮狀態,如何…

Android之網絡編程利用PHP操作MySql插入數據(四)

因為最近在更新我的項目,就想著把自己在項目中用到的一些的簡單的與網絡交互的方法總結一下,所以最近Android網絡編程方面的博文會比較多一些,我盡量以最簡單的方法給大家分享,讓大家明白易懂。如果有什么不對的地方,還…

RAPID 信號的互鎖和同步 WaitTestAndSet 和 TestAndSet

RAPID 信號的互鎖和同步 WaitTestAndSet 指令等待指定的持久型 BOOL 變量變成 FALSE.當變量值變為 FALSE, 該指令將設置變量為 TRUE 并繼續執行. 該持久型變量可被作為同步或者互斥時的一個 BOOL 信號量。 這個指令與 TestAndSet 有著同樣的基本功能。但是 WaitTestAnd…