0

我创建了一个带有电机和下限和上限的 revoluteJoint。我想知道如何使 revoluteJoint 在上下限之间摆动。当前身体从下限摆动到上限然后停止。任何帮助将不胜感激。这是代码

   final RevoluteJointDef revoluteJointDef2 = new RevoluteJointDef();   
   revoluteJointDef2.initialize(legBody, circleBody1, circleBody1.getWorldCenter());
   revoluteJointDef2.enableMotor = true;
   revoluteJointDef2.enableLimit = true;
   rj2 = (RevoluteJoint) this.mPhysicsWorld.createJoint(revoluteJointDef2);
   rj2.setMotorSpeed(2);
   rj2.setMaxMotorTorque(10);
   rj2.setLimits((float)(30 * (Math.PI)/180), (float)(270 * (Math.PI)/180));

如何使关节反向并再次重复?

4

2 回答 2

0

在每一步做:

if ((joint->GetUpperLimit() - joint->GetJointAngle()) < yourSomeAlpha)
{
     // Reached upper limit, go to another limit
     joint->SetMotorSpeed(-2);
}
if ((joint->GetJointAngle() - joint->GetLowerLimit()) < yourSomeAlpha)
{
     // Reached lower limit, go to another limit
     joint->SetMotorSpeed(2);
}

参数yourSomeAlpha选择实验。例如,尝试 0.01。

于 2013-07-01T18:51:15.067 回答
0

我能够通过实现计时器任务来创建一个振荡的 revoluteJoint。每次计时器触发时,我都会反转电机速度并使 revoluteJoint 在下限和上限之间振荡。

    class RemindTask extends TimerTask {
       RevoluteJoint rj1;;
        RemindTask(RevoluteJoint rj){
        rj1 = rj;
    }
    @Override
    public void run() {
        Log.d("x","x" +"Reversing motor");
        reverseMotor();          
    }

    public void reverseMotor(){
        rj1.setMotorSpeed(-(rj1.getMotorSpeed()));
        rj1.setMaxMotorTorque(100);

    }
}

有关实现和代码的链接,请查看我的博客文章http://gigadom.wordpress.com/2013/07/02/simulating-an-oscillating-revolutejoint-in-android/

于 2013-07-03T06:22:09.543 回答