Ejecución de comandos durante el autónomo.

Importante

Esta documentación describe el uso de la biblioteca dejada basada en comandos. Si bien esta documentación se ha conservado para ayudar a los equipos que aún no lo han hecho, se recomienda encarecidamente a los equipos que migren a la nueva biblioteca basada en comandos.

Nota

Una vez que se definen los comandos, pueden ejecutarse en la parte teleop o autónoma del programa. De hecho, el poder del enfoque de programación basado en comandos es que puede reutilizar los mismos comandos en cualquier lugar. Si el robot tiene un comando que puede disparar Frisbees durante el modo autónomo con el objetivo de la cámara y el disparo preciso, no hay razón para no usarlo para ayudar a los conductores durante el período teleoperado del juego.

public class SodaDelivery extends CommandGroup {

    public  SodaDelivery() {
      addSequential(new PrepareToGrab());
      addSequential(new Grab());
      addSequential(new DriveToDistance(0.11));
      addSequential(new PlaceSoda());
      addSequential(new DriveToDistance(0.2));
      addSequential(new Stow));
    }
}

Nuestro robot debe realizar las siguientes tareas durante el período autónomo: recoger una lata de refresco del piso, luego conducir una distancia establecida de una mesa y entregar la lata allí. El proceso consiste en:

  1. Prepárese para agarrar (mueva el elevador, la muñeca y la pinza a su posición)

  2. Agarra la lata de refresco

  3. Conduzca a una distancia de la mesa indicada por un telémetro ultrasónico

  4. Coloca el refresco

  5. Retroceda a una distancia del telémetro

  6. Vuelva a guardar la pinza

Para realizar estas tareas, hay 6 comandos que se ejecutan secuencialmente como se muestra en este ejemplo (tenga en cuenta que algunos de estos, como PlaceSoda, son otros grupos de comandos).

Configurar el comando para ejecutarse durante el autónomo

public class Robot extends TimedRobot {
    Command autonomousCommand;

    /**
     * This function is run when the robot is first started up and should be
     * used for any initialization code.
     */
    public void robotInit() {
      oi = new OI();
        // instantiate the command used for the autonomous period
        autonomousCommand = new SodaDelivery();
    }

    public void autonomousInit() {
        // schedule the autonomous command (example)
        if (autonomousCommand != null) autonomousCommand.start();
    }

    /**
     * This function is called periodically during autonomous
     */
    public void autonomousPeriodic() {
        Scheduler.getInstance().run();
    }

Para que el comando SodaDelivery se ejecute como programa autónomo,

  1. Ejecútelo en el método RobotInit(). RobotInit() se llama solo una vez cuando se inicia el robot, por lo que es un buen momento para crear la instancia de comando.

  2. Inicie durante el método AutonomousInit(). AutonomousInit() se llama una vez al comienzo del período autónomo, por lo que programamos el comando allí.

  3. Asegúrese de que se llame repetidamente al planificador durante el método AutonomousPeriodic(). AutonomousPeriodic() se llama (nominalmente) cada 20 ms, por lo que es un buen momento para ejecutar el planificador que realiza un pase a través de todos los comandos programados actualmente.