Exemples fournis de Projets WPILib¶
Avertissement
Bien qu’on ne ménage aucun effort pour maintenir les exemples WPILib fonctionnels, ils ne sont pas destinés à être utilisés « tel quel ». À tout le moins, les valeurs constantes spécifiques aux robots devront être modifiées pour que le code fonctionne sur le robot de l’utilisateur. Beaucoup de constantes empiriques ont des valeurs « factices » à des fins de démonstration. Les utilisateurs sont fortement encouragés à écrire leur propre code (à partir de zéro ou à partir d’un modèle existant) plutôt que de copier le code d’exemple et de l’utiliser tel quel.
Les exemples de projets WPILib illustrent un grand nombre de fonctionnalités de bibliothèque et de modèles d’utilisation. Les projets vont de la simple démonstration d’une seule fonctionnalité à des programmes robotiques complets et compétitifs. Tous ces exemples sont disponibles dans VS Code en entrant Ctrl+Shift+P, puis en sélectionnant WPILib: Create a new project et en choisissant l’exemple.

Exemples de base¶
Ces exemples démontrent la fonctionnalité de base/minimale du robot. Ils sont utiles pour des équipes recrues qui s’initient à la programmation de robots, mais sont grandement limités en terme de fonctionnalité.
Arcade Drive (Java, C++, Python): Demonstrates a simple differential drive implementation using « arcade »-style controls through the
DifferentialDriveclass.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
MecanumDriveclass.TankDrive (Java, C++, Python): Demonstrates a simple differential drive implementation using « tank »-style controls through the
DifferentialDriveclass.
Exemples de contrôle (commande)¶
Ces exemples illustrent les implémentations dans la WPILib de contrôles de robot courants. Les capteurs peuvent être présents, mais ils ne constituent pas le point focal dans ces exemples.
DifferentialDriveBot (Java, C++, Python): Demonstrates an advanced differential drive implementation, including encoder-and-gyro odometry through the
DifferentialDriveOdometryclass, and composition with PID velocity control through theDifferentialDriveKinematicsandPIDControllerclasses.DifferentialDrivePoseEstimator (Java, C++): Demonstrates an advanced differential drive implementation with all the features of
DifferentialDriveBot. In addition this example usesDifferentialDrivePoseEstimatorto 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
ProfiledPIDControllerclass to control the position of an elevator mechanism.Elevator with Trapezoid Profiled PID (Java, C++, Python): Demonstrates the use of the
TrapezoidProfileclass 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
ExponentialProfileclass in conjunction with a « smart motor controller » to control the position of an elevator mechanism.MecanumBot (Java, C++, Python): Demonstrates an advanced mecanum drive implementation, including encoder-and-gyro odometry through the
MecanumDriveOdometryclass, and composition with PID velocity control through theMecanumDriveKinematicsandPIDControllerclasses.Mecanum Drive PoseEstimator (Java, C++): Demonstrates an advanced mecanum drive implementation with all the features of
MecanumBot. In addition this example usesMecanumDrivePoseEstimatorto track the robots position on the field.SwerveBot (Java, C++, Python): Demonstrates an advanced swerve drive implementation, including encoder-and-gyro odometry through the
SwerveDriveOdometryclass, and composition with PID position and velocity control through theSwerveDriveKinematicsandPIDControllerclasses.Swerve Drive PoseEstimator (Java, C++): Demonstrates an advanced swerve drive implementation with all the features of
SwerveBot. In addition this example usesSwerveDrivePoseEstimatorto track the robots position on the field.
Exemples de programmation de capteurs¶
Ces exemples démontrent la lecture de signaux à partir des capteurs et le traitement des données à l’aide de WPILib. Le contrôle des mécanismes peut être présent, mais ce n’est pas le point focal de ces exemples.
Duty Cycle Encoder (Java, C++, Python): Demonstrates the use of the
DutyCycleEncoderclass to read values from a PWM-type absolute encoder.Encoder (Java, C++, Python): Demonstrates the use of the
Encoderclass to read values from a quadrature encoder.Gyro (Java, C++, Python): Demonstrates the use of the
AnalogGyroclass to measure robot heading and stabilize driving.SysIdRoutine (Java, C++, Python): Demonstrates the use of the SysIdRoutine API to gather characterization data for a differential drivetrain.
Commands v2 Examples¶
These examples demonstrate the use of the Commands v2 framework.
DriveDistanceOffboard (Java, C++, Python): Demonstrates the use of a
TrapezoidProfileCommandin 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
Commandis 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
Commandare written for each robot action.
Commands v3 Examples¶
These examples demonstrate the use of the Commands v3 framework.
HatchbotCmdv3 (Java): A complete set of robot code for a simple hatch-delivery bot typical of the 2019 FRC game Destination: Deep Space. This example is a direct port of the v2 Inlined Hatchbot example to v3. RebuiltCmdv3 (Java): A complete set of robot code for a swerve drive robot playing the 2026 FRC game Rebuilt. This example demonstrates how to structure a complex project and best practices for using Commands v3.
Exemples d’espace d’état¶
Ces exemples illustrent l’utilisation de la commande espace-d’état.
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.
Exemples de physique de simulation¶
Ces exemples démontrent l’utilisation de la simulation physique.
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.
Exemples divers¶
Ces exemples illustrent une variété de fonctionnalités WPILib qui ne s’inscrivent dans aucune des catégories ci-dessus.
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).
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.
UnitTest (Java, C++): Shows how to do Unit Testing. The test files need to be in a separate Test directory (Java, C++).
Snippets¶
These examples demonstrate a single item.
Addressable LED (Java, C++, Python): Demonstrates the use of the
AddressableLEDclass to control RGB LEDs for robot decoration and/or driver feedback.AprilTagsVision (Java, C++, Python): Demonstrates on-roboRIO detection of AprilTags using an attached USB camera.
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.
DutyCycleInput (Java, C++, Python): Demonstrates the use of the
DutyCycleInputclass to read the frequency and fractional duty cycle of a PWM input.EventLoop (Java, C++): Demonstrates the use of the
EventLoopclass that allows code to be called based on a boolean condition in the event-driven programming style.Flywheel Bang-Bang Controller (Java, C++, [Python](https://github.com/robotpy/mostrobotpy/tree/main/snippets/robot/FlywheelBangBangController )): Uses the
BangBangControllerclass to simply yet effectively control a flywheel.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.
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.
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.
Motor Controller (Java, C++, Python): Demonstrates how to control the output of a motor with a joystick with an encoder to read motor position.
Power Distribution CAN Monitoring (Java, C++, Python): Demonstrates obtaining sensor information from a Power Distribution module over CAN using the
PowerDistributionclass.Select Command Example (Java, C++, Python): Demonstrates the use of the
SelectCommandclass to run one of a selection of commands depending on a runtime-evaluated condition.Simple Vision (Java, C++, Python): Demonstrates how to stream video from a USB camera to the dashboard.
Solenoids (Java, C++, Python): Demonstrates the use of the
SolenoidandDoubleSolenoidclasses to control solenoid outputs with a set of joystick buttons.