Nouveau pour 2021

Un certain nombre d’améliorations ont été apportées au logiciel du système de contrôle FRC® pour 2021. Cet article décrira et fournira un bref aperçu des nouveaux changements et fonctionnalités ainsi qu’un journal des modifications plus complet pour les modifications WPILib C++/Java. Ce document ne comprend que les modifications les plus pertinentes pour les utilisateurs finaux, la liste complète des modifications peut être consultée sur les différents dépôts GitHub WPILib.

Important

En raison des changements internes de GradleRIO, il est nécessaire de mettre à jour les projets des années précédentes. Après Installation WPILib pour 2021 tout projet 2020 doit être importé pour être compatible.

Principales caractéristiques

  • Une interface au niveau matériel WebSocket a été ajoutée pour permettre l’accès à distance au code du robot simulé dans un environnement de bureau.

  • Prise en charge de la plateforme robot Romi. Le code robot de Romi fonctionne dans l’environnement simulateur de bureau et communique avec Romi via la nouvelle interface WebSocket.

  • Un nouveau visualiseur de données de robot – Glass – a été ajouté. Glass a une interface utilisateur similaire à l’interface graphique du simulateur et prend en charge la plupart des mêmes fonctionnalités; cependant, Glass peut être utilisé comme un tableau de bord autonome et n’est pas lié au programme du robot.

  • WPILibInstaller a été réécrit pour prendre en charge macOS et Linux, et pour être plus facile à utiliser.

    • L’installateur est authentifié sous macOS, pas besoin de contrôleur d’accès pour contourner les étapes.

    • S’il vous plaît, consultez instructions d’installation car il diffère des années précédentes.

  • Ajout de la prise en charge du contrôle basé sur un modèle avec des filtres de Kalman, des filtres de Kalman étendus, des filtres de Kalman non parfumés (unscented) et des régulateurs linéaires-quadratiques. Voir Introduction à la commande dans l’Espace-d’État pour plus d’informations.

WPILib

Changements majeurs

  • curvature_t est passé de frc à l’espace de nommage units (C++)

  • Les méthodes de contrainte de trajectoire sont désormais const en C++. Les équipes définissant leurs propres contraintes personnalisées doivent marquer les méthodes MaxVelocity() and MinMaxAcceleration() comme const.

  • La classe Field2d (ajoutée à mi-chemin pendant la saison 2020) est passée du package simulation (edu.wpi.first.wpilibj.simulation / frc/simulation/) au package SmartDashboard (edu.wpi.first.wpilibj.smartdashboard / frc/SmartDashboard/). Ce qui permet aux équipes d’envoyer la position de leur robot à travers les NetworkTables pour être visualisée dans Glass. L’instance Field2d peut être envoyée à l’aide de SmartDashboard.putData("Field", m_field2d) / frc::SmartDashboard::PutData("Field", &m_field2d) ou en utilisant l’une des méthodes Shuffleboard methods. Cette opération doit être faite afin de voir le Field2d dans l’interface graphique du simulateur.

  • La méthode get() des contrôleurs de vitesse PWM a été modifiée pour renvoyer la même valeur que l’était set() indépendamment de l’inversion. La valeur qui prend encore en compte l’inversion peut être récupérée avec la méthode getSpeed(). Cela affecte les classes suivantes DMC60, Jaguar, PWMSparkMax, PWMTalonFX, PWMTalonSRX, PWMVenom, PWMVictorSPX, SD540, Spark, Talon, Victor, et VictorSP

Nouvelle librairie orientée commande

  • Les rapports de chien de garde (Watchdog) et d’époque ont été ajoutés au planificateur de commandes. Cela permettra aux équipes de savoir exactement quelle commande ou quel sous-système est responsable d’un dépassement de boucle le cas échéant.

  • Un décorateur de commande withName() a été ajouté pour les équipes Java. Cela permet aux équipes de définir le nom d’une commande particulière à l’aide du patron de conception décorateur.

  • Ajout d’une classe NetworkButton permettant aux utilisateurs d’utiliser un booléen NetworkTableEntry comme bouton pour déclencher des commandes.

  • Ajout d’une méthode simulationPeriodic() à Subsystem. Cette méthode s’exécute périodiquement pendant la simulation, en plus de la méthode habituelle periodic().

Librairies générales

  • Holonomic Drive Controller - Un contrôleur qui peut être utilisé par des équipes ayant des transmissions holonomiques (c.-à-d. embardée (Swerve) et Mécanum) afin de suivre les trajectoires. Cela prend également en charge les entrées de cap personnalisées Rotation2d qui sont séparées de la trajectoire parce que la dynamique de cap est découplée du mouvement de translation dans les transmissions holonomiques.

  • Ajout de la prise en charge des fonctions de planification à un rythme plus élevé que la boucle du robot via addPeriodic() dans TimedRobot. Auparavant, les équipes devaient créer un notificateur pour exécuter des contrôleurs de rétroaction plus souvent que la période de boucle TimedRobot de 20 ms (exécuter TimedRobot plus souvent que ce délai n’est pas conseillé). Désormais, les utilisateurs peuvent exécuter des contrôleurs de rétroaction à un rythme plus élevé que la boucle principale du robot, mais de manière synchrone avec les fonctions périodiques de TimedRobot afin d’éviter tout problème de sécurité des threads. Consulter un exemple se trouvant ici.

  • Ajout d’une fonction toggle() à Solenoid et DoubleSolenoid.

  • Ajout d’un constructeur SpeedControllerGroup qui prend un std::vector<> (C++) / SpeedController[] (Java), permettant à la liste d’être construite dynamiquement. (Les équipes ne doivent pas l’utiliser directement. Ceci est uniquement destiné aux liaisons dans des langages comme Python.)

  • Ajout de méthodes (isOperatorControlEnabled() et isAutonomousEnabled()) pour vérifier le jeu et l’état activé ensemble.

  • Ajout d’une classe ScopedTracer pour que les équipes C++ puissent chronométrer des portions de code. Instanciez simplement le ScopedTracer en haut d’un bloc de code et le timing sera imprimée sur la console lorsque l’instance sortira de sa portée.

  • Ajout d’une méthode statique fromHSV(int h, int s, int v) pour créer une instance Color à partir des valeurs HSV.

  • Ajout du constructeur de priorité RT à Notifier en C++. Cela permet au thread qui soutient le notificateur de fonctionner avec une priorité en temps réel, ce qui réduit la dérive ou les changements brusques de synchronisation.

  • Ajout d’une méthode DriverStation.getInstance().isJoystickConnected(int) pour vérifier si un joystick est connecté à l’application Driver Station.

  • Ajout d’une méthode DriverStation.getInstance().silenceJoystickConnectionWarning(boolean) pour supprimer le message d’avertissement affiché lorsqu’un joystick n’est pas connecté. Ce paramètre n’a aucun effet (c’est-à-dire que les messages d’avertissement continueront d’être imprimés) lorsque le robot est connecté à un véritable FMS.

  • Ajout d’un constructeur à Translation2d qui prend une distance et un angle. Ceci convertit efficacement des coordonnées polaires en coordonnées cartésiennes.

  • Ajout de EllipticalRegionConstraint, RectangularRegionConstraint, et MaxVelocityConstraint pour permettre de contraindre la vitesse de trajectoire dans une certaine région du champ.

  • Ajout de l’opérateur equals() à la classe Trajectory pour comparer deux ou plusieurs trajectoires.

  • Ajout d’un constructeur sans argument à la classe Trajectory en Java qui crée une trajectoire vide.

  • Ajout d’une exception spéciale pour attraper un mauvais comportement de contrainte de trajectoire. Cela avertit les utilisateurs lorsque les contraintes définies par l’utilisateur se comportent mal (c’est-à-dire que l’accélération minimale est supérieure à l’accélération maximale).

  • Ajout d’une méthode getRotation2d() à l’interface Gyro. Cette méthode prend automatiquement en charge la conversion des conventions gyroscopiques en conventions géométriques.

  • Ajout d’unités d’accélération angulaire pour les équipes C++. Ceux-ci sont disponibles dans l’en-tête <units/angular_acceleration.h>.

  • Ajout des getters de composants X et Y dans Pose2d - getX() and getY() en Java, X() and Y() en C++.

  • Ajout de la conversion implicite de degree_t à Rotation2d en C++. Cela permet aux équipes d’utiliser une valeur de degré (comme 47_deg) partout où une Rotation2d est requise.

  • Bogue réglé dans les exemples de suivi des trajectoires où l’odométrie n’était pas réinitialisée à la pose de départ de la trajectoire.

  • Correction de quelques bogues de génération de spline pour les utilisateurs avancés qui utilisaient directement des vecteurs de contrôle.

  • Correction de l’entrée continue du contrôleur thêta dans les exemples Swerve. Cela corrige le comportement où le chemin le plus court n’est pas utilisé pendant la rotation de la transmission.

  • units.h déconseillé, utilisez les en-têtes d’unités individuelles au lieu de ceux qui accélèrent le temps de compilation.

Simulation

  • Ajout du support de simulation de joystick.

  • Ajout de Mechanism2D pour la simulation de mécanismes.

  • Ajout de classes de physique de simulation pour les mécanismes de robot courants (DrivetrainSim, ElevatorSim, SingleJointedArmSim et FlywheelSim)

Shuffleboard

  • Le curseur numérique affiche maintenant la valeur du texte

  • Graphing Widget utilise désormais ChartFX, une bibliothèque graphique haute performance

  • Correction du formatage des chiffres décimaux avec de grands nombres

  • La taille et la position peuvent désormais être définies séparément dans l’API Shuffleboard

  • L’entrée analogique peut maintenant être visualisée avec un widget de texte

SmartDashboard

  • L’adresse IP de l’hôte peut être spécifiée dans la configuration.

PathWeaver

  • Ajout de la prise en charge des splines inversées

  • Le système de coordonnées dans le JSON exporté a changé pour être compatible avec l’interface graphique du simulateur. Consulter Importer un fichier JSON PathWeaver pour plus d’informations.

GradleRIO

  • Ajout d’une tâche vendordep pour télécharger les JSON du fournisseur ou les récupérer dans le dossier de l’utilisateur wpilib

  • Ajout d’une propriété gradlerio.vendordep.folder.path pour définir un emplacement autre que par défaut pour le dossier JSON du fournisseur

  • Renommé la tâche wpi (qui imprime les versions actuelles de WPILib et des outils) en wpiVersions

  • Ajout de l’option de configurer des variables d’environnement pendant la simulation

    • Pour configurer la variable d’environnement HALSIMWS_HOST, vous servir de

      sim {
        envVar "HALSIMWS_HOST", "10.0.0.2"
      }
      

CScore

  • Désormais, ne répertorie que les périphériques diffusables sur les plates-formes Linux.

Extension de code Visual Studio

  • Visual Studio Code a été mis à jour à la version 1.52.1

  • Extensions de langage Java et C++ mises à jour

  • L’extension Driverstation sim est activée par défaut

  • L’importateur du projet conserve maintenant la version des commandes utilisée dans le projet original

  • Clarification du texte relatif au nouveau projet et les fenêtres de l’importateur de projets

  • Correction de la corruption des fichiers binaires pendant l’importation

  • Correction de l’ordre de liaision en C++ des projets build.gradle

  • Mise à jour de la commande « Change Select Default Simulate Extension Setting » afin de fonctionner avec de multiples extensions sim

RobotBuilder

  • Mise à jour pour être compatible avec la nouvelle infrastructure logicielle orientée commande et le contrôleur PID.

    • En raison des changements majeurs dans les modèles, RobotBuilder ne prendra pas en charge un fichier de sauvegarde d’une année précédente. Vous devez régénérer le fichier de sauvegarde yaml et l’exporter vers un nouveau repertoire.

    • Une version de RobotBuilder qui exporte encore vers l’ancienne infrastructure orientée commande est incluse avec l’installateur et est appelée RobotBuilder-Old

  • C++: utiliser l’initialisation uniforme des objets dans l’en-tête

  • C++: correction de la casse (minuscules-majuscules) des inclusions pour que le code se compile sur des systèmes de fichiers sensibles à la casse

  • Utiliser le nom du projet par défaut pour enregistrer le fichier

  • Correction de l’exportation du fichier de câblage

  • Correction des fins de ligne pour les scripts afin qu’ils fonctionnent sous MacOS/Linux

  • Ajout du contrôleur XboxController

Caractérisation du robot

  • Ajout de la compensation de latence LQR

  • Le backend de l’outil a été amélioré pour être plus accessible pour les développeurs. Les fichiers de Configuration et JSON de l’ancien outil ne fonctionneront plus avec la nouvelle version.

  • Déploiement du code dans un nouveau fil d’exécution ou thread pour éviter de bloquer l’interface graphique.