Affichage des expressions à partir du programme du robot

Note

Souvent, le débogage ou la surveillance de l’état du robot implique d’écrire un certain nombre de valeurs à la console et de les visionner par streaming. Grâce à SmartDashboard, vous pouvez afficher des valeurs dans un GUI qui est automatiquement généré par votre programme. Au fur et à mesure que les valeurs sont mises à jour, les éléments correspondants du GUI changent de valeurs - il n’est pas nécessaire d’intercepter ces valeurs en streaming à la console.

Écriture de valeurs sur SmartDashboard

protected void execute() {
   SmartDashboard.putBoolean("Bridge Limit", bridgeTipper.atBridge());
   SmartDashboard.putNumber("Bridge Angle", bridgeTipper.getPosition());
   SmartDashboard.putNumber("Swerve Angle", drivetrain.getSwerveAngle());
   SmartDashboard.putNumber("Left Drive Encoder", drivetrain.getLeftEncoder());
   SmartDashboard.putNumber("Right Drive Encoder", drivetrain.getRightEncoder());
   SmartDashboard.putNumber("Turret Pot", turret.getCurrentAngle());
   SmartDashboard.putNumber("Turret Pot Voltage", turret.getAverageVoltage());
   SmartDashboard.putNumber("RPM", shooter.getRPM());
}
void Command::Execute() {
   frc::SmartDashboard::PutBoolean("Bridge Limit", BridgeTipper.AtBridge());
   frc::SmartDashboard::PutNumber("Bridge Angle", BridgeTipper.GetPosition());
   frc::SmartDashboard::PutNumber("Swerve Angle", Drivetrain.GetSwerveAngle());
   frc::SmartDashboard::PutNumber("Left Drive Encoder", Drivetrain.GetLeftEncoder());
   frc::SmartDashboard::PutNumber("Right Drive Encoder", Drivetrain.GetRightEncoder());
   frc::SmartDashboard::PutNumber("Turret Pot", Turret.GetCurrentAngle());
   frc::SmartDashboard::PutNumber("Turret Pot Voltage", Turret.GetAverageVoltage());
   frc::SmartDashboard::PutNumber("RPM", Shooter.GetRPM());
}
from wpilib import SmartDashboard

SmartDashboard.putBoolean("Bridge Limit", bridgeTipper.atBridge())
SmartDashboard.putNumber("Bridge Angle", bridgeTipper.getPosition())
SmartDashboard.putNumber("Swerve Angle", drivetrain.getSwerveAngle())
SmartDashboard.putNumber("Left Drive Encoder", drivetrain.getLeftEncoder())
SmartDashboard.putNumber("Right Drive Encoder", drivetrain.getRightEncoder())
SmartDashboard.putNumber("Turret Pot", turret.getCurrentAngle())
SmartDashboard.putNumber("Turret Pot Voltage", turret.getAverageVoltage())
SmartDashboard.putNumber("RPM", shooter.getRPM())

Vous pouvez écrire des valeurs booléennes, numériques ou des chaînes de caractères sur SmartDashboard en appelant simplement la méthode correspondant au type de la donnée appelée et en incluant le nom et la valeur de cette donnée, aucun code supplémentaire n’est requis. Dès que votre programme écrit une valeur pour un nom déclaré, cette variable apparaîtra dans le même élément de la station de pilotage ou sur la console de l’ordinateur de développement. Comme vous pouvez l’imaginer c’est un excellent moyen de débogage et d’obtenir l’état de votre robot pendant qu’il est en opération.

Création de widgets sur SmartDashboard

Les widgets sont automatiquement remplis sur le SmartDashboard, aucune intervention de l’utilisateur n’est requise. Notez que les widgets ne sont remplis que lorsque la valeur est écrite pour la première fois, vous devrez peut-être activer votre robot dans un mode particulier ou déclencher une routine de code particulière pour qu’un élément apparaisse. Pour modifier l’apparence du widget, voir les deux sections suivantes Changer les propriétés d’affichage et Changer le type de widget pour une valeur.

Données obsolètes

SmartDashboard utilise les NetworkTables pour communiquer des valeurs entre le robot et l’ordinateur portable de la station de conduite. NetworkTables agit comme une table distribuée de paires de noms et de valeurs. Si une paire nom / valeur est ajoutée au client (ordinateur portable) ou au serveur (robot), elle est répliquée sur l’autre. Si une paire nom/valeur est supprimée, par exemple, du robot mais que le SmartDashboard ou OutlineViewer est toujours en cours d’exécution, alors lorsque le robot est redémarré, les anciennes valeurs apparaîtront toujours dans SmartDashboard et OutlineViewer car elles n’ont jamais cessé de fonctionner et continuent à ces valeurs dans leurs tableaux. Lorsque le robot redémarre, ces anciennes valeurs seront répliquées sur le robot.

Pour garantir que SmartDashboard et OutlineViewer affichent les valeurs actuelles, il est nécessaire de redémarrer les clients et le robot NetworkTables en même temps. De cette façon, les anciennes valeurs que l’on détient ne seront pas répliquées aux autres.

Ce n’est généralement pas un problème si le programme ne change pas constamment, mais si le programme est phase de développement et l’ensemble de clés ajoutées à NetworkTables changent constamment, il peut alors s’avérer nécessaire de tout redémarrer afin de voir précisément ce qui est à jour.