4. 创建一个自动命令
在本教程中,我们将学习如何创建自动命令。自动命令用于实现机器人的自主行为,可以在特定条件下自动执行复杂的动作序列。我们将创建一个PickCoral
命令,它能够自动拾取珊瑚,以及一个ScoreCoral
来自动投放珊瑚。代码下载链接
自动命令与遥控命令的主要区别在于:
- 条件触发:自动命令基于特定条件自动执行和结束
- 状态管理:需要精确管理子系统的状态转换
- 完成检测:通过传感器反馈确定命令何时完成
示例程序
让我们创建一个PickCoral
自动命令,它能够自动控制吸取装置拾取珊瑚:
java
public class PickCoral extends Command {
private final Intake intake;
public PickCoral(Intake intake) {
this.intake = intake;
addRequirements(intake);
}
@Override
public void initialize() {
intake.setPivotDegree(90);
intake.setRollerVoltage(-1);
}
@Override
public void execute() {
}
@Override
public void end(boolean interrupted) {
intake.setRollerVoltage(0);
intake.setPivotDegree(0);
}
@Override
public boolean isFinished() {
return intake.hasCoral();
}
}
你的回合
现在你需要创建一个ScoreCoral
自动命令,它将控制吸取装置自动投放珊瑚:
java
public class ScoreCoral extends Command {
private final Intake intake;
public ScoreCoral(Intake intake) {
this.intake = intake;
addRequirements(intake);
}
@Override
public void initialize() {
// TODO: set the intake angle
}
@Override
public void execute() {
// TODO: wait for intake to arrive before starting the roller
}
@Override
public void end(boolean interrupted) {
// TODO: reset intake and stop the roller
}
@Override
public boolean isFinished() {
// TODO: if the roller scores the coral
return false;
}
}
效果演示
通过X
键触发自动拾取命令:吸取装置放下->滚筒吸入->检测到物品后自动收起。通过B
键触发自动得分命令:吸取装置放下->滚筒吐出->检测到物品吐出后自动复位。