本文为书籍 Introduction to Humanoid Robotics 的汉化, 主要借助翻译器 DeepL.
另外, 原书有管贻生教授的译作版本:《仿人机器人》(清华大学出版社, 2007年). 强烈推荐.
在本章中, 我们将介绍如何为仿人机器人生成全身运动模式. 这一领域的研究仍在进行中, 最终方法仍有待开发. 因此, 我们将简单介绍目前正在使用的示例.
让我们考虑图 5.1 所示的运动. 机器人首先要从站立姿势移动到跪姿, 从地面提起行李, 然后将行李向前搬运 1 [m]. 您将如何生成这样的全身运动?聪明的读者现在可能已经有了计划.
要生成行走模式, 可以使用前一章讨论过的方法. 问题在于如何产生运动, 使机器人能够拾起盒子. 为什么不能使用与工业机器人机械手相同的方法呢?
如图 5.3 所示, 工业 6 轴机器人机械手通常配有一个称为示教器的装置. 通过该装置, 您可以设定末端执行器的初始位置和姿态, 可能用于焊接, 喷涂或抓取. 此外, 您还可以设置末端执行器必须经过的路径点, 控制器将在这些点之间进行插补, 并生成控制角轨迹. 之所以能做到这一点, 是因为 6 轴工业机器人机械手的关节数量最少, 只有 6 个自由度. 因此, 如果设定了相当于 6 个自由度的位置和姿态, 就可以使用逆运动学求解关节角度.
与具有多个自由度的机器人 (如仿人机器人) 的主要区别在于, 即使您设定了末端效应器的位置和姿态, 也不会得到唯一的解决方案, 而是会有多个解决方案. 您可以通过站立抓住门把手, 然后蹲下来试试. 另一个复杂因素是, 仿人机器人不像工业机器人操纵器那样通过螺栓固定在地面上. 这就意味着, 不仅需要确保初始姿势, 中间姿势和目标姿势能够让机器人保持平衡, 还必须确保 ZMP 轨迹保持在由机器人与地面的接触点所定义的支撑多边形内.
因此, 下面讨论的大多数方法都会首先生成一个粗略的全身运动轨迹, 然后对其进行修改, 使 ZMP 运动轨迹保持在支撑多边形内. 图 5.4 显示了生成全身运动所需的步骤. 在步骤 A 中, 我们首先生成符合要求的全身运动. 在步骤 B 中, 我们进行必要的调整, 使机器人保持平衡. 大多数仿人机器人都有保持机器人稳定的传感器反馈回路, 因此实际使用的运动是对步骤 B 中生成的轨迹进行的进一步修改.
如果在步骤 B 中创建的运动是完美的, 那么步骤 C 可能不是绝对必要的. 不过, 大家可能都知道, 这个世界并不完美, 所以认为可以预先定义与现实世界相关的所有参数是不现实的.
大约有三种方法可以生成大致符合您要求的全身运动.
下面我们将详细介绍.
仿人机器人是为了像人一样而制造的, 因此尝试使用从真实人体运动中捕捉到的数据是很自然的一步. 要实际捕捉这些数据, 通常只需使用动作捕捉系统. 图 5.5 显示的是一个人在跳津轻 Jongara-bushi (日本北部的一种舞蹈) 时的动作捕捉数据[121]. 这可以让您轻松捕捉到人的全身动作. 然而, 仿人机器人与真实的人之间存在细微差别. 这意味着你不能简单地将这些数据发送给机器人, 然后指望它能正常运动.
在计算机生成的动画中, 你可以看到人或拟人化的动物和机器人四处走动, 就像它们存在于现实世界中一样. 从这个意义上说, 用于计算机制图的工具同样适用于生成仿人机器人的动作. Pin/Drag 界面[76]是一种用于生成仿人机器人动作的方法.
基本概念如图 5.6 所示. 您 "钉住" (Pin) 不应移动的链节, 并将想要移动的端点移动到您希望它们移动的位置. 通过使用 Pin/Drag 界面, 可以为整个机器人创建自然的动作.
图 5.7 显示的是两条腿的脚趾和脚跟以及左手被按住时产生的运动. 右手通过拖动屏幕中的部件向下移动, 然后向上移动, 持续时间为 4 秒钟. 可以看到, 机器人从地上捡起东西的动作看起来很自然. 不过, 这个动作只能满足您在动作生成过程中发送的物理约束. 它并不满足诸如 ZMP 等动态约束条件. 如果按原样使用这个动作, 机器人仍有可能摔倒.
虽然使用运动捕捉和基于图形用户界面的方法可能比较直观, 但仍然比较麻烦, 而且耗时. 第三种解决方案是使用 RRT[48] 等方法进行高速多变量搜索. 通过搜索所有关节产生的向量空间, 可以生成满足各种条件的运动, 例如在不与桌子表面等障碍物发生碰撞的情况下伸手到桌子下面[49].
在这种方法中, 通过准备仿人机器人及其周围环境的三维数据, 可以在 6 秒内自动生成全身运动, 如图 5.8 所示的从椅子下面伸手的动作. 利用这种方法, 您可以搜索满足物理约束条件的稳定姿势, 然后创建将这些姿势平滑连接起来的关节轨迹. 因此, 无法生成动态稳定的全身运动.
使用第 5.2 节中介绍的方法生成的运动并不具有动态稳定性, 因此不能简单地用它们来控制真实的机器人. 因此, 下一步就是将生成的轨迹从一系列静态稳定的姿势转换为动态稳定的关节轨迹, 如图 5.4 所示. 在本节中, 我们将介绍动力学滤波器, 自动平衡器和严格的躯干运动计算. 上一节介绍的使用预览控制的动态过滤方法也是将轨迹转换为动态稳定轨迹的一种方法.
动力学滤波方法是一种将物理上不可能的全身运动转换为物理上可行的运动的过滤方法[79] [76]. 该方法由控制器和优化器组成 (图 5.9) . 控制器将未经测试的原始轨迹
图 5.10 上半部分显示的是运动捕捉数据. 下半部分显示的是使用动力学滤波器转换后的数据. 可以看到, 脚的定位已转换为更逼真的轨迹.
自动平衡器在每个时间步对关节角度进行二阶优化[147]. 在这种方法中, 重点是静态稳定性, 因此虽然它不能用于稳定行走, 但对于稳定机器人保持在同一位置且支撑多边形不变的运动是有效的[148].
这个名字最初出现在 Yuki Masami 创作的漫画 Patlabor (小学馆) 中. 使机器人 (漫画中称为劳工) 保持平衡的系统称为自动平衡器. 受这一系统启发的田宫等人在他们的系统中使用了相同的名称.
这种方法可以应用于步行, 但只适用于缓慢的静态步行[112].
自动平衡器通过以下方式使机器人保持平衡:
允许绕轴的力矩量是根据保持 ZMP 点在支撑多边形内所必须满足的条件, 以及在下一个时间段前保持力矩力低于零所必须满足的条件计算得出的. 这种平衡补偿方法基本上是一个二阶运筹学问题, 可以解决尽可能接近原始要求的全身运动问题. 自动平衡器会在所有时间步长内执行这些计算.
图 5.11 显示了使用图 5.8 所示的 RRT 方法生成全身运动, 然后使用自动平衡器进行稳定, 最后由仿人机器人 H6 实际执行的情况[49].
躯干运动补偿算法将腿部, ZMP 和手部的运动轨迹作为输入, 为躯干底部创建运动轨迹. 计算结果将作为整个身体的运动轨迹[53].
图 5.12 显示了该算法的流程图. 线性化和碰撞检测与规避中使用的假设是: 腰部关节的高度不变, 简化的手臂模型只在水平面内移动, 上半身的近似重心不会沿
这种算法可以获得精确的分析解, 但缺点是需要循环进行大量计算. 因此, 有一种方法可以根据第
要处理非重复运动, 如运动的开始和结束, 可以创建实际运动前后很长一段时间没有运动的数据, 并应用相同的算法. 如图 5.13 所示, 严格躯干运动计算[53]用于生成仿人机器人 WABIAN 的全身运动.
在制作仿人机器人跳舞或演奏乐器时, 您有足够的时间准备数据, 因此可以使用离线运动生成方法. 但是, 如果要在一个从未去过的地方或新的环境中使用仿人机器人, 就需要在线或实时生成全身动作.
遗憾的是, 机器人对自身环境的感知和规划能力远不及人类. 因此, 已经提出的方法都试图尽可能地利用人类固有的这种能力.
如图 5.4 所示, 仿人机器人的在线运动生成与离线运动生成相同. 首先生成一个粗略的近似值 (步骤 A) , 然后对其进行修改, 使机器人能够正确保持平衡 (步骤 B) , 之后再次修改以补偿动态运动 (步骤 C) . 但是, 当你必须实时快速地完成所有这些工作时, 情况就会发生很大变化. 无论多么粗糙, 实时创建全身运动轨迹都不是一件容易的事. 因此, 在对仿人机器人进行远程操作时, 需要修改上述步骤 A 和 B, 并执行以下操作. 在步骤 A 中, 先生成部分身体运动轨迹, 然后在步骤 B 中创建全身运动轨迹, 使机器人保持稳定, 然后在步骤 C 中使用稳定器, 利用传感器反馈保持机器人稳定, 并修改全身运动轨迹.
下面我们将介绍如何利用仿人机器人的全身动作进行远程操作.
在步骤 A 中, 我们将学习 "使用操作点切换法远程生成全身运动". 步骤 B 的重点是 "利用分解动量控制产生全身运动". 在上一章中, 我们已经讨论过利用传感器反馈稳定机器人的方法.
由于仿人机器人有很大的自由度, 要真正实时创建全身动作, 需要一个像动作捕捉系统这样的大型系统. 然而, 仿人机器人与人类并不完全相同, 因此捕捉到的数据不能在未经修改的情况下使用.
因此, 让我们反思一下我们每天究竟是如何活动身体的. 人们会根据自己想要做的事情, 将注意力集中在不同的部位. 他们将注意力转移到对手头的操作最重要的部位, 并有意识地移动它. 与此同时, 为了保持平衡或更轻松地完成手头的任务, 人们会 "无意识 "地移动那些对操作无关紧要的关节.
例如, 当你伸手去拿桌子上的瓶子时, 你的注意力会集中在拿瓶子的那只手上. 当你准备坐下时, 你会把注意力集中在你的屁股上, 同时把身体往椅子上放. 当你要踢球时, 你的注意力会集中在要踢球的那只脚上 (图 5.14) .
我们关注的部分通常是在一定的自由度范围内移动的, 因此通常可以使用简单的输入设备 (如操纵杆) 来指示所需的运动. 另一方面, 无意识移动的部分可以作为控制的一部分来实现, 使机器人保持平衡. 这样, 您就可以控制机器人, 而无需考虑人类与机器人之间的几何和动态差异. 这就是注意力点切换法的基础[25].
举例来说, 我们将解释如何使用两个操纵杆为仿人机器人产生全身运动. 首先, 我们为操纵杆上的八个按钮分配功能, 如图 5.15 所示. 功能包括头部, 左右手, 左右腕, 躯干和左右脚的指示, 以及世界, 躯干和本地三个坐标之间的切换. 操作员按下代表他要操作的位置的按钮, 然后使用操纵杆指定方向, 产生全身运动, 从而改变正在操作的仿人机器人身体部分的姿态和位置.
在掌握了仿人机器人的准确物理参数后, 就可以通过指定平移和角动量的变化量来生成机器人的全身运动, 并以此为基础计算关节角速度. 这就是所谓的分解动量控制 [108].
首先, 使用具有四个开放链节的六自由度身体链节为人形机器人建模, 如 5.16 所示.
通过这种方法, 您可以使用以下公式计算目标速度
如果给定肢体末端坐标
这里,
公式 5.1 中的
在分解动量控制框架内, 可以移动其余肢体以满足所需的运动要求. 不过, 由于这通常会导致机器人出现不可预测的行为, 因此通常会保持其余肢体不动.
其中
这里,
如果将其设置为控制所有力矩元素, 则
will not have an area set to zero, 因此无法通过公式 (5.1) 和 (5.2) 控制 .
在公式 5.2 中,
因此, 通过使用下式计算目标平移动量
上面的
就精度而言, 仅使用公式 (5.4) 只能保证机器人的重心保持在支撑多边形内. 但如果同时考虑机器人质心周围的目标角动量
并将其保持为零, 或者将躯干坐标系的目标加速度 保持在足够小的值上, 就能让机器人保持平衡.
图 5.17 展示了我们在上一节中介绍的远程全身操作系统在仿人机器人 HRP-2 上的实施示例. 控制系统主要由输入设备服务器, 全身运动生成器和稳定器等子系统组成[26].
输入设备服务器根据远程机器人操作的操作点切换方法, 利用输入为仿人机器人的一部分生成动作. 这是在一台运行 Linux 的电脑上实现的. 用户使用两个三自由度操纵杆及其上的按钮产生运动, 设定躯干坐标系
全身运动发生器使用分解动量法为机器人产生稳定的全身运动. 它被置于机器人内部. 由该组件产生的运动被传送到 PC 中的 I/O 控制板, 然后再传送到伺服驱动器板.
稳定器利用传感器反馈使机器人处于稳定状态.
图 5.18 显示了使用 HRP-2 拿起放在桌上不同位置的易拉罐, 并通过遥控操作将其扔进垃圾桶的图像.
实际操作流程如下:
有一次, 机器人把罐子抓得太紧, 罐子卡在了它的手上. 不过, 操作员能够远程摇动机器人的手, 因此能够放下罐子. 实施远程操作的好处之一就是可以自动进行这种高级别的错误恢复.
任何没有固定在地面上的东西都有可能翻倒. 如图 5.19 所示, 一个物体, 如人形机器人, 具有高质心和小支撑多边形, 即使翻转一个小角度, 也会变得静态不稳定.
在这本书之前, 所有内容都是关于如何保持机器人的稳定, 防止它摔倒. 从人类也会摔倒这一事实中可以看出, 在现实中不可能完全避免机器人摔倒. 因此, 仿人机器人必须能够优雅地摔倒, 以防止自身受到严重损坏. 在 HRP-2P 上使用的减少冲击控制就是一个例子[58].
HRP-2P (图 5.20) 是 HRP-2 的原型模型. 该仿人机器人身高 158 厘米, 体重 58 千克 [66]. HRP-2P 的臀部有吸收冲击力的衬垫. 因此, 最好以尽可能低的速度撞击地面.
在机器人向后倒下的实验中, 为了提高上半身的冲击吸收能力, 我们还在机器人的背部增加了衬垫.
首先, 我们将坠落本身分为五种状态, 并在每种状态下以不同方式控制机器人的运动.
如图 5.22 所示, 通过这个动作和减少冲击力, HRP-2P 能够在摔倒后站起来. 站立动作将在下一节中解释.
在上一节中, 我们介绍了如何减少摔倒时的冲击力, 从而避免仿人机器人自身受到严重损坏. 接下来, 我们需要的是能够再次站起来. 为此, 您必须能够从机器人正面或背面躺着的状态中爬起来. 要站起来, 必须保持机器人的平衡, 但当移动到站立状态时, 也需要干扰机器人的平衡[28]. 因此, 如图 5.23 所示, 要站立起来, 需要将其分为多个单独的动作.
在上一节中, 我们只介绍了如何让机器人从背面着陆. 然而, 让机器人正面着陆也很重要. 在这种情况下, 最终位置就是机器人正面着地的状态.
除了状态 2 和状态 3 之间的转换外, 所有状态之间的切换都是静态稳定的, 机器人的质心在与地面接触的点的支撑多边形内. 这些静态稳定的运动可以离线生成, 并在需要时重新运行.
由于踝关节的限制, 在状态 2 和状态 3 之间的转换需要对质心在支撑多边形外的平衡进行动态控制. 在从状态 3 到状态 2 的转换过程中, 机器人必须从用膝盖和脚趾保持平衡的状态转换到用脚保持平衡的状态. 髋关节的俯仰角度受到控制, 这样机器人的身体就会向后移动. 当检测到旋转时, 机器人开始将关节移动到状态 2. 为了防止机器人向后摔倒, 我们使用躯干位置顺应控制[70]来保持机器人的平衡.
我们将这种控制应用于仿人机器人 HRP-2P. 在图 图 5.24 和图 5.25 显示了机器人从面朝下和面朝上的状态中站起来的过程. 图中的
如图 5.26 和 5.27 所示, 通过逆转图 5.23 中的状态转换, 可以让机器人躺下. 一旦机器人能够躺下并重新站起来, 可能的运动变化 (例如从汽车下面爬行) 就会大大增加.