為什么我選擇并且推崇用ROS開發(fā)機(jī)器人?
如果我們現(xiàn)在想研發(fā)一款機(jī)器人,應(yīng)該選擇哪一個操作系統(tǒng)呢?其實我們大家平常接觸到的操作系統(tǒng)寥寥無幾,Windows,MacOS,Linux,iOS,Andoird。ROS雖然全名是Robot Operating System,但本質(zhì)上不是操作系統(tǒng),是Linux發(fā)行版Ubuntu下的一個用來開發(fā)機(jī)器人的Middleware,這個沒有什么好辯駁的。Android雖然意思是人形機(jī)器人,但是我覺得這就只是名字而已,Andy Rubin難道真的是想通過智能手機(jī)探秘智能機(jī)器人?而且機(jī)器人學(xué)里的人形機(jī)器人一般寫成Humanoid。為了規(guī)避因“操作系統(tǒng)”產(chǎn)生的歧義,本文中我們討論研發(fā)一款機(jī)器人需要怎樣的“環(huán)境配置”?所以很多概念沒有區(qū)分是否稱得上操作系統(tǒng)。
選擇怎樣的環(huán)境配置,有幾點是我們先要搞清楚的。首先我們需要知道實時性是不是必須的。簡單的說,如果在系統(tǒng)中是關(guān)鍵變量,系統(tǒng)就需要實時,例如雙足機(jī)器人動態(tài)行走系統(tǒng)就必須實時,但是靜態(tài)行走的話其實不實時也可以。如果實時性是必須的,我們可以選擇Windows + VxWorks,這是在傳統(tǒng)運(yùn)動控制領(lǐng)域非常常見的一個組合。也可以選擇QNX操作系統(tǒng),或者LabView,不過這兩個實時的我并沒有很多經(jīng)驗。我最早接觸的實時操作系統(tǒng)是Windows + Ardence RTX,后來應(yīng)該改名為IntervalZero。還有就是是否系統(tǒng)需要整體上實時?我們在做雙足機(jī)器人的時候,運(yùn)動控制就用到了RTX,但是圖像處理并沒有。后來我們將運(yùn)動控制的部分移到了一個ARM7的下位機(jī),上位機(jī)的Windows只需要發(fā)送action的指令。所以,即便是需要實時,架構(gòu)也是很靈活的。上位機(jī)是沒有實時性的強(qiáng)需求的。
當(dāng)我們希望稍微提高一下機(jī)器人復(fù)雜度的時候,就會發(fā)現(xiàn)另一個需要考慮的問題,進(jìn)程間通信。在我們用Windows + RTX的時候,進(jìn)程間通信使用RTX提供的shared memory,不過都是比較慢的圖像處理進(jìn)程向shared memory中寫數(shù)據(jù),決策和運(yùn)動控制進(jìn)程讀數(shù)據(jù)。shared memory顯然并不是很好的通信方式,這里不再多加討論。ROS則使用了一個很好的通信架構(gòu),并且是ROS整個框架的一個基礎(chǔ)(不論是對于ROS中的topic,service,plugin,actionlib等基礎(chǔ)概念還是rviz,navigation package等功能包。想了解這些概念最近多關(guān)注下@Top Liu),所以很多人簡單的理解ROS只不過是做了一個通信的架構(gòu)而已。我必須說明下,進(jìn)程間通信并不是ROS能夠占領(lǐng)機(jī)器人開發(fā)環(huán)境的主要原因。在2010年,我們開發(fā)一款類似Atlas的大型人形軍用機(jī)器人的時候,就用到了進(jìn)程間通信工具IPC。IPC就是Inter ProCESs Communication,開發(fā)者是CMU的Reid Simmons,應(yīng)該是出現(xiàn)在2000年左右。后來我在幫助本科生參加RoboCup Standard Platform League的時候用過Nao的操作系統(tǒng)NAOqi,這個系統(tǒng)大概是出現(xiàn)在2006年。在NAOqi中,整個通信的架構(gòu)和ROS非常像了,ROS中的Node在NAOqi中叫一個broker,都是占用一個系統(tǒng)的端口。所以,2010年ROS正式發(fā)布Box turtle的時候,通信架構(gòu)并不是顛覆性的。Android的進(jìn)程間通信的機(jī)制據(jù)我了解也是非常強(qiáng)悍的。根據(jù)@邵天蘭 之前的一次講座,我也了解到ROS的通信機(jī)制放到現(xiàn)在看其實已經(jīng)有點過時了。所以僅僅從通信機(jī)制上評價ROS,意義不大。再有,ROS中的通信機(jī)制并不是說不能繞過,其程序本質(zhì)上還是C++和Python。
我認(rèn)為ROS最大的貢獻(xiàn)就是制定了機(jī)器人開發(fā)的統(tǒng)一接口標(biāo)準(zhǔn)。因為Willow Garage當(dāng)年是做移動服務(wù)機(jī)器人,所以這些標(biāo)準(zhǔn)是首先在移動機(jī)器人界統(tǒng)一的。所以ROS的意義,我概括的時候就是六個字,“書同文,車同軌”,極大加速了交流與進(jìn)步。也是因為這樣,機(jī)器人學(xué)界才慢慢能夠形成一些BenchMarking,能夠在開源社區(qū)形成百花齊放的態(tài)勢,能夠讓大家不再深陷于又要搭建硬件又要搭建軟件的重復(fù)造輪子的困境。其實最主要就是ROS的message,看起來不過是一些頭文件,但是可以讓我們輕松的替換各種傳感器和執(zhí)行機(jī)構(gòu),替換軟件中的各個算法,現(xiàn)在搭建機(jī)器人在我們眼中,就像玩樂高積木,組裝一臺電腦。
當(dāng)然,作為一個開發(fā)工具,只做到這里是不夠的。我看過LabView的開發(fā)工具,支持硬件很多,應(yīng)該標(biāo)準(zhǔn)也很好。Microsoft Robotics Developer Studio是個不錯的開發(fā)工具,可惜掛掉了,也算是流行了一段時間。針對機(jī)器人開發(fā),ROS則提供了很好的可視化、模擬仿真和Debug的工具,專業(yè)上講是非常developer friendly,這也是很多人說為什么ROS適合學(xué)習(xí)和做研發(fā)的原因。不過我覺得這不能支持ROS不適合做產(chǎn)品開發(fā)的觀點,因為產(chǎn)品成型后,這些調(diào)試工具平時都是可以去掉的。關(guān)于可視化工具Rviz,模擬仿真的Gazebo,Debug的log等級以及在線調(diào)參的rosparam和rqt等等,ROS星火計劃都有詳細(xì)的講解。
最后,就要說說基因,社區(qū),支持和人才的問題。ROS的基因是移動式服務(wù)機(jī)器人,LabView的基因是NI,Android的基因是Google和智能手機(jī)。ROS社區(qū)還算是活躍,雖然機(jī)器人的高端玩家比較多,但是整體開發(fā)者數(shù)量估計也就在十萬的量級(ROS answer注冊用戶也就三萬吧),總量不能和如日中天的Android相比,也是現(xiàn)在背后支持OSRF和google的差距。我也在不同場合聊過很多次,硅谷的機(jī)器人創(chuàng)業(yè)公司基于ROS開發(fā)的比較多(相對國內(nèi)而言,具體比例不清楚,從RosCon的支持廠商就能看到一些端倪),但是國內(nèi)用Android的公司明顯在數(shù)量上占據(jù)上風(fēng) 。
所以最后要支持本文論點了。不討論工業(yè)機(jī)器人(以及類工業(yè)機(jī)器人的醫(yī)療機(jī)器人等,以控制為核心),我們把剩下的機(jī)器人品類再劃分的細(xì)致一些。首先,教育機(jī)器人(這里指學(xué)習(xí)機(jī)器人的套件等,不是說用來學(xué)習(xí)英文或者唐詩的對話機(jī)器人,這個歸屬到情感陪護(hù)類),主要面向k-12的學(xué)生,也就是我國高等教育之前的學(xué)生,大多就是scratch+單片機(jī),不需要什么系統(tǒng)。不過我覺得這種情況會在未來不久發(fā)生改變,主要是教育機(jī)器人業(yè)內(nèi)已經(jīng)有人發(fā)現(xiàn)機(jī)器人教育和機(jī)器人開發(fā)的脫節(jié)是個問題,那么也就是個商機(jī),但是要等到產(chǎn)業(yè)足夠大。玩具類機(jī)器人不需要開發(fā)環(huán)境,所以就是玩各種單片機(jī)。這些都不是支撐機(jī)器人能成為一項顛覆性技術(shù)的方向。所以以下主要分析用Android和ROS開發(fā)的機(jī)器人。[!--empirenews.page--]
情感陪護(hù)類機(jī)器人,從學(xué)術(shù)上講是social robotics,也是研究了很久的一個方向,不過作為這兩年機(jī)器人產(chǎn)業(yè)的一個爆點,也就是@機(jī)器人孔博士 提到的消費(fèi)級服務(wù)機(jī)器人,我在2014年以前是從來沒想到過的。因為整體上來說,機(jī)器人的智能還不足以支撐情感陪護(hù)這個概念。但是,借助智能手機(jī)的發(fā)展,尤其是現(xiàn)在集成了大量傳感器的智能手機(jī),使Android對硬件比如攝像頭、IMU、麥克、通訊元件等等支持很好;其次,一直在致力于改變?nèi)藱C(jī)交互方式的巨頭們做出了很多驚人的貢獻(xiàn),語音對話取得突破性進(jìn)展(沒有語音的話,觸屏交互或者觸摸交互也還能將就下。在交互這一點上,基于Linux的ROS很吃虧);再有,因為Android系統(tǒng)的一些附屬產(chǎn)品的發(fā)展,Android平板、智能家居產(chǎn)品、故事機(jī)等,使得兒童陪護(hù)機(jī)器人整個產(chǎn)業(yè)鏈從硬件到內(nèi)容都非常完善,一切的一切造就了兒童情感陪護(hù)類的機(jī)器人爆發(fā)。其實從需求和市場上來講,老年陪護(hù)類的機(jī)器人應(yīng)該是未來更大的蛋糕。無論如何,這兩年做情感陪護(hù)機(jī)器人,Android應(yīng)該是Donimating(要用dota配音去念!)了。
但是,若要進(jìn)入機(jī)器人行業(yè),趁著機(jī)器人行業(yè)的爆發(fā)飛起來,把機(jī)器人作為一生的事業(yè),用Android怕是不夠的。
首先,由于Android的基因,我們發(fā)現(xiàn)情感陪護(hù)機(jī)器人的大多功能都是手機(jī)和平板能夠?qū)崿F(xiàn)的,雖然集成了更多的傳感器,比手機(jī)這種被動設(shè)備在主動性上進(jìn)步了一些,但是對于實現(xiàn)復(fù)雜的功能上和ROS相比后勁不足,也導(dǎo)致產(chǎn)品同質(zhì)化比較明顯。第二,情感陪護(hù)類機(jī)器人這兩年增長確實很快,算在機(jī)器人行業(yè)里是非常大的體量,但是如果算在Android的陣營呢?機(jī)器人行業(yè)整體很小,中國服務(wù)機(jī)器人市場2016年銷售額大概100多億人民幣,占大頭兒的還是掃地機(jī)器人,而華為2016年消費(fèi)者業(yè)務(wù)銷售額1780億人民幣,我理解主要就是Android手機(jī)業(yè)務(wù)。所以,作為Anroid的衍生品,情感陪護(hù)類機(jī)器人在這個存量市場的份額并不大,是否能顛覆這個市場?未知數(shù)。 最后,面向行業(yè)的服務(wù)機(jī)器人, 前幾日我分享的算法并不決定一切!迅雷創(chuàng)始人程浩談國內(nèi)機(jī)器人創(chuàng)業(yè),其中有觀點談到短期內(nèi)創(chuàng)業(yè)To B的機(jī)器人更容易實現(xiàn),暗含的意思To B的機(jī)器人在短期內(nèi)會迎來爆發(fā)(投資人認(rèn)為適合創(chuàng)業(yè),一定是要爆發(fā)的)。那讓我們看看國內(nèi)外做To B的服務(wù)機(jī)器人的公司,做酒店運(yùn)送的Savioke和云跡科技,做Mobile Manipulation的Fetch Robotics和藍(lán)胖子,做機(jī)械臂的Baxter,應(yīng)該還有一些做物流機(jī)器人的公司。這些公司的共同點就是產(chǎn)品直接應(yīng)用在第二和第三產(chǎn)業(yè),目標(biāo)都是直接推動生產(chǎn)力,如果真正降低成本,是毋庸置疑的剛性需求。這些機(jī)器人技術(shù)難度比較高,沿襲了機(jī)器人學(xué)的發(fā)展,用ROS開發(fā)有很大的優(yōu)勢。
對機(jī)器人產(chǎn)業(yè)來說,需要有足夠的開發(fā)人員,需要有一小撮精英的研究人員做出技術(shù)突破。對于機(jī)器人開發(fā)人員來說,不僅僅要選擇一個開發(fā)的系統(tǒng)和環(huán)境,還需要通過整個體系了解機(jī)器人運(yùn)作的原理,即使未來最主流的機(jī)器人操作系統(tǒng)不是ROS,一定會有ROS深深的烙印。