2011-12-22 12 views
0

私は4本の腕を持つRubiks Cube Solverを構築して、キューブをつかみようとしています。 私はlejosファームウェアバージョン0.9.0を使用しています。私の問題は、モーターが停止していることをどのように検出することができるかです。Lejos NXT - モーターストールをどのように検出できますか?

例: モーターがブロック/ストールしている間にMotor.Aが前方に回転する場合は、 、次にMotor.Aは停止する必要があります。

私は誰でも助けてくれることを願っています。

答えて

0

私は、位置が変わるかどうかを確認することが唯一の方法だと思います。移動コマンドを送信し、待って、位置を確認し、あなたが求めたものかどうかを確認してください。

+0

ありがとうございます。 ですが、APIにはisStalled()とsetStallThresholdという関数があります。誰でも知っている、どのように動作するのですか? Iveはいくつかの実装を試みましたが、それらの実装は動作しませんでした。どのようにこれらの機能を使用する必要がありますか? – joen

1

これは、あなたが探しているものはおそらくです:

isStalled()

NXTRegulatedMotor.isStalled() - モーターが現在ストールしている場合はtrueを返します。ストールしたモーターを検出するためのパラメータを設定 -

setStalledThreshold()

NXTRegulatedMotor.setStallThreshold()http://www.lejos.org/nxt/nxj/api/lejos/nxt/NXTRegulatedMotor.html#isStalled()

あなたが知っておくべきもう一つの方法は、これである(つまり、移動カウントは予想より少ない回転度を示しています) 。移動誤差(モータが規定位置より遅れた量)が時間よりも長い間誤差よりも大きい場合、モータは停止していると認識されます。 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()ため値は、機械的に依存である可能性が高いですモーターをストール機構に接続するには、ストール検出の正確な値がロボットの設計によって異なる場合があります。

幸運を祈る! :)

関連する問題