6
本文作者: 金紅 | 2016-09-09 00:08 |
雷鋒網(wǎng)按:本文作者YY碩,來自大疆工程師。原文標(biāo)題《機(jī)器人工程師學(xué)習(xí)計(jì)劃》,全文篇幅較長(zhǎng),為了方便閱讀,故分為三篇,此為下篇。
研究生一年級(jí)
研究生的時(shí)候,你的目標(biāo)比較清晰了,就是做一種機(jī)器人至少兩年時(shí)間,并從中發(fā)掘出可以發(fā)表論文的知識(shí)點(diǎn)。上面我給出的書單里面,你要開始精讀里面的幾本。
如果做機(jī)器人視覺定位、傳感器融合方面的研究,1、4、5、7四本書一定要精讀。
如果做控制系統(tǒng)的研究,3、8、9、10一定要精讀。
如果做規(guī)劃算法的研究,那么還要讀其他偏CS一些的書,比如講A* search,random forest,圖論方面知識(shí)的教材。由于我在這方面造詣不深,就不托大了。
如果學(xué)習(xí)隨機(jī)系統(tǒng)的控制和最優(yōu)控制,除了1、2、3,還要讀一本神書Stochastic models estimation and control。
如果研究機(jī)器人視覺定位,幾種常用的定位算法:PTAM,ROS的標(biāo)配VO,SVO,LSD-SLAM,ORB-SLAM,都必須自己學(xué)習(xí)之后全部跑一遍。只會(huì)用OpenCV的函數(shù)和這些工具包并不能說明你會(huì)視覺定位,必須要能自己手寫出一個(gè)能用的才算。國(guó)內(nèi)有一個(gè)很厲害的SLAM專家叫高翔,他的博客要關(guān)注一下:機(jī)器人 - 標(biāo)簽。由于SLAM這兩年很火,研究的人很多,所以網(wǎng)上可以參考的資料也很多,比如https://github.com/hcdth011/ROS-Hydro-SLAM,就在ROS上實(shí)現(xiàn)了幾種定位算法的對(duì)比。
我現(xiàn)在非常不建議同學(xué)們選擇從四旋翼飛行器的動(dòng)力學(xué)控制里找問題作為研究課題。因?yàn)樗男盹w行器的特點(diǎn)已經(jīng)被研究透了。目前國(guó)際上對(duì)多旋翼飛行器的研究主要集中在造一些奇葩形狀的飛行器,以及給多旋翼飛行器上安裝一個(gè)機(jī)械臂去做力控制,這樣做就對(duì)多旋翼飛行器控制的動(dòng)力學(xué)造成了一些影響。因此需要同學(xué)對(duì)動(dòng)力學(xué)和多自由度機(jī)械臂控制有比較深的認(rèn)識(shí)。
自動(dòng)導(dǎo)航和駕駛是這兩年的熱點(diǎn),一方面汽車的自動(dòng)化是大勢(shì)所趨,另一方面多旋翼飛行器異軍突起,產(chǎn)生了很多對(duì)自動(dòng)飛行的需求。除了機(jī)器人視覺定位算法以外,同學(xué)還需要學(xué)習(xí)其他的傳感器,以及這些傳感器與視覺定位算法怎么融合。這里面有很多坑,比如計(jì)算量的問題,怎么保證融合算法不崩,怎么處理傳感器的延時(shí)等等,都需要同學(xué)結(jié)合自己的項(xiàng)目去踩,坑踩得多了才能成長(zhǎng)。如果大家想找一個(gè)多旋翼飛行器平臺(tái)研究自動(dòng)導(dǎo)航,我推薦大疆的M100,我已經(jīng)在知乎回答“RoboMasters2015夏令營(yíng)是怎樣的?” 里吹過一波M100,前面說過的今年夏令營(yíng)的知乎回答“參加Robomasters 2016夏令營(yíng)是怎樣一種體驗(yàn)? ”里也有人幫我吹了一波。
一些大學(xué)里學(xué)過的知識(shí)點(diǎn),是必須結(jié)合研究生期間的項(xiàng)目的需求弄得很清楚的,比如三大變換(傅里葉變換,拉普拉斯變換,Z變換),旋轉(zhuǎn)表示法(歐拉角、四元數(shù)、旋轉(zhuǎn)矩陣),數(shù)值計(jì)算怎么防止矩陣出現(xiàn)數(shù)值問題等等。除了自己的項(xiàng)目,還需要把凸優(yōu)化、微分方程、卡爾曼濾波還有多自由度機(jī)械臂的控制學(xué)習(xí)一下。這三個(gè)領(lǐng)域的知識(shí),是任何一種機(jī)器人都會(huì)用的到比較難的知識(shí)。
凸優(yōu)化和凸優(yōu)化的各種變形是非常重要的知識(shí),因?yàn)楦餍懈鳂I(yè)里的研究問題,多半是會(huì)建立一個(gè)優(yōu)化問題去解決的。上面提到的《Convex Optimization》,也是一本神書,同學(xué)們一定要認(rèn)真讀一讀。Matlab、Python、C++都有一些現(xiàn)成的工具包可以幫助你解優(yōu)化問題,不過最好同學(xué)們能自己手寫一些基本的優(yōu)化算法,比如gradient descend,barrier method等等。另外現(xiàn)在主流的SLAM算法,后端都是通過一種叫做g2o的優(yōu)化算法來出效果的。而且g2o能夠整合bundle adjustment 和structure-from-motion這兩大計(jì)算機(jī)視覺里的關(guān)鍵問題,可以說是一種很好的計(jì)算思想了,非常有必要學(xué)習(xí)一下g2o。
卡爾曼濾波在上面書單里的1和3都有提到,同時(shí)在神書Stochastic models estimation and control也有相當(dāng)多的篇幅??柭鼮V波有好幾種證明的方法,同學(xué)最好能自己學(xué)會(huì)1-2種。
多自由度的機(jī)械臂的難點(diǎn)在于機(jī)械臂的運(yùn)動(dòng)學(xué)正反解、運(yùn)動(dòng)學(xué)控制和動(dòng)力學(xué)控制,基本是一個(gè)建模分析和數(shù)值算法實(shí)現(xiàn)的問題。如果你所在的學(xué)校沒有一個(gè)財(cái)力雄厚的機(jī)器人實(shí)驗(yàn)室的話,你基本上沒有機(jī)會(huì)接觸到多自由度的機(jī)械臂。這時(shí)候之前學(xué)到的Simulink和就要學(xué)的Gazebo就派上用場(chǎng)了,你可以用Simscape里面的剛體搭一個(gè)多自由度機(jī)械臂,然后通過Simulink仿真去學(xué)習(xí)機(jī)械臂的控制;也可以用Gazebo的URDF語(yǔ)言寫一個(gè)機(jī)械臂,然后通過Gazebo和ROS的接口去控制機(jī)械臂;也可以用ROS里面的著名工具包MoveIt! Motion Planning Framework,不過MoveIt的問題是,他只能仿真運(yùn)動(dòng)學(xué),而不能仿真動(dòng)力學(xué)。工業(yè)領(lǐng)域?qū)Χ嘧杂啥鹊臋C(jī)械臂控制通常用一個(gè)叫做D-H表示法的建模工具(Denavit),這個(gè)東西我并不太會(huì)。我只會(huì)向同學(xué)們推薦我導(dǎo)師的著作《A mathematical introduction to robotic manipulation》。
有一個(gè)非常神奇的事實(shí):《A mathematical introduction to robotic manipulation》這本機(jī)械臂控制領(lǐng)域的著名教材的第二章和計(jì)算機(jī)視覺領(lǐng)域的著名教材《An Invitation to 3-D Vision》的第二章基本是一樣的,都在講旋轉(zhuǎn)表示法。這是因?yàn)樗械男D(zhuǎn)表示法都可以歸納為一種優(yōu)雅的李群結(jié)構(gòu):SO(3)群。而計(jì)算機(jī)視覺和機(jī)械臂控制都涉及到理解剛體的旋轉(zhuǎn),事實(shí)上用計(jì)算系統(tǒng)去觀測(cè)和控制所有的剛體構(gòu)成的系統(tǒng),理解旋轉(zhuǎn)都是很關(guān)鍵的問題。旋轉(zhuǎn)表示法應(yīng)該作為研究生階段的一個(gè)重要學(xué)習(xí)的知識(shí)點(diǎn)。
李群和李代數(shù)是剛體旋轉(zhuǎn)表示背后的數(shù)學(xué)理論,如果想要深挖一些,可以看這篇文章An elementary introduction to groups and representations的前50頁(yè)。這是我自己讀著覺得最好的文章,當(dāng)然網(wǎng)上也有很多其他的介紹。
研究生階段還要培養(yǎng)的一個(gè)能力是借助各種工具仿真機(jī)器人系統(tǒng)的能力。顯然地,很多機(jī)器人系統(tǒng)真的造出來的話造價(jià)昂貴,需要在實(shí)際制造之前寫一個(gè)比較真實(shí)的仿真系統(tǒng)出來測(cè)試算法。我覺得做仿真系統(tǒng)的能力直接衡量了機(jī)器人工程師的技術(shù)水平。當(dāng)你開始要搭一個(gè)仿真系統(tǒng)的時(shí)候,第一步是通過歐拉方程和牛頓方程確定剛體的運(yùn)動(dòng)特點(diǎn),甚至要自己寫剛體二階微分方程;第二步是確定剛體之間的互聯(lián)關(guān)系,設(shè)計(jì)不同類型的關(guān)節(jié),如果有軟性連接需要加入彈簧阻尼模型;第三步是確定被仿真的剛體系統(tǒng)會(huì)不會(huì)和外界產(chǎn)生碰撞或者其他形式的力,如果有的話,需要設(shè)計(jì)合適的接觸力和摩擦力仿真的模型。多旋翼飛行器的仿真是很簡(jiǎn)單的,不需要考慮什么接觸力。但是多自由度機(jī)械臂基本都需要仿真接觸力,不和物理世界去交互的機(jī)械臂只有很小的實(shí)用意義。而能夠自行運(yùn)動(dòng)locomotion系統(tǒng),比如雙足、多足機(jī)器人,則涉及到更多的接觸力,多到接觸力都會(huì)影響仿真系統(tǒng)的數(shù)值穩(wěn)定性。搭建一個(gè)仿真系統(tǒng)需要很強(qiáng)的系統(tǒng)建模能力和數(shù)值分析的能力,雖然Simulink、Gazebo、Vrep提供了不同程度的工具簡(jiǎn)化你的工作,但是要讓仿真系統(tǒng)能夠穩(wěn)定運(yùn)行,必須要能深入其中的細(xì)節(jié)。有些看起來很高大上的仿真工具,比如Nvida的PhysX,在仿真的時(shí)候是忽略掉科里奧利力的,如果不理解仿真的本質(zhì),可能就會(huì)忽略這一個(gè)重要的缺陷。
你的學(xué)習(xí)計(jì)劃接近尾聲?,F(xiàn)在你已經(jīng)進(jìn)入了一個(gè)很好的狀態(tài):看到一個(gè)機(jī)器人,能夠很果斷地分析出它用了什么傳感器、執(zhí)行器、計(jì)算平臺(tái)大概是什么量級(jí),他的執(zhí)行機(jī)構(gòu)能夠承受多少力量??吹揭粋€(gè)新的算法,能夠大約判斷清楚它的執(zhí)行流程,在什么環(huán)節(jié)做了優(yōu)化。看到一個(gè)新的沒學(xué)過的知識(shí),能夠分析出它和你以前學(xué)過的什么知識(shí)有聯(lián)系,你還需要再學(xué)什么才能弄明白這個(gè)知識(shí)點(diǎn)。
研究生二年級(jí)要深化第一年學(xué)到的那些技術(shù)和知識(shí),要做到完整地讀過四五本書,五十篇以上的論文。你已經(jīng)積累了幾萬行代碼的經(jīng)驗(yàn),也能熟練地談?wù)撜l家的電機(jī)回差小,誰家的電機(jī)線性程度好。
你這個(gè)時(shí)候可以去寫作一些論文,也可以開始學(xué)習(xí)一些更高級(jí)的技術(shù)和工具,比如用FPGA和GPU優(yōu)化算法、魔改Linux內(nèi)核、玩玩液壓系統(tǒng)、了解更多機(jī)器學(xué)習(xí)的知識(shí)比如強(qiáng)化學(xué)習(xí)等等。你也可以從計(jì)算機(jī)圖形學(xué)或者計(jì)算力學(xué)里面找到一些幫助你更好進(jìn)行機(jī)器人仿真和系統(tǒng)分析的工具。由于你懂很多機(jī)器人方面的知識(shí),你可以給學(xué)校的機(jī)器人隊(duì)做指導(dǎo),或者帶隊(duì)參加一些比較有挑戰(zhàn)性的機(jī)器人比賽。
寫到這里,我就不可能給出很多不同領(lǐng)域的指導(dǎo)了,因?yàn)殡S著學(xué)習(xí)的進(jìn)一步深化,我自己熟悉的領(lǐng)域也在收縮。我只能對(duì)幾個(gè)領(lǐng)域給出我的意見。
對(duì)視覺定位和傳感器融合來說,SLAM急需新的突破,目前通過幾何約束去實(shí)現(xiàn)loop closure看起來已經(jīng)走入了死路,沒法有更多的發(fā)展了,下一步可行的方向是與深度學(xué)習(xí)進(jìn)行結(jié)合。具體的一些介紹可以閱讀行業(yè)中大牛的一篇文章http://www.computervisionblog.com/2016/01/why-slam-matters-future-of-real-time.html,記述了幾個(gè)業(yè)界大牛們最新的觀點(diǎn)。傳感器融合技術(shù),目前還有很多問題可以探索,因?yàn)閭鞲衅鞯难訒r(shí)、不均勻的信號(hào),會(huì)給定位系統(tǒng)造成困擾,如何去除這些干擾,需要建立比較復(fù)雜的非線性優(yōu)化問題,具體可以關(guān)注香港科技大學(xué)Shaojie Shen的工作。
對(duì)于多自由度機(jī)械手和機(jī)器人的locomotion來說,這里面還有非常多可以探索的研究問題。我前面提過接觸力和摩擦力很難仿真,大神告訴我現(xiàn)在沒有任何一種工具和理論能把接觸力和摩擦力正確仿真出來,因此如何在機(jī)器人系統(tǒng)里妥善處理對(duì)這些力的控制,就是很難的問題了?,F(xiàn)在業(yè)界的一個(gè)前沿發(fā)展方向,也是利用機(jī)器學(xué)習(xí)技術(shù)來幫助機(jī)器人學(xué)會(huì)處理這些外力,不過人類目前最優(yōu)秀的多自由度機(jī)器人系統(tǒng),Berkeley的Brett機(jī)器人,疊幾塊積木就要用十分鐘(New ‘deep learning’ technique enables robot mastery of skills via trial and error),顯然還有很多提升的空間。這方面的問題同學(xué)可以關(guān)注知乎大神@戴泓楷@周佳驥。
最后我想再?gòu)?qiáng)調(diào)一遍表達(dá)能力的重要性。你可以從自己帶的課程和機(jī)器人隊(duì)入手,把自己這幾年來學(xué)過的知識(shí)做成PPT講給學(xué)生們聽,然后讓他們給你反饋。多做這樣的練習(xí),提升自己做演講的能力,這將來會(huì)讓你受益匪淺。
研究生二年級(jí)之后,你可以準(zhǔn)備進(jìn)機(jī)器人公司工作了,也可以根據(jù)你自己感興趣的研究方向申請(qǐng)博士接著努力。由于你已經(jīng)掌握了廣博的知識(shí)和技能,你的職業(yè)生涯將會(huì)大有作為。
我從2008年展開自己的機(jī)器人生涯。那一年波士頓動(dòng)力剛剛發(fā)布他們的大狗機(jī)器人,Python還是很小眾的語(yǔ)言,Ubuntu 8.04還很不穩(wěn)定,Chrome還沒有多少人知道。在之后的幾年中我目擊了深度神經(jīng)網(wǎng)絡(luò)的復(fù)興,看到波士頓動(dòng)力的機(jī)器人日漸強(qiáng)大,經(jīng)歷了ROS的起源和繁榮,幫助了大疆的崛起,深深為這個(gè)產(chǎn)業(yè)的未來感到激動(dòng)。我希望這篇文章能夠幫助更多的年輕人進(jìn)入機(jī)器人學(xué)的海洋,為未來機(jī)器人學(xué)的繼續(xù)發(fā)展貢獻(xiàn)力量。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。