ROS 介紹:定義、架構、通信機制

ROS介紹

ROS是什麼:ROS是一個用於編寫機器人軟件的靈活框架,它集成了大量的工具、庫、協議,提供了類似操作系統所提供的功能,包括硬件抽象描述、底層驅動程序管理、共用功能的執行、程序間的消息傳遞、程序發行包管理,可以極大簡化繁雜多樣的機器人平臺下的複雜任務創建與穩定行爲控制。

  • ROS的架構

ROS的架構設計分爲三層,下面通過介紹兩代ROS之間的設計變化來引出通信機制。

1. OS層

ROS並不是一個傳統意義上的操作系統,無法像Windows、Linux一樣直接運行在計算機硬件之上。ROS1主要構建於Linux系統之上,ROS2帶來了改變,支持構建的系統包括Linux、Windows、Mac、RTOS,甚至沒有操作系統的裸機。

2. 中間層

Linux是一個通用系統,並沒有針對機器人開發提供特殊的中間件,ROS在中間層做了大量的工作,其中最爲重要的就是基於TCPROS/UDPROS的通信系統,這是基於TCP/UDP網絡所做的再次封裝。通信系統使用發佈/訂閱、客戶端/服務器等模型,實現多種通信機制的數據傳輸。

除了TCPROS/UDPROS的通信機制外,ROS還提供一種進程內的通信方法——Nodelet,可以爲多進程通信提供一種更優化的數據傳輸方式,適合對數據傳輸實時性方面有較高要求的應用。

ROS1的通訊系統基於TCPROS/UDPROS,而ROS2的通訊系統基於DDS。DDS是一種分佈式實時系統中數據發佈/訂閱的標準解決方案。ROS2內部提供了DDS的抽象層實現,用戶不需要關注底層DDS的提供廠家。

在ROS1的架構中Nodelet和TCPROS/UDPROS是並列的層次,爲同一個進程中的多個節點提供一種更優化的數據傳輸方式。ROS2中也保留了這種數據傳輸方式,只不過換了一個名字,叫做“Intra-process”,同樣也是獨立於DDS。

在通信機制之上,ROS提供了大量機器人開發相關的庫,如數據類型定義、座標變換、運動控制等,可以提供給應用層使用。

3.  應用層

ROS1強依賴於ROS Master(通過遠程過程調用提供登記列表和對其他計算圖表的查找功能,幫助ROS節點之間相互查找、建立連接,同時還爲系統提供參數服務器,管理全局參數),一旦Master宕機,整個系統會面臨崩潰的處境。但是從右邊ROS2的架構中可以發現,之前讓人耿耿於懷的Master終於消失了,節點之間使用一種稱爲“Discovery”的發現機制來獲取彼此的信息。

ROS社區內共享了大量的機器人應用功能包,這些功能包內的模塊以節點爲單位運行,以ROS標準的輸入輸出作爲接口,開發者不需要關注模塊的內部實現機制,只需要瞭解接口規則即可實現複用,極大地提高了開發效率。

從系統實現的角度,ROS也可以分爲三個層次:文件系統(程序文件的組織和構建)、計算圖(從計算圖的角度來看,ROS系統軟件的功能模塊以節點爲單位獨立運行,可以分佈於多個相同或不同的主機中,在系統運行時通過端到端的拓撲結構進行連接)和開源社區。

  • ROS1的通信機制

ROS三種通信機制:1.話題通信(發佈和訂閱) 2.服務通信(客戶端服務端)3. 基於RPC(遠程過程調用)的參數服務器。

1、Topic:ROS中使用最爲廣泛的異步的publish-subscibe通訊模式,一般用於單向數據流傳輸。這種方式將信息的產生和使用雙方解耦。各個節點在master處註冊信息,master會返回一個成功的應答,其中包括所有publisher節點的URI(定位node在分佈式系統中的位置),通過RPC將publisher的信息分發給各個subscriber,然後subscriber去與相應的publisher建立連接傳輸 topic 相關信息。Topic消息的數據由TCPROS(基於tcp協議的ros應用層數據協議,用於解析topic與service的二進制數據流)協議傳輸。

2、Service: service 用於處理ros通訊中的同步通訊,採用server/client 語義。每個service type擁 有 request 與 response兩部分,對於service中的 server,ros不會檢查重名(name conflict),只有最後 註冊的server會生效,與client建立連接。

3、Parameter: parameter 可以看作爲ros系統運行時中定義的全局變量,而master node 中有 parameter server 來維護這些變量。

話題和服務的區別:

  • ROS1中的通訊中間層只是勘用的水平,通信機制的實時性和穩定性不好,強依賴於中心節點ROS Master。在基於ROS開發時,在通信機制方面需要經過大量的優化和改良,例如百度的Apollo無人車,其優化方式與ROS2對其做的改進類似。但是目前ROS2的功能尚不完善,需要依賴部分ROS1中的功能包。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章