我嘗試用4個手臂構建一個Rubiks立方體求解器以抓取立方體。 我正在使用lejos固件版本0.9.0。我的問題是如何檢測到電機停轉?Lejos NXT - 我如何檢測電機失速?
例如: 電機A.正轉,電機堵轉/停轉, 然後電機A.應停機。
我希望任何人都可以幫助我。
我嘗試用4個手臂構建一個Rubiks立方體求解器以抓取立方體。 我正在使用lejos固件版本0.9.0。我的問題是如何檢測到電機停轉?Lejos NXT - 我如何檢測電機失速?
例如: 電機A.正轉,電機堵轉/停轉, 然後電機A.應停機。
我希望任何人都可以幫助我。
我認爲檢查位置是否改變是唯一的方法。發送移動命令,等待,檢查位置,看看它是你要求的。
這可能是你在找什麼:
isStalled()
NXTRegulatedMotor.isStalled()
- 如果電機目前止步返回true。 (即移動計數表示小於旋轉度比預期的) 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()
的值很可能是機械依賴,如果使用齒輪連接馬達到失速機構的正確失速檢測值可能會根據機器人的設計而有所不同。
祝你好運! :)
謝謝, 但API具有稱爲isStalled()和setStallThreshold的函數。任何人都知道,它是如何工作的?我曾嘗試過一些實現,但其中沒有一個可行。我該如何使用這些功能? – joen 2011-12-22 21:46:59