Communiquer avec le robot¶
Une des notions que nous n’avons pas encore abordée et la communication entre le robot et l’ordinateur du pilote. Afficher des messages ou des valeurs numériques peut en effet être très utile tant pour faire des tests qu’en compétition.
Cout et Printf()¶
La première méthode à notre disposition est d’utiliser l’affichage console
classique du C++ (cout
et printf()
). Le flux de sortie du robot est
en effet redirigé sur le réseau. On peut le lire directement sur la Driver
Station.
On peut aussi lire le flux de sortie du robot avec le RioLog. On peut lancer
le RioLog dans VS Code en entrant riolog
dans la palette de commandes
(Ctrl + Shift + P) puis en sélectionnant WpiLib: Start RioLog
.
SmartDashboard¶
Afficher des informations avec cout
pose un problème : si on affiche
régulièrement plusieurs messages, il peut devenir très compliqué de suivre
le défilement de ceux-ci. Pour cela, une alternative existe : c’est
le SmartDashboard.
Pour l’ouvrir dans VS Code : Ctrl + Shift + P puis Start Tool
et
sélectionner SmartDashboard
.
Pour utiliser le SmartDashboard, il n’y a pas besoin de déclarer une instance
de la classe SmartDashboard.
On peut appeler les méthodes de celle-ci avec l’opérateur de résolution de
portée ::
. Pour afficher des données sur le SmartDashboard, il faut
fournir 2 choses : une key qui identifie la donnée et sa valeur. Il
existe plusieurs fonctions selon le type de donnée à afficher (texte, nombre
ou booléen) :
#include <frc/smartdashboard/SmartDashboard.h>
frc::SmartDashboard::PutString("2020 Game","WaterGame");
frc::SmartDashboard::PutNumber("Best Team", 5553);
frc::SmartDashboard::PutBoolean("148+254=5553", false);
La fonction PutNumber
attend comme argument un double
. Ici, le int
5553
sera converti en un double.
Du côté du pilote, on peut lire les valeurs sur le SmartDashboard et on peut aussi les modifier. On peut alors récupérer ces valeurs avec les fonctions GetString, GetNumber et GetBoolean. Il faut alors donner en argument la key de la donnée et une valeur qui sera renvoyée si la donnée n’existe pas. Le pilote peut aussi modifier le widget qui affiche une donnée et ses propriétés.
NetworkTables¶
Pour assurer la communication entre le robot et l’ordinateur, le
SmartDashboard utilise en fait un protocole de communication créé par WpiLib :
les NetworkTables.
Pour le voir, il suffit d’ouvrir l’OutlineViewer : Ctrl + Shift + P puis
Start Tool
puis OutlineViewer
.
L’OutlineViewer permet de lire toutes les données transférées via les
NetworkTables. On voit ainsi apparaître un « dossier » (une Table) nommé
/SmartDashboard
dans lequel on retrouve toutes les données (key + valeur)
créées. Chaque Table est identifiable par une chaîne de caractères. Elle peut
posséder plusieurs données (key + valeur) qui peuvent être, comme pour le
SmartDashboard, des string
, des double
ou des bool
.
Pour accéder à ces données, on peut passer par la classe NetworkTable. Premièrement, il faut créer et récupérer une l’instance de la classe NetworkTable grâce au nom de la Table :
#include <networktables/NetworkTable.h>
auto table = NetworkTable::GetTable("datatable");
Note
Le mot clé auto
remplace la déclaration du type d’une variable ou d’un
objet. Le type est automatiquement déduit. Par exemple, ici, la variable
x
sera automatiquement un int
:
int i = 5553;
auto x = i;
Ensuite, on peut utiliser la NetworkTable (son pointeur en fait) comme avec le SmartDashboard :
table->PutNumber("PositionPivot", encodeur.GetDistance());
table->PutBoolean("Pince ouverte", isPinceOuverte);
table->PutString("Alliance", "Rouge");
Les Tables sont automatiquement synchronisées à intervalles réguliers. Mais pour plus de performances, il existe une fonction qui synchronise immédiatement tous les changements effectués sur les NetworkTables quand on l’appelle :
nt::NetworkTable::Flush();
ShuffleBoard¶
Le Shuffleboard est une version améliorée du SmartDashboard et il fonctionne de la même manière que ce dernier. Il possède une interface et des widgets plus plaisant et peut avoir plusieurs fenêtres (ou tabs).
Sa principale utilité vis-à-vis du SmartDashboard est que l’on peut configurer dans le code du robot la disposition des widgets et par example changer de fenêtre avec le Joystick. Pour découvrir toutes ses fonctionnalités : voici la documentation.