来源:https://zhuanlan.zhihu.com/p/1897263618900329157
0、前言
原文链接如下,推荐直接阅读原文,因为有些概念名词可能翻译过来不是那么准确可能会有歧义。
How Do Robot Manipulators Move?

由于文章太长,这里从新组织一下分4个部分进行翻译,中间可能会插入一些我自己整理的资源,原文的内容目录如下(带链接也可以直接访问):
- The Motion Planning Landscape
- Modeling Your Robot Arm
- Motion Planning Components Explained
- Motion Planning in the Bigger Picture
- Software Tools for Motion Planning
- Conclusion
翻译重新整理的篇目:
- The Motion Planning Landscape,Software Tools for Motion Planning,Conclusion:这三个部分整合一起的内容,后两部分是作者列出的一些学习的资源列表;
- Modeling Your Robot Arm:介绍自由度、雅可比矩阵、碰撞检测、机器人描述等;
- Motion Planning Components Explained:介绍基于雅可比的数值逆运动学,轨迹规划,轨迹生成,轨迹优化等,属于核心内容。
- Motion Planning in the Bigger Picture:更全面的运动控制视角,介绍运动规划、感知和控制之间的关系;
这篇博客中没有深入介绍轨迹跟踪,或者说运动控制,关于这部分如果发现比较好的内容后续考虑补充。
1、运动规划(Motion Planning)概览
什么是运动规划?考虑如下问题:
- 从A点移动到B点:通常,“A点”是指机器人的当前状态,但这不一定是真的;你可能正在计划一个未来的假设状态。“点B”通常表示目标配置(关节位置、速度、力、扭矩等)或姿态(机器人上特定位置的笛卡尔位置和/或方向,以及类似的导出量)。这也可能是一个目标列表,例如要遵循的参考工具路径 — 例如,想象一个机器人试图在白板上画一条多段线。
- 约束条件:最明显的约束是不撞东西,这可能是自我碰撞或与环境接触。敏锐的读者可能会注意到,这意味着我们知道碰撞检查器对机器人和环境的看法,我们稍后会讲到。还有其他与安全相关的考虑因素,比如保持在关节限制范围内(位置、速度、加速度、扭矩等)。最后,可能存在与安全无关的约束,而是与用户偏好有关的约束。举几个例子,运动规划问题可能充满了位置或方向约束(例如,在不溢出的情况下移动水杯),或者使机器人尽可能接近特定的标称关节状态以避免低效运动的偏差(例如接近不安全或机动性差的区域,或者需要太多的电机电流)。
实现目标到低级执行器命令的神奇转换以安全移动机器人的技术术语可以用下图总结:

在进一步讨论之前,了解路径和轨迹之间的区别非常重要。
- 路径:通常描述一系列关节位置(或笛卡尔姿态),以解决我们的“点A到点B”问题。它们可以像从A到B的直线一样简单,也可以包含在障碍物重重的环境中导航所需的数十个航路点的列表。
- 轨迹:则是用时间信息来增强路径。它们通常是数学表达式,可以用来描述位置、速度、加速度等随时间的变化。然后,这些函数由低级控制器进行评估,该控制器试图随着时间的推移跟踪轨迹。
虽然后面的部分将更详细地介绍,但我将简要解释图中的各个模块:
- 逆运动学:求解有效的关节位置,以实现机器人上特定框架的特定笛卡尔姿态。这与更简单的正向运动学形成鲜明对比,正向运动学是在给定一组关节角度的情况下,通过几何(或正如弗朗西斯·穆恩教授在我的入门课“高中数学”中所说)来计算这个姿势。
- 路径规划:查找实际将机器人从起点移动到目标配置的关节位置和/或姿势列表。这也可以考虑我们规划问题中的任何约束(碰撞、关节限制等)。
- 轨迹生成:将路径转换为基于时间的轨迹,以供低级控制器执行。虽然轨迹生成传统上用于对规划器输出的路径进行“时间参数化”,但路径规划和轨迹生成也很常见。例如,轨迹优化方法可以直接返回在上述约束下达到参考姿态的轨迹。此外,它还可以包括时间方面引入的新约束,如最大速度、加速度、扭矩等。
- 底层控制:接受轨迹并应用控制技术(如PID、MPC等)的软件,使机器人的执行器遵循轨迹。我们在这里不会过多讨论这个组件,所以如果你对控件感兴趣,这几乎是你能得到的全部。
顺便说一句,请注意,本节中的任何内容都不是操纵器独有的。虽然这适用于本文的大部分内容,但对于在具有更多自由度的系统中应用的工具和方法,如操纵器和腿式机器人,会有一些偏见。
2、运动规划相关的软件工具
如果您想亲手操作这些材料,并实际实施运动规划系统,那么您应该使用哪些软件包呢?本篇文章中已经提到了其中的许多软件,但我认为有必要用一整节的篇幅来更好地组织运动规划软件的空间。
对于机器人运动学和动力学建模,我的首选是Pinocchio,Drake, MuJoCo.。它们都是积极开发的现代框架,使用 C++ 开发,但提供一流的 Python 绑定。您可能会看到的其他工具包括 Peter Corke 的Robotics Toolbox for Python和MATLAB Robotics System Toolbox。当然,所有这些工具都可以使用URDF 文件,从而实现与实际设计的互操作性。
碰撞检查库包括 Bullet和 Flexible Collision Library (FCL)(用于 MoveIt、Drake 和 Tesseract)。匹诺曹的作者创建了自己的 FCL 变体和改进版,命名为 HPP-FCL。有趣的事实是:HPP 是 Humanoid Path Planner 的缩写,而不是 C++ 头文件的扩展名……不过没关系,因为它正在被重命名。
回到我的 “三大 ”模型表示库: 选择应考虑的工具的一种方法是看它们如何与运动规划相连接。
- Pinocchio并不直接支持运动规划,因为它的设计目的是支持规划和控制算法的开发。有一些基于 Pinocchio 的开源最优控制软件包非常出色,如 Crocoddyl 和 OCS2。
- MuJoCo更像是一个建模和仿真框架,因此也不提供太多规划功能。凯文-扎卡(Kevin Zakka)提供了一些不错的示例,展示了 MuJoCo 在机器人机械手控制和逆运动学方面的应用。在撰写本文时,MuJoCo 即将发布对有符号距离场(SDF)的支持,这也是值得考虑的一点。
- Drake有几种内置运动规划算法,但一般都偏向于麻省理工学院 Russ Tedrake 教授研究小组和丰田研究所的研究成果。Drake 提供最先进的基于优化的逆运动学和轨迹优化实现,以及凸集图(GCS)。它还为仿真用例提供了一些高保真流体弹性接触建模支持。
其他流行的软件库与建模关系不大,更多的是用于运动规划。这些软件包括:
- 开放运动规划库 (OMPL): 基于 C++ 的库,用于基于采样的运动规划(与 Python 绑定)。它由 Willow Garage 和莱斯大学开发,于 2012 年发布,支持高自由度机器人,如 Willow Garage 著名的 PR2机器人。OMPL 实现了大量基于采样的规划算法,因此对基准测试和设计探索很有吸引力。尽管年代久远,OMPL 仍在不断更新,并一直是基于采样规划的标准。
- MoveIt: ROS 生态系统事实上的运动规划框架,最初由 Willow Garage 开发,也用于 PR2 用例。由于 Ioan Șucan 参与了这两个项目,因此它主要以基于采样的运动规划而闻名,因为它封装了 OMPL。不过,MoveIt 提供了一个基于插件的系统,用于集成其他逆运动学、运动规划、运动适配器和碰撞检查算法。虽然 MoveIt 有时也会遇到与 OMPL 一样的老化问题,但它仍在不断得到维护,并与 ROS 保持着最紧密的联系。如果您正在使用运行 ROS 的机器人,不妨试试 MoveIt。
- Tesseract:另一个基于 ROS 的运动规划框架,由西南研究院开发,是 ROS-Industrial 联盟的主要成员。它与 MoveIt 有很多相同的设计理念和概念,但它是一个较新的软件包。这意味着,虽然在撰写本文时它还不太流行,但作者已经有机会修正他们在 MoveIt 中发现的一些缺点,如更好地解耦核心功能和 ROS,并通过这种更 “适当”、更易用的 Python 绑定。Tesseract 目前对 TrajOpt 的支持也是最好的。
- cuRobo: 英伟达™(NVIDIA®)公司推出的一款相对较新的产品,它是一个完整的运动规划堆栈,能尽可能多地利用 GPU 加速来展示真正引人注目的结果(并销售 RTX 显卡)。它使用 nvblox 库进行 GPU 加速带符号距离场计算,同时还实现了高度并行化的逆运动学、轨迹优化和碰撞检查。它包含在英伟达 Isaac Manipulator 软件包中,这意味着它与 Isaac Sim 和 Omniverse完美集成。
这些工具中有很多都非常强大,但在我看来,它们并不太适合新手。这就是我创建 PyRoboPlan的原因,这篇文章中的几张截图就来自 PyRoboPlan。它是使用 Pinocchio Python 绑定构建的,但所有运动规划算法都是从头开始开发的,目标是易于理解和修改,而不是太注重性能。我希望你能查看它,运行示例,并通过这种方式自学运动规划!我也非常希望得到反馈和贡献。
3、结论
正如您所看到的,机器人机械手的运动规划是一个复杂的领域,每天都在不断发展。我感到非常兴奋,也可能有点失望,因为十年后这篇文章将需要进行重大修改,甚至可能完全过时。这一预测的正确性取决于你们–读者,能否推动这一领域向前发展。我希望我已经尽到了自己的责任,消除了一些可能会让你望而却步的因素,让你可以试一试。
如果你想进一步了解运动规划的数学基础,我想与你分享我的一些常用资源:
- 凯文-林奇(Kevin Lynch)和弗兰克-帕克(Frank Park)合著的《现代机器人学》: 这是一本令人惊叹的教育资源,其中包括一本附带练习的免费书籍和 Coursera 课程中的顶级配套视频。在学习基础知识方面,这是我的最爱。
- 克里斯-豪瑟(Kris Hauser)的《机器人系统》一书: 其中包含两本我最喜欢的参考书,分别是《逆运动学》和《高维度运动规划(基于采样的规划)》。除了我指出的章节外,一定要多看看。
- 机器人操纵课程,作者:Russ Tedrake: 这是一本免费的在线书籍,包含每年录制的视频讲座和超棒的互动笔记本,你可以直接在网上运行。与我选择的其他资料相比,这门课程可能会略过一些基础知识,更偏重于 Tedrake 教授自己的软件(Drake)和最优规划与控制方面的研究专长。您还可以学习他的另一门课程《欠驱动机器人学》,其中的轨迹优化章节与本篇文章尤为相关。
- Matthew Kelly 的轨迹优化教程: 如果您想了解有关轨迹优化方法的更多细节,请点击此处。
- Peter Corke 制作的 QUT 机器人学院视频: 这里有更多关于多个主题的精彩资源,但我尤其喜欢 Corke 教授解释空间数学和机器人运动学的方式。虽然这篇文章只将运动学描述为变换矩阵,但你可能想通过这些资源了解其他概念,如 Denavit-Hartenberg 参数和李代数。
如果您有任何问题、更正或其他原因,请联系我,我将很高兴收到您的来信。另外,我必须厚着脸皮再次推广我的工具 PyRoboPlan。如果可以的话,请试用一下并做出贡献!

评论0