(七)Robotics学习路径
1. 初阶
顺序 | 资源 | 知识分类/使用方法 | 推荐指数 | 链接和介绍 |
了解如何让一个工业机器人动起来 | ||||
1 | 《Introduction to Robotics: Mechanics and Control》by John Craig | 【大局观】 这本书很难啃,先粗略看一遍,之后再重复读。和2配合一起学 | 4 | 英文版: https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgtrWHuwYokNS8uwQ.pdf中文版 https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgtrWHuwYosJmhkAU.pdf「如果你把这本书的内容掌握了,就已经超过实验室绝大多数师兄师姐了。」然而,真正把教材啃下来的并不多。所以,我在这里要换个说法了,「如果你把这本书的内容掌握了,就可以胜任国内绝大多数机器人公司的开发工作了。」 == 个人推荐的是 John Craig 的教材 《Introduction to Robotics: Mechanics and Control》[1],在 Youtube 和网易公开课都可以找到斯坦福 Oussama Khatib 大神的视频,基本与 Craig 的教材内容相匹配。 == 是本老教材了,也是介绍机械臂类型机器人的经典入门读物。里面的知识都比较基础,可以用来扫盲(这里的“基础”不是指简单,如果你没有更基础的知识储备,比如理论力学、控制理论,可能还是不懂)。如果英文不好可以看中文版:《机器人学导论》。 == 这本书由John J. CrAIg撰写,已经更新到第四版,是机器人学和控制领域的经典课本。它从基本的力学概念讲起,逐渐引入控制理论,使读者能够逐步建立起对机器人系统的深入理解。 |
2 | Stanford课程 Oussama Khatib for Introduction to Robotics (CS223A) | 【大局观】 和1配合一起学 | 1 | https://www.youtube.com/watch?v=0yD3uBshJB0&list=PL64324A3B147B5578 个人推荐的是 John Craig 的教材 《Introduction to Robotics: Mechanics and Control》,基本与 Craig 的教材内容相匹配。 |
3 | A Mathematical Introduction to Robotic Manipulation 机器人操作的数学导论 | 【数学】 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAguLWHuwYo1IDv-wM.pdf 作者之一是李泽湘,他在机器人圈子中几乎无人不知,学术和商业上做的都比较成功。他有一个学生比较有名,就是大疆的创始人汪涛,李同时也是固高自动化的老板。该书在微分几何的基础上展开,对初学者可能有些难。我是一边看微分几何入门一边看这本书,用了一年多才慢慢理解了,虽然还算经典但不适合入门。如果你英文不好可以看中文版:《机器人操作的数学导论》。随书也附带了一个旋量软件包 Screws,可以用来建立机器人运动学模型,不过这个软件包是用 Mathematica 软件编写的。 == 讲的很全面也很清晰看的过程中顺便可以复习复习高等线性代数 |
4 | Principles of Robot Motion Theory, Algorithms, and Implementations | 【运动规划】 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAguLWHuwYouJ623QM.pdf 主要讲移动机器人的运动规划,也有一部分机械臂最优轨迹规划,比较基础。该书的特点是包含一些简单的例子,有助于读者理解,我比较推荐。 |
5 | Robook 机器人手册 | 【查缺补漏】 | 1 | https://www.robook.org/docs/handbook/intro_handbook Robook是一份面向对机器人感兴趣的新生的机器人扫盲手册和攻略手册. Robook致力于编辑、汇总南科大机器人方向入门、成长所必须的各种资料, 让更多对机器人感兴趣的人了解、深入这一领域. 手册中既包括机器人学科的学习路线建议,也涵盖在南科大做机器人如何打怪升级的建议和经验. Robook由南科大学生贡献和总结,我们希望通过这个手册, 将我们学到的知识传递下去,为南科大工程师文化在学生群体中的建立提供一个平台. |
顺序 | 资源 | 知识分类/使用方法 | 推荐指数 | 链接和介绍 |
1 | ROS 机器人操作系统的开源项目 (Robot Operating System, ROS) | 【实战】 | 7 | ROS Tutorials https://wiki.ros.org/ROS/Tutorials 《ROS机器人程序设计》 https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg07eHuwYovJy-nwE.pdf Robotics by ColumbiaXatedxorg https://www.edx.org/learn/robotics/columbia-university-robotics 到现在为止,你对机器人的基础知识有了一个比较完整的脉络,而且,也用 Matlab 实现了一些有趣的算法。但是,你发现,机器人是一个非常大的系统,作为初学者,不太可能从头开始一步步搭建机器人所需的各个算法模块。这时候,你就应该开始拥抱伟大的开源世界了。 对于学习 ROS,网上可能有不少教程了。但是,我感觉,很多机电、自动化方向的学生并不适合直接开始看 ROS。因为他们缺乏基本的 Linux、C++ 知识。所以,我推荐按照如下步骤进行学习: Linux:如果完全没有 Linux 开发经验,我建议可以先安装 Ubuntu 系统,然后看UNIX Tutorial for Beginners (http://www.ee.surrey.ac.uk/Teaching/Unix/),熟悉基本的 Linux 使用方法。 Github:ROS 的大多数项目都是托管在Github 上的。所以,非常有必要学会使用 Github,学会用 git 管理自己的代码。而且也可以为开源项目做些修改。例如可以像我一样只是删除多余的分号(https://github.com/stack-of-tasks/pinocchio/pull/672)。 C++ 基础:如果你没有系统学习过 C++,建议先把这部分补齐,因为 ROS 的主要代码都是 C++ 实现的。这里,我推荐学堂在线上清华大学郑莉老师的课程《C++语言程序设计基础》(http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043X_2015_T2+sp/about)和《C++语言程序设计进阶》(http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043_2x_2015_T2+sp/about)。当然,学习 C++ 的时候就可以在 Ubuntu 下进行,安装一个Visual Studio Code(https://code.visualstudio.com/) 是个不错的选择。 数据结构:其实,上面的基础已经足够你学习 ROS 了,但是,为了未来的学习,可以在适当时候学习一些数据结构的知识。数据结构的话,我推荐学堂在线上清华邓俊辉老师《数据结构(上)》(http://www.xuetangx.com/courses/course-v1:TsinghuaX+30240184+sp/about)与《数据结构(下)》(http://www.xuetangx.com/courses/course-v1:TsinghuaX+30240184_2X+sp/about)。 现在,你就可以大胆地去看 ROS 了。作为开源项目,我认为最好的教程就是官网的教程ROS Tutorials(https://wiki.ros.org/ROS/Tutorials)。 首先,通过 Beginner Level 和 Intermediate Level 了解 ROS 基本的通讯机制、学会使用 catkin、roslaunch、Rviz 等基本工具。 之后,就可以根据各自的研究兴趣去看不同模块了。如果有条件,能够配合一些 ROS 支持比较好的平台进行研究的话,可以大大提高学习速度。例如 TurtleBot、Baxter、Universal Robot 之类的。(这就看每个人条件了。) |
2 | Springer Handbook of Robotics | 【工具书】 | 2 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg17eHuwYosJ2SwAc.pdf 是部百科全书似的大部头,各章都是杰出人才写的自己拿手研究领域的基础内容。 |
3 | 学习SLAM | 【SLAM】 SLAM是Simultaneous localization and mapping缩写,意为“同步定位与建图”,主要用于解决机器人在未知环境运动时的定位与地图构建问题 | N/A | 《视觉SLAM十四讲》 https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg17eHuwYo2tf96gI.pdf 《视觉SLAM十四讲:从理论到实践》系统介绍了视觉SLAM(同时定位与地图构建)所需的基本知识与核心算法,既包括数学理论基础,如三维空间的刚体运动、非线性优化,又包括计算机视觉的算法实现,例如多视图几何、回环检测等。此外,还提供了大量的实例代码供读者学习研究,从而更深入地掌握这些内容。 == 这个不应该还要介绍吧,几乎学习移动机器人SLAM的同学都人手一本吧,极力推荐。 《Probabilistic Robotics概率机器人》 https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg1LeHuwYovbH4jQc.pdf https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg07eHuwYo8pvqrAM.pdf 《概率机器人》对概率机器人学这一新兴领域进行了全面的介绍。概率机器人学依赖统计技术表示信息和进行决策,以容纳当今大多数机器人应用中必然存在的不确定性,是机器人学的一个分支。它依赖统计技术表示信息和制定决策。这样做,可以接纳在当今大多数机器人应用中引起的不确定性。本书主要专注于算法,对于每种算法,均提供了四项内容:伪码示例;完整的数学推导;实验结果;算法优缺点的详细讨论。 |
4 | Penn's Robotics Specialization | 【实战】【Matlab】 | 2 | https://www.coursera.org/specializations/robotics 在此之后,不妨抽出几个月时间,看看 Coursera 上宾夕法尼亚大学的 Robotics 专项课程。这个专项课程与机械臂或者工业机器人关系不大,但是由于机器人很多方面是相通的,所以非常建议看一看。 Aerial Robotics:这门课主要是介绍四旋翼无人机的控制问题,其中的轨迹规划、姿态描述、控制等对机械臂的学习非常有帮助。而且,这门课的作业质量也非常高,提供了基于 Matlab 的数值仿真模块,可以让初学者直观地看到自己代码的控制效果。 Computational Motion Planning:这门课的水平感觉不如前一个,但是通过这门课可以大概知道机器人里有 Motion Planning 这个方向,同时大作业也包括了手写 A*、PRM、Potential Fileds 等基本的 Motion Planning 算法,同时可以大概了解一下 Collision Checking 的基本原理。 Mobility:这部分主要是介绍足式机器人的控制问题。通过这门课,一方面可以大致了解足式机器人控制的发展脉络,这样看起 Boston Dynamics 的视频也不会那么一脸懵逼了。同时,更重要的是,掌握机器人建模与控制的关系:一个简化的模型,也可能对控制起非常大帮助。 Perception:这门课质量非常不错,基本是介绍相机模型、多视几何之类的内容。这方面内容可以对大家未来从事 SLAM、3D 视觉、标定等方面的研究非常有帮助。学完之后,大家就可以做出类似《AR原理演示》文章中的效果了: Estimation and Learning:这门课从高斯分布开始,介绍了 Kalman Filter、Particle Filter 等在机器人状态估计中非常有用的工具。而且,这门课的大作业会让你从零开始编写 2D 地图重建的程序,你可以知道如何利用激光传感器信息获得下面这样的 2D 地图。 == UPenn的Robotics的课我听过lecture特别短知识点都是蜻蜓点水python在robotics里面经常用到建议学一下 |
5 | Awesome Robotics | 【资源汇总】 | 1 | |
6 | Awesome Robotics Libraries | 【资源汇总】 | 1 | |
7 | 阿莫电子论坛 | 【论坛】 | 1 | https://www.amobbs.com/forum-3020-1.html |
8 | 参加一些小比赛 | 【竞赛】 | 1 | 如 RoboMaster、飞思卡尔智能车大赛、电子设计大赛等;也可以加入学校的一些科技组织,例如清华的天空工厂。主要是熟悉各种电子电路、培养动手能力。但是,以我的观察,很多科技比赛大牛,在理论学习上往往比较弱。这主要是因为科技比赛强调的是系统能力,决定比赛结果的往往是一些小 tricks,而非理论知识;而且,比赛容易让人产生一种虚假的充实感,每天都很忙碌,但是可能只是在重复低级工作。这两个原因很容易让人陷入 local minima,无法在理论方面更进一步。 所以,我有个不成熟的小建议:参加比赛和学生科技活动的话,有过两次完整的经历就够了。之后应该迅速将重点转向理论学习。 |
9 | 项目实战 | 【实战】 | 1 |
|
顺序 | 资源 | 知识分类/使用方法 | 推荐指数 | 链接和介绍 |
1 | 数学 | 【数学】 | N/A | 这时候,你的数学基础基本不允许你更进一步了。所以,你需要补充数学知识。 数值计算方法:很多时候,我们都是通过计算机来实现算法功能的,所以,你必须了解基本的数值计算方法,如数值微分、数值积分等。这部分可以看《Numerical Methods for Engineers》[3] 凸优化:这个世界很多问题都不容易找到解析解,我们得用优化方法来计算。所以,你必须了解如何建立优化模型,并知道如何用代码进行求解。这里,我推荐 Stanford 的公开课《Convex Optimization》(https://lagunita.stanford.edu/courses/Engineering/CVX101/Winter2014/about) 李群李代数:优化方法经常要使用梯度信息,但是,你发现很多时候你不知道怎么定义梯度。李群李代数是一个非常经典的数学工具,可以非常方便地描述 SO(3)、SE(3) 空间中的对象。到这里,你之前对于四元数、角速度之类的疑问将一扫而空。这部分的学习资料,我会在后面补充。 |
2 | Modern Robotics | 【Modern Robotics】 | 1 | Coursera Modern Robotics: Mechanics, Planning, and Control Specialization https://www.coursera.org/specializations/modernrobotics 《Notes on Differential Geometry and Lie Groups, I & II》 李群李代数对于很多工科学生可能一时无法接受。这里,我推荐从 Modern Robotics 开始,这是一本面向本科生的教材,非常浅显。 你可以在网上(http://hades.mech.northwestern.edu/index.php/Modern_Robotics)找到它的所有信息,Coursera 上也有对应的课程:《Modern Robotics》(https://www.coursera.org/specializations/modernrobotics)。 上完这门课,你能掌握旋量(Screw)这一全新的建模方式,同时,你会发现机器人运动学、动力学建模变得如此简单、干净。 这时候,你已经触碰到了一点点李群李代数。之后就可以去看一些针对工科生的李群李代数教材,如《Notes on Differential Geometry and Lie Groups, I & II》(http://www.cis.upenn.edu/~jean/gbooks/manif.html) |
3 | 《Modeling, identification and control of robots》 | 【控制】 | 1 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg4bqHuwYokpat-wM.pdf 这时候,你可能已经尝试搭建过一些机器人平台,了解了一些基本的控制理论。但是,你发现实际的机器人并不理想,动力学模型可能非常不精确。于是,你需要做机器人的参数辨识。于是,你可以去看 Khalil 的教材《Modeling, identification and control of robots》[4]。其中,你需要了解各种滤波算法(计算加速度)、各种数值优化算法。而且,如果需要对机器人的运动学参数进行标定,你会发现李群李代数可以非常方便地定义各种相关的雅可比。 现在,你有了一个相对精确的动力学模型,但是你发现,在给机器人控制器做轨迹规划的时候,需要给出速度、加速度约束。你感觉这其中有什么不对。是的,机器人系统中实际上并不存在什么速度、加速度约束,我们所有的操作都是针对电机力矩的。也就是说,我们只有力矩约束。 那么,问题来了:在力矩约束下,如何让机器人实现最快的运动。于是你就入了最优控制的坑。在这里,各种数值优化方法将非常有用。 现在你能把单独的一个机器人控制好了,但你发现,机器人一旦跟环境发生接触,只用机器人模型就不够了。你需要对环境进行建模。但是,环境是无法精确建模的。于是,你开始学各种力控、阻抗控制之类的内容。相应地、你就可以实现一些所谓协作机器人的功能了 |
4 | 《Principles of Robot Motion》[5] 和《Planning Algorithms》 | 【运动规划】 | 1 | Principles of Robot Motion https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg4bqHuwYo2Naq7AY.pdfPlanning Algorithms https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg4bqHuwYoq7D89wY.pdf 现在,你能让机器人按照你的要求运动了。但是,你感觉机器人还是太难用了,必须人工指定经过的路径点,否则机器人可能就会与环境发生碰撞。你想,有没有可能让机器人自己找到这些路径点。 于是,你来到了运动规划的领域。 当然,一个很自然的想法是,有没有可能直接构建一个目标函数,用优化的方法计算出需要的轨迹。但是,世界有时候并没有那么可爱。运动规划问题常常是一个非凸问题,无法优化直接求解。所以,对于机械臂,可以有各种 Sampling-based 算法;当然,也有人将其近似成多个凸问题进行优化求解,在比较简单的场景下效果还算不错。 运动规划的大致介绍可以看我以前写过的文章:《运动规划 | 简介篇》(https://mp.weixin.qq.com/s/_fE760XxFlvrkzYEpslYvA)。 更详细的介绍最好看教材,如《Principles of Robot Motion》和《Planning Algorithms》都是不错的教材。 另外,这部分一定要配合着编程来做。The Open Motion Planning Library(http://ompl.kavrakilab.org/) 是个不错的参考,相信你在学 ROS 的时候也或多或少了解过一些。 |
5 | Machine Learning | 【AI】 | 1 | 随着人工智能的发展,越来越多的机器人开始具备学习和自主决策的能力。学习机器学习可以帮助你了解机器学习算法的原理和应用,并使用它们来训练机器人模型。学习人工智能可以帮助你设计和实现智能决策和交互系统,使机器人能够更加智能地与人类进行交互。 具体见Machine Learning学习路径部分 |