我试着建立一个魔方解算器,用4只手臂抓取魔方。我使用的是lejos固件版本0.9.0。我的问题是,我如何才能检测到马达停顿了?
例如: Motor.A向前旋转,而电机将被阻塞/停止,然后Motor.A应该停止。
我希望任何人都能帮助我。
发布于 2015-06-03 05:12:45
这可能就是你要找的:
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()的值可能为mechanically-dependent,,如果您使用齿轮将电机连接到失速机构,则正确的失速检测的值可能会根据机器人的设计而有所不同。
祝你好运!:)
发布于 2011-12-23 05:13:19
我认为检查位置是否改变是唯一的方法。发送移动命令,等待,检查位置,看看是不是你要的。
发布于 2019-01-05 06:02:48
根据文档,motor.getPosition()应该与motor.getTachoCount()相同。如果不是,那么您可以假定电机已停止。
公共浮点getPosition()
返回电机调节器试图保持的当前位置。通常,这将是电机的实际位置,并将与getTachoCount()返回的值相同。但是,在某些情况下(处于停顿过程中的activeMotors,或已被迫离开位置的activeMotors),这两个值可能不同。请注意,如果监管已暂停,则调用此方法将重新启动它。
所以你只需要检查这两个值是否相等:
public boolean isStealed() {
motor.getPosition() == motor.getTachoCount();
}https://stackoverflow.com/questions/8609734
复制相似问题