搜尋此網誌

2018年4月7日 星期六

ROS 的學習記錄 #1 - 什麼是 ROS



什麼是 ROS (Robot Operating System),前一陣子常聽到這個名詞,不過,一直沒去研究他,只大略知道這是一套用在 Robot 開發上的平台,那時還把 ROS 當成是一套獨立運作的 OS,心想應該也是從 Linux 上分支出來的吧…….(後來才知道,完全搞錯方向)

最近剛好有個機會,能夠撥些時間來研究 ROS ,當然得捉緊機會好好學習一翻,免得接下來沒有時間,又只能望著它嘆氣了



Wikipedia [ https://en.wikipedia.org/wiki/Robot_Operating_System ]上先看了一下 ROS 的歷史,原來這個平台早在 2007 就誕生了,到現在已經10年歷史了。底下列了幾個我比較在意的事項:
  • 2007 ROS 平台建立,原本是運用於 Stanford AI Robot 專案上,且於 2007/11/7 正式放上 SoruceForge
  • 2014 第一台運行 ROS 的機器人 Robonaut 2 上太空站
然後 ROS 相關的 conference, book, school….開始出現。

簡單了解 ROS 的起源後,接下來就要回到技術面了。

什麼是 ROS 呢?
ROS 是專門為開發 Robot 軟體而建立的一套有彈性的開發平台,此平台內含許多工具,方便開發人員能夠將複雜,規律性的工作,簡化成單純的動作,然後可以用簡化的程式進行開發。如此一來,開發者就能專心的分析以及研究 Robot 的行為,而不用花費時間在建立軟體模組間繁雜的溝通以及平台系統的建立。
ROS 是基於 BSD-licensed 的開源項目,可以自由使用於商業或是非常業的應用。

ROS 也是一個跨平台的環境。


由此圖上可以看出,其實 ROS 是依附在現有的作業系統之上,並不是一個獨立的作業系統,而 ROS 也針對這些作業系統提供了預編好的package,所以在安裝使用上也十分方便。(除非是想從代碼上自己編譯安裝,這個方式真的是吃了不少苦,花了不少時間....XD)

ROS 的宗旨是:
  • 點對點的溝通模式
  • 支持多種語言的開發
    • Python, C++, Octave, LISP
  • 許多支援的工具協助分析,除錯,以及視覺化工具
  • 簡單的軟體架構
  • 免費且開源

ROS 裡的基本元件:
  • Nodes : 執行的基本單元,概念上和軟體定義中的模組相同,而之前提到的點對點溝通模式中的點,就是 Node
  • Messages : Node 間溝通的方式是靠 Message 的傳輸,Message 有嚴謹的定義且內含標準的型能定義,如:integer, floating point, boolean 等。也支援 array 的型態
  • Topics : Node Node 之前的傳輸通道就稱為 Topics ,且一個 Node 可以建立多個 Topics
  • Services : 也是 Node Node 溝通的一種方式,不過,和 Topics 不一樣的是,Service 是一對一的溝通,不像 topics 可以多對一或是一對多

ROS 的架構圖大致如下:


一個完整的 ROS 系統裡,只有一個 Master,所有的 Node 都必須跟 Master 註冊,如此才能形成一個完整的運作體系,而開發者只需將複雜的系統先分門別然成許多的運作單元,再針對每個單元進行開發,後續再分別掛上 Master 且定義溝通的順序,即可完成一套複雜的運作系統。

再者,ROS.org 裡也提供了許多的 Package 可以使用,再加上 ROS 開發者社群的支持,隨時都有新的 Package 上傳,如此豐富的資源以及社群強力的支持,造就了 ROS不管是商業上或是個人應用的優勢。

後續,我會再把自己的學習過程依續的貼上,希望我的學習過程能讓想學習 ROS 的人參考,必竟我也是取之於社群,當然也希望能貢獻些許的力量。


沒有留言:

張貼留言