您正在使用IE低版浏览器,为了您的雷锋网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
                    人工智能 正文
                    发私信给王雪佩
                    发送

                    0

                    开源机器人自学指南

                    本文作者:王雪佩 2019-02-28 19:41
                    ?#21152;錚?#24178;货满满

                    雷锋网(公众号:雷锋网)AI科?#35745;?#35770;按,本文转载自公众号Nao,作者邱强,AI 科?#35745;?#35770;已获授权。

                    我在Github上发起了一个开源机器人学自学指南,地址是:https://github.com/qqfly/how-to-learn-robotics

                    第一版本放在公众号里发出:

                    目录

                    • 零. 前前言

                    • 一. 前言

                    • 二. 先修知识

                    • 三. 入门

                    • 四. ?#23548;?/p>

                    • 4.1 动手

                    • 4.2 Penn's Robotics Specialization

                    • 4.3 ROS

                    • 五. 进阶

                    • 5.1 数学

                    • 5.2 Modern Robotics

                    • 5.3 控制

                    • 5.4 运动规划

                    • 5.5 机器学习

                    • 5.6 强化学习

                    • 5.7 最新论文

                    • 六. 勇者斗恶龙

                    • 七. 参考?#21335;?/p>

                    零. 前前言

                    本文中含有不少公式,为了方便编辑,采用的是 Latex 格式书写。但是,Github Markdown 不支持 Latex,为了方便阅读,建议采用 Chrome 浏览器,并安?#23433;?#20214; TeX All the Things。安装后,即可将网页上的 Latex 公式转换成大多数人能看懂的形式。

                    部?#25351;?#26434;的公?#20132;?#29992; 在线LaTeX公式编辑器 转换成?#35745;?#25554;入。

                    本教材写作时间很短,所以肯定有疏漏。因此放在这里作为一个开源项目,大家可?#36816;?#26102;修改并提交 Pull Request;有问题也可以提 issue。

                    一. 前言

                    RVBUST INC. 成立半年有余。面试过不少从事机器人研究的小伙伴后,我发现一个问题:绝大多数大陆的毕业的学生都不像是「科班出身」的

                    当然,如果仅从工作教育经历上看 —— 大部分毕业于机电、计算机专业,甚至是研究机器人的实验室,有过机器人公司的工作经历 —— 这些人应该都算是「专业选手」。

                    但是,?#29992;?#35797;情况上看,绝大多数人都不具备机器人学的完整知识体系:画电路板的小伙伴不知道怎么进行机器人工作空间分析;设计机构的小伙伴不知道怎么把动力学用在控制上;做控制算法的小伙伴不知道什么的构型空间(Configuration Space);做运动规划的小伙伴不知道什么是Q-learning;做深度强化学习的小伙伴不知道学习到的控制指令要怎么让?#23548;?#26426;器人运动起来。

                    从我这?#25913;?#30340;学习经历上看,我是能理解这一现象的。博士刚入学的时候,?#21307;?#19979;了师兄的 SmartPal 机器人。靠着师兄的「祖传代码」,也曾狐假虎威地在外宾面前做过一些演示:

                    开源机器人自学指南


                    但是,当我后来真正开始看这些「祖传代码」的时候,我发现?#23548;?#21457;给机器人的只有几个关节位置点而?#36873;?/p>

                    「PID 在哪里???#20426;?/strong>

                    这是?#19994;?#26102;产生的最大疑问。这个代码逻辑跟我本科玩得四旋翼、智能车等都完全不一样!

                    于是,拿着这个疑问,我在实验室问了一圈,没有得到答案。即使后来,我选修了好几门跟机器人相关的研?#21487;?#35838;程。经过一年的学习,我还是没有得到答案。

                    是的,作为国内最早开展机器人研究的院校之一,这里的机器人研?#21487;?#35838;程只教我们如何建立 DH 坐标系,动力学只是简单计算了一个平面三连杆。根本没有涉及控制、轨迹规划的内容,甚至连运动学逆解也没有要求大家计算。

                    据我所知,很多其他研究机构也是如此,机器人学这块还没?#34892;?#25104;完整的教学体系。所以,基本上学生都没有接受过完整的机器人学系统教育,只有在做项目的时候通过自学掌握项目所需的内容。这也就造就了一大批没有算过机器人运动学逆解的机器人专业博硕?#21487;?/p>

                    当然,并不是说「运动学逆解」、「轨迹插补」之类的知识有多?#36873;?#25105;想强调的是,在大陆,一个学生只通过上课,无法掌握、甚至是无法接触到这些机器人学中非常基础的知识。

                    当然,这一情况在大陆比较普遍,而国外或者港台高校毕业的学生,基本上都没有这个问题。国外或者港台高校在机器人学这块的教学体系相对比较完整,基本上大作业都会覆盖主要的知识点,并且大?#23478;?#27714;编程实现。

                    虽然,大多数小伙伴都是「?#24378;?#29677;出身」的,但是,根据我的经验,大陆的学生还是非常聪明的,基本只要得到一些简单的正确引导,就能很快通过自学掌握这些知识。所以,我们不妨来看看「?#24378;?#29677;出身」如何学习机器人学吧。

                    二. 先修知识

                    当然,先修知识会随着研?#21487;?#24230;的变换而不同,尤其是数学,数学就像是写轮眼,看同一个石碑,不同层次的「写轮眼」所看到的内容也完全不同。

                    开源机器人自学指南

                    但是,由于机器人学涉及面广,不同方向所需要的基础知识也完全不同,如果一开始就陷入「先修知识」的泥潭中,可能就得不偿失了。

                    所以,我认为,可以先列一些真正必须掌握?#21335;?#20462;知识,其他的在后续相应部分提及即可:

                    1.基本的英文:在机器人方面,目前基本上没有非常合适的中?#24917;灘目?#20197;推荐。写得深入浅出的教材都是国外的,大家必须学会阅读英文?#21335;住?#36825;个过程一开始肯定是痛苦的,但是,基本上坚持一个月就会习惯了。

                    2.学会使用 VPN。原因同上,基本上有用的资料都需要通过 Goolge 或 Youtube 获取。

                    3.线?#28304;?#25968;:所有的空间变换、机器人相关计算?#23478;览?#20110;线?#28304;?#25968;,甚至需要有一些基本的"线性空间"思维。?#26434;?#32447;?#28304;?#25968;,我首推 Prof. Gilbert Strang 的《Linear Algebra》,在 Youtube 和网易公开课上可以?#19994;?#35270;频。这门课一开始就引导大家从空间的角度看待问题,而不像国内高校,只要强调如何计算。而且,网易公开课上有中文字幕,?#26434;?#21021;学者?#19981;?#31639;友好。

                    4.微积分:机器人里,所有涉及到导数、积分、优化的地方,都会有微积分的影子。所以,这门数学课也是一开始就绕不开的。我没有太好的视?#20302;?#33616;,不?#28872;?#30475;看 Gilbert Strange 的《微积分重点》?

                    5.理论力学:机器人学就是每天与力打交道。但是一般机器人教材里都不会仔细推导空间变换、虚功原理、拉格朗日等力学理论,而且这些东西又相对抽象,很多初学者的自学过程就是被截杀在动力学章节的。当然,这部分我也没有太好的推荐资料,学堂在线上有清华高?#21697;?#32769;师的《理论力学》公开课,也可以参考一下。(但至少?#19994;?#24180;上他的课总是犯困)。

                    6.Matlab or Python:这两个是非常容易上手,且非常方便数据可视化的编程语言。大家在学习机器人学的过程中,能非常容易地通过这类脚本语言实现一些算法,从而用于验证自己的推导结果。当然,这两部分只要掌握基本的矩阵操作和可视化操作就可以了。其他更高级的用法可以之后再学习。Coursera 上很容易?#19994;?#36825;两门语言的入门课程 Matlab、Python。

                    7.控?#35780;?#35770;:机器人学是离不开控制的,但是机器人学教材一般不会过多介绍这块。当然,目?#25353;?#22810;数工业机器人都还是使用比较简单的算法,但是,作为研究者,有必要了解一些基本的控?#35780;?#35770;,例如 PID、状态方程、可观性、可控性、李雅普诺夫、最优控制、一点点非线性控制与一点点智能控制等。这块我基本是在学校上课,没有太好的公开课推荐,可以先试试学堂在线上的课程。

                    开源机器人自学指南

                    8.数字电路与模拟电路:机器人是一门?#23548;?#31185;学,只有当你把你推导的公式写成代码、并最终让?#23548;?#26426;器人按照你?#21335;?#27861;动起来的时候,才?#24471;?#20320;掌握了相关知识。数电模电的知识可以让你对逻辑电路有个基本了解,不至于后面连为什么电机前面要加一个驱动器都不知道;同时,在身边没有?#23548;?#26426;器人的情况下,自己搭个小电路做一些控制实验也是非常方便的。这块知识可?#36816;?#20415;找本教?#30446;?#30475;,例如?#19994;?#26102;上的是唐庆玉老师的教材。

                    9.一点点单片机:要想制作简单的实验用控制电路,只有数电模电知识是不够的,还要能将这些知识转换成?#23548;?#30340;电路,并且能将运行代码,那么就需要会单片机。?#26434;?#21333;片机,可以网上随便买一些带伺服电机控制教程的最小系统板,学学 Arduino 或 STM32,当然,如果能参加个 RoboMaster 或者飞思卡尔智能车大赛什么的是最好了,可以对?#24230;?#24335;的各个模块有个基本了解。

                    10.Linux 和 C 语言:现在有了电路部分,我们需要将公式代码变成电路指令,这就涉及?#24230;?#24335;的编程了。这块建议学一点 C 语言。?#24230;?#24335;对 C 的要求其实并不高,随便学点语法就够了,例如《C语言入门》。但是,如果未来想做一些更加上层的工作,最好一开始就把 C 学好。学编程,Linux 是个不错的选择,所以,这时候,可以尝试按照个 Linux 系统,在上面学习 C 语言。

                    11.基本的3D设计:在制作实验?#25945;?#30340;时候,经常会遇到需要加工设计小零件的情况,这时候掌握一个3D设计软件可?#28304;?#22823;提高开发速度,例如 SolidWorks 就是个不错的选择。配合上 3D 打印机之类的工具就可以实验快速原型设计了。(即使没有 3D 打印机,在网上也可?#38498;?#23481;易?#19994;?3D 打印服务,把你设计的 3D 文件发过去就可以了)。

                    上面这些知识,基本是一个自动化专业或者机电专业大三学生应该达到的水平。如果对上述几部分有了基本了解,就可以开始看机器人学的知识了。

                    三. 入门

                    ?#26434;?#20837;门部分,?#23548;?#19978;就是了解如何让一个工业机器人动起来。这方面其实研究已经非常成熟了,大家看上个世纪的教材就行,个人推荐的是 John Craig 的教材 《Introduction to Robotics: Mechanics and Control》[1],在 Youtube 和网易公开课都可以?#19994;?#26031;坦福 Oussama Khatib 大神的视频,基本与 Craig 的教材内容相匹配。

                    开源机器人自学指南

                    建议从 Craig 的教材开始就看英文版本,Google 一下,很容易?#19994;?PDF 版本。作为一本入门教材,Craig 的教材是相当深入浅出的,配?#29486;?Khatib 的视频,可以快速掌握机器人学的基础。

                    ?#39029;?#23545;刚入学的师弟们说,「如果你把这本书的内容掌握了,就已经超过实验室绝大多数师兄师姐了。」

                    然而,真正把教?#30446;?#19979;来的并不多。

                    所以,我在这里要换个说法了,「如果你把这本书的内容掌握了,就可以胜任国内绝大多数机器人公司的开发工作了。」

                    // 在 Github 上,我有对 Craig 书上的内容进行大概的梳理,在公众号中就先省略了。

                    四. ?#23548;?/strong>

                    看完 Craig 的书后,你应该对工业机器人的原理有了一个大概的概念,但是,你缺乏?#23548;?#21160;手经验,不清楚如何将书上的东西应用到?#23548;?#26426;器人上。机器人毕竟是一个?#23548;?#24615;的学科,一直停留在理论,不仅无用、而且无趣。

                    4.1 动手

                    如果是本科生的话,非常建议参加一些比赛,如 RoboMaster、飞思卡尔智能车大赛、电子设计大赛等;也可以加入学校的一些科技组织,例如清华的天空工厂。主要是熟悉各种电子电路、培养动手能力。

                    但是,以我的观察,很多科技比赛大牛,在理论学习上往往比?#20808;酢?#36825;主要是因为科技比赛强调的是系统能力,决定比赛结果的往往是一些小 tricks,而非理论知识;而且,比赛容易让人产生一?#20013;?#20551;的充实?#26657;?#27599;天都很忙碌,但?#24378;?#33021;只是在重复低级工作。这两个原因很容易让人陷入 local minima,无法在理论方面更进一步。

                    所以,我有个不成熟的小建议。参加比赛和学生科技活动的话,有过两次完整的经历就够了。之后应该?#26438;?#23558;重点转向理论学习。

                    如果身边有可以玩的机器人硬件,也可以尝试玩一玩,或者在 RobotStudio 里玩 ABB 的机器人。

                    4.2 Penn's Robotics Specialization

                    之后,不妨抽出几个月时间,看看 Coursera 上宾夕法尼亚大学的 Robotics 专项课程。这个专项课程与机?#24403;?#25110;者工业机器人关系不大,但是由于机器人很多方面是相通的,所以非常建议看一看。

                    Aerial Robotics:这门课主要是介绍四旋翼无人机的控制问题,其中的轨迹规划、姿态描述、控制等对机?#24403;?#30340;学习非常有帮助。而且,这门课的作业质量也非常高,提供了基于 Matlab 的数值仿真模块,可以让初学者直观地看到自己代码的控制效果。

                    Computational Motion Planning:这门课的水平感觉不如前一个,但是通过这门课可?#28304;?#27010;知道机器人里有 Motion Planning 这个方向,同时大作业也包括了手写 A*、PRM、Potential Fileds ?#28982;?#26412;的 Motion Planning 算法,同时大概了解一下 Collision Checking 的基本方法。

                    Mobility:这部分主要是介绍足式机器人的控制问题。通过这门课,一方面可?#28304;?#33268;了解足式机器人控制的发展脉络,这样看起 Boston Dynamics 的视频也不会那么一脸懵逼了。同时,更重要的是,掌握机器人建模与控制的关系:一个简化的模型,也可能对控制起非常大帮助。

                    Perception:这门课质量非常不错,基本是介绍相机模型、多视几何之类的内容。这方面内容可以?#28304;?#23478;未来从事 SLAM、3D 视觉、标定等方面的研究非常有帮助。学完之后,大家就可以做出类似《AR原理演示》文章中的效果了:https://v.qq.com/x/page/z0308y9971c.html

                    Estimation and Learning:这门课从高斯分布开始,介绍了 Kalman Filter、Particle Filter 等在机器人状态估计中非常有用的工具。而且,这门课的大作业会让你从零开始编写 2D 地图重建的程序,你可以知道如何利用激光传感器信息获得下面这样的 2D 地图。

                    4.3 ROS

                    到现在为止,你对机器人的基础知识有了一个比较完整的脉络,而且,也用 Matlab 实现了一些有趣的算法。但是,你发现,机器人是一个非常大?#21335;?#32479;,作为初学者,不太可能从头开始一步步搭建机器人所需的各个算法模块。这时候,你就应该开始?#24403;按?#30340;开源世界了。

                    很多人可能知道,有一个叫做机器人操作系统的开源项目 (Robot Operating System, ROS)。

                    ?#26434;?#23398;习 ROS,网上可能有不少教程了。但是,我感觉,?#26434;?#24456;多机电、自动化方向的学生并不适?#29616;?#25509;开始看 ROS。因为他们缺乏基本的 Linux、C++ 知识。所以,我推荐按照如下步骤进行学习:

                    • Linux:如果完全没有 Linux 开发经验,我建议可以先安装 Ubuntu 系统,然后看 UNIX Tutorial for Beginners ,熟悉基本的 Linux 使用方法。

                    • Github:ROS 的大多数项目都是托管在 Github 上的。所以,非常有必要学会使用 Github,学会用 git 管理自己的代码。而且也可以为开源项目做些修改。例如可以像我一样只是删除多余的分号。

                    • C++ 基础:如果你没有系统学习过 C++,建议先把这部分补齐,因为 ROS 的主要代码都是 C++ 实现的。这里,我推荐学堂在线上清华大学郑莉老师的课程《C++语言程序设计基础》和《C++语言程序设计进阶》。当然,学习 C++ 的时候就可以在 Ubuntu 下进行,安装一个 Visual Studio Code 是个不错的选择。

                    • 数据结构:其实,上面的基础已经足够你学习 ROS 了,但是,为了未来的学习,可以在适当时候学习一些数据结构的知识。数据结构的话,我推荐学堂在线上清华邓俊辉老师 《数据结构(上)》与《数据结构(下)》。

                    现在,你就可?#28304;?#32966;地去看 ROS 了。作为开源项目,我认为最好的教程就是官网的教程 ROS Tutorials。

                    首先,通过 Beginner Level 和 Intermediate Level 了解 ROS 基本的通讯机制、学会使用 catkin、roslaunch、Rviz ?#28982;?#26412;工具。

                    之后,就可以根据各自的研究兴趣去看不同模块了。

                    如果有条件,能够配合一些 ROS 支持比较好的?#25945;?#36827;行研究的话,可?#28304;?#22823;提高学习速度。例如 TurtleBot、Baxter、Universal Robot 之类的。(这就看每个人条件了。)

                    理论上,在 ROS 环境下,你可?#28304;?#20107;绝大多少与实时控制无关的研究,如 SLAM、Navigation、Motion Planning 等。如果你从事的是更加底层的工作,(如控制器设计),目前 ROS 还无法胜任。(如果不清楚为什么,回顾一下实时操作系统、机器人控?#21697;?#38754;的知识)。

                    五. 进阶

                    至此,你已经是一个不错的机器人工程师了。但是,如果你想从事研发工作,就需要学习更多专业知识。当然,这部分就跟大家的研究方向关?#24403;?#36739;密切了,我没法一一?#26438;怠?#21482;大概介绍一些。

                    另外,非常建议入手一本《Springer Handbook of Robotics》[2]。接触一个新的领域时,在 Handbook 里?#19994;?#30456;应的章节,通过它了解基本的大纲,并利用提供的参考?#21335;?#24555;速补齐知识。

                    5.1 数学

                    这时候,你的数学基础基本不?#24066;?#20320;更进一步了。所以,你需要补充数学知识。

                    • 数值计算方法:很多时候,我们都是通过计算机来实现算法功能的,所以,你必须了解基本的数值计算方法,如数值微分、数值积分等。我没有太好的公开课资源可以推荐。

                    • 凸优化:这个世界很多问题都不存在解析解,我们得用优化方法来计算。所以,你必须了解如何建立优化模型,并知道如何用代码进行求解。这里,我推荐 Stanford 的公开课《Convex Optimization》

                    • 李群李代数:优化方法经常要使用梯度信息,但是,你发现很多时候你不知道怎么定义梯度。李群李代数是一个非常经典的数学工具,可以非常方便描述 SO(3)、SE(3) 空间中的对象。到这里,你之前?#26434;?#22235;元数、角速度之类的疑?#24335;?#19968;扫而空。这部分的学习资料,我会在后面补充。

                    5.2 Modern Robotics

                    开源机器人自学指南

                    李群李代数?#26434;?#24456;多工科学生可能一时无法接受。这里,我推荐从 Modern Robotics 开始,这是一本面向本科生的教材,非常浅显。

                    你可以在网上?#19994;?#23427;的所?#34892;?#24687;,Coursera 上也有?#26434;?#30340;课程:《Modern Robotics》。

                    上完这门课,你能掌握旋量(Screw)这一全新的建模方式,同时,你会发现机器人运动学、动力学建模变得如此简单、干净。

                    这时候,你已经触碰到了一点点李群李代数。之后就可以去看一些针对工科生的李群李代数教材,如《Notes on Differential Geometry and Lie Groups, I & II》

                    5.3 控制

                    这时候,你可能已经尝?#28304;?#24314;过一些机器人?#25945;ǎ?#20102;解了一些基本的控?#35780;?#35770;。但是,你发现?#23548;?#30340;机器人并不理想,动力学模型可能非常不精确。于是,你需要做机器人的参数辨识。于是,你可以去看 Khalil 的教材《Modeling, identification and control of robots》[3]。其中,你需要了解各种滤波算法(计算加速度)、各种数值优化算法。而且,如果需要对机器人的运动学参数进行标定,你会发现李群李代数可以非常方便地定义各种相关的雅可比。

                    现在,你有了一个相对精确的动力学模型,但是你发现,在给机器人控制器做轨迹规划的时候,需要给出速度、加速度约束。你感觉这其中有什么不对。是的,机器人系统中?#23548;?#19978;并不存在什?#27492;?#24230;、加速度约束,我们所有的操作都是针对电机力矩的。也就是说,我们只有力矩约束。

                    那么,问题来了:在力矩约束下,如何让机器人实现最快的运动。于是你就入了最优控制的?#21360;?#22312;这里,各种数值优化方法将非常有用。

                    现在你能把单独的一个机器人控制好了,但你发现,机器人一旦跟环境发生接触,只用机器人模型就不够了。你需要对环境进行建模。但是,环境是无法精确建模的。于是,你开始学各?#33267;?#25511;、阻抗控制之类的内容。相应地、你就可以实现一些所?#21483;?#20316;机器人的功能了:《听说现在协作机器人很火,所以我也做了1/7个

                    5.4 运动规划

                    现在,你能让机器人按照你的要求运动了。但是,你感觉机器人还是太难用了,必须人工指定经过的路径点,否则机器人可能就会与环境发生碰撞。你想,有没有可能让机器人自己?#19994;?#36825;些路径点。

                    于是,你来到了运动规划的领域。

                    当然,一个很自然?#21335;?#27861;是,有没有可能直接构建一个目标函数,用优化的方法计算出需要的轨迹。但是,世界有时候并没有那么可爱。运动规划问题常常是一个非凸问题,无法直接求解。所以,?#26434;?#26426;?#24403;郟?#21487;以有各种 Sampling-based 算法;当然,也有人将其近似成多个凸问题进行优化求解,在比较简单的场景下效果还算不错。

                    运动规划的大?#38470;?#32461;可以看我以前写过的文章:《运动规划 | 简介篇》。

                    当然,更详细的介绍最好看教材,如《Principles of Robot Motion》[4] 和《Planning Algorithms》[5] 都是不错的教材。

                    另外,这部分一定要配?#29486;?#32534;程来做。The Open Motion Planning Library 是个不错的参考,相信你在学 ROS 的时候?#19981;?#22810;或少了解过一些。

                    相信只要你理解得足够深入,便会理解前面李群李代数的作用。例如:

                    (1)运动规划是在 Configuration Space 里进行的,而大多数常见机构的 Configuration Space 都是一个 Lie Group:多关节机器人的关节空间(Torus(n)),无人机(SE(3)),机器人末端操作物体?#21335;?#20851;约束(SE(3))。于是,我们只要定义各种 Lie Group 的基本性质,就可以用统一的规划算法来进行规划了。具体可以看 Ompl 里 State space 的使用。

                    (2)当我们的规划涉及到一些约束,如让机器人末端保持水平(拿着一杯水)。一?#22336;?#27861;是用传统的方法。如 OpenRave 里的一个实现:ConstraintPlanning - 在关节空间随机采样一个点,然后投影?#38454;?#36817;的任务空间上,之后用 Jacobian 迭代的方式将随机点连接到 RRT 树上。

                    开源机器人自学指南

                    但是,我?#24378;梢源?#21478;一个角度看问题。机器人的末端姿态就是一个 SE(3) 李群。保持末端水平,可以认为是一个 R3 空间与 SO(2) 空间的半直积,这也是一个李群。于是,我?#24378;?#20197;直接在李群内或者 Tangent Space 上跑一个 RRT,例如 Tangent Bundle RRT[6]与 AtlasRRT[7]

                    开源机器人自学指南

                    5.5 机器学习

                    前面很多工作都是在做建模+辨识的工作。?#23548;?#19978;还有一大类工作是基于数据的,也即,给一个通用模型,用数据进行学习拟合。也就是大?#39029;?#35828;的机器学习了。

                    ?#26434;?#27492;,我个人的学习路?#24230;?#19979;:

                    • Coursera上吴恩达的《机器学习》,了解基本的机器学习内容。

                    • Geoffrey Hinton 的《Neural Networks for Machine Learning》,之前是在 Coursera 上看的,现在似乎只能在 Youtube 上?#19994;?#20102;。这门?#20301;?#26412;可以把几种经典的神经网络过一遍。

                    • 各种开源?#25945;ā?#26377;了前面的基础,也在 Matlab 中实现过几种经典机器学习算法,你就可以去尝试一些深度学习开源?#25945;?#20102;,如 TensorFlow。做机器学习的人太多了,所以资料也非常多,在网上非常容易自学。

                    当然,我们要知道,我们学机器学习,并不是为了转到 DL 方向上,而是用它来为机器人研究提供工具的:

                    • 智能控制:相信学习过智能控制的小伙伴,应该还记得小?#38405;?#22411;之类的网络在控制中的应用;

                    • 建模:?#26434;?#19968;些不好建模的地方,有时候不妨试试机器学习的方法,例如,用神经网络拟合摩擦力;

                    • 视觉:机器人经成需要跟视觉结合在一起,而 DL 在视觉领域发展?#26438;伲?#26377;时候借用这一工具,可以非常快地搭建实验原型;

                    • 强化学习:这个下章介绍。

                    5.6 强化学习

                    如果研究过强化学习,肯定会被其极简的理论所折服:所有的理论衍生自一个 Bellman equation。而且,强化学习非常符合人的?#26412;酢?#22240;此,很多人认为强化学习是机器人的未来方向。

                    ?#28304;耍?#25105;不做过多评论。我只大概介绍如何入门强化学习。

                    首先,就?#24378;?#20070;。Sutton 的《Introduction to reinforcement learning》[8]可?#36816;?#26159;必读圣经了。

                    阅读 Sutton 的书,你可以一步步了解如?#26410;?#26368;初的 Bellman 方程推导出 Dynamic Programming、Monte Carlo、TD Learning 等方法。

                    你知道了强化学习就是要通过不断尝试来学习得到一个从 State 到 Action 的查找表。

                    于是,你就想,有没有可能简化这个查找表,于是,你知道了有 Function Approximation。如果这个近似函数是神经网络,那么就是现在很火的 Deep Reinforcement Learing 了。

                    当然,这些不重要。重要的是理解 Markov Decision Processes。你会发现,它不仅可以用来解决运动规划问题(DP ≈ Dijkstra、Monte Carlo ≈ RRT),还可以用来解决任务规划问题。

                    5.7 最新论文

                    至此,你已经能够阅读绝大多数最新的论文了。所以,你应该关注类似 RSS、ICRA、IROS 等相关会议,了解机器人领域的最新进展;通过 IJRR、TRO 等期刊学习最新的理论。

                    当然,你也可以通过 Google Scholar 订?#21335;?#24212;的关键词,它会不定期将最新的论文推送到你的邮箱。

                    六. 勇者斗恶龙

                    开源机器人自学指南

                    ?#28304;耍?#20320;已经知道了如何让一个机器人动起来,并且深入掌握了研究机器人某一领域的知识。然后,你就像一个刚刚斩杀一只?#38450;?#22982;的勇者一般,举着宝剑,时刻准备着将宝剑刺入恶龙的胸口。

                    但是,这时候有人跑过来,往你头上浇了一盆水:

                    现在随便一个公司,花点钱请人画个机器人图?#21073;?#25214;工厂加工出来,买些电机、减速器之类的零部件,套上一个通用控制器就可以跑了。哪需要什么动力学、最优控制、运动规划?#21073;?/p>

                    就连四大家,机器人建模用 DH 就够了,最多做点运动学标定、动力学辨识,更多精力放在了应用集成上。哪需要什么李群李代数、凸优化、强化学习?#21073;?/p>

                    「这世上哪儿有什么恶龙啊!」

                    然而,我想说的是,就机器人这块,只要工农业这类体力?#25237;?#27809;有实现完全的自动化,恶龙就存在:

                    开源机器人自学指南

                    当你看到绝大多数机器人还是通过上面这样的方式,一点点示教出来的,你会有强烈的感觉:「这就是恶龙!」

                    开源机器人自学指南

                    当你看到世界上那么多机器人公司,有着各自形形色色、互不兼容的编程语言、示教器的时候,你会有强烈的感觉:「这就是恶龙!」

                    开源机器人自学指南

                    当你看?#20132;?#26377;非常多与你我同龄的人在工厂里做着重复、枯燥的工作的时候,你会有强烈的感觉:「这就是恶龙!」

                    是的,在机器人领域,还有非常多恶龙。于是,你拿起剑,?#20013;?#20914;冲地上路了。

                    忽然你发现,你之前学的都是如何杀死一个?#21018;?#31354;中的球形龙」,你不知道应该如何杀死一个真正的龙。

                    所以,你应该继续学习。去找更多的真实?#38450;襯妨?#25163;,将之前学到的剑法应用在?#23548;?#25112;场上。

                    后来,你又遇到了新问题,你之前的宝剑并不具有「工业级强度」:ROS 经成崩、Oroscos的没有处理 Eigen Alignment、没有好用的 3D 传感器、工业机器人不开放底层接口等等。

                    于是,你意识到,你需要重新打造自己真正的宝剑。

                    但是,这不是你一个人可以做到的,你需要一个团队,有人采煤、有人炼钢、有人锻造、有人磨刀……

                    这时候,不妨来 RVBUST 看看。

                    七. 参考?#21335;?/strong>

                    [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.

                    雷锋网版权文章,未经授权禁止转载。详情见转载须知

                    分享:
                    相关文章

                    文章点评:

                    表情
                    最新文章
                    请填写申请人资料
                    姓名
                    电话
                    邮箱
                    微信号
                    作品链接
                    个人简介
                    为了您的账户安全,请验证邮箱
                    您的邮箱还未验证,完成可获20积分哟!
                    请验证您的邮箱
                    完善账号信息
                    您的账号已经绑定,现在您可以设置密码以方便用邮箱登录
                    捷豹时时彩分分彩网站