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.

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, C++, Python): 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, C++, Python): 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, C++, Python): Demonstrates a simple autonomous routine that drives forwards for two seconds at half speed.
Mecanum Drive (Java, C++, Python): Demonstrates a simple mecanum drive implementation using the
MecanumDrive
class.Motor Controller (Java, C++, Python): Demonstrates how to control the output of a motor with a joystick with an encoder to read motor position.
Simple Vision (Java, C++, Python): Demonstrates how to stream video from a USB camera to the dashboard.
Relay (Java, C++, Python): Demonstrates the use of the
Relay
class to control a relay output with a set of joystick buttons.Solenoids (Java, C++, Python): Demonstrates the use of the
Solenoid
andDoubleSolenoid
classes to control solenoid outputs with a set of joystick buttons.TankDrive (Java, C++, Python): Demonstrates a simple differential drive implementation using «tank»-style controls through the
DifferentialDrive
class.Tank Drive Xbox Controller (Java, C++, Python): Demonstrates the same functionality seen in the previous example, except using an
XboxController
instead of an ordinary joystick.
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, C++, Python): Demonstrates an advanced differential drive implementation, including encoder-and-gyro odometry through the
DifferentialDriveOdometry
class, and composition with PID velocity control through theDifferentialDriveKinematics
andPIDController
classes.DifferentialDrivePoseEstimator (Java, C++): Demonstrates an advanced differential drive implementation with all the features of
DifferentialDriveBot
. In addition this example usesDifferentialDrivePoseEstimator
to track the robots position on the field. It demonstrates these features by using WPILib Simulation.Elevator with Profiled PID Controller (Java, C++, Python): Demonstrates the use of the
ProfiledPIDController
class to control the position of an elevator mechanism.Elevator with Trapezoid Profiled PID (Java, C++, Python): Demonstrates the use of the
TrapezoidProfile
class in conjunction with a «smart motor controller» to control the position of an elevator mechanism.Elevator with Exponential Profiled PID (Java, C++): Demonstrates the use of the
ExponentialProfile
class in conjunction with a «smart motor controller» to control the position of an elevator mechanism.Flywheel Bang-Bang Controller (Java, C++, Python): Uses the
BangBangController
class to simply yet effectively control a flywheel.Gyro Mecanum (Java, C++, Python): Demonstrates field-oriented control of a mecanum robot through the
MecanumDrive
class in conjunction with a gyro.MecanumBot (Java, C++, Python): Demonstrates an advanced mecanum drive implementation, including encoder-and-gyro odometry through the
MecanumDriveOdometry
class, and composition with PID velocity control through theMecanumDriveKinematics
andPIDController
classes.Mecanum Drive PoseEstimator (Java, C++): Demonstrates an advanced mecanum drive implementation with all the features of
MecanumBot
. In addition this example usesMecanumDrivePoseEstimator
to track the robots position on the field.PotentiometerPID (Java, C++, Python): Demonstrates the use of the
PIDController
class and a potentiometer to control the position of an elevator mechanism.SwerveBot (Java, C++, Python): Demonstrates an advanced swerve drive implementation, including encoder-and-gyro odometry through the
SwerveDriveOdometry
class, and composition with PID position and velocity control through theSwerveDriveKinematics
andPIDController
classes.Swerve Drive PoseEstimator (Java, C++): Demonstrates an advanced swerve drive implementation with all the features of
SwerveBot
. In addition this example usesSwerveDrivePoseEstimator
to track the robots position on the field.UltrasonicPID (Java, C++, Python): Demonstrates the use of the
PIDController
class in conjunction with an ultrasonic sensor to drive to a set distance from an object.
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.
HTTP Camera (Java, C++): Demonstrates the use of OpenCV and a HTTP Camera to overlay a rectangle on a captured video feed and stream it to the dashboard.
Power Distribution CAN Monitoring (Java, C++, Python): Demonstrates obtaining sensor information from a Power Distribution module over CAN using the
PowerDistribution
class.Duty Cycle Encoder (Java, C++, Python): Demonstrates the use of the
DutyCycleEncoder
class to read values from a PWM-type absolute encoder.DutyCycleInput (Java, C++, Python): Demonstrates the use of the
DutyCycleInput
class to read the frequency and fractional duty cycle of a PWM input.Encoder (Java, C++, Python): Demonstrates the use of the
Encoder
class to read values from a quadrature encoder.Gyro (Java, C++, Python): Demonstrates the use of the
AnalogGyro
class to measure robot heading and stabilize driving.Intermediate Vision (Java, C++, Python): Demonstrates the use of OpenCV and a USB camera to overlay a rectangle on a captured video feed and stream it to the dashboard.
AprilTagsVision (Java, C++, Python): Demonstrates on-roboRIO detection of AprilTags using an attached USB camera.
Ultrasonic (Java, C++, Python): Demonstrates the use of the
Ultrasonic
class to read data from an ultrasonic sensor in conjunction with theMedianFilter
class to reduce signal noise.SysIdRoutine (Java, C++, Python): Demonstrates the use of the SysIdRoutine API to gather characterization data for a differential drivetrain.
Ejemplos basados en comandos
Estos ejemplos demuestran el uso de Command-Based framework.
DriveDistanceOffboard (Java, C++, Python): Demonstrates the use of a
TrapezoidProfileCommand
in conjunction with a «smart motor controller» to drive forward by a set distance with a trapezoidal motion profile.Rapid React Command Bot (Java, C++): This project uses the latest command based best practices and the Epilogue logging system. It is capable of playing the FRC 2022 game Rapid React.
Inlined Hatchbot (Java, C++, Python): A complete set of robot code for a simple hatch-delivery bot typical of the 2019 FRC game Destination: Deep Space. Commands are written in an «inline» style, in which explicit subclassing of
Command
is avoided.Traditional Hatchbot (Java, C++, Python): A complete set of robot code for a simple hatch-delivery bot typical of the 2019 FRC game Destination: Deep Space. Commands are written in a «traditional» style, in which subclasses of
Command
are written for each robot action.MecanumControllerCommand (Java, C++): Demonstrates trajectory generation and following with a mecanum drive using the
TrajectoryGenerator
andMecanumControllerCommand
classes.Select Command Example (Java, C++, Python): Demonstrates the use of the
SelectCommand
class to run one of a selection of commands depending on a runtime-evaluated condition.SwerveControllerCommand (Java, C++): Demonstrates trajectory generation and following with a swerve drive using the
TrajectoryGenerator
andSwerveControllerCommand
classes.
Ejemplos de Espacio de Estado
Estos ejemplos demuestran el uso del State-Space Control.
StateSpaceFlywheel (Java, C++, Python): Demonstrates state-space control of a flywheel.
StateSpaceFlywheelSysId (Java, C++, Python): Demonstrates state-space control using SysId’s System Identification for controlling a flywheel.
StateSpaceElevator (Java, C++, Python): Demonstrates state-space control of an elevator.
StateSpaceArm (Java, C++, Python): Demonstrates state-space control of an Arm.
Ejemplos de Simulación Física
Estos ejemplos demuestran el uso de la simulación física.
ElevatorSimulation (Java, C++, Python): Demonstrates the use of physics simulation with a simple elevator.
ElevatorSimulation with Exponential PID (Java, C++): Demonstrates the use of physics simulation of an elevator being controlled with exponential profiled PID.
ArmSimulation (Java, C++, Python): Demonstrates the use of physics simulation with a simple single-jointed arm.
SimpleDifferentialDriveSimulation (Java, C++): A barebones example of a basic drivetrain that can be used in simulation.
Ejemplos varios
Estos ejemplos demuestran diversas funciones de WPILib que no encajan en ninguna de las categorías anteriores.
Addressable LED (Java, C++, Python): Demonstrates the use of the
AddressableLED
class to control RGB LEDs for robot decoration and/or driver feedback.Digital Communication (Java, C++, Python): This is a sample program demonstrating how to communicate to a light controller from the robot code using the roboRIO’s DIO ports.
I2C Communication (Java, C++, Python): This is a sample program demonstrating how to communicate to a light controller from the robot code using the roboRIO’s I2C port.
DMA (Java, C++): Demonstrates the use of DMA (Direct Memory Access) to read from sensors without using the RoboRIO’s CPU.
HAL (C++): Demonstrates the use of HAL (Hardware Abstraction Layer) without the use of the rest of WPILib. This example is for advanced users (C++ only).
HID Rumble (Java, C++, Python): Demonstrates the use of the «rumble» functionality for tactile feedback on supported HIDs (such as XboxControllers).
Shuffleboard (Java, C++, Python): Demonstrates configuring tab/widget layouts on the «Shuffleboard» dashboard from robot code through the
Shuffleboard
class’s fluent builder API.RomiReference (Java, C++, Python): A command based example of how to run the Romi robot.
XRPReference (Java, C++): A command based example of how to run the XRP robot.
Mechanism2d (Java, C++, Python): A simple example of using Mechanism2d.
EventLoop (Java, C++): Demonstrates the use of the
EventLoop
class that allows code to be called based on a boolean condition in the event-driven programming style.UnitTest (Java, C++): Shows how to do Unit Testing. The test files need to be in a separate Test directory (Java, C++).