17.ROS簡介

ROS簡介

  • 個人理解,如有紕漏請指出。

什么是ROS

ROS是面向機器人的開源的元操作系統(tǒng)(meta-operating system)。它能夠提供類似傳統(tǒng)操作系統(tǒng)的諸多功能,如硬件抽象、底層設備控制、常用功能實現(xiàn)、進程間消息傳遞和程序包管理等。此外,它還提供相關工具和庫,用于獲取、編譯、編輯代碼以及在多個計算機之間運行程序完成分布式計算。

這是維基上的解釋,讓我們結(jié)合項目仔細分析一下。

假設我們要制作一個無人機,進行路徑規(guī)劃算法的驗證,有一些傳感器比如GPS,陀螺儀,氣壓計作為輸入,上位機通過一些運算,計算出無人機行進的路線,然后將路線傳給飛控,飛控對電機進行控制,最終實現(xiàn)無人機的路線規(guī)劃。

如果整個框架都要自己來寫,那我們需要了解各個傳感器的通信方式,電機的控制,還需要將這些與頂層算法進行交互,這需要懂得東西就很多了,現(xiàn)在有了飛控,對底層的傳感器已經(jīng)做了一層抽象,將同一時刻的各個傳感器的數(shù)據(jù)組成一個數(shù)據(jù)包以MAVLink協(xié)議的形式向上層傳輸。處理計算機需要做的就是讀出這個以MAVLink協(xié)議的數(shù)據(jù)包,作為輸入,進行一系列計算,輸出目標點的經(jīng)度、緯度、高度等信息,并交由飛控對飛機進行調(diào)整,飛往目標點。換句話說,我們需要一個中間件,來翻譯MAVLink協(xié)議,這就有很多種選擇了,為了開發(fā)方便,我們選用了ROS作為這一個翻譯者,但ROS的作用遠不止翻譯的功能。

分布式計算

  • 一些機器人搭載多臺計算機,每臺計算機用于控制機器人的部分驅(qū)動器或傳感器
  • 即使只有一臺計算機,通常仍將程序劃分為獨立運行且相互協(xié)作的小的模塊來完成復雜的控制任務,這也是常見的做法
  • 當多個機器人需要協(xié)同完成一個任務時,往往需要互相通信來支撐任務的完成
  • 用戶通常通過臺式機、筆記本或者移動設備發(fā)送指令控制機器人,這種人機交互接口可以認為是機器人軟件的一部分

ROS1只是相對的分布式計算,對節(jié)點來說是分布式的,但Master層面上并不是分布式,還是需要主從節(jié)點的方式,ROS2在這個基礎上進行了底層通信方式的改進,使用DDS(Data Distribution Service)數(shù)據(jù)分發(fā)服務進行真正意義上的分布式計算。

軟件復用

ROS標準包(Standard Packages)提供穩(wěn)定、可調(diào)式的各類重要機器人算法實現(xiàn)。

ROS通信接口正在成為機器人軟件互操作的事實標準,也就是說絕大部分最新的硬件驅(qū)動和最前沿的算法實現(xiàn)都可以在ROS中找到。例如,在ROS的官方網(wǎng)頁上有著大量的開源軟件庫,這些軟件使用ROS通用接口,從而避免為了集成它們而重新開發(fā)新的接口程序。

快速測試

精心設計的ROS系統(tǒng)框架將底層硬件控制模塊和頂層數(shù)據(jù)處理與決策模塊分離,從而可以使用模擬器替代底層硬件模塊,獨立測試頂層部分,提高測試效率。

ROS另外提供了一種簡單的方法可以在調(diào)試過程中記錄傳感器數(shù)據(jù)及其他類型的消息數(shù)據(jù),并在試驗后按時間戳回放。通過這種方式,每次運行機器人可以獲得更多的測試機會。例如,可以記錄傳感器的數(shù)據(jù),并通過多次回放測試不同的數(shù)據(jù)處理算法。在ROS術語中,這類記錄的數(shù)據(jù)叫作包(bag),一個被稱為rosbag的工具可以用于記錄和回放包數(shù)據(jù)

軟件結(jié)構(gòu)

我們可以通過ROS的分布式計算來一窺其軟件結(jié)構(gòu)和設計思想。

節(jié)點

ROS用節(jié)點(Node)的概念表示一個應用程序,不同node之間通過事先定義好格式的話題(Topic),服務(Service),動作(Action)來實現(xiàn)連接。

話題

消息傳遞的理念是:當一個節(jié)點想要分享信息時,它就會發(fā)布(publish)消息到對應的一個或者多個話題;當一個節(jié)點想要接收信息時,它就會訂閱(subscribe)它所需要的一個或者多個話題。ROS節(jié)點管理器負責確保發(fā)布節(jié)點和訂閱節(jié)點能找到對方;而且消息是直接地從發(fā)布節(jié)點傳遞到訂閱節(jié)點,中間并不經(jīng)過節(jié)點管理器轉(zhuǎn)交。

所有訂閱該話題的節(jié)點都會收到該話題上的所有消息,不管你是否想要接收。

詳細點講:”生產(chǎn)”消息的程序只管發(fā)布消息,而不用關心該消息是如何被消費的; 消費消息的程序只管訂閱該話題或者他所需要消息的所有話題,而不用關心這些消息數(shù)據(jù)是如何生產(chǎn)的。

這個特性十分重要,這就意味著我們在這種通信機制中是一對多或者多對一的機制,而在下一種通信機制中將是一對一的機制!

服務

服務調(diào)用是雙向的,一個節(jié)點給另一個節(jié)點發(fā)送信息并等待響應,因此信息流是雙向的。作為對比,當消息發(fā)布后,并沒有響應的概念,甚至不能保證系統(tǒng)內(nèi)有節(jié)點訂閱了這些消息。

服務調(diào)用實現(xiàn)的是一對一通信。每一個服務由一個節(jié)點發(fā)起,對這個服務的響應返回同一個節(jié)點。另一方面,每一個消息都和一個話題相關,這個話題可能有很多的發(fā)布者和訂閱者。

最后,總結(jié)一下

ROS的優(yōu)點

首先是開源,帶來的是完善的社區(qū),遇到的大部分問題基本都能搜到,也帶來了更多的擴展,MATLAB2015以后版本內(nèi)建了ROS的支持,模塊化使得其可以隨意增刪功能,使用了語言無關的消息類型,使其可以支持多種編程語言,C++,Python,JAVA等都支持,可以很方便的進行數(shù)據(jù)的繪制,也是PX飛控推薦使用的交互方式之一。

ROS的不足

  • 多個機器人組成的集群; ROS的單master結(jié)構(gòu)就蛋疼了。
  • 小型嵌入式平臺,甚至“裸奔”的微控制器;依賴于Ubuntu的ROS太重了。
  • 實時系統(tǒng):包括進程間和跨機器通信,ROS做不到。
  • 非理想的網(wǎng)絡;ROS延遲很大,甚至斷網(wǎng)再連接時會掛。
  • 生產(chǎn)制造等環(huán)境:ROS可靠性還不夠。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容