日本在线看黄a美女久草|日本动漫亚洲在线一区|日韩人妻无码免费视频|A√有码中文字幕|日韩一级片视频热久久久|一区二区三区四区精品无码在线|亚洲AV成人无码一二三app|亚洲综合图片绯色|91极品人妻在线网站|国产成人精品一区二三区四区五区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能 正文
發(fā)私信給skura
發(fā)送

0

開(kāi)源機(jī)器人自學(xué)指南

本文作者: skura 2019-02-28 19:41
導(dǎo)語(yǔ):干貨滿(mǎn)滿(mǎn)

雷鋒網(wǎng)AI科技評(píng)論按,本文轉(zhuǎn)載自公眾號(hào)Nao,作者邱強(qiáng),AI 科技評(píng)論已獲授權(quán)。

我在Github上發(fā)起了一個(gè)開(kāi)源機(jī)器人學(xué)自學(xué)指南,地址是:https://github.com/qqfly/how-to-learn-robotics

第一版本放在公眾號(hào)里發(fā)出:

目錄

  • 零. 前前言

  • 一. 前言

  • 二. 先修知識(shí)

  • 三. 入門(mén)

  • 四. 實(shí)踐

  • 4.1 動(dòng)手

  • 4.2 Penn's Robotics Specialization

  • 4.3 ROS

  • 五. 進(jìn)階

  • 5.1 數(shù)學(xué)

  • 5.2 Modern Robotics

  • 5.3 控制

  • 5.4 運(yùn)動(dòng)規(guī)劃

  • 5.5 機(jī)器學(xué)習(xí)

  • 5.6 強(qiáng)化學(xué)習(xí)

  • 5.7 最新論文

  • 六. 勇者斗惡龍

  • 七. 參考文獻(xiàn)

零. 前前言

本文中含有不少公式,為了方便編輯,采用的是 Latex 格式書(shū)寫(xiě)。但是,Github Markdown 不支持 Latex,為了方便閱讀,建議采用 Chrome 瀏覽器,并安裝插件 TeX All the Things。安裝后,即可將網(wǎng)頁(yè)上的 Latex 公式轉(zhuǎn)換成大多數(shù)人能看懂的形式。

部分復(fù)雜的公式會(huì)用 在線LaTeX公式編輯器 轉(zhuǎn)換成圖片插入。

本教材寫(xiě)作時(shí)間很短,所以肯定有疏漏。因此放在這里作為一個(gè)開(kāi)源項(xiàng)目,大家可以隨時(shí)修改并提交 Pull Request;有問(wèn)題也可以提 issue。

一. 前言

RVBUST INC. 成立半年有余。面試過(guò)不少?gòu)氖聶C(jī)器人研究的小伙伴后,我發(fā)現(xiàn)一個(gè)問(wèn)題:絕大多數(shù)大陸的畢業(yè)的學(xué)生都不像是「科班出身」的。

當(dāng)然,如果僅從工作教育經(jīng)歷上看 —— 大部分畢業(yè)于機(jī)電、計(jì)算機(jī)專(zhuān)業(yè),甚至是研究機(jī)器人的實(shí)驗(yàn)室,有過(guò)機(jī)器人公司的工作經(jīng)歷 —— 這些人應(yīng)該都算是「專(zhuān)業(yè)選手」。

但是,從面試情況上看,絕大多數(shù)人都不具備機(jī)器人學(xué)的完整知識(shí)體系:畫(huà)電路板的小伙伴不知道怎么進(jìn)行機(jī)器人工作空間分析;設(shè)計(jì)機(jī)構(gòu)的小伙伴不知道怎么把動(dòng)力學(xué)用在控制上;做控制算法的小伙伴不知道什么的構(gòu)型空間(Configuration Space);做運(yùn)動(dòng)規(guī)劃的小伙伴不知道什么是Q-learning;做深度強(qiáng)化學(xué)習(xí)的小伙伴不知道學(xué)習(xí)到的控制指令要怎么讓實(shí)際機(jī)器人運(yùn)動(dòng)起來(lái)。

從我這幾年的學(xué)習(xí)經(jīng)歷上看,我是能理解這一現(xiàn)象的。博士剛?cè)雽W(xué)的時(shí)候,我接下了師兄的 SmartPal 機(jī)器人。靠著師兄的「祖?zhèn)鞔a」,也曾狐假虎威地在外賓面前做過(guò)一些演示:

開(kāi)源機(jī)器人自學(xué)指南


但是,當(dāng)我后來(lái)真正開(kāi)始看這些「祖?zhèn)鞔a」的時(shí)候,我發(fā)現(xiàn)實(shí)際發(fā)給機(jī)器人的只有幾個(gè)關(guān)節(jié)位置點(diǎn)而已。

「PID 在哪里???」

這是我當(dāng)時(shí)產(chǎn)生的最大疑問(wèn)。這個(gè)代碼邏輯跟我本科玩得四旋翼、智能車(chē)等都完全不一樣!

于是,拿著這個(gè)疑問(wèn),我在實(shí)驗(yàn)室問(wèn)了一圈,沒(méi)有得到答案。即使后來(lái),我選修了好幾門(mén)跟機(jī)器人相關(guān)的研究生課程。經(jīng)過(guò)一年的學(xué)習(xí),我還是沒(méi)有得到答案。

是的,作為國(guó)內(nèi)最早開(kāi)展機(jī)器人研究的院校之一,這里的機(jī)器人研究生課程只教我們?nèi)绾谓?DH 坐標(biāo)系,動(dòng)力學(xué)只是簡(jiǎn)單計(jì)算了一個(gè)平面三連桿。根本沒(méi)有涉及控制、軌跡規(guī)劃的內(nèi)容,甚至連運(yùn)動(dòng)學(xué)逆解也沒(méi)有要求大家計(jì)算。

據(jù)我所知,很多其他研究機(jī)構(gòu)也是如此,機(jī)器人學(xué)這塊還沒(méi)有形成完整的教學(xué)體系。所以,基本上學(xué)生都沒(méi)有接受過(guò)完整的機(jī)器人學(xué)系統(tǒng)教育,只有在做項(xiàng)目的時(shí)候通過(guò)自學(xué)掌握項(xiàng)目所需的內(nèi)容。這也就造就了一大批沒(méi)有算過(guò)機(jī)器人運(yùn)動(dòng)學(xué)逆解的機(jī)器人專(zhuān)業(yè)博碩士生。

當(dāng)然,并不是說(shuō)「運(yùn)動(dòng)學(xué)逆解」、「軌跡插補(bǔ)」之類(lèi)的知識(shí)有多難。我想強(qiáng)調(diào)的是,在大陸,一個(gè)學(xué)生只通過(guò)上課,無(wú)法掌握、甚至是無(wú)法接觸到這些機(jī)器人學(xué)中非?;A(chǔ)的知識(shí)。

當(dāng)然,這一情況在大陸比較普遍,而國(guó)外或者港臺(tái)高校畢業(yè)的學(xué)生,基本上都沒(méi)有這個(gè)問(wèn)題。國(guó)外或者港臺(tái)高校在機(jī)器人學(xué)這塊的教學(xué)體系相對(duì)比較完整,基本上大作業(yè)都會(huì)覆蓋主要的知識(shí)點(diǎn),并且大都要求編程實(shí)現(xiàn)。

雖然,大多數(shù)小伙伴都是「非科班出身」的,但是,根據(jù)我的經(jīng)驗(yàn),大陸的學(xué)生還是非常聰明的,基本只要得到一些簡(jiǎn)單的正確引導(dǎo),就能很快通過(guò)自學(xué)掌握這些知識(shí)。所以,我們不妨來(lái)看看「非科班出身」如何學(xué)習(xí)機(jī)器人學(xué)吧。

二. 先修知識(shí)

當(dāng)然,先修知識(shí)會(huì)隨著研究深度的變換而不同,尤其是數(shù)學(xué),數(shù)學(xué)就像是寫(xiě)輪眼,看同一個(gè)石碑,不同層次的「寫(xiě)輪眼」所看到的內(nèi)容也完全不同。

開(kāi)源機(jī)器人自學(xué)指南

但是,由于機(jī)器人學(xué)涉及面廣,不同方向所需要的基礎(chǔ)知識(shí)也完全不同,如果一開(kāi)始就陷入「先修知識(shí)」的泥潭中,可能就得不償失了。

所以,我認(rèn)為,可以先列一些真正必須掌握的先修知識(shí),其他的在后續(xù)相應(yīng)部分提及即可:

1.基本的英文:在機(jī)器人方面,目前基本上沒(méi)有非常合適的中文教材可以推薦。寫(xiě)得深入淺出的教材都是國(guó)外的,大家必須學(xué)會(huì)閱讀英文文獻(xiàn)。這個(gè)過(guò)程一開(kāi)始肯定是痛苦的,但是,基本上堅(jiān)持一個(gè)月就會(huì)習(xí)慣了。

2.學(xué)會(huì)使用 VPN。原因同上,基本上有用的資料都需要通過(guò) Goolge 或 Youtube 獲取。

3.線性代數(shù):所有的空間變換、機(jī)器人相關(guān)計(jì)算都依賴(lài)于線性代數(shù),甚至需要有一些基本的"線性空間"思維。對(duì)于線性代數(shù),我首推 Prof. Gilbert Strang 的《Linear Algebra》,在 Youtube 和網(wǎng)易公開(kāi)課上可以找到視頻。這門(mén)課一開(kāi)始就引導(dǎo)大家從空間的角度看待問(wèn)題,而不像國(guó)內(nèi)高校,只要強(qiáng)調(diào)如何計(jì)算。而且,網(wǎng)易公開(kāi)課上有中文字幕,對(duì)于初學(xué)者也還算友好。

4.微積分:機(jī)器人里,所有涉及到導(dǎo)數(shù)、積分、優(yōu)化的地方,都會(huì)有微積分的影子。所以,這門(mén)數(shù)學(xué)課也是一開(kāi)始就繞不開(kāi)的。我沒(méi)有太好的視頻推薦,不妨也看看 Gilbert Strange 的《微積分重點(diǎn)》?

5.理論力學(xué):機(jī)器人學(xué)就是每天與力打交道。但是一般機(jī)器人教材里都不會(huì)仔細(xì)推導(dǎo)空間變換、虛功原理、拉格朗日等力學(xué)理論,而且這些東西又相對(duì)抽象,很多初學(xué)者的自學(xué)過(guò)程就是被截殺在動(dòng)力學(xué)章節(jié)的。當(dāng)然,這部分我也沒(méi)有太好的推薦資料,學(xué)堂在線上有清華高云峰老師的《理論力學(xué)》公開(kāi)課,也可以參考一下。(但至少我當(dāng)年上他的課總是犯困)。

6.Matlab or Python:這兩個(gè)是非常容易上手,且非常方便數(shù)據(jù)可視化的編程語(yǔ)言。大家在學(xué)習(xí)機(jī)器人學(xué)的過(guò)程中,能非常容易地通過(guò)這類(lèi)腳本語(yǔ)言實(shí)現(xiàn)一些算法,從而用于驗(yàn)證自己的推導(dǎo)結(jié)果。當(dāng)然,這兩部分只要掌握基本的矩陣操作和可視化操作就可以了。其他更高級(jí)的用法可以之后再學(xué)習(xí)。Coursera 上很容易找到這兩門(mén)語(yǔ)言的入門(mén)課程 Matlab、Python。

7.控制理論:機(jī)器人學(xué)是離不開(kāi)控制的,但是機(jī)器人學(xué)教材一般不會(huì)過(guò)多介紹這塊。當(dāng)然,目前大多數(shù)工業(yè)機(jī)器人都還是使用比較簡(jiǎn)單的算法,但是,作為研究者,有必要了解一些基本的控制理論,例如 PID、狀態(tài)方程、可觀性、可控性、李雅普諾夫、最優(yōu)控制、一點(diǎn)點(diǎn)非線性控制與一點(diǎn)點(diǎn)智能控制等。這塊我基本是在學(xué)校上課,沒(méi)有太好的公開(kāi)課推薦,可以先試試學(xué)堂在線上的課程。

開(kāi)源機(jī)器人自學(xué)指南

8.數(shù)字電路與模擬電路:機(jī)器人是一門(mén)實(shí)踐科學(xué),只有當(dāng)你把你推導(dǎo)的公式寫(xiě)成代碼、并最終讓實(shí)際機(jī)器人按照你的想法動(dòng)起來(lái)的時(shí)候,才說(shuō)明你掌握了相關(guān)知識(shí)。數(shù)電模電的知識(shí)可以讓你對(duì)邏輯電路有個(gè)基本了解,不至于后面連為什么電機(jī)前面要加一個(gè)驅(qū)動(dòng)器都不知道;同時(shí),在身邊沒(méi)有實(shí)際機(jī)器人的情況下,自己搭個(gè)小電路做一些控制實(shí)驗(yàn)也是非常方便的。這塊知識(shí)可以隨便找本教材看看,例如我當(dāng)時(shí)上的是唐慶玉老師的教材。

9.一點(diǎn)點(diǎn)單片機(jī):要想制作簡(jiǎn)單的實(shí)驗(yàn)用控制電路,只有數(shù)電模電知識(shí)是不夠的,還要能將這些知識(shí)轉(zhuǎn)換成實(shí)際的電路,并且能將運(yùn)行代碼,那么就需要會(huì)單片機(jī)。對(duì)于單片機(jī),可以網(wǎng)上隨便買(mǎi)一些帶伺服電機(jī)控制教程的最小系統(tǒng)板,學(xué)學(xué) Arduino 或 STM32,當(dāng)然,如果能參加個(gè) RoboMaster 或者飛思卡爾智能車(chē)大賽什么的是最好了,可以對(duì)嵌入式的各個(gè)模塊有個(gè)基本了解。

10.Linux 和 C 語(yǔ)言:現(xiàn)在有了電路部分,我們需要將公式代碼變成電路指令,這就涉及嵌入式的編程了。這塊建議學(xué)一點(diǎn) C 語(yǔ)言。嵌入式對(duì) C 的要求其實(shí)并不高,隨便學(xué)點(diǎn)語(yǔ)法就夠了,例如《C語(yǔ)言入門(mén)》。但是,如果未來(lái)想做一些更加上層的工作,最好一開(kāi)始就把 C 學(xué)好。學(xué)編程,Linux 是個(gè)不錯(cuò)的選擇,所以,這時(shí)候,可以嘗試按照個(gè) Linux 系統(tǒng),在上面學(xué)習(xí) C 語(yǔ)言。

11.基本的3D設(shè)計(jì):在制作實(shí)驗(yàn)平臺(tái)的時(shí)候,經(jīng)常會(huì)遇到需要加工設(shè)計(jì)小零件的情況,這時(shí)候掌握一個(gè)3D設(shè)計(jì)軟件可以大大提高開(kāi)發(fā)速度,例如 SolidWorks 就是個(gè)不錯(cuò)的選擇。配合上 3D 打印機(jī)之類(lèi)的工具就可以實(shí)驗(yàn)快速原型設(shè)計(jì)了。(即使沒(méi)有 3D 打印機(jī),在網(wǎng)上也可以很容易找到 3D 打印服務(wù),把你設(shè)計(jì)的 3D 文件發(fā)過(guò)去就可以了)。

上面這些知識(shí),基本是一個(gè)自動(dòng)化專(zhuān)業(yè)或者機(jī)電專(zhuān)業(yè)大三學(xué)生應(yīng)該達(dá)到的水平。如果對(duì)上述幾部分有了基本了解,就可以開(kāi)始看機(jī)器人學(xué)的知識(shí)了。

三. 入門(mén)

對(duì)于入門(mén)部分,實(shí)際上就是了解如何讓一個(gè)工業(yè)機(jī)器人動(dòng)起來(lái)。這方面其實(shí)研究已經(jīng)非常成熟了,大家看上個(gè)世紀(jì)的教材就行,個(gè)人推薦的是 John Craig 的教材 《Introduction to Robotics: Mechanics and Control》[1],在 Youtube 和網(wǎng)易公開(kāi)課都可以找到斯坦福 Oussama Khatib 大神的視頻,基本與 Craig 的教材內(nèi)容相匹配。

開(kāi)源機(jī)器人自學(xué)指南

建議從 Craig 的教材開(kāi)始就看英文版本,Google 一下,很容易找到 PDF 版本。作為一本入門(mén)教材,Craig 的教材是相當(dāng)深入淺出的,配合著 Khatib 的視頻,可以快速掌握機(jī)器人學(xué)的基礎(chǔ)。

我常對(duì)剛?cè)雽W(xué)的師弟們說(shuō),「如果你把這本書(shū)的內(nèi)容掌握了,就已經(jīng)超過(guò)實(shí)驗(yàn)室絕大多數(shù)師兄師姐了?!?/p>

然而,真正把教材啃下來(lái)的并不多。

所以,我在這里要換個(gè)說(shuō)法了,「如果你把這本書(shū)的內(nèi)容掌握了,就可以勝任國(guó)內(nèi)絕大多數(shù)機(jī)器人公司的開(kāi)發(fā)工作了。」

// 在 Github 上,我有對(duì) Craig 書(shū)上的內(nèi)容進(jìn)行大概的梳理,在公眾號(hào)中就先省略了。

四. 實(shí)踐

看完 Craig 的書(shū)后,你應(yīng)該對(duì)工業(yè)機(jī)器人的原理有了一個(gè)大概的概念,但是,你缺乏實(shí)際動(dòng)手經(jīng)驗(yàn),不清楚如何將書(shū)上的東西應(yīng)用到實(shí)際機(jī)器人上。機(jī)器人畢竟是一個(gè)實(shí)踐性的學(xué)科,一直停留在理論,不僅無(wú)用、而且無(wú)趣。

4.1 動(dòng)手

如果是本科生的話,非常建議參加一些比賽,如 RoboMaster、飛思卡爾智能車(chē)大賽、電子設(shè)計(jì)大賽等;也可以加入學(xué)校的一些科技組織,例如清華的天空工廠。主要是熟悉各種電子電路、培養(yǎng)動(dòng)手能力。

但是,以我的觀察,很多科技比賽大牛,在理論學(xué)習(xí)上往往比較弱。這主要是因?yàn)榭萍急荣悘?qiáng)調(diào)的是系統(tǒng)能力,決定比賽結(jié)果的往往是一些小 tricks,而非理論知識(shí);而且,比賽容易讓人產(chǎn)生一種虛假的充實(shí)感,每天都很忙碌,但是可能只是在重復(fù)低級(jí)工作。這兩個(gè)原因很容易讓人陷入 local minima,無(wú)法在理論方面更進(jìn)一步。

所以,我有個(gè)不成熟的小建議。參加比賽和學(xué)生科技活動(dòng)的話,有過(guò)兩次完整的經(jīng)歷就夠了。之后應(yīng)該迅速將重點(diǎn)轉(zhuǎn)向理論學(xué)習(xí)。

如果身邊有可以玩的機(jī)器人硬件,也可以嘗試玩一玩,或者在 RobotStudio 里玩 ABB 的機(jī)器人。

4.2 Penn's Robotics Specialization

之后,不妨抽出幾個(gè)月時(shí)間,看看 Coursera 上賓夕法尼亞大學(xué)的 Robotics 專(zhuān)項(xiàng)課程。這個(gè)專(zhuān)項(xiàng)課程與機(jī)械臂或者工業(yè)機(jī)器人關(guān)系不大,但是由于機(jī)器人很多方面是相通的,所以非常建議看一看。

Aerial Robotics:這門(mén)課主要是介紹四旋翼無(wú)人機(jī)的控制問(wèn)題,其中的軌跡規(guī)劃、姿態(tài)描述、控制等對(duì)機(jī)械臂的學(xué)習(xí)非常有幫助。而且,這門(mén)課的作業(yè)質(zhì)量也非常高,提供了基于 Matlab 的數(shù)值仿真模塊,可以讓初學(xué)者直觀地看到自己代碼的控制效果。

Computational Motion Planning:這門(mén)課的水平感覺(jué)不如前一個(gè),但是通過(guò)這門(mén)課可以大概知道機(jī)器人里有 Motion Planning 這個(gè)方向,同時(shí)大作業(yè)也包括了手寫(xiě) A*、PRM、Potential Fileds 等基本的 Motion Planning 算法,同時(shí)大概了解一下 Collision Checking 的基本方法。

Mobility:這部分主要是介紹足式機(jī)器人的控制問(wèn)題。通過(guò)這門(mén)課,一方面可以大致了解足式機(jī)器人控制的發(fā)展脈絡(luò),這樣看起 Boston Dynamics 的視頻也不會(huì)那么一臉懵逼了。同時(shí),更重要的是,掌握機(jī)器人建模與控制的關(guān)系:一個(gè)簡(jiǎn)化的模型,也可能對(duì)控制起非常大幫助。

Perception:這門(mén)課質(zhì)量非常不錯(cuò),基本是介紹相機(jī)模型、多視幾何之類(lèi)的內(nèi)容。這方面內(nèi)容可以對(duì)大家未來(lái)從事 SLAM、3D 視覺(jué)、標(biāo)定等方面的研究非常有幫助。學(xué)完之后,大家就可以做出類(lèi)似《AR原理演示》文章中的效果了:https://v.qq.com/x/page/z0308y9971c.html

Estimation and Learning:這門(mén)課從高斯分布開(kāi)始,介紹了 Kalman Filter、Particle Filter 等在機(jī)器人狀態(tài)估計(jì)中非常有用的工具。而且,這門(mén)課的大作業(yè)會(huì)讓你從零開(kāi)始編寫(xiě) 2D 地圖重建的程序,你可以知道如何利用激光傳感器信息獲得下面這樣的 2D 地圖。

4.3 ROS

到現(xiàn)在為止,你對(duì)機(jī)器人的基礎(chǔ)知識(shí)有了一個(gè)比較完整的脈絡(luò),而且,也用 Matlab 實(shí)現(xiàn)了一些有趣的算法。但是,你發(fā)現(xiàn),機(jī)器人是一個(gè)非常大的系統(tǒng),作為初學(xué)者,不太可能從頭開(kāi)始一步步搭建機(jī)器人所需的各個(gè)算法模塊。這時(shí)候,你就應(yīng)該開(kāi)始擁抱偉大的開(kāi)源世界了。

很多人可能知道,有一個(gè)叫做機(jī)器人操作系統(tǒng)的開(kāi)源項(xiàng)目 (Robot Operating System, ROS)。

對(duì)于學(xué)習(xí) ROS,網(wǎng)上可能有不少教程了。但是,我感覺(jué),對(duì)于很多機(jī)電、自動(dòng)化方向的學(xué)生并不適合直接開(kāi)始看 ROS。因?yàn)樗麄內(nèi)狈镜?Linux、C++ 知識(shí)。所以,我推薦按照如下步驟進(jìn)行學(xué)習(xí):

  • Linux:如果完全沒(méi)有 Linux 開(kāi)發(fā)經(jīng)驗(yàn),我建議可以先安裝 Ubuntu 系統(tǒng),然后看 UNIX Tutorial for Beginners ,熟悉基本的 Linux 使用方法。

  • Github:ROS 的大多數(shù)項(xiàng)目都是托管在 Github 上的。所以,非常有必要學(xué)會(huì)使用 Github,學(xué)會(huì)用 git 管理自己的代碼。而且也可以為開(kāi)源項(xiàng)目做些修改。例如可以像我一樣只是刪除多余的分號(hào)。

  • C++ 基礎(chǔ):如果你沒(méi)有系統(tǒng)學(xué)習(xí)過(guò) C++,建議先把這部分補(bǔ)齊,因?yàn)?ROS 的主要代碼都是 C++ 實(shí)現(xiàn)的。這里,我推薦學(xué)堂在線上清華大學(xué)鄭莉老師的課程《C++語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》和《C++語(yǔ)言程序設(shè)計(jì)進(jìn)階》。當(dāng)然,學(xué)習(xí) C++ 的時(shí)候就可以在 Ubuntu 下進(jìn)行,安裝一個(gè) Visual Studio Code 是個(gè)不錯(cuò)的選擇。

  • 數(shù)據(jù)結(jié)構(gòu):其實(shí),上面的基礎(chǔ)已經(jīng)足夠你學(xué)習(xí) ROS 了,但是,為了未來(lái)的學(xué)習(xí),可以在適當(dāng)時(shí)候?qū)W習(xí)一些數(shù)據(jù)結(jié)構(gòu)的知識(shí)。數(shù)據(jù)結(jié)構(gòu)的話,我推薦學(xué)堂在線上清華鄧俊輝老師 《數(shù)據(jù)結(jié)構(gòu)(上)》與《數(shù)據(jù)結(jié)構(gòu)(下)》。

現(xiàn)在,你就可以大膽地去看 ROS 了。作為開(kāi)源項(xiàng)目,我認(rèn)為最好的教程就是官網(wǎng)的教程 ROS Tutorials。

首先,通過(guò) Beginner Level 和 Intermediate Level 了解 ROS 基本的通訊機(jī)制、學(xué)會(huì)使用 catkin、roslaunch、Rviz 等基本工具。

之后,就可以根據(jù)各自的研究興趣去看不同模塊了。

如果有條件,能夠配合一些 ROS 支持比較好的平臺(tái)進(jìn)行研究的話,可以大大提高學(xué)習(xí)速度。例如 TurtleBot、Baxter、Universal Robot 之類(lèi)的。(這就看每個(gè)人條件了。)

理論上,在 ROS 環(huán)境下,你可以從事絕大多少與實(shí)時(shí)控制無(wú)關(guān)的研究,如 SLAM、Navigation、Motion Planning 等。如果你從事的是更加底層的工作,(如控制器設(shè)計(jì)),目前 ROS 還無(wú)法勝任。(如果不清楚為什么,回顧一下實(shí)時(shí)操作系統(tǒng)、機(jī)器人控制方面的知識(shí))。

五. 進(jìn)階

至此,你已經(jīng)是一個(gè)不錯(cuò)的機(jī)器人工程師了。但是,如果你想從事研發(fā)工作,就需要學(xué)習(xí)更多專(zhuān)業(yè)知識(shí)。當(dāng)然,這部分就跟大家的研究方向關(guān)系比較密切了,我沒(méi)法一一細(xì)說(shuō)。只大概介紹一些。

另外,非常建議入手一本《Springer Handbook of Robotics》[2]。接觸一個(gè)新的領(lǐng)域時(shí),在 Handbook 里找到相應(yīng)的章節(jié),通過(guò)它了解基本的大綱,并利用提供的參考文獻(xiàn)快速補(bǔ)齊知識(shí)。

5.1 數(shù)學(xué)

這時(shí)候,你的數(shù)學(xué)基礎(chǔ)基本不允許你更進(jìn)一步了。所以,你需要補(bǔ)充數(shù)學(xué)知識(shí)。

  • 數(shù)值計(jì)算方法:很多時(shí)候,我們都是通過(guò)計(jì)算機(jī)來(lái)實(shí)現(xiàn)算法功能的,所以,你必須了解基本的數(shù)值計(jì)算方法,如數(shù)值微分、數(shù)值積分等。我沒(méi)有太好的公開(kāi)課資源可以推薦。

  • 凸優(yōu)化:這個(gè)世界很多問(wèn)題都不存在解析解,我們得用優(yōu)化方法來(lái)計(jì)算。所以,你必須了解如何建立優(yōu)化模型,并知道如何用代碼進(jìn)行求解。這里,我推薦 Stanford 的公開(kāi)課《Convex Optimization》

  • 李群李代數(shù):優(yōu)化方法經(jīng)常要使用梯度信息,但是,你發(fā)現(xiàn)很多時(shí)候你不知道怎么定義梯度。李群李代數(shù)是一個(gè)非常經(jīng)典的數(shù)學(xué)工具,可以非常方便描述 SO(3)、SE(3) 空間中的對(duì)象。到這里,你之前對(duì)于四元數(shù)、角速度之類(lèi)的疑問(wèn)將一掃而空。這部分的學(xué)習(xí)資料,我會(huì)在后面補(bǔ)充。

5.2 Modern Robotics

開(kāi)源機(jī)器人自學(xué)指南

李群李代數(shù)對(duì)于很多工科學(xué)生可能一時(shí)無(wú)法接受。這里,我推薦從 Modern Robotics 開(kāi)始,這是一本面向本科生的教材,非常淺顯。

你可以在網(wǎng)上找到它的所有信息,Coursera 上也有對(duì)應(yīng)的課程:《Modern Robotics》。

上完這門(mén)課,你能掌握旋量(Screw)這一全新的建模方式,同時(shí),你會(huì)發(fā)現(xiàn)機(jī)器人運(yùn)動(dòng)學(xué)、動(dòng)力學(xué)建模變得如此簡(jiǎn)單、干凈。

這時(shí)候,你已經(jīng)觸碰到了一點(diǎn)點(diǎn)李群李代數(shù)。之后就可以去看一些針對(duì)工科生的李群李代數(shù)教材,如《Notes on Differential Geometry and Lie Groups, I & II》

5.3 控制

這時(shí)候,你可能已經(jīng)嘗試搭建過(guò)一些機(jī)器人平臺(tái),了解了一些基本的控制理論。但是,你發(fā)現(xiàn)實(shí)際的機(jī)器人并不理想,動(dòng)力學(xué)模型可能非常不精確。于是,你需要做機(jī)器人的參數(shù)辨識(shí)。于是,你可以去看 Khalil 的教材《Modeling, identification and control of robots》[3]。其中,你需要了解各種濾波算法(計(jì)算加速度)、各種數(shù)值優(yōu)化算法。而且,如果需要對(duì)機(jī)器人的運(yùn)動(dòng)學(xué)參數(shù)進(jìn)行標(biāo)定,你會(huì)發(fā)現(xiàn)李群李代數(shù)可以非常方便地定義各種相關(guān)的雅可比。

現(xiàn)在,你有了一個(gè)相對(duì)精確的動(dòng)力學(xué)模型,但是你發(fā)現(xiàn),在給機(jī)器人控制器做軌跡規(guī)劃的時(shí)候,需要給出速度、加速度約束。你感覺(jué)這其中有什么不對(duì)。是的,機(jī)器人系統(tǒng)中實(shí)際上并不存在什么速度、加速度約束,我們所有的操作都是針對(duì)電機(jī)力矩的。也就是說(shuō),我們只有力矩約束。

那么,問(wèn)題來(lái)了:在力矩約束下,如何讓機(jī)器人實(shí)現(xiàn)最快的運(yùn)動(dòng)。于是你就入了最優(yōu)控制的坑。在這里,各種數(shù)值優(yōu)化方法將非常有用。

現(xiàn)在你能把單獨(dú)的一個(gè)機(jī)器人控制好了,但你發(fā)現(xiàn),機(jī)器人一旦跟環(huán)境發(fā)生接觸,只用機(jī)器人模型就不夠了。你需要對(duì)環(huán)境進(jìn)行建模。但是,環(huán)境是無(wú)法精確建模的。于是,你開(kāi)始學(xué)各種力控、阻抗控制之類(lèi)的內(nèi)容。相應(yīng)地、你就可以實(shí)現(xiàn)一些所謂協(xié)作機(jī)器人的功能了:《聽(tīng)說(shuō)現(xiàn)在協(xié)作機(jī)器人很火,所以我也做了1/7個(gè)

5.4 運(yùn)動(dòng)規(guī)劃

現(xiàn)在,你能讓機(jī)器人按照你的要求運(yùn)動(dòng)了。但是,你感覺(jué)機(jī)器人還是太難用了,必須人工指定經(jīng)過(guò)的路徑點(diǎn),否則機(jī)器人可能就會(huì)與環(huán)境發(fā)生碰撞。你想,有沒(méi)有可能讓機(jī)器人自己找到這些路徑點(diǎn)。

于是,你來(lái)到了運(yùn)動(dòng)規(guī)劃的領(lǐng)域。

當(dāng)然,一個(gè)很自然的想法是,有沒(méi)有可能直接構(gòu)建一個(gè)目標(biāo)函數(shù),用優(yōu)化的方法計(jì)算出需要的軌跡。但是,世界有時(shí)候并沒(méi)有那么可愛(ài)。運(yùn)動(dòng)規(guī)劃問(wèn)題常常是一個(gè)非凸問(wèn)題,無(wú)法直接求解。所以,對(duì)于機(jī)械臂,可以有各種 Sampling-based 算法;當(dāng)然,也有人將其近似成多個(gè)凸問(wèn)題進(jìn)行優(yōu)化求解,在比較簡(jiǎn)單的場(chǎng)景下效果還算不錯(cuò)。

運(yùn)動(dòng)規(guī)劃的大致介紹可以看我以前寫(xiě)過(guò)的文章:《運(yùn)動(dòng)規(guī)劃 | 簡(jiǎn)介篇》。

當(dāng)然,更詳細(xì)的介紹最好看教材,如《Principles of Robot Motion》[4] 和《Planning Algorithms》[5] 都是不錯(cuò)的教材。

另外,這部分一定要配合著編程來(lái)做。The Open Motion Planning Library 是個(gè)不錯(cuò)的參考,相信你在學(xué) ROS 的時(shí)候也或多或少了解過(guò)一些。

相信只要你理解得足夠深入,便會(huì)理解前面李群李代數(shù)的作用。例如:

(1)運(yùn)動(dòng)規(guī)劃是在 Configuration Space 里進(jìn)行的,而大多數(shù)常見(jiàn)機(jī)構(gòu)的 Configuration Space 都是一個(gè) Lie Group:多關(guān)節(jié)機(jī)器人的關(guān)節(jié)空間(Torus(n)),無(wú)人機(jī)(SE(3)),機(jī)器人末端操作物體的相關(guān)約束(SE(3))。于是,我們只要定義各種 Lie Group 的基本性質(zhì),就可以用統(tǒng)一的規(guī)劃算法來(lái)進(jìn)行規(guī)劃了。具體可以看 Ompl 里 State space 的使用。

(2)當(dāng)我們的規(guī)劃涉及到一些約束,如讓機(jī)器人末端保持水平(拿著一杯水)。一種方法是用傳統(tǒng)的方法。如 OpenRave 里的一個(gè)實(shí)現(xiàn):ConstraintPlanning - 在關(guān)節(jié)空間隨機(jī)采樣一個(gè)點(diǎn),然后投影到最近的任務(wù)空間上,之后用 Jacobian 迭代的方式將隨機(jī)點(diǎn)連接到 RRT 樹(shù)上。

開(kāi)源機(jī)器人自學(xué)指南

但是,我們可以從另一個(gè)角度看問(wèn)題。機(jī)器人的末端姿態(tài)就是一個(gè) SE(3) 李群。保持末端水平,可以認(rèn)為是一個(gè) R3 空間與 SO(2) 空間的半直積,這也是一個(gè)李群。于是,我們可以直接在李群內(nèi)或者 Tangent Space 上跑一個(gè) RRT,例如 Tangent Bundle RRT[6]與 AtlasRRT[7]

開(kāi)源機(jī)器人自學(xué)指南

5.5 機(jī)器學(xué)習(xí)

前面很多工作都是在做建模+辨識(shí)的工作。實(shí)際上還有一大類(lèi)工作是基于數(shù)據(jù)的,也即,給一個(gè)通用模型,用數(shù)據(jù)進(jìn)行學(xué)習(xí)擬合。也就是大家常說(shuō)的機(jī)器學(xué)習(xí)了。

對(duì)于此,我個(gè)人的學(xué)習(xí)路徑如下:

  • Coursera上吳恩達(dá)的《機(jī)器學(xué)習(xí)》,了解基本的機(jī)器學(xué)習(xí)內(nèi)容。

  • Geoffrey Hinton 的《Neural Networks for Machine Learning》,之前是在 Coursera 上看的,現(xiàn)在似乎只能在 Youtube 上找到了。這門(mén)課基本可以把幾種經(jīng)典的神經(jīng)網(wǎng)絡(luò)過(guò)一遍。

  • 各種開(kāi)源平臺(tái)。有了前面的基礎(chǔ),也在 Matlab 中實(shí)現(xiàn)過(guò)幾種經(jīng)典機(jī)器學(xué)習(xí)算法,你就可以去嘗試一些深度學(xué)習(xí)開(kāi)源平臺(tái)了,如 TensorFlow。做機(jī)器學(xué)習(xí)的人太多了,所以資料也非常多,在網(wǎng)上非常容易自學(xué)。

當(dāng)然,我們要知道,我們學(xué)機(jī)器學(xué)習(xí),并不是為了轉(zhuǎn)到 DL 方向上,而是用它來(lái)為機(jī)器人研究提供工具的:

  • 智能控制:相信學(xué)習(xí)過(guò)智能控制的小伙伴,應(yīng)該還記得小腦模型之類(lèi)的網(wǎng)絡(luò)在控制中的應(yīng)用;

  • 建模:對(duì)于一些不好建模的地方,有時(shí)候不妨試試機(jī)器學(xué)習(xí)的方法,例如,用神經(jīng)網(wǎng)絡(luò)擬合摩擦力;

  • 視覺(jué):機(jī)器人經(jīng)成需要跟視覺(jué)結(jié)合在一起,而 DL 在視覺(jué)領(lǐng)域發(fā)展迅速,有時(shí)候借用這一工具,可以非??斓卮罱▽?shí)驗(yàn)原型;

  • 強(qiáng)化學(xué)習(xí):這個(gè)下章介紹。

5.6 強(qiáng)化學(xué)習(xí)

如果研究過(guò)強(qiáng)化學(xué)習(xí),肯定會(huì)被其極簡(jiǎn)的理論所折服:所有的理論衍生自一個(gè) Bellman equation。而且,強(qiáng)化學(xué)習(xí)非常符合人的直覺(jué)。因此,很多人認(rèn)為強(qiáng)化學(xué)習(xí)是機(jī)器人的未來(lái)方向。

對(duì)此,我不做過(guò)多評(píng)論。我只大概介紹如何入門(mén)強(qiáng)化學(xué)習(xí)。

首先,就是看書(shū)。Sutton 的《Introduction to reinforcement learning》[8]可以說(shuō)是必讀圣經(jīng)了。

閱讀 Sutton 的書(shū),你可以一步步了解如何從最初的 Bellman 方程推導(dǎo)出 Dynamic Programming、Monte Carlo、TD Learning 等方法。

你知道了強(qiáng)化學(xué)習(xí)就是要通過(guò)不斷嘗試來(lái)學(xué)習(xí)得到一個(gè)從 State 到 Action 的查找表。

于是,你就想,有沒(méi)有可能簡(jiǎn)化這個(gè)查找表,于是,你知道了有 Function Approximation。如果這個(gè)近似函數(shù)是神經(jīng)網(wǎng)絡(luò),那么就是現(xiàn)在很火的 Deep Reinforcement Learing 了。

當(dāng)然,這些不重要。重要的是理解 Markov Decision Processes。你會(huì)發(fā)現(xiàn),它不僅可以用來(lái)解決運(yùn)動(dòng)規(guī)劃問(wèn)題(DP ≈ Dijkstra、Monte Carlo ≈ RRT),還可以用來(lái)解決任務(wù)規(guī)劃問(wèn)題。

5.7 最新論文

至此,你已經(jīng)能夠閱讀絕大多數(shù)最新的論文了。所以,你應(yīng)該關(guān)注類(lèi)似 RSS、ICRA、IROS 等相關(guān)會(huì)議,了解機(jī)器人領(lǐng)域的最新進(jìn)展;通過(guò) IJRR、TRO 等期刊學(xué)習(xí)最新的理論。

當(dāng)然,你也可以通過(guò) Google Scholar 訂閱相應(yīng)的關(guān)鍵詞,它會(huì)不定期將最新的論文推送到你的郵箱。

六. 勇者斗惡龍

開(kāi)源機(jī)器人自學(xué)指南

自此,你已經(jīng)知道了如何讓一個(gè)機(jī)器人動(dòng)起來(lái),并且深入掌握了研究機(jī)器人某一領(lǐng)域的知識(shí)。然后,你就像一個(gè)剛剛斬殺一只史萊姆的勇者一般,舉著寶劍,時(shí)刻準(zhǔn)備著將寶劍刺入惡龍的胸口。

但是,這時(shí)候有人跑過(guò)來(lái),往你頭上澆了一盆水:

現(xiàn)在隨便一個(gè)公司,花點(diǎn)錢(qián)請(qǐng)人畫(huà)個(gè)機(jī)器人圖紙,找工廠加工出來(lái),買(mǎi)些電機(jī)、減速器之類(lèi)的零部件,套上一個(gè)通用控制器就可以跑了。哪需要什么動(dòng)力學(xué)、最優(yōu)控制、運(yùn)動(dòng)規(guī)劃呀!

就連四大家,機(jī)器人建模用 DH 就夠了,最多做點(diǎn)運(yùn)動(dòng)學(xué)標(biāo)定、動(dòng)力學(xué)辨識(shí),更多精力放在了應(yīng)用集成上。哪需要什么李群李代數(shù)、凸優(yōu)化、強(qiáng)化學(xué)習(xí)呀!

「這世上哪兒有什么惡龍啊!」

然而,我想說(shuō)的是,就機(jī)器人這塊,只要工農(nóng)業(yè)這類(lèi)體力勞動(dòng)沒(méi)有實(shí)現(xiàn)完全的自動(dòng)化,惡龍就存在:

開(kāi)源機(jī)器人自學(xué)指南

當(dāng)你看到絕大多數(shù)機(jī)器人還是通過(guò)上面這樣的方式,一點(diǎn)點(diǎn)示教出來(lái)的,你會(huì)有強(qiáng)烈的感覺(jué):「這就是惡龍!」

開(kāi)源機(jī)器人自學(xué)指南

當(dāng)你看到世界上那么多機(jī)器人公司,有著各自形形色色、互不兼容的編程語(yǔ)言、示教器的時(shí)候,你會(huì)有強(qiáng)烈的感覺(jué):「這就是惡龍!」

開(kāi)源機(jī)器人自學(xué)指南

當(dāng)你看到還有非常多與你我同齡的人在工廠里做著重復(fù)、枯燥的工作的時(shí)候,你會(huì)有強(qiáng)烈的感覺(jué):「這就是惡龍!」

是的,在機(jī)器人領(lǐng)域,還有非常多惡龍。于是,你拿起劍,又興沖沖地上路了。

忽然你發(fā)現(xiàn),你之前學(xué)的都是如何殺死一個(gè)「真空中的球形龍」,你不知道應(yīng)該如何殺死一個(gè)真正的龍。

所以,你應(yīng)該繼續(xù)學(xué)習(xí)。去找更多的真實(shí)史萊姆練手,將之前學(xué)到的劍法應(yīng)用在實(shí)際戰(zhàn)場(chǎng)上。

后來(lái),你又遇到了新問(wèn)題,你之前的寶劍并不具有「工業(yè)級(jí)強(qiáng)度」:ROS 經(jīng)成崩、Oroscos的沒(méi)有處理 Eigen Alignment、沒(méi)有好用的 3D 傳感器、工業(yè)機(jī)器人不開(kāi)放底層接口等等。

于是,你意識(shí)到,你需要重新打造自己真正的寶劍。

但是,這不是你一個(gè)人可以做到的,你需要一個(gè)團(tuán)隊(duì),有人采煤、有人煉鋼、有人鍛造、有人磨刀……

這時(shí)候,不妨來(lái) RVBUST 看看。

七. 參考文獻(xiàn)

[1] John J. Craig. Introduction to Robotics: Mechanics and Control[M]. 1986.

[2] Siciliano, Bruno, and Oussama Khatib, eds. Springer handbook of robotics. Springer, 2016.

[3] Khalil, Wisama, and Etienne Dombre. Modeling, identification and control of robots. Butterworth-Heinemann, 2004.

[4] Choset, Howie M., et al. Principles of robot motion: theory, algorithms, and implementation. MIT press, 2005.

[5] LaValle, Steven M. Planning algorithms. Cambridge university press, 2006.

[6] Kim, Beobkyoon, et al. "Tangent bundle RRT: A randomized algorithm for constrained motion planning." Robotica 34.1 (2016): 202-225.

[7] Jaillet, Léonard, and Josep M. Porta. "Path planning with loop closure constraints using an atlas-based RRT." Robotics Research. Springer, Cham, 2017. 345-362.

[8] Sutton, Richard S., and Andrew G. Barto. Introduction to reinforcement learning. Vol. 135. Cambridge: MIT press, 1998.

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知

開(kāi)源機(jī)器人自學(xué)指南

分享:
相關(guān)文章
當(dāng)月熱門(mén)文章
最新文章
請(qǐng)?zhí)顚?xiě)申請(qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶(hù)安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說(shuō)