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.

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

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++): Démontre comment contrôler la sortie d’un moteur avec un joystick.

  • Motor Control With Encoder (Java, C++): Identique à l’exemple ci-dessus, sauf avec l’ajout d’un encodeur pour lire la position du moteur.

  • 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 et DoubleSolenoid pour contrôler les sorties de solénoïde avec un ensemble de boutons de joystick.

  • TankDrive (Java): Démontre une implémentation d’un simple entraînement différentiel à l’aide de contrôles de type « tank » à travers 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 classes DifferentialDriveKinematics et PIDController.

  • 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 classes MecanumDriveKinematics et PIDController.

  • 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 classes SwerveDriveKinematics et PIDController.

  • 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.

  • Ultrasonic (Java, C++): Démontre l’utilisation de la classe Ultrasonic pour lire les données d’un capteur à ultrasons en conjonction avec la classe MedianFilter 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 et ProfiledPIDCommand 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 et MecanumControllerCommand.

  • 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 et RamseteCommand. Un tutoriel à tout point identique est disponible ici.

  • Scheduler Event Logging (Java, C++): Démontre l’utilisation des actions d’événement du planificateur pour consigner les marqueurs d’événements du tableau de bord chaque fois qu’une commande démarre, se termine ou est interrompue.

  • 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 et SwerveControllerCommand.

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’outil d’identification de système fourni “”FRC Characterization”” 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 (C++): Démontre l’utilisation de DMA (Direct Memory Access) pour lire des données à partir des capteurs sans utiliser le processeur du RoboRIO (C++ uniquement).

  • 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).

  • PacGoat (Java, C++): Un projet de robot complet devéloppé dans l’environnement commande du robot 2014 de FRC Team 190. Utilise l’ancienne version de commande; classée ici comme divers pour éviter toute confusion.

  • 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.