我尝试用4臂构建一个Rubiks Cube Solver来抓住立方体。 我使用的是lejos固件版本0.9.0。我的问题是如何检测电机是否停转?
例如: Motor.A向前旋转,同时电机将被阻塞/停止, 然后Motor.A应该停止。
我希望有人能帮助我。
答案 0 :(得分:2)
这可能是您正在寻找的:
<强> 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()
的值可能机械相关,如果您使用齿轮将电机连接到停止机制,则值为正确的失速检测可能会根据机器人的设计而有所不同。
答案 1 :(得分:0)
我认为检查位置是否改变是唯一的方法。发送移动命令,等待,检查位置,看看它是否是你要求的。
答案 2 :(得分:0)
根据文档,motor.getPosition()应该与motor.getTachoCount()相同。如果不是,则可以认为电动机已停止。
公共浮动getPosition()
返回电机的当前位置 监管机构正在努力维持。通常这是实际的 电动机的位置,并将与的返回值相同 getTachoCount()。但是在某些情况下( 在失速过程中,或被迫退出的activeMotor 位置),这两个值可能会不同。请注意,如果法规有 被暂停调用此方法将重新启动它。
所以您只需要检查两个值是否相等:
public boolean isStealed() {
motor.getPosition() == motor.getTachoCount();
}