【學習指導】 大疆技術總監對于本科大學生學習機器人工程師學習看法
- 前言
- 四個核心領域:
- 一些可能有爭議性的觀點:
- 大一
- 英語水平
- 微積分與線性代數
- Python 以及C/C++
- HTML和Javascript
- 數學之美
【機器人工程師學習計劃】轉自YY碩,知乎

前言
很多朋友私信問我對機器人和人工智能感興趣,該怎么展開學習,最近稍微有點空,我寫寫我的看法, 兩年前,我在知憾訓答如何定義「機器人」?
YY碩的回答中試圖給機器人做出一個比較仔細的定義,我覺得機器人和人工智能最大的區別在于是否要和物理世界進行互動,今年初在另一篇知憾訓答里對機器人或人工智能的研究會幫助我們更好的了解人類自己嗎? - YY碩的回答我說到傳感器是和物理世界互動的基礎,后來,我又在知憾訓答有哪些與控制、機器人等相關的 quotes? - YY碩的回答中提到莫拉維克悖論(Moravec's paradox),談到了機器人學里公認的難題是在物理世界中實作類人的活動能力,
把之前的回答再翻出來是為了支持以下觀點:機器人學的核心問題是做好和物理世界的互動,現在主流的機器人學分支里,處理與物理世界的互動的學科分為三類:
- 傳感器和處理演算法(激光雷達,多目視覺,融合演算法);
- 多剛體系統動力學控制(工業機器人動力學控制和接觸力控制);
- 機器人自主移動(locomotion不知道該怎么翻譯,輪式、足式、飛行等移動機器人的研究),
我建議對機器人學有興趣的同學著重在這幾個問題上面,
另外,根據世界第一的機器人教育機構卡耐基梅隆大學的機器人學博士的課程分類方式,機器人學有
四個核心領域:
-
感知,視覺傳感器、影像傳感器、觸覺和力傳感器、慣導等,
-
認知,人工智能、知識表達、規劃、任務調度、機器學習等,
-
行為,運動學、動力學、控制、manipulation和locomotion等,
-
數學基礎,最優估計、微分幾何、計算幾何、運籌學等,
結合卡耐基梅隆大學的核心課程要求,我覺得我定義的機器人學核心問題算是基本沒跑偏的,本文后面談到的機器人專案都是以上述觀點和課程要求為基礎,
一些可能有爭議性的觀點:
-
機器人學是富人的活動,雖然工業越來越發達,但好的開發板和電機還是非常貴,如果要下定決心學習機器人學并且做出實物,你必須找到做實物出來的資金,要么是自己花錢,要么就得找學校的機器人社團,或者找什么愿意資助年輕人學習的貴人,另外現在沒有任何一本完整的書可以教你怎么造一個四旋翼空中機器人或者大狗機器人,你需要參考十幾本不同的教科書,這些書不管中文版還是英文版都很貴,
-
機器人學是屠龍之術,這話是Ninebot創始人說的,雖然最近幾年,平衡車、掃地機器人、多旋翼飛行器讓機器人學開始進入人們的生活,但是可行的商業應用還是很少,而且已有的機器人和理論都還很難解決好與物理世界互動這件事情,所以一定要確保自己在機器人學這個道路上同時練好了能去其他行當吃飯的技能,比如編程、機械設計和硬體設計,也要做好心理準備,接受自己有可能在學會屠龍之術以后幾年都造不出對社會有用的東西的事實,
-
基于上述所說的觀點,如果是已經作業之后才想要學習機器人的話,可能已經太遲了,因為很可能興趣戰勝不了客觀限制因素,如果作為興趣去學習,只能學到做巡線小車和舵機機械臂什么的,可能也滿足不了中二病的創造欲,
個人認為機器人學是一個艱苦的道路,想要成為一個獨擋一面的機器人工程師需要多年理論和實踐的同步訓練,理論學習和動手實踐的程序還要互相排好時間表,在做某個實踐專案的同時去學習最相關理論往往可以達到事半功倍的效果,但是同時那些不太相關的理論會看起來非常枯燥,因此如何妥善安排自己的實踐專案也是很重要的事情,
這篇文章里我計劃介紹一個電子工程、機械工程和計算機專業學生從大學一年級到研究生二年級的機器人學習計劃,基本是我對自己過去學習方式的一個總結,按照這個方法來學習,能夠成為一個能力全面,但是稍微偏軟體一點的機器人工程師,這個六年的學習計劃,估算下來,全年中每天在上課和完成課程要求之外要投入學習時間6-8個小時,這些時間一方面用于閱讀課程知識的英文教材,一方面用于閱讀其他學科的教材,一方面用于實踐專案,
機器人工程師在大型專案里的定位類似于飛機系統里的總體設計師,和機械工程師、硬體工程師、軟體工程師、演算法工程師、控制工程師比起來,機器人工程師參與某個具體技術的時間較少,但是能夠聽得懂所有工程師說的話,能夠作為不同模塊間的協調人,帶領整個團隊去攻堅,當然如果機器人工程師能夠在一個領域達到那個領域的工程師的優秀水平,肯定更好,
由于時間倉促,再加上個人水平有限,文章中如有紕漏和錯誤,恭請讀者指出,謝謝,如果同學還有什么想知道的內容和教材,也歡迎留言交流,
大一
剛上大一,你的機器人生涯開始了,先看看學校的校園網能不能翻墻,不能的話自己去買個一年一百多塊錢的VPN,先確保自己能上Google,不要心疼VPN的錢,這能讓你在之后的職業生涯里節省上萬塊錢,然后去注冊一個gmail賬號,再注冊stackoverflow賬號,再注冊github的賬號,再注冊CSDN賬號,注冊完登錄上去逛逛,暫時先不要問為什么,
英語水平
- 英語水平一定程度上會是機器人工程師水平的限制因素,英語是同學們在大學最該努力學的一門課,而且不止要把它當成課,要當成一種技能,當成生活的一部分,當你開始努力學習一些高級的機器人知識以后,有可能會非常難以找到中文的參考資料,這個時候如果啃不下英文的資料,進步速度和眼界就會受到很大影響,因此大一的時候要多看看紅寶書,看看美劇,
微積分與線性代數
不管是什么專業背景的同學,大學一年級一定要上好的課是微積分和線性代數,線性代數的重要性需要特別強調,一般來說,`優秀的工程師和科學家在職業生涯中要學至少五次線性代數,大一學一遍、學凸優化的時候學一遍、學線性系統的時候學一遍、學機器學習的時候學一遍…
- …如果在第一遍學的時候就看到對的書,刷到對的題,那么以后的學習會輕松很多,`
網上有很多對于如何學好線性代數的討論,比如知乎問題如何理解線性代數? - 數學學習,Matrix67大神的文章隨記:我們需要怎樣的數學教育?也很有啟發,我個人對學習線性代數的建議是兩本書, - 一本叫做 《Linear Algebra Done Right》 ,另一本叫做 《Linear Algebra Done Wrong》
(https://www.math.brown.edu/~treil/papers/LADW/book.pdf),我比較喜歡的是Done Wrong這本書,第一它是免費的,第二只需要讀前6章兩百頁就夠了,第三它頁邊距很大,列印出來有很多空白做練習題,另外一個較好的教材是麻省理工公開課:線性代數,
不論如何,學線性代數一定要用國外的教材,千萬不要用國內的教材,啃英文書很累,但是考慮到之后還要啃更多的英文書,線性代數已經算是很入門的了,一定要啃下來,同時還要刷足夠多的課后題,
學完線性代數以后,一個自然而然的問題就是怎么能用計算機自己去計算矩陣的乘法、向量的乘法、向量的內積,因此引入了編程的學習,
Python 以及C/C++
不管同學的專業是什么,一定要在大學一年級盡早開始學編程,至于用哪種語言開始學習編程,我推薦Python,比較好的教材是麻省理工學院公開課:計算機科學及編程導論,比較好的Python開發學習環境是Anacoda (http://www.continuum.io/downloads),
熟悉Python以后,同學就可以開始玩玩Python的數值計算包Numpy,這個時候線性代數題基本上也刷的差不多,可以通過Numpy幫助自己解決線性代數問題了,
對任何人來說,Python是一把瑞士軍刀,你可以用他干很多東西,比如自動回復郵件、自動收集資訊,但是真要去造機器人,合適的工具并不是瑞士軍刀,而是C/C++這樣簡單粗暴的錘子和螺絲刀般的工具,在學習Python學到一定程度的時候(比如你聽說有一種叫做cython的東西),最好開始學習C,而且要強迫自己練習用C的一維陣列和指標來實作矩陣的加法、乘法、求逆等操作,之所以有高級的Python或者Java(不要問我Java哪里高級了)這些語言以后我們還需要去學C,是因為機器人上常用的不是完整的電腦,而是計算量有局限的嵌入式系統,嵌入式系統開發基本只能用C或者更低級的語言,
學習C我個人入門用的是清華大學出版的《C++語言程式設計》,雖然這個書標題是C++,但其實沒什么太大問題,不過國內的C語言教材都有個巨大的問題是不引導學生去用Linux,近年來更好的一個教材是http://songjinshan.com/akabook/zh/index.html,這個網站的教材非常好,因為他教育學生用Linux環境作為程式編譯的環境,而且還引入了一些計算機體系結構的介紹,
IT行業的程式員都會爭論高級語言和低級語言哪個好,Linux和Windows哪個好,而對于機器人工程師來說,從現在到可預見的未來里,C是最好的語言,Linux是最好的作業系統,這都毋庸置疑,甚至對于Linux的發行版該選哪個,我們都是很少有質疑的:Ubuntu(The leading OS for PC, tablet, phone and cloud),原因是機器人作業系統ROS(ROS.org | Powering the world’s robots)是基于Ubuntu開發的,因此在Ubuntu上運行最穩定,注意Ubuntu出了一個中文版叫做Kylin,個人感覺比較坑,建議大家不要裝中文版,Ubuntu 作為一個開源作業系統,總是在快速迭代,2016年8月比較穩定的版本是14.04和16.04,建議同學安裝14.04,
當你把C學得差不多,開始要學寫包含多個頭檔案的程式時,一定要同時學習makefile的知識,這時候要上網去搜“Makefile詳解”(Makefile詳解(超級好)_mingw吧)這篇文章看,
HTML和Javascript
我自己在大學一年級的時候還學習了HTML和Javascript,到大一結束的時候已經能夠熟練Javascript手寫一些動態頁面,我個人覺得HTML和Javascript也是機器人工程師必備的技術,而不只是軟體工程師的玩具,這是因為web技術實際上已經滲透到了編程的方方面面,
- 比如json開始是Javascript里的一種object定義的方式,但現在已經成為了一種很標準的資料互動、引數配置的格式,
- 另外AJAX能夠幫助初學者理解一定的網路技術原理,而網路技術也是機器人工程師必備的技能,再者,制作GUI(圖形用戶界面)是常規debug的辦法,而近年來一個流行的趨勢是用webkit嵌入程式用HTML和Javascript作為圖形界面的后端,而在機器人作業系統ROS(ROS.org | Powering the world’s robots)里,通過rosbridge可以非常方便地把機器人程式的資料傳遞到websocket上,這句話看不懂沒關系,
反正你知道學學HTML和Javascript很重要就是了,
更重要的是,HTML檔案背后的DOM (Document Object Model)深刻地體現了面向物件的思想,大學中的面向物件程式設計一般都講C++,在我看來應該講HTML和Javascript,這一點不細說了,如果同學們去學習HTML和Javascript,自然會體會到,學習HTML和Javascript比較好的資料是http://www.w3schools.com/,把網站左側的“Learn HTML”、“Learn CSS”、“Learn Javascript”和“Learn JQuery”學完就行,別的部分還有很多花哨的技術,沒有必要去學了,為了培養自己對Javascript的興趣,可以上three.js / examples跪著看看熱鬧,
數學之美
以上介紹的這些知識點、書和資料應該在大一期間就全部看完,然后利用大一的暑假好好鞏固這些知識,比如開始用HTML和Javascript做一個自己的個人主頁,刷一刷編程的題目,學用Python的奇技淫巧(比方說做一個自己的個人主頁),另外還可以抽時間學學數學知識,比如開始看看代數和離散數學,我大一的時候看到了兩篇文章,認識到了數學的重要性,一個是MIT的CV大牛林達華寫的[轉]MIT牛人解說數學體系,另一個是前Goolge研究員吳軍博士寫的《數學之美》(數學之美 (豆瓣)),當時林達華還在MIT讀博士,而《數學之美》還沒有成書,兩篇文章看完以后我感覺自己整個人對數學的認識上了一個新的層次,此后一直在注意提高自己的數學水平,幾年下來覺得收益很大,在之后的介紹里我還會多次強調需要學的數學知識和對應的教材,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/290104.html
標籤:其他
