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