Creando un programa para el robot

Una vez que todo esté instalado, estamos listos para crear un programa para el robot. WPILib viene con una serie de platillas para los programas del robot. El uso de estas plantillas es altamente recomendado para los nuevos usuarios; sin embargo, usuarios avanzados son libres de hacer su código desde cero.

Escogiendo una Clase Base

Para iniciar un proyecto usando una de las plantillas de programa de robot de WPILib, los usuarios deben elegir una clase base para su robot. Los usuarios ponen como subclase estas clases base para crear su clase primaria para Robot, que controla el flujo principal del programa del robot. Existen tres opciones disponibles para la clase base:

TimedRobot

Documentación: Java - C++

Fuente: Java - C++

La clase TimedRobot es la clase base recomendada para la mayoría de los usuarios. Proporciona control sobre el programa del robot a través de un conjunto de métodos, init() y periodic() que son llamadas por WPILib durante estados específicos del robot (ej.: autónomo o tele operado). La clase TimedRobot también proporciona un ejemplos de recuperar rutinas de autónomo a través de SendableChooser (Java/ C++

Nota

Hay disponible una plantilla TimedRobot Skeleton que elimina algunos comentarios informativos y el ejemplo autónomo. Puede usar esto si ya está familiarizado con TimedRobot. El ejemplo que se muestra a continuación es de TimedRobot Skeleton.

import edu.wpi.first.wpilibj.TimedRobot;

public class Robot extends TimedRobot {

    @Override
    public void robotInit() {
        // This is called once when the robot code initializes
    }

    @Override
    public void robotPeriodic() {
        // This is called every period regardless of mode
    }

    @Override
    public void autonomousInit() {
        // This is called once when the robot first enters autonomous mode
    }

    @Override
    public void autonomousPeriodic() {
        // This is called periodically while the robot is in autonomous mode
    }

    @Override
    public void teleopInit() {
        // This is called once when the robot first enters teleoperated mode
    }

    @Override
    public void teleopPeriodic() {
        // This is called periodically while the robot is in teleopreated mode
    }

    @Override
    public void testInit() {
        // This is called once when the robot enters test mode
    }

    @Override
    public void testPeriodic() {
        // This is called periodically while the robot is in test mode
    }

}

Los métodos periódicos son llamados cada 20 ms por defecto. Esto puede cambiarse llamando la superclase constructor con la nueva actualización deseada.

Peligro

Cambiar la velocidad de su robot puede causar algún comportamiento no deseado (sobre ejecuciones de bucle). Los equipos también pueden usar Notifiers <https://first.wpi.edu/wpilib/allwpilib/docs/release/java/edu/wpi/first/wpilibj/Notifier.html> __ para programar métodos a un ritmo personalizado.

public Robot() {
  super(0.03); // Periodic methods will now be called every 30 ms.
}

RobotBase

Documentación: Java - C++

Fuente: Java - C++

La clase RobotBase es la clase base más mínima que se ofrece y, por lo general, no se recomienda para uso directo. No se maneja ningún flujo de control del robot para el usuario; todo debe escribirse desde cero dentro del método startCompetition(). La plantilla por defecto muestra cómo procesar los diferentes modos de operación (teleop, auto, etc.).

Nota

Hay disponible una plantilla `` RobotBase Skeleton`` que ofrece un método startCompetition () en blanco.

Robot a base de comandos

Los equipos que utilicen Command Robot o Old Command Robot deberían ver Tutorial de programación basada en comandos o :ref:`` Programación a base de comandos [Antiguo] <docs/software/old-commandbased/index:[Old] Command Based Programming>`.

Romi

Los equipos que estén utilizando Romi deberían de utilizar la plantilla Romi - Timed o Romi - Command Bot.

Romi - Timed

La plantilla Romi - Timed proporciona la clase RomiDrivetrain que expone un método arcadeDrive(double xaxisSpeed, double zaxisRotate) . Depende del usuario alimentar esta función arcadeDrive.

Esta clase también provee funciones para recuperar y restablecer los encoders integrados de Romi.

Romi - Robot a base de comandos

La plantilla Romi - Command Bot proporciona un subsistema RomiDrivetrain que expone un método arcadeDrive (double xaxisSpeed, double zaxisRotate) Depende del usuario alimentar esta función arcadeDrive.

Este subsistema también proporciona funciones para recuperar y restablecer los codificadores integrados de Romi.

No usando una clase base

Si así lo desean, los usuarios pueden omitir una clase base entera y simplemente escribir el programa en un método main(), como sería para cualquier otro programa. Esto es altamente no recomendado - los usuarios no deberían «reinventar la rueda» cuando escriben el código de su robot - pero esto está soportado para quienes quieren tener control absoluto en el flujo de su programa.

Advertencia

Los usuarios no deberían modificar el método main() de un programa de robot a menos que estén absolutamente seguros de lo que están haciendo.

Creando un Proyecto Nuevo de WPILib

Una vez que nos hemos decidido por una clase base, podemos crear nuestro nuevo proyecto para el robot. Abra la paleta de comandos de Visual Studio Code con Ctrl+Shift+P:

The WPILib Command Palette.

Después, escriba «WPILib» en el aviso. Dado que todos los comandos de WPILib empiezan con «WPILib», esto trae una lista de comandos específicos de WPILib VS Code:

All of the WPILib Commands.

Ahora, seleccione el comando Create a new project:

Highlights the "WPILib: Create a new project" command.

Esto va a abrir la «New Project Creator Window:»

The new project creator screen.

Los elementos de la New Project Creator Window o Ventana del Creador de Nuevo Proyecto está explicado abajo:

  1. Tipo de Proyecto: El tipo de proyecto que queremos crear. Esto puede ser un proyecto de ejemplo, o uno de los proyectos modelo brindados por WPILib. Los modelos existen para cada clase de base del robot. Adicionalmente, un modelo existe para proyectos Command-based, que están hechos en la clase base TimedRobot pero incluye un número de características adicionales - este tipo de programa de robot es altamente recomendado para equipos nuevos.

  2. Lenguaje: Este es el lenguaje (C++ o Java) que será usado en el proyecto.

  3. Carpeta base: Si se trata de un proyecto de plantilla, esto especifica el tipo de plantilla que se utilizará.

  4. Localización del Proyecto: Esto determina la carpeta en la que el proyecto del robot estará localizado.

  5. Nombre del Proyecto: El nombre del proyecto del robot. Esto también especifica el nombre que la carpeta del proyecto tendrá si la caja de Crear Nueva Carpeta está marcada.

  6. Cree una Nueva Carpeta: Si se marca esta casilla, se creará una nueva carpeta para mantener el proyecto dentro de la carpeta previamente especificada. Si se marca no, el proyecto se ubicará directamente en la carpeta previamente especificada. Se producirá un error si la carpeta no está vacía y no está marcada.

  7. Número del Equipo: El número del equipo para la carpeta, que es el que se usará para empacar nombres con el proyecto y localizarlo en el robot cuando se corra el código.

  8. **Habilitar soporte de escritorio *: Habilita la prueba unitaria y la simulación. Si bien WPILib admite esto, es posible que las bibliotecas de software de terceros no. Si las bibliotecas no son compatibles con el escritorio, es posible que su código no se compile o se bloquee. Debe dejarse sin marcar a menos que se necesiten pruebas unitarias o simulación y todas las bibliotecas lo admitan.

Una vez que todo lo de arriba está configurado, de click en «Generar Proyecto» y el proyecto del robot será creado.

Nota

Ningún error en la generación de proyecto debe aparecer en la esquina inferior derecha de la pantalla.

Un ejemplo de todas las opciones seleccionadas se muestra abajo.

The new project creator screen filled out.

Abriendo El Nuevo Proyecto

Después de crear su proyecto satisfactoriamente, VS Code dará la opción de abrir el proyecto como se muestra abajo. Podemos elegir hacer eso ahora o después escribiendo Ctrl-K después Ctrl-O (o solo Comando+O en macOS) y seleccionar la carpeta donde guardamos nuestro proyecto.

Una vez que abrimos, vamos a ver el proyecto jerarquizado a la izquierda. Dando doble click en el archivo abrirá ese archivo en el editor.

Opening a file in the VS Code editor.

Configuraciones de C++ (Solo C++)

Para proyectos C++, hay un paso más para configurar IntelliSense. Cada vez que abrimos un proyecto, debería aparecernos una ventana emergente en la esquina inferior derecha pidiendo actualizar las configuraciones de C++. Haga clic en «Yes» para configurar IntelliSense

Choosing "Yes" when asked to refresh C++ configurations.