Whole Body Motion(全身动作)
这是一个非常强大的工具,可以完成非常自然而安全的动作。
其主要目的是为了生成连贯的动作并保持其稳定性,同时让NAO的行为适应具体情况。
其两大功能分别为:
如何工作
这是一个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”来解答这个问题。
传统的二次编程形式为:
- 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年。