Mostrar expresiones desde el programa del robot

Nota

A menudo la depuración o el monitoreo del estado del robot involucra ingresar una serie de valores a la consola y verlos fluir. Con la SmartDashboard puede ingresar valores a un GUI que está automáticamente construido basado en su programa. A medida que los valores se actualizan, los elementos correspondientes GUI cambian su valor – no hay necesidad de intentar capturar números que aparecen en la pantalla.

Escribir valores a la 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())

Puede escribir valores tipo Boolean, Numeric o String a la SmartDashboard simplemente llamando el método correcto de acuerdo al tipo e incluyendo el nombre del valor de los datos, no es necesario un código adicional. Cada vez que escriba otro valor con el mismo nombre en su programa, aparece en el mismo elemento UI en la pantalla en la driver station o la computadora en uso. Como puede imaginar este es una gran manera de depurar y obtener el estado de su robot mientras esté funcionando.

Crear widgets en la SmartDashboard

Los widgets se completan en SmartDashboard automáticamente, no se requiere la intervención del usuario. Tenga en cuenta que los widgets solo se completan cuando se escribe el valor por primera vez, es posible que deba habilitar su robot en un modo particular o activar una rutina de código particular para que aparezca un elemento. Para modificar la apariencia del widget, consulte las dos secciones siguientes: Changing the Display Properties of a Value y Changing the Display Widget Type for a Value.

Datos desactualizados

SmartDashboard utiliza NetworkTables para comunicar valores entre el robot y la Driver Station. NetworkTables actúa como una tabla distribuida de pares de nombres y valores. Si se añade un par nombre/valor al cliente (portátil) o al servidor (robot), se replica al otro. Si se elimina un par nombre/valor de, por ejemplo, el robot pero el SmartDashboard o el OutlineViewer siguen funcionando, cuando el robot se reinicie, los valores antiguos seguirán apareciendo en el SmartDashboard y el OutlineViewer porque nunca dejaron de funcionar y siguen teniendo esos valores en sus tablas. Cuando el robot se reinicie, esos valores antiguos se replicarán en el robot.

Para garantizar que el SmartDashboard y el OutlineViewer muestren los valores actuales, es necesario reiniciar los clientes de NetworkTables y el robot al mismo tiempo. De esta forma, los valores antiguos que uno de ellos mantiene no se replicarán a los otros.

Normalmente esto no es un problema si el programa no está cambiando constantemente, pero si el programa está en desarrollo y el conjunto de claves que está siendo añadido a los NetworkTables está cambiando constantemente, entonces puede ser necesario hacer el reinicio de todo para ver en ese momento las actualizaciones.