1

我尝试用 4 个手臂构建一个 Rubiks Cube Solver 来抓取立方体。我正在使用 lejos 固件版本 0.9.0。我的问题是如何检测到电机停转?

例如:Motor.A 正转,而电机将被阻塞/停止,则 Motor.A 应停止。

我希望任何人都可以帮助我。

4

3 回答 3

2

这可能是您正在寻找的:

isStalled()

NXTRegulatedMotor.isStalled()- 如果电机当前停止,则返回真。(即移动计数显示的旋转度数低于预期) http://www.lejos.org/nxt/nxj/api/lejos/nxt/NXTRegulatedMotor.html#isStalled()

您应该注意的另一种方法是:

setStalledThreshold()

NXTRegulatedMotor.setStallThreshold()- 设置检测电机失速的参数。如果运动误差(电机滞后于调节位置的量)大于误差的时间长于时间,则电机将被识别为失速。 http://www.lejos.org/nxt/nxj/api/lejos/nxt/NXTRegulatedMotor.html#setStallThreshold(int, int)

最后,这是一个如何将它们组合在一起的示例:

public static void main(String[] args) 
{
    boolean stalled = false;
    NXTRegulatedMotor motor_arm = Motor.A;
    motor_arm.setStallThreshold(1, 100);

    motor_arm.setSpeed(400);
    motor_arm.backward();

    while (! stalled)
    {
        LCD.drawString("Motor is rotating", 0, 0);
        if(motor_arm.isStalled())
        {
           motor_arm.stop();
           stalled=true;
           LCD.drawString("Motor is stalled", 0, 0);
           Delay.msDelay(3000);
        }

        Delay.msDelay(100);
    }

}

注意:的值setStalledThreshold()可能与机械相关,如果您使用齿轮将电机连接到失速机构,则正确失速检测的值可能会因机器人的设计而异。

祝你好运!:)

于 2015-06-02T21:12:44.583 回答
0

我认为检查位置是否发生变化是唯一的方法。发送移动命令,等待,检查位置,看看是否是你要求的。

于 2011-12-22T21:13:19.467 回答
0

根据文档,motor.getPosition() 应该与 motor.getTachoCount() 相同。如果不是,那么您可以假设电机已停转。

公共浮动 getPosition()

返回电机调节器试图保持的当前位置。通常这将是电机的实际位置,并且与 getTachoCount() 返回的值相同。但是,在某些情况下(处于停止过程中的 activeMotors,或已被强制离开位置的 activeMotors),这两个值可能不同。请注意,如果监管已暂停,则调用此方法将重新启动它。

所以你只需要检查两个值是否相等:

public boolean isStealed() {
    motor.getPosition() == motor.getTachoCount();
}
于 2019-01-04T22:02:48.183 回答