Télémesure du robot avec l’interface Sendable

Alors que les API des dashboards de la WPILib permettent aux utilisateurs d’envoyer facilement de petites quantités de données de leur code robot vers le dashboard, il est souvent fastidieux d’écrire manuellement du code pour publier des valeurs de télémesure à partir de la logique opérationnelle du code robot.

A cleaner approach is to leverage the existing object-oriented structure of user code to mark important data fields for telemetry logging in a declarative programming style. The WPILib framework can then handle the tedious/tricky part of correctly reading from (and, potentially, writing to) those fields for you, greatly reducing the total amount of code the user has to write and improving readability.

WPILib fournit cette fonctionnalité par l’intermédiaire de l’interface Sendable. Les classes qui implémentent Sendable sont capables d’enregistrer des données issues des détecteurs de valeurs qui envoient automatiquement des données au dashboard et, dans certains cas, de recevoir des valeurs en retour. Ces classes peuvent être envoyées de manière déclarative à n’importe lequel des dashboards de la WPILib (comme on le ferait pour un champ de données ordinaire), éliminant ainsi la nécessité pour les équipes d’écrire leur propre code pour envoyer/sonder pour les mises à jour.

Qu’est-ce qu’un Sendable?

Sendable (Java, C++, Python) is an interface provided by WPILib to facilitate robot telemetry. Classes that implement Sendable can declaratively send their state to the dashboard - once declared, WPILib will automatically send the telemetry values every robot loop. This removes the need for teams to handle the iteration-to-iteration logic of sending and receiving values from the dashboard, and also allows teams to separate their telemetry code from their robot logic.

De nombreuses classes de la WPILib (telles que Commands) implémentent déjà l’interface Sendable, et peuvent donc être acheminées au dashboard sans aucune modification de la part de l’utilisateur. Les utilisateurs peuvent également étendre facilement leurs propres classes pour implémenter l’interface Sendable.

The Sendable interface contains only one method: initSendable. Implementing classes override this method to perform the binding of in-code data values to structured JSON data, which is then automatically sent to the robot dashboard via NetworkTables. Implementation of the Sendable interface is discussed in the next article.

Acheminenement d’un objet Sendable au dashboard

Note

Contrairement aux types de données primitives, les objet de type Sendable sont automatiquement tenus à jour dans le dashboard par la WPILib, sans autre code utilisateur - « configurez-le et oubliez-le ». En conséquence, ils doivent généralement être envoyés au dashboard à travers un bloc d’initialisation ou un constructeur, pas dans une méthode périodique.

Pour envoyer un objet Sendable au dashboard, utilisez simplement la méthode putData du dashboard. Par exemple, une classe « arm » qui utilise un contrôleur PID peut automatiquement consigner la télémesure du contrôleur en appelant ce qui suit dans son constructeur :

SmartDashboard.putData("Arm PID", armPIDController);
frc::SmartDashboard::PutData("Arm PID", &armPIDController);
from wpilib import SmartDashboard

SmartDashboard.putData("Arm PID", armPIDController)

De plus, certaines classes Sendable lient les setters ou métodes de réglage aux valeurs des données envoyées à partir du dashboard vers le robot, permettant ainsi le réglage à distance des paramètres du robot.