从机器人程序显示表达式
备注
一般在调试或检测机器人的状态时,需要将一些参数传入控制台并观察他们的变化。在智能仪表盘的帮助下,你将可以把参数输进一个基于你得程序而自动生成的图形化用户界面。随着参数的更新,相应图形界面元素的值也将会改变。用户大可不必用肉眼捕捉屏幕上变化的参数。
将值输入智能仪表盘
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());
}
当你需要将布尔值/数值/字符串作为参数输入智能仪表盘中时,你可以直接调用对应类型的方法并输入参数的名称和参数的具体值。你不需要写任何其他的复杂代码。当你的程序中有两个值被赋予了同样的参数名,他们将被置入同一个图形化用户界面元素下并显示在操作台或开发者电脑的屏幕上。正如你所想的那样,这将是一种极佳的调试方法。
在智能仪表盘上创建小工具
窗口小部件会被自动填充在智能仪表盘上而不需要用户干预。需要注意的是,小部件仅会在数值第一次被写入时添加。为了使某些特定项目出现,你可能需要以特定模式启动机器人或触发特定代码例程。当你想要更改小部件的外观时,请参考以下两章的内容:“更改值的显示属性”<changing-display-properties>和“更改显示值所对应的小工具的类型”<changing-display-widget-type>
过期数据
SmartDashboard 使用:term:NetworkTables 在机器人和机器操控台笔记本电脑之间传递值。 NetworkTables 充当名称和值对的分布式表。如果将名称/值对添加到客户端(笔记本电脑)或服务器(机器人),则会将其复制到另一个。如果名称/值对从机器人中删除,但 SmartDashboard 或 OutlineViewer 仍在运行,那么当机器人重新启动时,旧值仍将出现在 SmartDashboard 和 OutlineViewer 中,因为它们从未停止运行并继续运行他们表中的那些值。当机器人重新启动时,这些旧值将复制到机器人。
为确保 SmartDashboard 和 OutlineViewer 显示当前值,必须同时重新启动 NetworkTables 客户端和机器人。这样,一个人持有的旧值就不会复制到其他人身上。
如果程序没有在不断变化,这通常不是问题,但是如果程序正在开发中,并且添加到NetworkTables的键组在不断变化,那么可能需要重新启动所有程序以准确查看当前是什么。