久久精品无码视频|精产国品色情一二三区在线观看|国产性爱自拍视频|亚洲av韩国av|日韩美女一级AAA大片|少妇无码激情诱惑|日韩AV在线播放有码|一级黄片一级黄片|av上一页亲亲久草av|aaa在线观看国产做爱

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

0

開源機器人自學(xué)指南

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

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

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

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

目錄

  • 零. 前前言

  • 一. 前言

  • 二. 先修知識

  • 三. 入門

  • 四. 實踐

  • 4.1 動手

  • 4.2 Penn's Robotics Specialization

  • 4.3 ROS

  • 五. 進階

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

  • 5.2 Modern Robotics

  • 5.3 控制

  • 5.4 運動規(guī)劃

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

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

  • 5.7 最新論文

  • 六. 勇者斗惡龍

  • 七. 參考文獻

零. 前前言

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

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

本教材寫作時間很短,所以肯定有疏漏。因此放在這里作為一個開源項目,大家可以隨時修改并提交 Pull Request;有問題也可以提 issue。

一. 前言

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

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

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

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

開源機器人自學(xué)指南


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

「PID 在哪里???」

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

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

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

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

當(dāng)然,并不是說「運動學(xué)逆解」、「軌跡插補」之類的知識有多難。我想強調(diào)的是,在大陸,一個學(xué)生只通過上課,無法掌握、甚至是無法接觸到這些機器人學(xué)中非?;A(chǔ)的知識。

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

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

二. 先修知識

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

開源機器人自學(xué)指南

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

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

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

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

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

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

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

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

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

開源機器人自學(xué)指南

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

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

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

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

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

三. 入門

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

開源機器人自學(xué)指南

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

我常對剛?cè)雽W(xué)的師弟們說,「如果你把這本書的內(nèi)容掌握了,就已經(jīng)超過實驗室絕大多數(shù)師兄師姐了。」

然而,真正把教材啃下來的并不多。

所以,我在這里要換個說法了,「如果你把這本書的內(nèi)容掌握了,就可以勝任國內(nèi)絕大多數(shù)機器人公司的開發(fā)工作了?!?/p>

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

四. 實踐

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

4.1 動手

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

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

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

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

4.2 Penn's Robotics Specialization

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

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

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

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

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

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

4.3 ROS

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

很多人可能知道,有一個叫做機器人操作系統(tǒng)的開源項目 (Robot Operating System, ROS)。

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

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

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

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

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

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

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

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

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

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

五. 進階

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

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

5.1 數(shù)學(xué)

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

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

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

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

5.2 Modern Robotics

開源機器人自學(xué)指南

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

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

上完這門課,你能掌握旋量(Screw)這一全新的建模方式,同時,你會發(fā)現(xiàn)機器人運動學(xué)、動力學(xué)建模變得如此簡單、干凈。

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

5.3 控制

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

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

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

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

5.4 運動規(guī)劃

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

于是,你來到了運動規(guī)劃的領(lǐng)域。

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

運動規(guī)劃的大致介紹可以看我以前寫過的文章:《運動規(guī)劃 | 簡介篇》。

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

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

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

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

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

開源機器人自學(xué)指南

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

開源機器人自學(xué)指南

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

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

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

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

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

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

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

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

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

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

  • 強化學(xué)習(xí):這個下章介紹。

5.6 強化學(xué)習(xí)

如果研究過強化學(xué)習(xí),肯定會被其極簡的理論所折服:所有的理論衍生自一個 Bellman equation。而且,強化學(xué)習(xí)非常符合人的直覺。因此,很多人認為強化學(xué)習(xí)是機器人的未來方向。

對此,我不做過多評論。我只大概介紹如何入門強化學(xué)習(xí)。

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

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

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

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

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

5.7 最新論文

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

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

六. 勇者斗惡龍

開源機器人自學(xué)指南

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

但是,這時候有人跑過來,往你頭上澆了一盆水:

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

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

「這世上哪兒有什么惡龍?。 ?/strong>

然而,我想說的是,就機器人這塊,只要工農(nóng)業(yè)這類體力勞動沒有實現(xiàn)完全的自動化,惡龍就存在:

開源機器人自學(xué)指南

當(dāng)你看到絕大多數(shù)機器人還是通過上面這樣的方式,一點點示教出來的,你會有強烈的感覺:「這就是惡龍!」

開源機器人自學(xué)指南

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

開源機器人自學(xué)指南

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

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

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

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

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

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

但是,這不是你一個人可以做到的,你需要一個團隊,有人采煤、有人煉鋼、有人鍛造、有人磨刀……

這時候,不妨來 RVBUST 看看。

七. 參考文獻

[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)載。詳情見轉(zhuǎn)載須知。

開源機器人自學(xué)指南

分享:
相關(guān)文章
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄