开源机器人自学指南

2023-11-06

雷锋网(公众号:雷锋网)AI科技评论按,本文转载自公众号Nao,作者邱强,AI 科技评论已获授权。

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

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

目录

零. 前前言

一. 前言

二. 先修知识

三. 入门

四. 实践

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 最新论文

六. 勇者斗恶龙

七. 参考文献

零. 前前言

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

部分复杂的公式会用 在线LaTeX公式编辑器 转换成图片插入。

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

一. 前言

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

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

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

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

TB1x.zNJiLaK1RjSZFxXXamPFXa.jpg

但是,当我后来真正开始看这些「祖传代码」的时候,我发现实际发给机器人的只有几个关节位置点而已。

「PID 在哪里???」

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

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

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

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

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

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

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

二. 先修知识

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

TB1SLzqJXzqK1RjSZSgXXcpAVXa.jpg

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

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

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

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

3.线性代数:所有的空间变换、机器人相关计算都依赖于线性代数,甚至需要有一些基本的"线性空间"思维。对于线性代数,我首推 Prof. Gilbert Strang 的《Linear Algebra》,在 Youtube 和网易公开课上可以找到视频。这门课一开始就引导大家从空间的角度看待问题,而不像国内高校,只要强调如何计算。而且,网易公开课上有中文字幕,对于初学者也还算友好。

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

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

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

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

TB166frJXzqK1RjSZFvXXcB7VXa.jpg

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

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

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

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

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

三. 入门

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

TB1VZHrJa6qK1RjSZFmXXX0PFXa.jpg

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

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

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

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

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

四. 实践

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

4.1 动手

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

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

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

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

4.2 Penn's Robotics Specialization

之后,不妨抽出几个月时间,看看 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原理演示》文章中的效果了:https://v.qq.com/x/page/z0308y9971c.html

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

4.3 ROS

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

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

对于学习 ROS,网上可能有不少教程了。但是,我感觉,对于很多机电、自动化方向的学生并不适合直接开始看 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 了,但是,为了未来的学习,可以在适当时候学习一些数据结构的知识。数据结构的话,我推荐学堂在线上清华邓俊辉老师 《数据结构(上)》与《数据结构(下)》。

现在,你就可以大胆地去看 ROS 了。作为开源项目,我认为最好的教程就是官网的教程 ROS Tutorials。

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

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

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

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

五. 进阶

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

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

5.1 数学

这时候,你的数学基础基本不允许你更进一步了。所以,你需要补充数学知识。

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

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

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

5.2 Modern Robotics

TB1wU_rJcbpK1RjSZFyXXX_qFXa.jpg

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

你可以在网上找到它的所有信息,Coursera 上也有对应的课程:《Modern Robotics》。

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

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

5.3 控制

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

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

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

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

5.4 运动规划

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

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

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

运动规划的大致介绍可以看我以前写过的文章:《运动规划 | 简介篇》。

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

另外,这部分一定要配合着编程来做。The Open Motion Planning Library 是个不错的参考,相信你在学 ROS 的时候也或多或少了解过一些。

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

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

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

TB1nMYAJhjaK1RjSZFAXXbdLFXa.jpg

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

TB16FrjJgTqK1RjSZPhXXXfOFXa.jpg

5.5 机器学习

前面很多工作都是在做建模+辨识的工作。实际上还有一大类工作是基于数据的,也即,给一个通用模型,用数据进行学习拟合。也就是大家常说的机器学习了。

对于此,我个人的学习路径如下:

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

Geoffrey Hinton 的《Neural Networks for Machine Learning》,之前是在 Coursera 上看的,现在似乎只能在 Youtube 上找到了。这门课基本可以把几种经典的神经网络过一遍。

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

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

智能控制:相信学习过智能控制的小伙伴,应该还记得小脑模型之类的网络在控制中的应用;

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

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

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

5.6 强化学习

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

对此,我不做过多评论。我只大概介绍如何入门强化学习。

首先,就是看书。Sutton 的《Introduction to reinforcement learning》[8]可以说是必读圣经了。

阅读 Sutton 的书,你可以一步步了解如何从最初的 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 订阅相应的关键词,它会不定期将最新的论文推送到你的邮箱。

六. 勇者斗恶龙

TB1.VTvJgHqK1RjSZFkXXX.WFXa.jpg

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

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

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

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

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

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

TB1qZfhJmrqK1RjSZK9XXXyypXa.gif

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

TB1x7HmJbvpK1RjSZPiXXbmwXXa.jpg

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

TB1c9YLJhnaK1RjSZFBXXcW7VXa.jpg

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

是的,在机器人领域,还有非常多恶龙。于是,你拿起剑,又兴冲冲地上路了。

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

所以,你应该继续学习。去找更多的真实史莱姆练手,将之前学到的剑法应用在实际战场上。

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

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

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

这时候,不妨来 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.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开源机器人自学指南 的相关文章

  • 如何从 matlab 调用 Qtproject?

    我在 matlab 中有一个函数可以写入一个 file txt 我在 qt 项目中使用它 So 当我使用 unix 获取要运行的 qt 编译可执行文件时 我有一个 Matlab 文件 但出现错误 代码 unix home matt Desk
  • Mathworks 生成 Matlab HTML 文档的方法是什么?

    我正在开发共享的 Matlab 代码 我们希望在本地网络中将生成的文档作为可搜索的 HTML 文档共享 我知道以下生成文档的方法 编写一个类似于 C 文件的转换器 这是在中完成的将 Doxygen 与 Matlab 结合使用 http ww
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 在 Pari-GP 中嵌套特定递归

    每个人 我最初在 Stackexchange 上发布了类似的问题 它已移至此处 可以在链接中找到 在 Matlab 中声明函数递归序列 https stackoverflow com questions 67146061 declaring
  • 使用不同的背景颜色保存 MATLAB 图窗

    我想打印一个带有深色背景和白色标签的 MATLAB 图 如果我使用print or saveas命令我不知何故失去了颜色 绘图符号再次变暗 背景变为白色 points rand 100 3 plot3 points 1 points 2 p
  • 拟合具有扭曲时基的正弦波

    我想知道在 Matlab 中拟合具有扭曲时基的正弦波的最佳方法 时间失真由 n 阶多项式 n 10 给出 其形式为t distort P t 例如 考虑失真t distort 8 12t 6t 2 t 3 这只是幂级数展开 t 2 3 这将
  • MATLAB:图像角坐标和引用元胞数组

    我在比较不同元胞数组中的元素时遇到一些问题 这个问题的背景是我正在使用bwboundariesMATLAB 中的函数可追踪图像的轮廓 该图像是结构横截面 我试图找出整个部分是否具有连续性 即 只有一个轮廓由bwboundaries命令 完成
  • 在 Python 上显示 Matlab mat 文件中的图像

    我目前正在尝试显示从此下载的 Mat 文件中的图像site http www rctn org bruno sparsenet 这是一个 mat 文件 所以我尝试使用 scipy io loadmat 函数加载它 但我似乎无法绘制图像 我究
  • Blob 的簇生长

    考虑以下来自 Mathworks 的图像 我已经用标签标记了斑点 L num bwlabel I 如何迭代连接所有斑点 即从一个斑点开始 找到离它最近的一个 考虑最左边的两个斑点 可以从一个斑点的许多点绘制许多条线来连接到另一个斑点blob
  • 如何从 Matlab 运行 R 脚本 [重复]

    这个问题在这里已经有答案了 我有 m 文件 我想用它来运行 R 脚本 我怎样才能做到这一点 Matlab文件 caller m some matlab code need to call a R script some matlab cod
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7
  • 在 Matlab/Java 中将手部运动建模为 3D 曲线

    我只需要一些关于我遇到的问题 在哪里查看等的指导 我在我的一个项目中使用了运动跟踪手套 它返回每个手指和手掌的 X Y 和 Z 值 我想做的是首先根据这些坐标创建每个手指运动的表示 然后将它们每个附加到手掌的运动 以获得手的表示 一旦我完成
  • 计算向量的导数

    我有以下函数 维维亚尼曲线 Phi t cos t 2 cos t sin t sin t 只需检查它是否有效 s linspace 0 T 1000 plot3 cos s 2 cos s sin s sin s 如何推导函数Phi 可能
  • MATLAB 图形渲染:OpenGL 与 Painters?

    当谈到使用哪个渲染器来处理 MATLAB 图形或何时它很重要时 我一无所知 但我遇到过某些示例 其中does matter plot 0 0 ko markersize 50 linewidth 8 set gcf renderer ope
  • Python 中的 eig(a,b) 给出错误“需要 1 个位置参数,但给出了 2 个”

    根据https docs scipy org doc numpy 1 15 0 user numpy for matlab users html https docs scipy org doc numpy 1 15 0 user nump
  • 静态时序数据的数据库解决方案

    我们拥有一个庞大且不断增长的实验数据集 该数据集取自约 30 000 名受试者 对于每个主题 都有多个数据记录 在每个记录中 收集了多个生理数据时间序列 每个时间序列约 90 秒长 并以 250Hz 采样 我应该注意到 时间序列的任何给定实
  • Matlab 的 fftn 在多线程下变得更慢?

    我可以访问 12 核机器和一些严重依赖 fftn 的 matlab 代码 我想加快我的代码速度 由于 fft 可以并行化 我认为更多的内核会有所帮助 但我看到的恰恰相反 这是一个例子 X peaks 1028 ncores feature
  • Matlab 中的多行匿名函数? [复制]

    这个问题在这里已经有答案了 是否可以在 Matlab 中创建多行匿名函数 没有合适的例子在文档中 http www mathworks com help matlab matlab prog anonymous functions html
  • 一次分配多个字段的聪明方法?

    由于遗留函数调用 我有时被迫编写像这样的丑陋的包装器 function return someWrapper someField a someField a b someField b and so on realistically it

随机推荐

  • 2023中国人工智能成熟度模型报告

    本报告基于三大关键指标 参考市场规模 融资事件等公开资料 并结合了AI行业内硬件 模型 应用不同领域的各位专家观点 构建涵盖40 技术点的中国人工智能成熟度模型 为技术的应用决策和未来投资参考提供研究分析工具 关注公众号 互联互通社区 回复
  • xp系统itunes无法连接服务器失败,xp系统iTunes无法连接到iTunes store的修复步骤

    今天和大家分享一下xp系统iTunes无法连接到iTunes store问题的解决方法 在使用xp系统的过程中经常不知道如何去解决xp系统iTunes无法连接到iTunes store的问题 有什么好的办法去解决xp系统iTunes无法连接
  • NoSQL数据库入门

    一 NoSQL数据库概述 NoSQL 是一种不同于关系数据库的数据库管理系统设计方式 是对非关系型数据库的统称 它所采用的数据模型并非传统关系数据库的关系模型 而是类似键 值 列族 文档等非关系模型 NoSQL 数据库没有固定的表结构 通常
  • java截取某两个字符之间的字串_Java截取特定两个标记之间的字符串实例

    Java截取特定两个标记之间的字符串实例 如有一串字符串 higklmnopq java代码如下 public class StringTest public static void main String args String str
  • linux 下安装编译配置 QT

    注 1 自己 make qt everywhere opensource src s时 在 configure前主动装好下面3个 sudo apt get install libX11 dev libXext dev libXtst dev
  • 声灭火器火灾数据集-Acoustic Extinguisher Fire Dataset

    Acoustic Extinguisher Fire Dataset The dataset was obtained as a result of the extinguishing tests of four different fue
  • FFmpeg 的介绍与使用

    FFmpeg Fast Forward Moving Picture Experts Group FFmpeg 命令行工具的使用 在 FFmpeg 官网 可以下载对应平台的可执行程序包 比如 Windows 平台的下载地址是 https f
  • c语言 统计字符出现次数

    本题要求编写程序 统计并输出某给定字符在给定字符串中出现的次数 输入格式 输入第一行给出一个以回车结束的字符串 少于80个字符 第二行输入一个字符 输出格式 在一行中输出给定字符在给定字符串中出现的次数 我的答案 include
  • E1,T1的用途和区别

    T1在北美等国家使用 1 548M 24channels E1在欧洲和中国等大部分国家使用 2 048M 32channels 都是TDM的东西 一般是做语音使用 E1 T1说白了只是传输标准 真正承载什么业务其实没有太大关系E1 2 04
  • pytorch实现Deep_Residual_network,resnet源码解读

    今天带大家学习resnet网络系列 resnet的发展与思考 任何一篇网络的理解不应该单单局限在一篇或几篇博客上 复制别人的代码 不追根溯源是很难有深度的理解 所以今天 我整理这篇博客带大家从头到位看resnet为什么有用 理论层面 怎么实
  • electorn更换窗口图标

    在用electron开发桌面端的时候 打包成exe文件 需要更改默认的图标 具体做法 在根目录新建新建存放icon图标的目录 需要两个icon icon icns icon ico 注意 1 这两个图标大小不能256 256 2 不能直接用
  • 怎么把name一样的多个字段传到后台_泛微OA E8流程小技巧(01)-- 字段联动(后台)...

    大家好 我是响指不够响 前面我介绍了OA一个很实用的功能 字段联动 通过它我们可以让系统自动带出一些相关信息不需要我们自己一项项的去查找 如果大家感兴趣的话 请移步到泛微OA E8流程小技巧 01 字段联动 前台 查阅 图1 那么这个功能我
  • Proxifier逆向分析(Mac)

    简介 Proxifier是一款功能非常强大的socks5客户端 可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链 概念 支持 64位系统 支持Xp Vista Win7 MAC OS 支持socks4 soc
  • OpenCV-Python实战(12)——一文详解AR增强现实

    OpenCV Python实战 12 一文详解AR增强现实 0 前言 1 增强现实简介 2 基于无标记的增强现实 2 1 特征检测 2 2 特征匹配 2 3 利用特征匹配和单应性计算以查找对象 3 基于标记的增强现实 3 1 创建标记和字典
  • 史上最全的测试用例

    目录 一 文本框为字符型 二 文本框为数值型 三 文本框为日期型 四 文本框为时间型 一 文本框为字符型 必填项非空校验 1 必填项未输入 程序应提示错误 2 必填项只输入若干个空格 未输入其它字符 程序应提示错误 字段唯一性校验 不是所有
  • CentOS使用yum安装最新版nginx步骤

    目录 安装依赖 配置yum 源文件 yum 安装nginx 配置开机启动 启动 停止 重载 查看nginx的状态及进程与端口 启动后 杀掉进程命令 查看版本 server配置说明 负载均衡配置 安装依赖 sudo yum install y
  • Sweet32漏洞,升级openssl或者禁用3DES和DES弱加密算法

    问题 由于等保的原因 被服务商扫描出漏洞 warnings 64 bit block cipher 3DES vulnerable to SWEET32 attack 漏洞复现 nmap sV script ssl enum ciphers
  • 机器人爱因斯坦、索菲亚对话人类:“人类必须自我修复”

    人工智能的发展速度真的太快了 就在不久前机器人 索菲亚 获得沙特阿拉伯获得了公民身份之后 机器人版的爱因斯坦教授也登上了历史的舞台 机器人版的爱因斯坦教授是由汉森机器人 Hanson Robotics 公司制造的 这家机器人制造商制造的另外
  • 计算机软件的本质是什么,程序员的本质是什么

    问题本质 首先回归到问题本身 程序员十年后还会有今天的收入吗 假如今天的收入代表比较值钱的话 这个问题其实可以换一种等同的问法 即 程序员十年后还会像现在这么值钱吗 十年这里可以一定程度的用未来来代替 那么我们接着对问题进行等同转换 程序员
  • 开源机器人自学指南

    雷锋网 公众号 雷锋网 AI科技评论按 本文转载自公众号Nao 作者邱强 AI 科技评论已获授权 我在Github上发起了一个开源机器人学自学指南 地址是 https github com qqfly how to learn roboti