機(jī)器人學(xué)的核心問(wèn)題是做好和物理世界的交互。現(xiàn)在主流的機(jī)器人學(xué)分支里,處理與物理世界的交互的學(xué)科分為三類:傳感器和處理算法;多剛體系統(tǒng)動(dòng)力學(xué)控制;機(jī)器人自主移動(dòng)。
智能機(jī)器人會(huì)成為未來(lái)世界的災(zāi)難嗎?對(duì)機(jī)器人或人工智能的研究會(huì)幫助我們更好的了解人類自己?jiǎn)??人工智能將?huì)怎樣影響我們的生活?諸如此類的問(wèn)題及文章早已屢見(jiàn)不鮮。但機(jī)器人控制如何入門(mén)?如何成為一個(gè)合格的機(jī)器人工程師?這類的問(wèn)題似乎還沒(méi)有一個(gè)最全面的答案。在機(jī)器人成為熱門(mén)話題的當(dāng)下,作為大學(xué)生,要如何制定一個(gè)高效全面的機(jī)器人學(xué)習(xí)計(jì)劃呢?小編為廣大“機(jī)器人狂熱粉”推薦一篇大疆無(wú)人機(jī)智能導(dǎo)航技術(shù)總監(jiān)楊碩的“機(jī)器人工程師學(xué)習(xí)計(jì)劃”,或許讀完本文可使機(jī)器人工程師學(xué)習(xí)事半功倍!
前言很多朋友私信問(wèn)我對(duì)機(jī)器人和人工智能感興趣,該怎么展開(kāi)學(xué)習(xí)。最近稍微有點(diǎn)空,我寫(xiě)寫(xiě)我的看法。
兩年前,我在知乎回答【如何定義“機(jī)器人”?】的問(wèn)題中試圖給機(jī)器人做出一個(gè)比較仔細(xì)的定義,我覺(jué)得機(jī)器人和人工智能最大的區(qū)別在于是否要和物理世界進(jìn)行交互。今年初在另一篇知乎“機(jī)器人或人工智能的研究會(huì)幫助我們更好的了解人類自己?jiǎn)幔俊被卮鹬?,我說(shuō)到傳感器是和物理世界交互的基礎(chǔ)。后來(lái),我又在知乎“有哪些與控制、機(jī)器人等相關(guān)的 quotes?”的回答中提到莫拉維克悖論(Moravec‘s paradox),談到了機(jī)器人學(xué)里公認(rèn)的難題是在物理世界中實(shí)現(xiàn)類人的活動(dòng)能力。
把之前的回答再翻出來(lái)是為了支持以下觀點(diǎn):機(jī)器人學(xué)的核心問(wèn)題是做好和物理世界的交互?,F(xiàn)在主流的機(jī)器人學(xué)分支里,處理與物理世界的交互的學(xué)科分為三類:傳感器和處理算法(激光雷達(dá),多目視覺(jué),融合算法);多剛體系統(tǒng)動(dòng)力學(xué)控制(工業(yè)機(jī)器人動(dòng)力學(xué)控制和接觸力控制);機(jī)器人自主移動(dòng)(locomotion不知道該怎么翻譯,輪式、足式、飛行等移動(dòng)機(jī)器人的研究)。建議對(duì)機(jī)器人學(xué)有興趣的同學(xué)著重在這幾個(gè)問(wèn)題上面。
另外,根據(jù)世界第一的機(jī)器人教育機(jī)構(gòu)卡耐基梅隆大學(xué)的機(jī)器人學(xué)博士的課程分類方式(http://www.ri.cmu.edu/education/COSAug2016.pdf),機(jī)器人學(xué)有四個(gè)核心領(lǐng)域:
1、感知。視覺(jué)傳感器、圖像傳感器、觸覺(jué)和力傳感器、慣導(dǎo)等。
2、認(rèn)知。人工智能、知識(shí)表達(dá)、規(guī)劃、任務(wù)調(diào)度、機(jī)器學(xué)習(xí)等。
3、行為。運(yùn)動(dòng)學(xué)、動(dòng)力學(xué)、控制、manipulation和locomotion等。
4、數(shù)學(xué)基礎(chǔ)。最優(yōu)估計(jì)、微分幾何、計(jì)算幾何、運(yùn)籌學(xué)等。
結(jié)合卡耐基梅隆大學(xué)的核心課程要求,我覺(jué)得我定義的機(jī)器人學(xué)核心問(wèn)題算是基本沒(méi)跑偏的。本文后面談到的機(jī)器人項(xiàng)目都是以上述觀點(diǎn)和課程要求為基礎(chǔ)。
一些可能有爭(zhēng)議性的觀點(diǎn):1、機(jī)器人學(xué)是富人的活動(dòng)。雖然工業(yè)越來(lái)越發(fā)達(dá),但好的開(kāi)發(fā)板和電機(jī)還是非常貴。如果要下定決心學(xué)習(xí)機(jī)器人學(xué)并且做出實(shí)物,你必須找到做實(shí)物出來(lái)的資金。要么是自己花錢(qián),要么就得找學(xué)校的機(jī)器人社團(tuán),或者找什么愿意資助年輕人學(xué)習(xí)的貴人。另外現(xiàn)在沒(méi)有任何一本完整的書(shū)可以教你怎么造一個(gè)四旋翼空中機(jī)器人或者大狗機(jī)器人,你需要參考十幾本不同的教科書(shū),這些書(shū)不管中文版還是英文版都很貴。
2、機(jī)器人學(xué)是屠龍之術(shù)。這話是Ninebot創(chuàng)始人說(shuō)的。雖然最近幾年,平衡車、掃地機(jī)器人、多旋翼飛行器讓機(jī)器人學(xué)開(kāi)始進(jìn)入人們的生活,但是可行的商業(yè)應(yīng)用還是很少,而且已有的機(jī)器人和理論都還很難解決好與物理世界交互這件事情。所以一定要確保自己在機(jī)器人學(xué)這個(gè)道路上同時(shí)練好了能去其他行當(dāng)吃飯的技能,比如編程、機(jī)械設(shè)計(jì)和硬件設(shè)計(jì)。也要做好心理準(zhǔn)備,接受自己有可能在學(xué)會(huì)屠龍之術(shù)以后幾年都造不出對(duì)社會(huì)有用的東西的事實(shí)。
3、基于上述所說(shuō)的觀點(diǎn),如果是已經(jīng)工作之后才想要學(xué)習(xí)機(jī)器人的話,可能已經(jīng)太遲了,因?yàn)楹芸赡芘d趣戰(zhàn)勝不了客觀限制因素。如果作為興趣去學(xué)習(xí),只能學(xué)到做巡線小車和舵機(jī)機(jī)械臂什么的,可能也滿足不了中二病的創(chuàng)造欲。
個(gè)人認(rèn)為機(jī)器人學(xué)是一個(gè)艱苦的道路,想要成為一個(gè)獨(dú)擋一面的機(jī)器人工程師需要多年理論和實(shí)踐的同步訓(xùn)練。理論學(xué)習(xí)和動(dòng)手實(shí)踐的過(guò)程還要互相排好時(shí)間表,在做某個(gè)實(shí)踐項(xiàng)目的同時(shí)去學(xué)習(xí)最相關(guān)理論往往可以達(dá)到事半功倍的效果,但是同時(shí)那些不太相關(guān)的理論會(huì)看起來(lái)非??菰铮虼巳绾瓮咨瓢才抛约旱膶?shí)踐項(xiàng)目也是很重要的事情。
這篇文章里我計(jì)劃介紹一個(gè)電子工程、機(jī)械工程和計(jì)算機(jī)專業(yè)學(xué)生從大學(xué)一年級(jí)到研究生二年級(jí)的機(jī)器人學(xué)習(xí)計(jì)劃,基本是我對(duì)自己過(guò)去學(xué)習(xí)方式的一個(gè)總結(jié)。按照這個(gè)方法來(lái)學(xué)習(xí),能夠成為一個(gè)能力全面,但是稍微偏軟件一點(diǎn)的機(jī)器人工程師。這個(gè)六年的學(xué)習(xí)計(jì)劃,估算下來(lái),全年中每天在上課和完成課程要求之外要投入學(xué)習(xí)時(shí)間6-8個(gè)小時(shí),這些時(shí)間一方面用于閱讀課程知識(shí)的英文教材,一方面用于閱讀其他學(xué)科的教材,一方面用于實(shí)踐項(xiàng)目。
機(jī)器人工程師在大型項(xiàng)目里的定位類似于飛機(jī)系統(tǒng)里的總體設(shè)計(jì)師。和機(jī)械工程師、硬件工程師、軟件工程師、算法工程師、控制工程師比起來(lái),機(jī)器人工程師參與某個(gè)具體技術(shù)的時(shí)間較少,但是能夠聽(tīng)得懂所有工程師說(shuō)的話,能夠作為不同模塊間的協(xié)調(diào)人,帶領(lǐng)整個(gè)團(tuán)隊(duì)去攻堅(jiān)。當(dāng)然如果機(jī)器人工程師能夠在一個(gè)領(lǐng)域達(dá)到那個(gè)領(lǐng)域的工程師的優(yōu)秀水平,肯定更好。
由于時(shí)間倉(cāng)促,再加上個(gè)人水平有限,文章中如有紕漏和錯(cuò)誤,恭請(qǐng)讀者指出,謝謝。如果同學(xué)還有什么想知道的內(nèi)容和教材,也歡迎留言交流。
大一
剛上大一,你的機(jī)器人生涯開(kāi)始了。先看看學(xué)校的校園網(wǎng)能不能翻墻,不能的話自己去買(mǎi)個(gè)一年一百多塊錢(qián)的VPN,先確保自己能上Google,不要心疼VPN的錢(qián),這能讓你在之后的職業(yè)生涯里節(jié)省上萬(wàn)塊錢(qián)。然后去注冊(cè)一個(gè)gmail賬號(hào),再注冊(cè)stackoverflow賬號(hào),再注冊(cè)github的賬號(hào),再注冊(cè)CSDN賬號(hào),注冊(cè)完登錄上去逛逛,暫時(shí)先不要問(wèn)為什么。
英語(yǔ)水平一定程度上會(huì)是機(jī)器人工程師水平的限制因素,英語(yǔ)是同學(xué)們?cè)诖髮W(xué)最該努力學(xué)的一門(mén)課,而且不止要把它當(dāng)成課,要當(dāng)成一種技能,當(dāng)成生活的一部分。當(dāng)你開(kāi)始努力學(xué)習(xí)一些高級(jí)的機(jī)器人知識(shí)以后,有可能會(huì)非常難以找到中文的參考資料,這個(gè)時(shí)候如果啃不下英文的資料,進(jìn)步速度和眼界就會(huì)受到很大影響。因此大一的時(shí)候要多看看紅寶書(shū),看看美劇。
不管是什么專業(yè)背景的同學(xué),大學(xué)一年級(jí)一定要上好的課是微積分和線性代數(shù)。線性代數(shù)的重要性需要特別強(qiáng)調(diào)。一般來(lái)說(shuō),優(yōu)秀的工程師和科學(xué)家在職業(yè)生涯中要學(xué)至少五次線性代數(shù),大一學(xué)一遍、學(xué)凸優(yōu)化的時(shí)候?qū)W一遍、學(xué)線性系統(tǒng)的時(shí)候?qū)W一遍、學(xué)機(jī)器學(xué)習(xí)的時(shí)候?qū)W一遍……如果在第一遍學(xué)的時(shí)候就看到對(duì)的書(shū),刷到對(duì)的題,那么以后的學(xué)習(xí)會(huì)輕松很多。
網(wǎng)上有很多對(duì)于如何學(xué)好線性代數(shù)的討論,比如知乎問(wèn)題如何理解線性代數(shù)? - 數(shù)學(xué)學(xué)習(xí)。Matrix67大神的文章隨記:我們需要怎樣的數(shù)學(xué)教育?也很有啟發(fā)。我個(gè)人對(duì)學(xué)習(xí)線性代數(shù)的建議是兩本書(shū),一本叫做《Linear Algebra Done Right》,另一本叫做《Linear Algebra Done Wrong》(https://www.math.brown.edu/~treil/papers/LADW/book.pdf),我比較喜歡的是Done Wrong這本書(shū),第一它是免費(fèi)的,第二只需要讀前6章兩百頁(yè)就夠了,第三它頁(yè)邊距很大,打印出來(lái)有很多空白做練習(xí)題。另外一個(gè)較好的教材是麻省理工公開(kāi)課:線性代數(shù)。不論如何,學(xué)線性代數(shù)一定要用國(guó)外的教材,千萬(wàn)不要用國(guó)內(nèi)的教材??杏⑽臅?shū)很累,但是考慮到之后還要啃更多的英文書(shū),線性代數(shù)已經(jīng)算是很入門(mén)的了,一定要啃下來(lái),同時(shí)還要刷足夠多的課后題。
學(xué)完線性代數(shù)以后,一個(gè)自然而然的問(wèn)題就是怎么能用計(jì)算機(jī)自己去計(jì)算矩陣的乘法、向量的乘法、向量的內(nèi)積。因此引入了編程的學(xué)習(xí)。
不管同學(xué)的專業(yè)是什么,一定要在大學(xué)一年級(jí)盡早開(kāi)始學(xué)編程。至于用哪種語(yǔ)言開(kāi)始學(xué)習(xí)編程,我推薦Python,比較好的教材是麻省理工學(xué)院公開(kāi)課:計(jì)算機(jī)科學(xué)及編程導(dǎo)論,比較好的Python開(kāi)發(fā)學(xué)習(xí)環(huán)境是Anacoda (http://www.continuum.io/downloads)。熟悉Python以后,同學(xué)就可以開(kāi)始玩玩Python的數(shù)值計(jì)算包Numpy,這個(gè)時(shí)候線性代數(shù)題基本上也刷的差不多,可以通過(guò)Numpy幫助自己解決線性代數(shù)問(wèn)題了。
對(duì)任何人來(lái)說(shuō),Python是一把瑞士軍刀,你可以用他干很多東西,比如自動(dòng)回復(fù)郵件、自動(dòng)收集信息。但是真要去造機(jī)器人,合適的工具并不是瑞士軍刀,而是C/C++這樣簡(jiǎn)單粗暴的錘子和螺絲刀般的工具。在學(xué)習(xí)Python學(xué)到一定程度的時(shí)候(比如你聽(tīng)說(shuō)有一種叫做cython的東西),最好開(kāi)始學(xué)習(xí)C,而且要強(qiáng)迫自己練習(xí)用C的一維數(shù)組和指針來(lái)實(shí)現(xiàn)矩陣的加法、乘法、求逆等操作。之所以有高級(jí)的Python或者Java(不要問(wèn)我Java哪里高級(jí)了)這些語(yǔ)言以后我們還需要去學(xué)C,是因?yàn)闄C(jī)器人上常用的不是完整的電腦,而是計(jì)算量有局限的嵌入式系統(tǒng),嵌入式系統(tǒng)開(kāi)發(fā)基本只能用C或者更低級(jí)的語(yǔ)言。
學(xué)習(xí)C我個(gè)人入門(mén)用的是清華大學(xué)出版的《C++語(yǔ)言程序設(shè)計(jì)》。雖然這個(gè)書(shū)標(biāo)題是C++,但其實(shí)沒(méi)什么太大問(wèn)題。不過(guò)國(guó)內(nèi)的C語(yǔ)言教材都有個(gè)巨大的問(wèn)題是不引導(dǎo)學(xué)生去用Linux。近年來(lái)更好的一個(gè)教材是http://songjinshan.com/akabook/zh/index.html,這個(gè)網(wǎng)站的教材非常好,因?yàn)樗逃龑W(xué)生用Linux環(huán)境作為程序編譯的環(huán)境,而且還引入了一些計(jì)算機(jī)體系結(jié)構(gòu)的介紹。
IT行業(yè)的程序員都會(huì)爭(zhēng)論高級(jí)語(yǔ)言和低級(jí)語(yǔ)言哪個(gè)好,Linux和Windows哪個(gè)好,而對(duì)于機(jī)器人工程師來(lái)說(shuō),從現(xiàn)在到可預(yù)見(jiàn)的未來(lái)里,C是最好的語(yǔ)言,Linux是最好的操作系統(tǒng),這都毋庸置疑。甚至對(duì)于Linux的發(fā)行版該選哪個(gè),我們都是很少有質(zhì)疑的:Ubuntu。原因是機(jī)器人操作系統(tǒng)ROS是基于Ubuntu開(kāi)發(fā)的,因此在Ubuntu上運(yùn)行最穩(wěn)定。注意Ubuntu出了一個(gè)中文版叫做Kylin,個(gè)人感覺(jué)比較坑,建議大家不要裝中文版。Ubuntu 作為一個(gè)開(kāi)源操作系統(tǒng),總是在快速迭代,2016年8月比較穩(wěn)定的版本是14.04和16.04,建議同學(xué)安裝14.04。
當(dāng)你把C學(xué)得差不多,開(kāi)始要學(xué)寫(xiě)包含多個(gè)頭文件的程序時(shí),一定要同時(shí)學(xué)習(xí)makefile的知識(shí)。這時(shí)候要上網(wǎng)去搜“Makefile詳解”這篇文章看。
我自己在大學(xué)一年級(jí)的時(shí)候還學(xué)習(xí)了HTML和Javascript,到大一結(jié)束的時(shí)候已經(jīng)能夠熟練用Javascript手寫(xiě)一些動(dòng)態(tài)頁(yè)面。我個(gè)人覺(jué)得HTML和Javascript也是機(jī)器人工程師必備的技術(shù),而不只是軟件工程師的玩具。這是因?yàn)閣eb技術(shù)實(shí)際上已經(jīng)滲透到了編程的方方面面,比如json開(kāi)始是Javascript里的一種object定義的方式,但現(xiàn)在已經(jīng)成為了一種很標(biāo)準(zhǔn)的數(shù)據(jù)交互、參數(shù)配置的格式。另外AJAX能夠幫助初學(xué)者理解一定的網(wǎng)絡(luò)技術(shù)原理,而網(wǎng)絡(luò)技術(shù)也是機(jī)器人工程師必備的技能。再者,制作GUI(圖形用戶界面)是常規(guī)debug的辦法,而近年來(lái)一個(gè)流行的趨勢(shì)是用webkit嵌入程序用HTML和Javascript作為圖形界面的后端,而在機(jī)器人操作系統(tǒng)ROS(ROS.org | Powering the world’s robots)里,通過(guò)rosbridge可以非常方便地把機(jī)器人程序的數(shù)據(jù)傳遞到websocket上,這句話看不懂沒(méi)關(guān)系,反正你知道學(xué)學(xué)HTML和Javascript很重要就是了。更重要的是,HTML文檔背后的DOM (Document Object Model)深刻地體現(xiàn)了面向?qū)ο蟮乃枷?。大學(xué)中的面向?qū)ο蟪绦蛟O(shè)計(jì)一般都講C++,在我看來(lái)應(yīng)該講HTML和Javascript。這一點(diǎn)不細(xì)說(shuō)了,如果同學(xué)們?nèi)W(xué)習(xí)HTML和Javascript,自然會(huì)體會(huì)到。學(xué)習(xí)HTML和Javascript比較好的資料是http://www.w3schools.com/,把網(wǎng)站左側(cè)的“Learn HTML”、“Learn CSS”、“Learn Javascript”和“Learn JQuery”學(xué)完就行,別的部分還有很多花哨的技術(shù),沒(méi)有必要去學(xué)了。
以上介紹的這些知識(shí)點(diǎn)、書(shū)和資料應(yīng)該在大一期間就全部看完,然后利用大一的暑假好好鞏固這些知識(shí)。比如開(kāi)始用HTML和Javascript做一個(gè)自己的個(gè)人主頁(yè),刷一刷編程的題目,學(xué)用Python的奇技淫巧(比方說(shuō)做一個(gè)自己的個(gè)人主頁(yè))。另外還可以抽時(shí)間學(xué)學(xué)數(shù)學(xué)知識(shí),比如開(kāi)始看看代數(shù)和離散數(shù)學(xué)。我大一的時(shí)候看到了兩篇文章,認(rèn)識(shí)到了數(shù)學(xué)的重要性,一個(gè)是MIT的CV大牛林達(dá)華寫(xiě)的[轉(zhuǎn)]MIT牛人解說(shuō)數(shù)學(xué)體系,另一個(gè)是前Goolge研究員吳軍博士寫(xiě)的《數(shù)學(xué)之美》(數(shù)學(xué)之美 (豆瓣))。當(dāng)時(shí)林達(dá)華還在MIT讀博士,而《數(shù)學(xué)之美》還沒(méi)有成書(shū)。兩篇文章看完以后我感覺(jué)自己整個(gè)人對(duì)數(shù)學(xué)的認(rèn)識(shí)上了一個(gè)新的層次,此后一直在注意提高自己的數(shù)學(xué)水平,幾年下來(lái)覺(jué)得收益很大。在之后的介紹里我還會(huì)多次強(qiáng)調(diào)需要學(xué)的數(shù)學(xué)知識(shí)和對(duì)應(yīng)的教材。
大二
上大二的時(shí)候,你已經(jīng)會(huì)了基本的編程知識(shí)和基本的數(shù)學(xué)知識(shí)。大二這一年應(yīng)該投入在嵌入式系統(tǒng)的學(xué)習(xí)中,同時(shí)繼續(xù)拓展自己多方面的能力。學(xué)校的機(jī)器人社團(tuán),比如做Robocon,RoboMasters的團(tuán)隊(duì)?wèi)?yīng)該在招新了,趕快去加入,有了學(xué)長(zhǎng)學(xué)姐的指導(dǎo)以及同輩朋友的鞭策,應(yīng)該會(huì)進(jìn)步的快一點(diǎn)。
大二應(yīng)該掌握的技能:Solidworks畫(huà)基本的機(jī)械圖,基本的數(shù)字電路知識(shí)、數(shù)模轉(zhuǎn)換,51單片機(jī)、AVR單片機(jī)、STM32單片機(jī)原理,UART、SPI、I2C、CAN等協(xié)議的原理和數(shù)據(jù)收發(fā),STM32開(kāi)發(fā)板的使用,電機(jī)轉(zhuǎn)動(dòng)和驅(qū)動(dòng)的原理,PID的原理,調(diào)試四輪機(jī)器人底盤(pán)的移動(dòng),基本的傳感器如陀螺儀、碼盤(pán)、紅外線、超聲波的原理和讀取方式,網(wǎng)絡(luò)知識(shí)如配置IP配置路由器等,微電子焊接,金工技術(shù)。我在知乎回答如果程序員每天都淺嘗輒止地學(xué)一些不同的新技術(shù),長(zhǎng)久以往,人會(huì)變成什么樣子呢? - YY碩的回答里談過(guò)機(jī)器人工程師需要的技能數(shù)量是IT行業(yè)全棧工程師技能數(shù)量的三倍以上,這些技能的基礎(chǔ)都應(yīng)該在大二開(kāi)始積累。
如果同學(xué)們的專業(yè)是機(jī)械工程相關(guān),那么大二的時(shí)候要深入學(xué)習(xí)solidworks做圖,買(mǎi)機(jī)械加工手冊(cè)學(xué)習(xí)各種機(jī)械的奇技淫巧。你的專業(yè)知識(shí)還不足以讓你進(jìn)行縝密的受力分析,不過(guò)你可以盡量多做一些機(jī)械結(jié)構(gòu)出來(lái)感受它們的樂(lè)趣。
如果同學(xué)們的專業(yè)是硬件、電路相關(guān),那么大二的時(shí)候要深入學(xué)習(xí)Altium Designer做圖、制板、焊板。你要從現(xiàn)在開(kāi)始,就給自己積累一個(gè)工作記錄,可以就是簡(jiǎn)單的txt文件,記錄你做過(guò)所有板子的bug、解決方案、學(xué)到的原理圖、PCB layout的注意事項(xiàng)等等。積累很多年以后,你的這個(gè)工作記錄會(huì)值很多錢(qián)。
學(xué)習(xí)這些技能的最好的方式,就是參加自己學(xué)校機(jī)器人社團(tuán)的訓(xùn)練和方案設(shè)計(jì)。一般來(lái)說(shuō),學(xué)校的機(jī)器人社團(tuán)招新之后會(huì)有訓(xùn)練和測(cè)試,讓新人分組去做機(jī)器人,這個(gè)過(guò)程中如果愿意努力學(xué),提高得會(huì)很快。如果你所在的大學(xué)是機(jī)器人比賽強(qiáng)校,比如西安交通大學(xué),電子科技大學(xué),哈爾濱工業(yè)大學(xué),華中科技大學(xué),東北大學(xué)等等(排名不分先后,沒(méi)有提到你們學(xué)校名字的話我表示抱歉),那么你很幸運(yùn),你們學(xué)校的機(jī)器人社團(tuán)有很好的積淀,有很多資源可以幫助你學(xué)習(xí)?;旧现灰焯炫輰?shí)驗(yàn)室,保證自己每天只睡6-7個(gè)小時(shí)(但還是要多去跑步、游泳保持身體健康),勤于向?qū)W長(zhǎng)學(xué)姐請(qǐng)教,那么一定會(huì)提高得很快。
大二階段特別要強(qiáng)調(diào)的是對(duì)動(dòng)手能力的培養(yǎng),包括機(jī)械材料的加工、電路焊接、制作導(dǎo)線和接頭、連接路由器、配置網(wǎng)絡(luò)、做網(wǎng)線等等。機(jī)械加工的工具有螺絲刀、鋸、鉆、錘子、車床、銑床、鉆床,進(jìn)階選手可以學(xué)一下氧焊,這個(gè)比較危險(xiǎn),我沒(méi)嘗試過(guò);電路焊接的工具有焊機(jī)、焊錫、洗板水、松香、吸錫器;制作導(dǎo)線的工具有剪子、剝線鉗、夾頭鉗、網(wǎng)線鉗各種鉗;網(wǎng)絡(luò)配置就是連連路由器插插網(wǎng)線,但是Linux系統(tǒng)下配置網(wǎng)絡(luò)有時(shí)會(huì)非常麻煩,一定要多積累這方面的知識(shí),因?yàn)閷?lái)你造的機(jī)器人多半會(huì)頂著一個(gè)無(wú)線路由器跑來(lái)跑去,甚至有的機(jī)器人上各個(gè)模塊自己就能組起一個(gè)小局域網(wǎng)。這些技能的熟練掌握需要你花很多時(shí)間去做真正能用的機(jī)器人來(lái)練手。
對(duì)于該選擇造一個(gè)怎么樣的“真正能用的機(jī)器人”練手,最好的選擇肯定是機(jī)器人比賽中的機(jī)器人。如果參加Robocon,你會(huì)跟著學(xué)長(zhǎng)學(xué)姐們學(xué)著造有人那么高的巨大機(jī)械;如果參加RoboMasters,你會(huì)學(xué)著造比汽車還要靈活的機(jī)器人以及快速發(fā)彈的機(jī)構(gòu)。其他一些小型的比賽比如飛思卡爾智能車,也是很好的訓(xùn)練,因?yàn)轱w思卡爾智能車已經(jīng)發(fā)展得很成熟,參加這個(gè)比賽的參賽資料就夠?qū)W一陣子的,學(xué)完以后能夠獲得比較多的機(jī)器人技能。
如果沒(méi)有太多學(xué)校機(jī)器人社團(tuán)的資源,同學(xué)們還有一些小型的比賽比如挑戰(zhàn)杯、大創(chuàng)比賽等等可以選擇,以三五個(gè)人的小團(tuán)隊(duì)參與這些比賽。如果同學(xué)所在的學(xué)校連這些比賽都不組織大家參與,那就只好自己花錢(qián)了。國(guó)內(nèi)開(kāi)源機(jī)器人社區(qū)有很多資源可以利用來(lái)學(xué)習(xí),比如自己買(mǎi)Arduino STEM educational Robot kits Building Platform的各種開(kāi)發(fā)套件做簡(jiǎn)單的機(jī)器人。Arduino的開(kāi)發(fā)環(huán)境可能有些人不喜歡,因?yàn)樗鼘?duì)硬件做了一級(jí)封裝,如果更希望接觸到單片機(jī)的本質(zhì),可以自己買(mǎi)STM32開(kāi)發(fā)板學(xué)習(xí)。俗話說(shuō),沒(méi)有什么嵌入式系統(tǒng)是一塊STM32實(shí)現(xiàn)不了的,如果有,就用兩塊。STM32是ARM Cortex?M家族中最為廣泛應(yīng)用的一款單片機(jī),在網(wǎng)上也有很多的教材和開(kāi)發(fā)板可供選擇。在國(guó)內(nèi)著名的電子論壇STM32/8 分論壇帖子清單 (amoBBS 阿莫電子論壇)上,有很多參考資料,有問(wèn)題也可以在這里和大家討論學(xué)習(xí)。
如果你很想?yún)⒓訖C(jī)器人比賽,身邊也恰好有一些志同道合的小伙伴,但是學(xué)校不支持。沒(méi)關(guān)系,來(lái)找我,我盡量通過(guò)大疆的關(guān)系說(shuō)服你們學(xué)校支持你們參加RoboMasters。
雖然你是以機(jī)器人比賽為主線在探索機(jī)器人技術(shù),但是要時(shí)刻記得,機(jī)器人比賽給你的理論方面的訓(xùn)練很差,還會(huì)讓你養(yǎng)成一些壞習(xí)慣,比如凡事都希望用一些糙猛快的辦法來(lái)解決。由于通常整個(gè)團(tuán)隊(duì)都沒(méi)有太多的項(xiàng)目管理經(jīng)驗(yàn),到比賽前一段時(shí)間才會(huì)加緊功夫去做機(jī)器人,很多時(shí)候就會(huì)用“山寨”的辦法去處理機(jī)器人的故障。比如說(shuō)某個(gè)承重結(jié)構(gòu)用久了會(huì)彎,為了趕比賽的進(jìn)度,就拿錘子敲直了、再加一條輔助的結(jié)構(gòu)在旁邊繼續(xù)用,而沒(méi)有細(xì)致地去做建模、受力分析,思考是什么原因?qū)е鲁兄亟Y(jié)構(gòu)會(huì)變形。再比如說(shuō)調(diào)PID參數(shù)就是生調(diào)亂改,而沒(méi)有基于機(jī)器人的動(dòng)力學(xué)模型去估測(cè)參數(shù)的大概范圍。
大二的暑假,有可能你跟著學(xué)校的機(jī)器人隊(duì)參加了一些機(jī)器人比賽。這是一個(gè)反思總結(jié)的好時(shí)機(jī),為什么機(jī)器人隊(duì)取得了這樣那樣的成績(jī)?整個(gè)團(tuán)隊(duì)怎樣才能更有效率?明年如何繼續(xù)招新?暑假要把時(shí)間花在技術(shù)積累上面,這個(gè)時(shí)候可以回頭思考思考之前準(zhǔn)備比賽時(shí)用糙猛快的辦法解決的問(wèn)題如何能夠細(xì)致地去解決。
如果大二的暑假?zèng)]有參加機(jī)器人比賽,可以做一個(gè)舵機(jī)機(jī)器人,比如6條腿的蜘蛛,比如碼垛機(jī)器人。舵機(jī)是機(jī)器人工程師的好朋友,一定要好好掌握。
另外你其他方面的能力也不能落下。大二結(jié)束的時(shí)候,你的Linux應(yīng)該用的很熟練了,除了makefile,你也用起了cmake。你也應(yīng)該開(kāi)始理解Github存在的意義,因?yàn)槟阋呀?jīng)上去讀了很多別人的代碼,你也把自己的一些課程設(shè)計(jì)和小項(xiàng)目放在了Github上面。另外大二基本上了本專業(yè)一些比較難的基礎(chǔ)課程,比如自動(dòng)控制原理、機(jī)器學(xué)習(xí)、概率統(tǒng)計(jì)、材料和力學(xué)等課程,同學(xué)們會(huì)看到這些課程里又用到了線性代數(shù)和微積分的知識(shí),以及建模的知識(shí)。這時(shí)候可以把大一的物理、線性代數(shù)和微積分再翻出來(lái)看看。
同學(xué)的學(xué)校應(yīng)該給大二到大三的學(xué)生有開(kāi)設(shè)面向?qū)ο蟮某绦蛟O(shè)計(jì),一般用Java或C++教授。在面向?qū)ο蟮某绦蛘n里面,一定要積累3000行左右的代碼的開(kāi)發(fā)經(jīng)驗(yàn)。經(jīng)典的面向?qū)ο蟪绦蛟O(shè)計(jì)的練習(xí)通常是寫(xiě)游戲,比如俄羅斯方塊,吃豆人等等,一定要自己能夠做到完全手寫(xiě)一個(gè)完整的項(xiàng)目出來(lái)。
另外你可以開(kāi)始學(xué)習(xí)Matlab當(dāng)中的神器Simulink了。在大二這一年的學(xué)習(xí)中,你可能在不少課程里多多少少用到了Matlab。假設(shè)你已經(jīng)在我的推薦下喜歡上了Python,你可能會(huì)覺(jué)得Matlab的計(jì)算工具沒(méi)有比Python強(qiáng)多少;假設(shè)你自己在別人的推薦下喜歡上了mathematica,你可能會(huì)覺(jué)得和Mathematica這種神一樣的語(yǔ)言比起來(lái),Matlab弱爆了。但是要注意的是,Matlab最強(qiáng)大的工具是Simulink,通過(guò)它你幾乎可以仿真一切的物理系統(tǒng)和控制系統(tǒng)。我建議同學(xué)可以通過(guò)Simulink實(shí)現(xiàn)一個(gè)倒立擺,然后理解Matlab的強(qiáng)大之處。閱讀并實(shí)現(xiàn)了這兩篇文章里的內(nèi)容,同學(xué)應(yīng)該會(huì)對(duì)倒立擺有了比較深刻的認(rèn)識(shí)。倒立擺是機(jī)器人學(xué)中一個(gè)非常重要的模型,因?yàn)榛鸺?dǎo)彈、雙足機(jī)器人、四足機(jī)器人,基本都是倒立擺的變形。你自己實(shí)現(xiàn)出來(lái)的simulink模型一定要存好,以后可能還會(huì)再拿出來(lái)仔細(xì)看。
如果你按照我之前說(shuō)的方法探索了一些HTML和Javascript的技術(shù),那么JQuery,bootstrap,AngularJS你已經(jīng)多多少少知道是怎么回事了。web后端的技術(shù),比如PHP和MySQL,也可以了解一下,LAMP要學(xué)會(huì)怎么配置。如果有同學(xué)找你幫忙寫(xiě)小網(wǎng)站,盡量去幫個(gè)忙,幫別人做網(wǎng)站是提高自己系統(tǒng)編程能力的好練習(xí)。在做網(wǎng)站的過(guò)程中你可能還會(huì)順便學(xué)一學(xué)如何用Photoshop和Illustrator讓網(wǎng)站顯得更漂亮。這些技能有最好,沒(méi)空學(xué)也沒(méi)關(guān)系。
評(píng)論
查看更多