大三
大三開(kāi)始的時(shí)候,你可以在學(xué)校的機(jī)器人隊(duì)里擔(dān)任重要角色了,或者能夠帶領(lǐng)一個(gè)小團(tuán)隊(duì)參加小型的機(jī)器人比賽。你在系里甚至院里都小有名氣了,可能有的人叫你大神,有的人覺(jué)得你技術(shù)還不錯(cuò)。但是一定要記得你現(xiàn)在的水平放到別的地方應(yīng)該不算什么。每年我都往大疆的RoboMasters夏令營(yíng)招進(jìn)100個(gè)和你現(xiàn)在的水平相當(dāng)?shù)耐瑢W(xué)。
大三一定要培養(yǎng)出自己一個(gè)人獨(dú)立造出一個(gè)完整機(jī)器人的能力,比如一個(gè)Robocon水平的機(jī)器人,或者一個(gè)RoboMasters的戰(zhàn)車,或者一個(gè)四旋翼飛行器。
Robocon水平的機(jī)器人,涉及大量的機(jī)械設(shè)計(jì),單片機(jī)開(kāi)發(fā),電機(jī)驅(qū)動(dòng)的開(kāi)發(fā),碼盤和超聲波等傳感器的讀取,底盤運(yùn)動(dòng)學(xué)的計(jì)算,PID調(diào)試,任務(wù)調(diào)度邏輯的調(diào)試,舵機(jī)控制。RoboMasters的戰(zhàn)車的機(jī)械部分簡(jiǎn)單一些,但是還需要進(jìn)行云臺(tái)的控制、發(fā)彈系統(tǒng)的控制、功率控制等方面的知識(shí),另外你也可以不搞這些部分,學(xué)習(xí)學(xué)習(xí)視覺(jué)識(shí)別和自動(dòng)打擊,那么就要開(kāi)始研究OpenCV(OpenCV | OpenCV)了。
四旋翼飛行器的機(jī)械部分最簡(jiǎn)單,但是算法比較復(fù)雜。對(duì)于大三學(xué)生來(lái)說(shuō),從零開(kāi)始一步到位寫一個(gè)穩(wěn)定的飛控比較困難,因?yàn)轱w控里面有很多細(xì)小的知識(shí)點(diǎn)要注意。目前我沒(méi)有發(fā)現(xiàn)什么比較好的書籍推薦,已有的一些關(guān)于四旋翼系統(tǒng)的書要么太淺(上來(lái)就教你焊電路),要么太深(上來(lái)就教你state estimation),聽(tīng)說(shuō) @Liu Top的exbot小組在寫一個(gè)教材,我是非常期待的。學(xué)習(xí)四旋翼飛行器有下面幾個(gè)步驟:
第一步:自己調(diào)一個(gè)小四軸飛起來(lái)
現(xiàn)在開(kāi)源社區(qū)的人言必pixhawk,其實(shí)我覺(jué)得從學(xué)習(xí)的角度來(lái)說(shuō),pixhawk太貴,而且不適合學(xué)習(xí),我比較推薦的是 首頁(yè)-第七實(shí)驗(yàn)室 這家淘寶店賣的STM32F405飛控,買回來(lái)以后自己再隨便買個(gè)機(jī)架(比如大疆F450)、接收機(jī)和遙控,就能按照飛控板附帶的學(xué)習(xí)資料、調(diào)試軟件飛起來(lái)。
第二步:看硬件圖、讀代碼
chiplab7的飛控板附帶一大堆學(xué)習(xí)資料,對(duì)加速度計(jì)、陀螺和磁感計(jì)都有很仔細(xì)的解釋,硬件鏈路圖也很詳細(xì)。chiplab7淘寶掌柜的又很認(rèn)真負(fù)責(zé),我學(xué)用的時(shí)候,發(fā)現(xiàn)代碼有bug和看不懂的地方,都可以直接找掌柜問(wèn)。
看完代碼以后,對(duì)一個(gè)飛控系統(tǒng)的基本模塊:姿態(tài)解算、控制解算、混控輸出、遙控器處理、嵌入式處理就很明白了。然而這里面有很多技術(shù)是需要另外學(xué)習(xí)的。除了基本的嵌入式編程以外,還有要把大二大三學(xué)的信號(hào)處理方面的知識(shí)再撿起來(lái)看看。因?yàn)轱w行器在空中有振動(dòng),會(huì)讓加速度計(jì)產(chǎn)生噪聲,為了把這些噪聲去除掉,需要對(duì)加速度計(jì)給出的信號(hào)做低通濾波處理,如何選擇濾波器的參數(shù)呢?如果濾波濾得太狠,延遲就會(huì)比較大,對(duì)控制的表現(xiàn)會(huì)有影響;如果濾波濾得不夠,可能會(huì)有一些低頻的噪聲偶爾會(huì)出現(xiàn),導(dǎo)致加速度計(jì)的觀測(cè)不能用。另外最重要的是要理解姿態(tài)解算和控制解算這兩塊知識(shí)。chiplab7的飛控板的代碼采用的是最簡(jiǎn)單的互補(bǔ)濾波算法做為姿態(tài)解算模塊,然后控制解算是對(duì)歐拉角的三個(gè)角度做閉環(huán)PID控制,基本都是基礎(chǔ)的基礎(chǔ)了。
第三步:小修小改加深理解
chiplab7的飛控是靠氣壓計(jì)定高的,飛行效果非常奔放。這時(shí)候可以淘寶買個(gè)20塊錢的超聲波模塊,然后自己寫個(gè)高度環(huán)去穩(wěn)定飛控的定高表現(xiàn)。
我覺(jué)得這個(gè)過(guò)程至關(guān)重要,因?yàn)楦叨瓤刂葡鄬?duì)來(lái)說(shuō)是個(gè)比較直觀理解PID控制的方式,而且chiplab7的飛控加高度控制非常好加。工作量不大,因?yàn)楦纳菩Ч茱@著,所以可以讓人很有成就感,加深繼續(xù)學(xué)習(xí)的樂(lè)趣。
第四步:理解核心的數(shù)學(xué)和控制知識(shí)
這一部分大三是肯定來(lái)不及學(xué)的,但是我還是在這里列出來(lái),因?yàn)檫@些知識(shí)你之后都需要慢慢學(xué),我也會(huì)在之后不斷重復(fù)提到這些知識(shí)點(diǎn)。
姿態(tài)解算和控制解算涉及的知識(shí)有:
1、剛體姿態(tài)的表示、運(yùn)動(dòng)學(xué)方程和動(dòng)力學(xué)方程。主要是對(duì)牛頓-歐拉方程的認(rèn)識(shí)和理解、剛體姿態(tài)的歐拉角表示法、姿態(tài)與角速度的關(guān)系等等。
這部分說(shuō)復(fù)雜不復(fù)雜,說(shuō)簡(jiǎn)單也不簡(jiǎn)單,我同樣是沒(méi)有找到一本完整的書全都介紹過(guò)的,是學(xué)了好幾個(gè)不同的書和論文以后搞明白的?,F(xiàn)在看起來(lái)是從維基百科入手比較靠譜。
2、自動(dòng)控制原理。講PID的書和文章就多了去了,沒(méi)有太多復(fù)雜的書。
3、線性估計(jì)基本原理。其實(shí)就是互補(bǔ)濾波:Reading a IMU Without Kalman: The Complementary Filter 。拿這個(gè)關(guān)鍵詞百度各種搜就會(huì)了。
第五步:重頭開(kāi)始造輪子
知乎著名網(wǎng)友vczh曾經(jīng)說(shuō)過(guò),學(xué)習(xí)要抱著勇于造輪子的心態(tài)才能進(jìn)步。所以在熟悉了別人飛控基礎(chǔ)上,可以自己重頭造一個(gè)飛控的輪子??梢宰约簭?a target="_blank">芯片開(kāi)始重新畫一個(gè)飛控板,讀讀STM32的芯片手冊(cè)、讀讀各種傳感器的芯片手冊(cè),自己手畫一個(gè)飛控的原理圖、做PCB layout、制板自己焊元件,全套花不了1000塊錢,能夠加深很多對(duì)硬件的理解。這一部分如果大三沒(méi)空,也可以不搞了。
制造整個(gè)機(jī)器人的過(guò)程中要特別重視文檔的積累。在你大三末期,你可能隨著學(xué)校的機(jī)器人隊(duì)備戰(zhàn)比賽,你可能主力負(fù)責(zé)一臺(tái)機(jī)器人。你應(yīng)該自己列一個(gè)excel表格,把機(jī)器人用了幾顆螺絲,幾根導(dǎo)線,每個(gè)零件的規(guī)格是什么,都列出來(lái)。這個(gè)表格一方面可以用來(lái)幫助團(tuán)隊(duì)管理機(jī)器人的物料,一方面也是你自己的經(jīng)驗(yàn)技術(shù)積累,將來(lái)你做的其他機(jī)器人可能多多少少都是Robocon、RoboMasters機(jī)器人的變形。
另一個(gè)積累是建一個(gè)自己的buglist,buglist包括什么呢,可以像冷大這樣:做控制、機(jī)器人等算法工程師是怎樣一種體驗(yàn)? - 冷哲的回答,就簡(jiǎn)單把一些自己的發(fā)生過(guò)的問(wèn)題和最后的解決辦法羅列下來(lái)。比如說(shuō)“杜邦線接插位不穩(wěn)固容易脫開(kāi),接好后應(yīng)該用電工膠布再裹一圈”,“外發(fā)給淘寶加工的機(jī)械圖紙,要特別注意和加工商溝通有沒(méi)有漏掉一些細(xì)節(jié),如沉頭螺絲孔,關(guān)鍵的倒角”等等。你也可以幫其他機(jī)器人的問(wèn)題也做這樣的記錄。buglist可以就是一個(gè)簡(jiǎn)單的文本文件,如果你一直往里面積累自己工作中的記錄,等你將來(lái)工作了,這個(gè)文件可能會(huì)值很多錢。
大三的時(shí)候?qū)W校應(yīng)該會(huì)開(kāi)設(shè)軟件工程的課程。不管你是不是這個(gè)專業(yè),上不上這門課,都應(yīng)該主動(dòng)去聽(tīng)一聽(tīng),甚至跟著課程的設(shè)計(jì)作業(yè)一起做一做。軟件工程我覺(jué)得是機(jī)器人工程師必須具備的意識(shí),因?yàn)橐粋€(gè)機(jī)器人系統(tǒng)里涉及大量的硬件系統(tǒng)和軟件功能,軟件的部分往往還會(huì)涉及不同的語(yǔ)言、不同的編譯環(huán)境、不同的開(kāi)發(fā)工具鏈。幾個(gè)人合作的話,大家的專業(yè)背景、編程習(xí)慣都不相同,這就導(dǎo)致不同的代碼和模塊之間的協(xié)議溝通非常復(fù)雜,必須盡早用UML和其他軟件工程的工具幫助團(tuán)隊(duì)理解和互相溝通。
大三的時(shí)候?qū)W校應(yīng)該還會(huì)開(kāi)設(shè)操作系統(tǒng)原理和嵌入式系統(tǒng)原理的課程,而大二的時(shí)候講過(guò)計(jì)算機(jī)組成原理(所謂的微機(jī)原理)。從大三開(kāi)始同學(xué)需要開(kāi)始體會(huì)實(shí)時(shí)操作系統(tǒng)和非實(shí)時(shí)操作系統(tǒng)的區(qū)別、原理以及使用時(shí)需要注意的地方。這是一個(gè)比較雜的知識(shí)點(diǎn),我目前沒(méi)有找到很好的教材去介紹。在STM32上,有freeRTOS,uCOS,Vxworks這么幾種實(shí)時(shí)操作系統(tǒng);Linux是一種非實(shí)時(shí)操作系統(tǒng),但是可以通過(guò)打補(bǔ)丁變成實(shí)時(shí)操作系統(tǒng)。這些操作系統(tǒng)的細(xì)節(jié)在機(jī)器人開(kāi)發(fā)中都會(huì)多多少少被涉及到,同學(xué)們可以隨時(shí)上Google和CSDN去查大神們的介紹。
另外特別重要的一點(diǎn)是機(jī)器人系統(tǒng)里的嵌入式平臺(tái)都有燒壞的可能性,有可能在某個(gè)嵌入式Linux平臺(tái)上面辛辛苦苦寫了一個(gè)多月代碼,這個(gè)平臺(tái)突然燒壞了,代碼也就丟了。因此你的機(jī)器人如果有嵌入式Linux系統(tǒng)在里面,一定要盡早頂起來(lái)路由器,代碼定時(shí)提交SVN或者git。
大三的暑假你可能會(huì)作為學(xué)校機(jī)器人隊(duì)的主力去參賽了。備戰(zhàn)比賽和參賽是一件磨練心性的事情。我在學(xué)生時(shí)代體會(huì)過(guò)和勝利擦肩而過(guò)的痛苦,體會(huì)過(guò)沒(méi)機(jī)會(huì)再來(lái)一年的遺憾;也在負(fù)責(zé)大疆RoboMasters比賽的過(guò)程中被那些痛苦和遺憾的學(xué)生當(dāng)做發(fā)泄的對(duì)象,非常有感觸。我覺(jué)得參加機(jī)器人比賽,很努力,然后失敗了,是一件讓人快速成長(zhǎng)的事情。同學(xué)如果有機(jī)會(huì),一定應(yīng)該參加至少一屆機(jī)器人比賽。
大三的暑假你也可以選擇來(lái)參加大疆的RoboMasters夏令營(yíng),關(guān)于夏令營(yíng)大家可以看這個(gè)知乎問(wèn)答了解更多:參加Robomasters 2016夏令營(yíng)是怎樣一種體驗(yàn)? - DJI 大疆創(chuàng)新。每年我們都在全國(guó)范圍內(nèi)尋找有一定技術(shù)基礎(chǔ)的學(xué)生,讓他們一起分組做一個(gè)自動(dòng)機(jī)器人的挑戰(zhàn)。這個(gè)夏令營(yíng),作為組織負(fù)責(zé)人,不謙虛地說(shuō),我覺(jué)得應(yīng)該是全世界范圍內(nèi)最好的技術(shù)類夏令營(yíng)。
大三的暑假有一件很重要的事情就是思考自己大四應(yīng)該干什么。一般來(lái)說(shuō),你現(xiàn)在的能力保本校研究生肯定沒(méi)有問(wèn)題,當(dāng)然你也可以選擇考其他學(xué)校的研究生或者出國(guó)留學(xué)。雖然說(shuō)你現(xiàn)在能力已經(jīng)很全面了,但是你還需要2-3年的時(shí)間全面提升自己更多的能力,才能邁向卓越之路。不管是出國(guó)還是保研,最重要的目的是給自己爭(zhēng)取到未來(lái)2-3年能夠在一個(gè)優(yōu)秀的環(huán)境中安心提升自己,有比較好的學(xué)習(xí)資源,能夠參與到一些不錯(cuò)的項(xiàng)目中去??赡芷渌行┬挟?dāng),出國(guó)留學(xué)始終是比在國(guó)內(nèi)待著更好的選擇,但是機(jī)器人行業(yè)并不是這樣。我們國(guó)家這兩年在機(jī)器人方面提高也很快,而且我們國(guó)家現(xiàn)在比較有錢。就像我開(kāi)始說(shuō)的那樣,機(jī)器人是富人的活動(dòng),現(xiàn)在你在國(guó)內(nèi)也能找到一些很有錢的實(shí)驗(yàn)室可以造比較牛逼的機(jī)器人。另外國(guó)外很多比較強(qiáng)的機(jī)器人公司也都在做比較敏感的軍方項(xiàng)目,去找實(shí)習(xí)可能比較受限制。
出國(guó)去學(xué)機(jī)器人學(xué)方面的知識(shí)你有很多不錯(cuò)的選擇,比如世界第一的機(jī)器人研究院卡耐基梅隆大學(xué),或者麻省理工學(xué)院的CSAIL實(shí)驗(yàn)室。北美傳統(tǒng)計(jì)算機(jī)四大名校(麻省理工學(xué)院,卡耐基梅隆大學(xué),斯坦福大學(xué),加州大學(xué)伯克利分校)里,除了斯坦福大學(xué)熱火朝天在搞人工智能以外,其他幾個(gè)學(xué)校的機(jī)器人研究都很不錯(cuò)。除了四大名校,你還有很多其他的選擇,就像我開(kāi)始說(shuō)的那樣,機(jī)器人是富人的活動(dòng),如果想接觸到最好的機(jī)器人資源,你要選擇有錢的實(shí)驗(yàn)室,而不是有名的實(shí)驗(yàn)室。
另外你還需要在大三的尾巴上選定自己將來(lái)的細(xì)分研究方向,而且開(kāi)始往這個(gè)方向深挖,也就是我在文章開(kāi)始提到的感知、認(rèn)知、行為幾個(gè)方向。當(dāng)然同時(shí)你也不能放松其他方面的知識(shí),尤其是數(shù)學(xué)基礎(chǔ)。我在大三的暑假專門找數(shù)學(xué)系的同學(xué)給我開(kāi)了個(gè)數(shù)學(xué)小講座,學(xué)習(xí)了一點(diǎn)抽象代數(shù)的知識(shí),對(duì)我后來(lái)學(xué)習(xí)密碼學(xué)幫助很大。同時(shí)我也讀了一些拓?fù)浞矫娴慕滩模ㄓ幸槐竞苌衿娴臅凶鯰opopogy Without Tears http://www.topologywithouttears.net/),這樣才理解了為什么數(shù)學(xué)分析要用奇怪的符號(hào)去解釋一些看起來(lái)很淺顯的道理。
大三階段的機(jī)器人工程師該學(xué)什么基礎(chǔ)數(shù)學(xué)是眾說(shuō)紛紜的,在我看來(lái),你要基本掌握“群是什么”,能夠用代數(shù)的眼光去證明“det(AB) = det(A)det(B)”,還要能理解“用一張紙就可以變出克萊因瓶”(當(dāng)然是在四維空間里)。另外,你這個(gè)時(shí)候也要能夠意識(shí)到自己需要再學(xué)一遍線性代數(shù)。
大四
大四開(kāi)始了,你可以開(kāi)始深挖自己的研究方向,同時(shí)也要開(kāi)始學(xué)一些高級(jí)一點(diǎn)的通用技術(shù)和理論,這時(shí)候你和一般的機(jī)械、電子、計(jì)算機(jī)學(xué)生就不太一樣了,你雖然也在狂編程,但也在狂學(xué)習(xí)物理和數(shù)學(xué)。通用技術(shù)包括ROS,simulink,gazebo和Vrep等工具。通用理論包括,再學(xué)一遍線性代數(shù),學(xué)學(xué)凸優(yōu)化、數(shù)值計(jì)算、旋轉(zhuǎn)表示法等方面的知識(shí)。這些知識(shí)你在大四僅僅只能開(kāi)一個(gè)頭,因?yàn)槟愕拇笏囊獙?shí)習(xí)、畢業(yè)、考研、畢設(shè),你會(huì)非常地忙。有些人會(huì)在大四進(jìn)實(shí)驗(yàn)室和老師發(fā)論文,我個(gè)人覺(jué)得發(fā)論文這件事沒(méi)必要操之過(guò)急。你的整個(gè)大學(xué)期間應(yīng)該用在廣泛涉獵各種各樣的知識(shí)上面,而不是深入某一個(gè)細(xì)小的研究問(wèn)題。
你可能早就聽(tīng)說(shuō)了ROS的大名,但是最好不要在大四之前去碰它。因?yàn)镽OS用了很多操作系統(tǒng)和網(wǎng)絡(luò)的底層技術(shù)。我在知乎回答高手可以談?wù)凴OS機(jī)器人操作平臺(tái)開(kāi)發(fā)的一些經(jīng)驗(yàn)嗎? - YY碩的回答里有簡(jiǎn)單的介紹。ROS的設(shè)計(jì)目標(biāo)是把機(jī)器人的控制和傳感器處理的軟件和它的硬件隔離開(kāi),用上ROS以后,你可以方便地用到很多能直接跑的軟件代碼。但是ROS從入門到精通需要至少一年以上的時(shí)間,你必須不斷地用,不斷地嘗試新的代碼和硬件,才能對(duì)它熟悉起來(lái)。
ROS的可視化工具Rviz里面對(duì)于機(jī)器人旋轉(zhuǎn)的表示用的是四元數(shù),而在你之前研究四旋翼飛行器時(shí),里面的代碼表示旋轉(zhuǎn)用的是歐拉角,做姿態(tài)解算用的可能是四元數(shù)。這個(gè)時(shí)候要開(kāi)始有意識(shí)地去學(xué)習(xí)旋轉(zhuǎn)表示法之間的區(qū)別和聯(lián)系。
要重視大四期間的實(shí)習(xí)和畢業(yè)設(shè)計(jì)。很多大四的學(xué)生畢業(yè)設(shè)計(jì)都會(huì)非常頹地做一下,我覺(jué)得是不好的。要把做畢業(yè)設(shè)計(jì)的過(guò)程看做一個(gè)正式的項(xiàng)目。這個(gè)項(xiàng)目除了做好技術(shù)方面的工作,也要做好展示方面的工作。中國(guó)工程師的一大特點(diǎn)是,不會(huì)表達(dá)自己,可能做的東西水平很高,但是做出PPT就會(huì)犯字體花哨不正式、一頁(yè)上面字太多,圖文沒(méi)有聯(lián)系等表達(dá)上的問(wèn)題。通過(guò)PPT介紹、展示自己的成果在工程師的職業(yè)生涯的任何一個(gè)階段都非常重要,它甚至也一定程度上限制了機(jī)器人工程師能夠達(dá)到的高度。只有能夠把自己的成果清晰地表達(dá)給自己的團(tuán)隊(duì),才能獲得其他人的反饋、通過(guò)溝通提高團(tuán)隊(duì)的整體凝聚力和知識(shí)水平,這樣自己在團(tuán)隊(duì)能夠獲得更多的認(rèn)可,有助于團(tuán)隊(duì)整體工作效率的提高。我每年去參加幾次學(xué)術(shù)會(huì)議,都在會(huì)議上感覺(jué)到一些中國(guó)的科研人員走到國(guó)際上以后,演講能力很差就會(huì)導(dǎo)致他們的科研成果不受重視。當(dāng)然其他國(guó)家的科研人員也是這樣。
為了寫出美觀的技術(shù)報(bào)告和畢業(yè)論文,你可以開(kāi)始學(xué)習(xí)Latex。Latex作為國(guó)際國(guó)內(nèi)第一寫作神器,學(xué)習(xí)資料在網(wǎng)上有很多。Latex的學(xué)習(xí)和使用同樣也是需要不斷地熟能生巧,多寫多練就熟悉了。寫畢業(yè)論文有個(gè)問(wèn)題是怎么做出精美的矢量圖,我推薦Draw Freely | Inkscape,一個(gè)比Illustrator更輕量化、但是有些功能反而更強(qiáng)大的免費(fèi)軟件。
對(duì)于那些想申請(qǐng)出國(guó)留學(xué)的同學(xué),你要做一個(gè)自己個(gè)人的成果展示,用網(wǎng)頁(yè)的形式呈現(xiàn)比較好。把自己Github鏈接(如果你按我說(shuō)的,大學(xué)第一天就申請(qǐng)Github賬號(hào),現(xiàn)在已經(jīng)是一個(gè)三年的老油條了)、做過(guò)的機(jī)器人視頻、寫過(guò)的技術(shù)報(bào)告和文章(最好是英文的)放在上面。
大四到研究生之前的暑假,最好去一些比較不錯(cuò)的機(jī)器人公司實(shí)習(xí)一下,比如說(shuō)大疆。當(dāng)然你也可以繼續(xù)做機(jī)器人比賽,比如RoboMasters和大疆的飛行器比賽。
研究生一年級(jí)
研究生的時(shí)候,你的目標(biāo)比較清晰了,就是做一種機(jī)器人至少兩年時(shí)間,并從中發(fā)掘出可以發(fā)表論文的知識(shí)點(diǎn)。
如果做規(guī)劃算法的研究,那么還要讀偏CS一些的書,比如講A* search,random forest,圖論方面知識(shí)的教材。由于我在這方面造詣不深,就不托大了。
如果學(xué)習(xí)隨機(jī)系統(tǒng)的控制和最優(yōu)控制,除了1、2、3,還要讀一本神書Stochastic models estimation and control(https://www.cs.unc.edu/~welch/kalman/media/pdf/maybeck_ch1.pdf)。
如果研究機(jī)器人視覺(jué)定位,幾種常用的定位算法:PTAM(Parallel Tracking and Mapping for Small AR Workspaces (PTAM)),ROS的標(biāo)配VO(viso2_ros - ROS Wiki),SVO(GitHub - uzh-rpg/rpg_svo: Semi-direct Visual Odometry),LSD-SLAM(http://vision.in.tum.de/research/vslam/lsdslam)ORB-SLAM(GitHub - raulmur/ORB_SLAM2: Real-Time SLAM for Monocular, Stereo and RGB-D Cameras, with Loop Detection and Relocalization Capabilities),都必須自己學(xué)習(xí)之后全部跑一遍。只會(huì)用OpenCV的函數(shù)和這些工具包并不能說(shuō)明你會(huì)視覺(jué)定位,必須要能自己手寫出一個(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é)控制里找問(wèn)題作為研究課題。因?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ī)器人視覺(jué)定位算法以外,同學(xué)還需要學(xué)習(xí)其他的傳感器,以及這些傳感器與視覺(jué)定位算法怎么融合。這里面有很多坑,比如計(jì)算量的問(wèn)題,怎么保證融合算法不崩,怎么處理傳感器的延時(shí)等等,都需要同學(xué)結(jié)合自己的項(xiàng)目去踩,坑踩得多了才能成長(zhǎng)。如果大家想找一個(gè)多旋翼飛行器平臺(tái)研究自動(dòng)導(dǎo)航,我推薦大疆的M100,我已經(jīng)在知乎回答RoboMasters2015夏令營(yíng)是怎樣的? - YY碩的回答里吹過(guò)一波M100,前面說(shuō)過(guò)的今年夏令營(yíng)的知乎回答參加Robomasters 2016夏令營(yíng)是怎樣一種體驗(yàn)? - DJI 大疆創(chuàng)新里也有人幫我吹了一波。
一些大學(xué)里學(xué)過(guò)的知識(shí)點(diǎn),是必須結(jié)合研究生期間的項(xiàng)目的需求弄得很清楚的,比如三大變換(傅里葉變換,拉普拉斯變換,Z變換),旋轉(zhuǎn)表示法(歐拉角、四元數(shù)、旋轉(zhuǎn)矩陣),數(shù)值計(jì)算怎么防止矩陣出現(xiàn)數(shù)值問(wèn)題等等。除了自己的項(xiàng)目,還需要把凸優(yōu)化、卡爾曼濾波還有多自由度機(jī)械臂的控制學(xué)習(xí)一下。這三個(gè)領(lǐng)域的知識(shí),是任何一種機(jī)器人都會(huì)用的到比較難的知識(shí)。
凸優(yōu)化和凸優(yōu)化的各種變形是非常重要的知識(shí),因?yàn)楦餍懈鳂I(yè)里的研究問(wèn)題,多半是會(huì)建立一個(gè)優(yōu)化問(wèn)題去解決的。上面提到的《Convex Optimization》https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf,也是一本神書,同學(xué)們一定要認(rèn)真讀一讀。Matlab、Python、C++都有一些現(xiàn)成的工具包可以幫助你解優(yōu)化問(wèn)題,不過(guò)最好同學(xué)們能自己手寫一些基本的優(yōu)化算法,比如gradient descend,barrier method等等。另外現(xiàn)在主流的SLAM算法,后端都是通過(guò)一種叫做g2o的優(yōu)化算法來(lái)出效果的。而且g2o能夠整合bundle adjustment 和structure-from-motion這兩大計(jì)算機(jī)視覺(jué)里的關(guān)鍵問(wèn)題,可以說(shuō)是一種很好的計(jì)算思想了,非常有必要學(xué)習(xí)一下g2o。
卡爾曼濾波在上面書單里的1和3都有提到,同時(shí)在神書Stochastic models estimation and control(https://www.cs.unc.edu/~welch/kalman/media/pdf/maybeck_ch1.pdf)也有相當(dāng)多的篇幅。卡爾曼濾波有好幾種證明的方法,同學(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)的問(wèn)題。如果你所在的學(xué)校沒(méi)有一個(gè)財(cái)力雄厚的機(jī)器人實(shí)驗(yàn)室的話,你基本上沒(méi)有機(jī)會(huì)接觸到多自由度的機(jī)械臂。這時(shí)候之前學(xué)到的Simulink和就要學(xué)的Gazebo就派上用場(chǎng)了,你可以用Simscape里面的剛體搭一個(gè)多自由度機(jī)械臂,然后通過(guò)Simulink仿真去學(xué)習(xí)機(jī)械臂的控制;也可以用Gazebo的URDF語(yǔ)言寫一個(gè)機(jī)械臂,然后通過(guò)Gazebo和ROS的接口去控制機(jī)械臂;也可以用ROS里面的著名工具包MoveIt! Motion Planning Framework,不過(guò)MoveIt的問(wèn)題是,他只能仿真運(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》(http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf)。
有一個(gè)非常神奇的事實(shí):《A mathematical introduction to robotic manipulation》這本機(jī)械臂控制領(lǐng)域的著名教材的第二章和計(jì)算機(jī)視覺(jué)領(lǐng)域的著名教材《An Invitation to 3-D Vision》的第二章基本是一樣的,都在講旋轉(zhuǎn)表示法。這是因?yàn)樗械男D(zhuǎn)表示法都可以歸納為一種優(yōu)雅的李群結(jié)構(gòu):SO(3)群。而計(jì)算機(jī)視覺(jué)和機(jī)械臂控制都涉及到理解剛體的旋轉(zhuǎn),事實(shí)上用計(jì)算系統(tǒng)去觀測(cè)和控制所有的剛體構(gòu)成的系統(tǒng),理解旋轉(zhuǎn)都是很關(guān)鍵的問(wè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è)(http://www.cmls.polytechnique.fr/perso/renard/Hall_Group.pdf)。這是我自己讀著覺(jué)得最好的文章,當(dāng)然網(wǎng)上也有很多其他的介紹。
研究生階段還要培養(yǎng)的一個(gè)能力是借助各種工具仿真機(jī)器人系統(tǒng)的能力。顯然地,很多機(jī)器人系統(tǒng)真的造出來(lái)的話造價(jià)昂貴,需要在實(shí)際制造之前寫一個(gè)比較真實(shí)的仿真系統(tǒng)出來(lái)測(cè)試算法。我覺(jué)得做仿真系統(tǒng)的能力直接衡量了機(jī)器人工程師的技術(shù)水平。當(dāng)你開(kāi)始要搭一個(gè)仿真系統(tǒng)的時(shí)候,第一步是通過(guò)歐拉方程和牛頓方程確定剛體的運(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é)。有些看起來(lái)很高大上的仿真工具,比如Nvida的PhysX,在仿真的時(shí)候是忽略掉科里奧利力的,如果不理解仿真的本質(zhì),可能就會(huì)忽略這一個(gè)重要的缺陷。
研究生二年級(jí)
你的學(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è)新的沒(méi)學(xué)過(guò)的知識(shí),能夠分析出它和你以前學(xué)過(guò)的什么知識(shí)有聯(lián)系,你還需要再學(xué)什么才能弄明白這個(gè)知識(shí)點(diǎn)。
研究生二年級(jí)要深化第一年學(xué)到的那些技術(shù)和知識(shí),要做到完整地讀過(guò)四五本書,五十篇以上的論文。你已經(jīng)積累了幾萬(wàn)行代碼的經(jīng)驗(yàn),也能熟練地談?wù)撜l(shuí)家的電機(jī)回差小,誰(shuí)家的電機(jī)線性程度好。
你這個(gè)時(shí)候可以去寫作一些論文,也可以開(kāi)始學(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)域給出我的意見(jiàn)。
對(duì)視覺(jué)定位和傳感器融合來(lái)說(shuō),SLAM急需新的突破,目前通過(guò)幾何約束去實(shí)現(xiàn)loop closure看起來(lái)已經(jīng)走入了死路,沒(méi)法有更多的發(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ù),目前還有很多問(wèn)題可以探索,因?yàn)閭鞲衅鞯难訒r(shí)、不均勻的信號(hào),會(huì)給定位系統(tǒng)造成困擾,如何去除這些干擾,需要建立比較復(fù)雜的非線性優(yōu)化問(wèn)題,具體可以關(guān)注香港科技大學(xué)Shaojie Shen的工作。
對(duì)于多自由度機(jī)械手和機(jī)器人的locomotion來(lái)說(shuō),這里面還有非常多可以探索的研究問(wèn)題。我前面提過(guò)接觸力和摩擦力很難仿真,大神告訴我現(xiàn)在沒(méi)有任何一種工具和理論能把接觸力和摩擦力正確仿真出來(lái),因此如何在機(jī)器人系統(tǒng)里妥善處理對(duì)這些力的控制,就是很難的問(wèn)題了?,F(xiàn)在業(yè)界的一個(gè)前沿發(fā)展方向,也是利用機(jī)器學(xué)習(xí)技術(shù)來(lái)幫助機(jī)器人學(xué)會(huì)處理這些外力,不過(guò)人類目前最優(yōu)秀的多自由度機(jī)器人系統(tǒng),Berkeley的Brett機(jī)器人,疊幾塊積木就要用十分鐘(New ‘deep learning’ technique enables robot mastery of skills via trial and error),顯然還有很多提升的空間。
最后我想再?gòu)?qiáng)調(diào)一遍表達(dá)能力的重要性。你可以從自己帶的課程和機(jī)器人隊(duì)入手,把自己這幾年來(lái)學(xué)過(guò)的知識(shí)做成PPT講給學(xué)生們聽(tīng),然后讓他們給你反饋。多做這樣的練習(xí),提升自己做演講的能力,這將來(lái)會(huì)讓你受益匪淺。
研究生二年級(jí)之后,你可以準(zhǔn)備進(jìn)機(jī)器人公司工作了,也可以根據(jù)你自己感興趣的研究方向申請(qǐng)博士接著努力。由于你已經(jīng)掌握了廣博的知識(shí)和技能,你的職業(yè)生涯將會(huì)大有作為。
結(jié)束語(yǔ)
我從2008年展開(kāi)自己的機(jī)器人生涯。那一年波士頓動(dòng)力剛剛發(fā)布他們的大狗機(jī)器人,Python還是很小眾的語(yǔ)言,Ubuntu 8.04還很不穩(wěn)定,Chrome還沒(méi)有多少人知道。在之后的幾年中我目擊了深度神經(jīng)網(wǎng)絡(luò)的復(fù)興,看到波士頓動(dòng)力的機(jī)器人日漸強(qiáng)大,經(jīng)歷了ROS的起源和繁榮,幫助了大疆的崛起,深深為這個(gè)產(chǎn)業(yè)的未來(lái)感到激動(dòng)。我希望這篇文章能夠幫助更多的年輕人進(jìn)入機(jī)器人學(xué)的海洋,為未來(lái)機(jī)器人學(xué)的繼續(xù)發(fā)展貢獻(xiàn)力量。
評(píng)論
查看更多