ROS

ROS tutorials 系列(0) 什麼是ROS?要怎麼使用ROS?

寫了幾篇tutorial之後,才注意到最重要的東西我一直忘記說~於是把這篇補在第0篇

這個最重要的東西就是,為什麼要用ROS來開發機器人?用ROS的意義是什麼?

在回答這個問題之前,要先抓住ROS的核心精神,在開發的過程中才不致迷失在細節之中無法脫身(這是親身經歷,尤其是目前ROS還不是很完美,很多package都不是很穩定,所以過程中會有很多阻礙,往往讓人想放棄)

——————————————————————–

讓我們回到ROS的核心精神,

ROS之所以叫做Robot OS(機器人作業系統),就是想要當機器人界的Windows.

我想大部分人應該都有使用Windows的經驗,雖然Windows有不少缺點,但因為有Windows,所以Asus, Acer, Toshiba, IBM的電腦使用方法才會差不多,反正都是操作Windows.但是我們知道,Mac的使用方式跟Windows就有一段差距,因為這兩者是不同的作業系統.

試想一下,如果Asus, Acer, Toshiba, IBM, Dell這些公司的電腦作業系統全都不一樣,那你每次換電腦或是要使用別人的電腦時會有多大的麻煩?假設你在旅館,只是想用旅館電腦上網收個信,結果發現你連瀏覽器在哪裡都找不到會有多崩潰?

這種崩潰,在機器人研究的領域裡卻存在了數十年.在ROS出現前(ROS出現也才五年),每種機器人的作業系統跟軟體都不一樣,可以想像東京大學做出來的機器人是用Windows,Stanford大學做出來的機器人可能是用Mac OS,每隻機器人用的作業系統跟硬體設計都不一樣,也就是說,如果我今天要開發機器人,從頭到尾,包含機器人的硬體,軟體都得自己設計,就算我要做的設計可能已經有數萬人做過,但因為大家的成果都是獨自擁有的,所以我拿不到,全部得自己來.所以機器人開發曠日費時,大家的成果又很難互通.別人開發出來的機器人辨識系統在我的機器人有很大機率無法使用.因為平台不一樣,也就是溝通語言不一樣.

在這樣的情況下,也難怪機器人一直在我們的想像中,卻也一直無法真正的有爆炸性的突破.

直到ROS出現,帶來了一絲讓機器人爆炸性發展的可能性.

ROS,就是一個共通的機器人軟體平台,意在整合全世界的研究能量,而且完全開源.任何人,只要你有安裝ROS,都可以使用ROS整合的所有資源,你一個人就可以拿到全世界的研究成果!舉一個例子,假設今天東大的研究團隊做出了一個超強人工智慧,你就可以直接拿來用,站在他們的肩膀上繼續走.

再舉一個我的親身例子,這學期修數位語音處理要做Final project,我試做了一個簡單的prototype,這個prototype的功能是讓人問電腦如何做一件事(透過麥克風收音),電腦會辨識你說了什麼,上網找做這件事的步驟(取得HTML檔後再parse出步驟),用電腦語音說出步驟.做出這個簡單prototype,我總共花的時間大概就一個晚上.不是因為我很厲害,而是因為辨識語音的程式及讓電腦說話的程式都是別人寫好的.我其實只寫了取得步驟的程式, 再把步驟餵給說話的程式讓它幫我說而已.

這樣就夠好了嗎?

答案當然是,不.

開發ROS的公司Willow Garage還提供了硬體平台(PR2,我也寫過一篇PR2開箱文),這個硬體平台的目的就是要幫開發者排除一切硬體問題,專注於開發更高級的軟體.想像看看,如果你用電腦寫程式,寫一寫電腦會當掉,某條電線會鬆脫,或是莫名有問題,你能夠好好寫程式嗎?

一個巨大的肩膀,就是ROS和PR2.

想要更詳細的答案,之前我在Quora有回過一篇What is ROS?的問題,有興趣的人可以參考參考.

——————————————————————–

看完以上之後應該會對ROS的設計精神有概念,但是有了這個概念之後怎麼應用到做ROS上呢?

首先第一個問題是,為什麼選擇ROS?

我來說說我的理由,我之所以選擇ROS,是因為我想做的機器人會大量用到ROS的提供的技術支援(這跟ROS的機制有關了,暫且不談技術細節)

我來說說,我想做的機器人是怎麼串起來的
機器人擁有camera跟sensor,能夠看到真實世界的樣貌(perception),這時的機器人只能看,就像是嬰兒剛出生時不會爬,只能張開眼睛看看這世界,並不能動,所以只能看到某個角度的景象.

下一步,我們要讓機器人可以到處走動,就要加入navigation,且機器人四處走動時就用SLAM建出地圖.不過有地圖歸有地圖,機器人若只有percepton跟navigation就只是一個觀察者,無法跟這個世界很好地互動,所以加入manipulation(3D navigation+grasping),開始操作這世界上有的物體,就像嬰兒會抓東西了,可以和這世界進行互動,而要互動得好也需要mechanic的配合,機構不好是拿不起東西的(就像嬰兒的手如果還沒有力也抓不起東西).

這時我們已經有了perception, navigation, manipulation跟mechanic,但是只有這樣的話,機器人就像是嬰兒一樣,什麼都不會,所以我們要引進knowledge,就像嬰兒開始學會走路的knowledge,吃飯的knowledge,跟人互動的knowledge等等,讓機器人可以做的事情越來越多.

不過若只有knowledge,機器人就只是厲害一點點的電腦而已,他擁有很多知識,但他永遠不會知道這些知識代表的意義是什麼,所以我們要加入認知(cognition),讓機器人腦海中也擁有人類社會的模型,可以看懂人的表情,了解我們在想什麼,知道我們為什麼要做這些事,甚至可以跟我們聊天.有了認知,才是真正有用的機器人.也是我真正想做的機器人.

從這個架構,帶出了機器人幾大領域:

mechanics
perception
navigation+SLAM
manipulation
cognitive architecture+knowledge

這每一大領域都是一個鑽研一生都不容易做得到完美的領域,每一個領域都有許多的研究者投入心血,做出大量的研究成果.要做出一隻好的機器人就是這麼複雜.說穿了,機器人是一門鑽研”人”的學問,我們理解自己之後,才可能做出媲美人,甚至超越人的機器人.

所以在使用ROS的package時,我們應該去體會的這是別人造出來的強大工具,他的設計思維,強大的功能都值得我們去欣賞跟學習.例如在研究ROS的recognition相關package時,就要想像你正拿著一個眼睛,這個package提供的就是眼睛的功能.

當玩透摸透這些別人開發的工具之後,你有了眼睛,有了頭腦,有了手腳等等,就可以用這些ackage組出一個機器人.讓大家的積木可以組在一起不正是ROS的核心精神嗎?那麼使用ROS來開發是不是很合理?

但老實說,如果希望一開始做研究就有成果,ROS不一定是個很好的選擇.因為要ROS的上手難度頗高,聽說我們實驗室曾經有碩班學長被分到要做ROS相關研究,結果他才摸幾個禮拜就不做了.我想要不是我是專題生比較沒有進度壓力,在還沒上手並感受到ROS的強大之處前,我也可能被嚇跑.但是當了解ROS的意義之後,去做專注於一點的研究就不那麼有趣了.怎麼兜研究成果變得更富趣味.

最後把機器人數大領域串起來並討論產業發展的一個投影片分享給大家:

One thought on “ROS tutorials 系列(0) 什麼是ROS?要怎麼使用ROS?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s