Proyectos ejemplo de WPILib

Advertencia

Mientras todos los intentos son hechos para mantener los ejemplos de WPILib funcionando, no están con la intención de ser la única manera de hacerlo. Al final, las constantes de robot específicos necesitarán cambiarse por el código para funcionar en un robot de usuario. Muchas constantes empíricas tienen valores «falsificados» para propósitos demostrativos. Los usuarios alientan fuertemente en escribir sus propios códigos (desde cero o desde una plantilla existente) en vez de copiar el código de ejemplo.

Los proyectos de ejemplo de WPILib demuestran un gran número de características en librerías y uso de patrones. El rango de proyectos es para simples demostraciones de una sola función a completar, programas para robots de competencias. Todos estos ejemplos están disponibles en VS Code entrando a Ctrl+Shift+P, después seleccionar WPILib: Create a new project y elegir un ejemplo.

../../../_images/create-new-project.png

Ejemplos básicos

Éstos ejemplos demuestran funciones básicas/mínimas para el robot. Son útiles para equipos que van empezando que van adquiriendo familiaridad con la programación de un robot, pero son realmente limitadas en su funcionalidad.

  • Arcade Drive (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/arcadedrive> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/ArcadeDrive> __): Demuestra una implementación de un differential drive simple usando controles de estilo «arcade» a través de la clase `` DifferentialDrive``.

  • Arcade Drive Xbox Controller (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/arcadedrivexboxcontroller> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/ArcadeDriveXboxController> __): Demuestra la misma funcionalidad que se ve en el ejemplo anterior, excepto que usa un XboxController en lugar de un joystick normal.

  • Getting Started (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/gettingstarted> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/GettingStarted> __): Demuestra un autónomo simple que avanza durante dos segundos a la mitad de la velocidad.

  • Mecanum Drive (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/mecanumdrive> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/MecanumDrive> __): Demuestra una implementación de un mecanum drive simple usando la clase MecanumDrive .

  • Motor Controller (Java, C++): Demuestra como controlar los valores de salida de un motor con un joystick.

  • Control de motor con codificador (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/motorcontrolencoder> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/MotorControlEncoder> __): Idéntico al ejemplo anterior, excepto con la adición de un encoder para leer la posición del motor.

  • Simple Vision (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/quickvision> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/QuickVision> __): Demuestra cómo transmitir video desde una cámara USB a la dashboard.

  • Relay (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/relay> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/Relay> __): Demuestra el uso de la clase Relay para controlar una salida de relé con un conjunto de botones de joystick.

  • Solenoids (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/Solenoid> __): Demuestra el uso de las clases Solenoid y DoubleSolenoid para controlar las salidas de un solenoide con un conjunto de botones de joystick.

  • TankDrive (Java, C++): Demonstrates a simple differential drive implementation using «tank»-style controls through the DifferentialDrive class.

  • Tank Drive Xbox Controller (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/tankdrivexboxcontroller> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/TankDriveXboxController> __): Demuestra la misma funcionalidad vista en el ejemplo anterior, excepto que usa un XboxController en lugar de un joystick normal.

Ejemplos de control

Estos ejemplos demuestran las implementaciones de WPILib de controles de robot comunes. Los sensores pueden estar presentes, pero no son el concepto enfatizado de estos ejemplos.

  • DifferentialDriveBot (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/differentialdrivebot> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/DifferentialDriveBot> __): Demuestra una implementación avanzada de un differential drive, incluyendo odometría de encoder y gyro a través de la clase DifferentialDriveOdometry, y la composición con el control de velocidad PID Clases DifferentialDriveKinematics y PIDController.

  • Elevator with profiled PID controller (Java, C++): Demuestra el uso de la clase ProfiledPIDController para controlar la posición del mecanismo de elevador.

  • Elevator with trapezoid profiled PID (Java, C++): Demuestra el uso de la clase TrapezoidProfile en conjunto con un controlador de motor inteligente para controlar la posición del mecanismo de elevador.

  • Gyro Mecanum (Java, C++): Demuestra el control orientado al campo de un robot mecanum a través de la clase MecanumDrive en conjunto con un gyro.

  • MecanumBot (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/mecanumbot> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/MecanumBot> __): Demuestra una implementación avanzada de un mecanum drive, incluida la odometría de encoder y gyro a través de la clase MecanumDriveOdometry y la composición con control de velocidad PID a través de las clases MecanumDriveKinematics y `` PIDController``.

  • PotentiometerPID (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/potentiometerpid> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/PotentiometerPID> __): Demuestra el uso de la clase PIDController y un potenciómetro para controlar la posición de un mecanismo de elevador.

  • RamseteController (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/ramsetecontroller> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/RamseteController> __): Demuestra el uso de la clase RamseteController para seguir una trayectoria durante el período autónomo.

  • SwerveBot (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/swervebot> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/SwerveBot> __): Demuestra una implementación avanzada de un swerve drive, incluida la odometría de cncoder y gyro a través de la clase SwerveDriveOdometry y composición con control de velocidad y posición PID a través de las clases SwerveDriveKinematics y PIDController.

  • UltrasonicPID (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/ultrasonicpid> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/UltrasonicPID> __): Demuestra el uso de la clase PIDController junto con un sensor ultrasónico para conducir a una distancia determinada de un objeto.

Ejemplos de sensores

Estos ejemplos demuestran la lectura de sensores y el procesamiento de datos usando WPILib. El control de mecanismos puede estar presente, pero no es el concepto enfatizado de estos ejemplos.

  • Axis Camera Sample (Java, C++): Demuestra el uso de OpenCV y una Axis Netcam para superponer un rectángulo en una fuente de video capturado y transmitirlo a la dashboard.

  • Power Distribution CAN Monitoring (Java, C++): Demonstrates obtaining sensor information from a Power Distribution module over CAN using the PowerDistribution class.

  • Duty Cycle Encoder (Java, C++): Demuestra el uso de la clase DutyCycleEncoder para leer valores de un encoder absoluto tipo PWM.

  • DutyCycleInput (Java, C++): Deuestra el uso de la clase DutyCycleInput para leer la frecuencia y ciclo de trabajo fraccional de una entrada PWM.

  • Encoder (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/encoder> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/Encoder> __): Demuestra el uso de la clase Encoder para leer valores de un encoder de cuadratura.

  • Gyro (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/gyro> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/Gyro> __): Demuestra el uso de la clase AnalogGyro para medir el rumbo del robot y estabilizar la conducción.

  • Intermediate Vision (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/intermediatevision> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/IntermediateVision> __): Demuestra el uso de OpenCV y una cámara USB para superponer un rectángulo en una transmisión de video capturada y transmitirla a la dashboard.

  • Ultrasonic (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/ultrasonic> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/Ultrasonic> __): Demuestra el uso de la clase Ultrasonic para leer datos de un sensor ultrasónico junto con la clase MedianFilter para reducir la señal ruido.

Ejemplos basados en comandos

Estos ejemplos demuestran el uso de Command-Based framework.

  • ArmBot (Java, C++): Demuestra el uso de un «ProfiledPIDSubsystem`` para controlar un brazo robótico.

  • ArmBotOffboard (Java, C++): Demuestra el uso de un TrapezoidProfileSubsystem en conjunción de un «controlador de motor inteligente» para controlar un brazo robótico.

  • DriveDistanceOffboard (Java, C++): Demuestra el uso de un TrapezoidProfileCommand en conjunción de un «controlador de motor inteligente» para conducir adelante por una distancia determinada con un perfil de movimiento trapezoidal.

  • FrisbeeBot (Java, C++): Un conjunto completo de código de robot para un sencillo robot que dispara frisbees típico del juego de 2013 FRC® game Ultimate Ascent. Demuestra un control de PID simple a través de la clase PIDSubystem.

  • Gears Bot (Java, C++): Un conjunto completo de código de robot para la demostración de robot de WPI, GearsBot.

  • Gyro Drive Commands (Java, C++): Demuestra el uso de PIDCommand y ProfiledPIDCommand en conjunto de un giroscopio para girar el robot hacia una dirección especificada y estabilizar la dirección mientras se conduce.

  • Inlined Hatchbot (Java, C++): Un conjunto completo de código de robot para un sencillo bot de entrega de escotillas típico del juego FRC 2019 Destination: Deep Space. Los comandos están escritos en un estilo «inline», en el que se evita la subclasificación explícita de Command.

  • ** Hatchbot tradicional ** (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/hatchbottraditional> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/HatchbotTraditional> __): un conjunto completo de código de robot para un simple bot de entrega de escotillas típico del juego FRC 2019 * Destino: Deep Space *. Los comandos se escriben en un estilo «tradicional», en el que se escriben subclases de `` Comando “” para cada acción del robot.

  • MecanumControllerCommand (Java, C++): Demuestra la generación y seguimiento de trayectorias con un mecanum drive usando las clases TrajectoryGenerator y MecanumControllerCommand.

  • RamseteCommand (Java, C++): Demonstrates trajectory generation and following with a differential drive using the TrajectoryGenerator and RamseteCommand classes. A matching step-by-step tutorial can be found here.

  • Scheduler Event Logging (Java, C++): Demuestra el uso de la programación de acciones de eventos para registrar marcadores en la dashboard cuando sea que un comando empieza, termina o es interrumpido.

  • Select Command Example (Java, C++): Demuestra el uso de la clase SelectCommand para correr una selección de comandos dependiendo de la condición evaluación por tiempo.

  • SwerveControllerCommand (Java, C++): Demuestra la generación y seguimiento de trayectorias con un swerve drive usando las clases TrajectoryGenerator y SwerveControllerCommand.

Ejemplos de Espacio de Estado

Estos ejemplos demuestran el uso del State-Space Control.

  • StateSpaceFlywheel (Java, C++): Demuestra el uso del control estado-espacio de una flywheel.

  • StateSpaceFlywheelSysId (Java, C++): Demuestra el control estado-espacio usando el sistema de identificación de la herramienta de caracterización de FRC para controlar una flywheel.

  • **StateSpaceElevator ** (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/statespaceelevator> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/StateSpaceElevator> __): Demuestra el control del espacio de estados de un ascensor.

  • StateSpaceArm (Java, C++): Demuestra el control estado-espacio de un brazo.

  • StateSpaceDriveSimulation (Java, C++): Demuestra un control estado-espacio de un drivetrain diferencial en combinación del seguimiento de trayectorias con un controlador RAMSETE y la clase Field2d.

Ejemplos de Simulación Física

Estos ejemplos demuestran el uso de la simulación física.

  • ElevatorSimulation (Java, C++): Demuestra el uso de la simulación de física con un elevador simple.

  • ArmSimulation (Java, C++): Demuestra el uso de simulación física con un brazo simple de una sola articulación.

  • StateSpaceDriveSimulation (Java, C++): Demuestra un control estado-espacio de un drivetrain diferencial en combinación del seguimiento de trayectorias con un controlador RAMSETE y la clase Field2d.

  • SimpleDifferentialDriveSimulation (Java, C++): Un ejemplo básico de un drivetrain básico que se puede utilizar en simulación.

Ejemplos varios

Estos ejemplos demuestran diversas funciones de WPILib que no encajan en ninguna de las categorías anteriores.

  • **LED direccionable ** (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/addressableled> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/AddressableLED> __): Demuestra el uso de la clase `` AddressableLED “” para controlar los LED RGB para la decoración del robot y / o la retroalimentación del controlador.

  • DMA (C++): Demuestra el uso de DMA (Acceso directo a memoria) para leer de los sensores sin usar la CPU de RoboRIO (solo C ++).

  • HAL (C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/HAL> __): Demuestra el uso de HAL (Capa de abstracción de hardware) sin el uso del resto de WPILib. Este ejemplo es para usuarios avanzados (solo C ++).

  • HID Rumble (Java, C++): Demuestra el uso de la funcionalidad «retumbar» para retroalimentación táctil en los controles soportados (así como los controles de Xbox).

  • Shuffleboard (Java, C++): Demuestra la configuración de diseños de pestañas/widgets en el dashboard «Shuffleboard» desde el código del robot a través de la fluida API de construcción de la clase Shuffleboard.

  • RomiReference (Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/romireference> __, C ++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/RomiReference> __): Un ejemplo basado en comandos de cómo ejecutar :doc: Romi robot </docs/romi-robot/index>.

  • Mechanism2d (Java, C++): A simple example of using Mechanism2d.