Skip to content

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键触发自动得分命令:吸取装置放下->滚筒吐出->检测到物品吐出后自动复位。