Elección de un programa autónomo

A menudo, los equipos tienen más de un programa autónomo, ya sea por razones competitivas o para probar software nuevo. Los programas a menudo varían agregando cosas como retrasos de tiempo, diferentes estrategias, etc. Los métodos para elegir la estrategia a ejecutar generalmente involucran interruptores, botones de joystick, perillas u otras entradas basadas en hardware.

Con SmartDashboard, simplemente puede mostrar un widget en la pantalla para elegir el programa autónomo que le gustaría ejecutar. Y con los programas basados en comandos, ese programa está encapsulado en uno de varios comandos. Este artículo muestra cómo seleccionar un programa autónomo con solo unas pocas líneas de código y una interfaz de usuario atractiva.

Nota

Los fragmentos de código que se muestran a continuación son parte del proyecto de ejemplo HatchbotTraditional (Java, C++):

Creación del objeto SendableChooser

En RobotContainer, crea una variable para mantener una referencia a un objeto SendableChooser. Se pueden crear dos o más comandos y almacenarlos en nuevas variables. Usando el SendableChooser, se puede elegir entre ellos. En este ejemplo, se muestran como opciones SimpleAuto y ComplexAuto.

  // A simple auto routine that drives forward a specified distance, and then stops.
  private final Command m_simpleAuto =
      new DriveDistance(AutoConstants.kAutoDriveDistanceInches, AutoConstants.kAutoDriveSpeed,
                        m_robotDrive);

  // A complex auto routine that drives forward, drops a hatch, and then drives backward.
  private final Command m_complexAuto = new ComplexAuto(m_robotDrive, m_hatchSubsystem);

  // A chooser for autonomous commands
  SendableChooser<Command> m_chooser = new SendableChooser<>();

Configuración de SendableChooser

Imagine que tiene dos programas autónomos para elegir y que están encapsulados en los comandos SimpleAuto y ComplexAuto. Para elegir entre ellos:

En RobotContainer, cree un objeto SendableChooser y agregue instancias de los dos comandos. Puede haber cualquier número de comandos, y el agregado como predeterminado (setDefaultOption), se convierte en el que se selecciona inicialmente. Tenga en cuenta que cada comando se incluye en una llamada al método setDefaultOption() o addOption() en la instancia de SendableChooser.

// Add commands to the autonomous command chooser
m_chooser.setDefaultOption("Simple Auto", m_simpleAuto);
m_chooser.addOption("Complex Auto", m_complexAuto);

// Put the chooser on the dashboard
SmartDashboard.putData(m_chooser);

Iniciar un comando autónomo

En Robot.java, cuando comienza el período autónomo, el objeto SendableChooser es sondeado para obtener el comando seleccionado y ese comando debe ser programado.

  public Command getAutonomousCommand() {
    return m_chooser.getSelected();
  }
  public void autonomousInit() {
    m_autonomousCommand = m_robotContainer.getAutonomousCommand();
    // schedule the autonomous command (example)
    if (m_autonomousCommand != null) {
      m_autonomousCommand.schedule();
    }
  }

Ejecución del planificador durante el modo autónomo

En Robot.java, esto ejecutará el programador cada período de actualización de la driver station (aproximadamente cada 20 ms) y hará que se ejecute el comando autónomo seleccionado.

Nota

La ejecución del planificador puede ocurrir en la función autonomPeriodic() o robotPeriodic(), ambas funcionarán de manera similar en modo autónomo.

  public void robotPeriodic() {
    CommandScheduler.getInstance().run();
  }

Cancelación del mando autónomo

En Robot.java, cuando comience el período de teleoperado, se cancelará el comando autónomo.

  public void teleopInit() {
    // This makes sure that the autonomous stops running when
    // teleop starts running. If you want the autonomous to
    // continue until interrupted by another command, remove
    // this line or comment it out.
    if (m_autonomousCommand != null) {
      m_autonomousCommand.cancel();
    }
  }

Pantalla SmartDashboard

SendableChooser shows two selectable autos: Simple Auto and Complex Auto.

Cuando se ejecuta SmartDashboard, las opciones del SendableChooser se muestran automáticamente. Simplemente puede elegir una opción antes de que comience el período autónomo y se ejecutará el comando correspondiente.