Whole Body Motion(全身动作)

这是一个非常强大的工具,可以完成非常自然而安全的动作。

其主要目的是为了生成连贯的动作并保持其稳定性,同时让NAO的行为适应具体情况。

其两大功能分别为:

  • 执行器控制: 目的在于在空间里控制一个执行器。
  • 平衡: 主要思路是要平衡诸如Choregraphe关节时间轴等预计算的动作,。

如何工作

这是一个Generalized Inverse Kinematics(普遍的逆运动学),可以处理笛卡尔(Cartesian)和关节控制、平衡、冗余度(Redundancy)和任务优先性。

该公式化表达在同一个问题中会考虑到机器人的所有关节。动作会获得若干特殊条件的保障,例如平衡、保持双足固定等。

此外,当要求NAO伸出手臂时,它会俯身。这是因为除手臂关节外,腿部的关节也会被考虑进去。而且,它不会过度俯身,以便保持平衡。

这个行为会自动由Whole Body Balancer(全身平衡器)管理。用户只是要求NAO伸出手臂。

在平衡器中会隐含考虑HipYawPitch关节耦合。

何时使用

该平衡器可以与每个关节控制(角度插值、Choregraphe时间轴)和执行器控制一起使用。

无法在行走时使用它。

注意:

目前,该平衡器在立姿时会很有用,而坐姿时则没有用。

如何激活与解除

默认情况下,全身动作在机器人上处于解除状态。 下例介绍如何激活它:

# Example showing how to active Whole Body Balancer. isEnabled = True proxy.wbEnable(isEnabled)

注意:

请注意在行为结束时再解除Whole Body Balancer。

高级

Generalized Inverse Kinematics(普遍的逆运动学)问题作为二次编程来编写。我们每一步(每20ms)解答一个机器人上的二次编程。 我们使用C++语言开源库“qpOases1”来解答这个问题。

传统的二次编程形式为:

Welcome

  • Y: 未知矢量;
  • Ydes: 预定的但未必可行的解决办法;
  • Q: 二次标准;
  • A, b, C,d::矩阵和矢量,表示线性等式和不等约束。

在我们的例子中,未知矢量的组成为:

  • 躯干的速度。这是一个未致动的身体,拥有6个自由度(3个转换,3个旋转);
  • 所有铰接关节的速度。由于LHand和RHand不属于运动链,因此不会考虑它们。 此外,由于LHipYawPitch和RHipYawPitch受到同一个致动器的控制,因此它们只有一个变量。

二次最小化的组成为:

  • 笛卡尔预定轨迹(参见执行器控制一节);
  • 关节预定轨迹(参见平衡一节)。

这些命令未必都可行。得到的解决方式是介于预定动作和可行动作之间的折中方法。

相等约束是为了保持双足固定或处于平面(参见平衡一节)。

不等约束为:

  • 关节限制。这些约束总是会被考虑到;
  • 平衡。质心被限制在支撑多边形里。 我们可以激活/解除这个约束,并规定支撑多边形(参见平衡一节)。

参考资料

1 H.J. Ferreau,H.G. Bock, M. Diehl,《An online active set strategy to overcome the limitation of explicit MPC》 IEEE - International Journal of Robust and Nonlinear Control, pp. 816-830, 2008年。





Copyright © 2010 Aldebaran-Robotics - 版权所有