在過去還沒有 ROS 的年代,我們要去設計一款機器人是非常困難的,而這邊的機器人是一個統稱,並非只單針對人型、輪型、服務型等機器人。假設我們想要去設計一款機器人,我們需要完成以下這些項目,才能製造出我們要的機器人,那有哪些呢?
可以看到這個工作量是十分巨大的,如果你是一位機器人工程師,你可能變成這樣
圖片來源(壹讀)
當你遇到在運作時突然發現某一個部分罷工了,你可能會直接發瘋,然而我們在設計的機器人其實跟古老時期的電腦一樣,沒有作業系統可以來協助我們,所以需要直接來控制硬體來進行除錯、寫程式等等作業,當出現作業系統後,我們只需要根據作業系統來提供驅動就好,ROS 便是沿著這條老路再進行的。
我們希望所有的硬體開發商,像是雷達、底盤、攝影機等等的硬體設備,都可以透過一個平台來讓我們直接調用就可以使用,不用每次都自己造輪子來讓我們的程式碼跑起來,逢甲某資訊系教授名言:自己造輪子是浪費時間的事情。所以我們如果有現成的可以幫助你減少寫程式時間的工具,為何不用呢? 而 ROS 的出現便是幫助我們達成這件事情。
說了這麼多,那到底什麼是 ROS , 我們先從他的歷史說起,在2000多年時,由 Leland Stanford Junior University 的一個人工智慧實驗室 STAIR(Stanford Artificial Intelligence Robot),開發了一套機器人軟體系統框架,接下來在 2007 年時, ROS 項目正式啟動,由 Willow Garage 與 STAIR 共同合作來開發 ROS ,而 Willow Garage 這個組織以開發出 PR2 和 TutleBot 2 等 機器人而聞名,在 2010 年時發布了 ROS 1.0,由此開始便陸續新增了許多的版本,再發展的過程也有無數的研發人員將他們的研究貢獻到 ROS 項目中,這也是 ROS 到現在仍然是維持著 BSD 協議的原因,在 2013年後 ROS 改由開源基金會 Open Source Robotics Foundation(OSRF)繼續維護
下面這張圖就是從以前到現在的所有版本,你可以發現他每一代的都是以烏龜來進行繪製,而每一個版本都有一個官方推薦的作業系統版本,所以你可以根據你的作業系統來進行安裝。這邊要注意的是 ROS 是有分成短期支援跟長期支援板,這邊建議都使用長期支援板,會比較保險。在 2018 年時,ROS 正式進入 2.0 的時代。
ROS版本 | 發布時間 |
---|---|
Noetic Ninjemys | 2020.5 |
Melodic Morenia | 2018.5 |
Lunar Loggerhead | 2017.5 |
Kinetic Kame | 2016.5 |
Jade Turtle | 2015.5 |
Indigo lgloo | 2014.7 |
Hydro Medusa | 2013.9 |
Groovy Galapagos | 2012.12 |
Fuerte Turtle | 2012.4 |
Electric Emys | 2011.8 |
Diamondback | 2011.3 |
C Turtle | 2010.8 |
Box TurtleBox Turtle | 2010.3 |
講道這邊我們開始來說 ROS 是什麼,大家不要以為他名稱中有作業系統這幾個字,就認為他是一個作業系統,但其實並不是這樣的,其實呢他只是最為我們程式碼跟系統的中間溝通層,只不過它提供了一些類似作業系統的功能,我們才將他稱作作業系統,那他提供了哪一些功能呢?
而在 ROS 官方所提到的 ROS 是由以下四點組合而成
我們有時候只 ROS ,有時後指的只有通訊框架這一個部分,而框架指的是說,有人去訂定了一個既有的規範,我們只需要跟著規則走就好,而 ROS 定訂了一個分布式的架構,可以同時執行多個程序,而每一個程序又可以單獨的去設計,然後放在一起去把他們給組合起來。
而在 ROS 中我們不會以程序來進行命名,而是以 Node 節點來進行使用。
以上面這張圖為例,robot 是一個 node , laser 是一個 node , map 也是一個 node,以此類推,而 ROS 便是提供了一個框架(可以讓他們互相溝通的橋樑)來管理這些 Node。
那為甚麼要這樣做呢? 假設我今天要去更換我的 laser , 我只需要把 laser 這個 node 替換掉就好,不用去動到其他的部分,該給的 api 就是那些,甚至不用去改通訊協定,我發送跟舊版的 laser 相同 type 的訊息過去就好,這點在開發上是非常好用的。
在工具的部分 ROS 有許多種開源工具,可以用來做一些模擬、數據可視化、圖形介面、數據紀錄等等
Gazeboo
RVIZ
ROS 也提供了許多的功能,像是 控制、規劃、視覺、建圖等等,假設我們現在想要開發一台會做人臉辨識,然後看到人會跟著你走的行李箱,我們只需寫一下人臉辨識的部分,行走、路徑規劃等等的 ROS 都有基本的涵式庫可以直接調用,這可以加速我們寫程式的速度,而且只需撰寫我們擅長的部份就好。
那我們去哪邊找這些套件呢? 一個方法是去官網的 wiki ,上面有各式各樣的內容和教程,第二個是 GITHUB,上面都有教學、文檔來供我們查看。
介紹的部分先到這邊告一段落,最後給大家看一下 ROS 10 周年所拍的紀念影片,明天開始來進行 ROS 安裝!!
#Arm Arm Platforms