【问题标题】:How to get RevoluteJoint to move to a certain angle如何让 RevoluteJoint 移动到某个角度
【发布时间】:2014-07-21 00:47:09
【问题描述】:

我有一个RevoluteJoint(Box2D/AndEngine 类型),需要不时将它移动到某个角度。当它需要移动到所述角度时,它移动的方向和速度可以是任何东西。棘手的部分是让它在正确的时刻减速,这样关节就不会越过目标并开始围绕目标角度摆动。

在我看来,变量是:

  • V - 关节试图达到的角速度(以弧度/秒为单位)。负数是逆时针方向。
  • W - 实际角速度。如果远离目标角度,则为负值。
  • D - 达到目标角度前的距离(以弧度为单位)
  • Q - 电机扭矩
  • L - 角动量
  • 我错过了吗?

有没有物理爱好者或机械工程师可以告诉我一个公式,让我可以根据这些变量调整 Q 和 V,从而使关节停在正确的位置?

PS:如果 V 设置为 0,关节将尝试保持其位置

【问题讨论】:

  • 旋转接头有马达和限位,你在用吗?限制将防止过冲目标(尽管如果身体快速旋转,一两帧可能会有一点点过冲)。您可以使用关节电机来设置您提到的 Q 和 V 值。

标签: java algorithm math box2d physics


【解决方案1】:

见:Damped harmonic oscillator

您所描述的内容听起来像是具有过阻尼(阻尼比 ζ > 1)的阻尼谐振子。 RevoluteJoint 的目标角度应始终设置为振荡器的静止位移。

在维基百科上描述的方程式中,与您的变量的对应关系如下。

  • 质量 m 是旋转物体的惯性质量
  • Force F 是电机扭矩
  • 位移 x 是关节的当前角度

考虑到这些,其他变量的对应关系应该是直截了当的。请注意,您在描述中没有提及惯性质量。

注意不要混淆场景中无阻尼角频率 ω0、角频率 ω 和谐振频率 ωr 的含义。这些是不是角频率,因为您有一个旋转关节。这些是位移域中的角频率,对应于关节角的振荡。

【讨论】:

  • 根据我的阅读,它不会是欠阻尼吗?看到它略微移动过该点,然后在稳定之前来回移动几次。
  • @Jarmund 来自您:“棘手的部分是让它及时减速,这样它就不会过冲并开始围绕目标角度振荡。”来自维基百科:“过阻尼 (ζ > 1):系统返回(指数衰减)到稳定状态而不振荡。阻尼比 ζ 的值越大,返回平衡的速度越慢。”
  • 那我的措辞不好。当然,我的问题是阻尼不足。这是选择一些静态值来减慢关节速度的结果,并且欠阻尼比过阻尼更好。
  • @Jarmund 好的。尽管如此,阻尼谐振子模型将为您完成这项工作。如果您确实想要振荡行为,则可以选择欠阻尼。物理方程保持不变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多