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é.
ArcadeDrive (Java, C++): Démontre une implémentation d’un simple entraînement différentiel à l’aide de contrôles de style « arcade » à travers la classe
DifferentialDrive
.Arcade Drive Xbox Controller (Java, C++): Démontre la même fonctionnalité que dans l’exemple précédent, sauf en utilisant un
XboxController
au lieu d’un joystick ordinaire.Getting Started (Java, C++): Démontre une routine autonome simple qui avance pendant deux secondes à demi-vitesse.
Mecanum Drive (Java, C++): Démontre une implémentation simple d’un lecteur mecanum à l’aide de la classe
MecanumDrive
.Motor Controller (Java, C++): Demonstrates how to control the output of a motor with a joystick with an encoder to read motor position.
Simple Vision (Java, C++): Démontre comment diffuser une vidéo d’une caméra USB vers le tableau de bord.
Relay (Java, C++): Démontre l’utilisation de la classe
Relay
pour contrôler une sortie de relais avec un ensemble de boutons d’un joystick.Solenoids (Java, C++): Démontre l’utilisation des classes
Solenoid
etDoubleSolenoid
pour contrôler les sorties de solénoïde avec un ensemble de boutons de joystick.TankDrive (Java, C++): Démontre une implémentation simple d’entraînement différentiel utilisant des commandes de style « tank » via la classe
DifferentialDrive
.Tank Drive Xbox Controller (Java, C++): Démontre la même fonctionnalité que dans l’exemple précédent, sauf en utilisant un
XboxController
au lieu d’un joystick ordinaire.
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++): Démontre une implémentation avancée de l’entraînement différentiel, incluant l’odométrie (à base d’encodeurs et de gyroscope) à travers la classe
DifferentialDriveOdometry
ainsi qu’une composition avec la commande de vitesse PID à travers les classesDifferentialDriveKinematics
etPIDController
.Elevator with profiled PID controller (Java, C++): Démontre l’utilisation de la classe
ProfiledPIDController
pour contrôler la position d’un mécanisme élévateur.Elevator with trapezoid profiled PID (Java, C++): Démontre l’utilisation de la classe
TrapezoidProfile
en conjonction avec un « contrôleur de moteur intelligent » pour contrôler la position d’un mécanisme élévateur.Gyro Mecanum (Java, C++): Démontre le contrôle orienté terrain d’un robot mecanum via la classe
MecanumDrive
en conjonction avec un gyroscope.MecanumBot (Java, C++): Démontre une implémentation avancée de l’entraînement de type mécanum, incluant l’odométrie (à base d’encodeurs et gyroscopique) à travers la classe
MecanumDriveOdometry
et la composition avec le contrôle de la vitesse PID à travers les classesMecanumDriveKinematics
etPIDController
.PotentiometerPID (Java, C++): Démontre l’utilisation de la classe
PIDController
et d’un potentiomètre pour commander la position d’un mécanisme d’élevateur.RamseteController (Java, C++): Démontre l’utilisation de la classe
RamseteController
pour suivre une trajectoire (prédéfinie) pendant la période autonome.SwerveBot (Java, C++): Démontre une implémentation avancée de l’entraînement de type swerve, incluant l’odométrie (à base d’encodeurs et gyroscope) à travers la classe
SwerveDriveOdometry
et la composition avec des commandes PID de position et de vitesse à travers les classesSwerveDriveKinematics
etPIDController
.UltrasonicPID (Java, C++): Démontre l’utilisation de la classe
PIDController
en conjonction avec un capteur à ultrasons pour déplacer le robot à une distance prédéfinie d’un objet donné.
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.
Axis Camera Sample (Java, C++): Démontre l’utilisation d’OpenCV et d’un Axis Netcam pour superposer un rectangle sur un flux vidéo capturé et le diffuser sur le Dashboard.
PDP CAN Monitoring (Java, C++): Démontre l’obtention d’informations de capteur à partir du PDP via CAN en utilisant la classe
PowerDistributionPanel
.Duty Cycle Encoder (Java, C++): Montre l’utilisation de la classe
DutyCycleEncoder
pour lire les valeurs d’un codeur absolu de type PWM.DutyCycleInput (Java, C++): Démontre l’utilisation de la classe
DutyCycleInput
pour lire la fréquence et de fractions du rapport cyclique d’une entrée PWM.Encoder (Java, C++): Démontre l’utilisation de la classe
Encoder
pour lire les valeurs de données lues par un encodeur en quadrature.Gyro (Java, C++): Démontre l’utilisation de la classe
AnalogGyro
pour mesurer l’orientation du robot et stabiliser le déplacement de celui-ci.Intermediate Vision (Java, C++): Démontre l’utilisation d’OpenCV et d’une caméra USB pour superposer un rectangle sur un flux vidéo capturé et le diffuser sur le Dashboard.
AprilTagsVision (Java, C++): Demonstrates on-roboRIO detection of AprilTags using an attached USB camera.
Ultrasonic (Java, C++): Démontre l’utilisation de la classe
Ultrasonic
pour lire les données d’un capteur à ultrasons en conjonction avec la classeMedianFilter
pour réduire le bruit du signal.
Exemples de programmes basés sur l’architecture orientée Commande
Ces exemples démontrent l’utilisation du cadre de développement orienté Commande.
ArmBot (Java, C++): Démontre l’utilisation d’un
ProfiledPIDSubsystem
pour contrôler le bras d’un robot.ArmBotOffboard (Java, C++): Démontre l’utilisation d’un
TrapezoidProfileSubsystem
en conjonction avec « un contrôleur de moteur intelligent » pour commander le bras d’un robot.DriveDistanceOffboard (Java, C++): Démontre l’utilisation d’un
TrapezoidProfileCommand
en conjonction avec « un contrôleur de moteur intelligent » pour faire avancer le robot sur une distance prédéfinie à l’aide d’un profil de mouvement trapézoïdal.FrisbeeBot (Java, C++): Un ensemble complet de code de robot pour un simple robot de tir au frisbee typique de 2013 FRC | reg | jeu Ultimate Ascent. Démontre un contrôle PID simple via la classe
PIDSubystem
.Gears Bot (Java, C++): Un ensemble complet de codes de robot pour le robot de démonstration WPI, GearsBot.
Gyro Drive Commands (Java, C++): Démontre l’utilisation de
PIDCommand
etProfiledPIDCommand
en conjonction avec un gyroscope pour faire tourner un robot pour faire face à un cap spécifié et pour stabiliser le cap pendant la conduite.Inlined Hatchbot (Java, C++): Un ensemble complet de code d’un simple robot typique pourvu d’une livraison à l’écoutille du jeu FRC 2019 Destination: Deep Space. Les commandes sont écrites dans un style « en ligne », dans lequel le sous-classement explicite de la classe
Command
est évité.Traditional Hatchbot (Java, C++): Un ensemble complet de code d’un simple robot typique pourvu d’une livraison à l’écoutille du jeu FRC 2019 Destination: Deep Space. Les commandes sont écrites dans un style « traditionnel », dans lequel des sous-classes de la classe
Command
sont écrites pour chaque action du robot.MecanumControllerCommand (Java, C++): Démontre la génération et le suivi de trajectoire pour un entraînement de type mécanum à l’aide des classes
TrajectoryGenerator
etMecanumControllerCommand
.RamseteCommand (Java, C++): Démontre la génération et le suivi de trajectoire pour un entraînement de type différentiel à l’aide des classes
TrajectoryGenerator
etRamseteCommand
. Un tutoriel à tout point identique est disponible ici.Select Command Example (Java, C++): Démontre l’utilisation de la classe
SelectCommand
pour exécuter l’une d’une sélection de commandes en fonction d’une condition évaluée à l’exécution.SwerveControllerCommand (Java, C++): Démontre la génération et le suivi de trajectoire pour un entraînement de type swerve à l’aide des classes
TrajectoryGenerator
etSwerveControllerCommand
.
Exemples d’espace d’état
Ces exemples illustrent l’utilisation de la commande espace-d’état.
StateSpaceFlywheel (Java, C++): Démontre le contrôle de l’espace d’état d’un volant d’inertie.
StateSpaceFlywheelSysId (Java, C++): Démontre le contrôle de l’espace d’état à l’aide de l’identification du système de SysId pour contrôler un volant d’inertie.
StateSpaceElevator (Java, C++): Démontre le contrôle de l’espace d’état d’un élévateur.
StateSpaceArm (Java, C++): Démontre le contrôle de l’espace d’état d’un bras.
StateSpaceDriveSimulation (Java, C++): Démontre le contrôle de l’espace d’états d’une transmission différentielle en combinaison avec un contrôleur de suivi de trajectoire RAMSETE et une classe Field2d.
Exemples de physique de simulation
Ces exemples démontrent l’utilisation de la simulation physique.
ElevatorSimulation (Java, C++): Démontre l’utilisation de la simulation physique avec un simple élévateur.
ArmSimulation (Java, C++): Démontre l’utilisation de la simulation physique avec un bras à simple articulation.
StateSpaceDriveSimulation (Java, C++): Démontre le contrôle de l’espace d’états d’une transmission différentielle en combinaison avec un contrôleur de suivi de trajectoire RAMSETE et une classe Field2d.
SimpleDifferentialDriveSimulation (Java, C++): Un exemple simple d’une base pilotable qui peut être utilisée dans la simulation.
Exemples divers
Ces exemples illustrent une variété de fonctionnalités WPILib qui ne s’inscrivent dans aucune des catégories ci-dessus.
Addressable LED (Java, C++): Démontre l’utilisation de la classe
AddressableLED
pour contrôler les LED RVB pour la décoration du robot et/ou les repères visuels du conducteur.DMA (Java, C++): Demonstrates the use of DMA (Direct Memory Access) to read from sensors without using the RoboRIO’s CPU.
HAL (C++): Démontre l’utilisation de HAL (Hardware Abstraction Layer) sans utiliser le reste de WPILib. Cet exemple est destiné aux utilisateurs avancés (C++ uniquement).
HID Rumble (Java, C++): Démontre l’utilisation de la fonctionnalité « grondement » pour un retour tactile sur les HID pris en charge (tels que les XboxControllers).
Shuffleboard (Java, C++): Démontre la configuration des dispositions d’onglet/widget sur le dashboard « Shuffleboard » à partir du code robot à travers l’API du constructeur fluide de la classe
Shuffleboard
.RomiReference (Java, C++): Un exemple basé sur des commandes sur la façon d’exécuter le Romi robot.
Mechanism2d (Java, C++): Un exemple simple d’utilisation de Mechanism2d.