指令和子系统

使用 command-based 架构时,”Shuffleboard” 可以通过实时显示各种命令和子系统的状态来帮助人们更轻松地了解机器人在做什么。

显示子系统

如果要在机器人以自动或遥控模式运行时查看其子系统的状态(即其默认命令是什么,以及当前正在使用该子系统的命令),请将子系统实例发送到Shuffleboard:

SmartDashboard.putData(subsystem-reference);
SmartDashboard::PutData(subsystem-pointer);
from wpilib import SmartDashboard

SmartDashboard.putData(subsystem-reference)

Shuffleboard将显示子系统名称,与此子系统关联的默认命令以及当前正在运行的命令。 在此示例中,Elevator子系统的默认命令称为``AutonomousCommand’’,它也是使用Elevator子系统的当前命令。

../../../../../_images/commands-subsystems-1.png

测试模式下的子系统

在“测试”模式(driver station中的“Test/Enabled”)中,子系统可以与子系统的传感器和执行器一起显示在LiveWindow选项卡中。这有助于通过查看传感器返回的值来判断传感器是否正常工作。另外,可以使用actuators。例如,可以使用滑块操作马达以设置其移动速度和方向。对于PID子系统,将显示P,I,D和F常数以及他们的设定值和启用控制器。这对于通过调整常量,输入设定值并启用嵌入式PIDController来调整PIDSubsystems来说很有用。这样就可以观察到该机制的响应。可以重复此循环(更改参数,启用和观察),直到找到合理的参数集为止。

../../../../../_images/commands-subsystems-2.png

有关PIDSubsystems的更多信息可以在这里找到:<shuffleboard-tuning-pid>使用RobotBuilder将自动生成代码,以便在Test模式下显示子系统。需要显示子系统的代码如下所示,其中子系统名称是包含子系统名称的字符串:

setName(subsystem-name);

显示命令

Using commands and subsystems makes very modular robot programs that can easily be tested and modified. Part of this is because commands can be written completely independently of other commands and can therefore be easily run from Shuffleboard. To write a command to Shuffleboard use the SmartDashboard.putData method as shown here:

SmartDashboard.putData("ElevatorMove: up", new ElevatorMove(2.7));
SmartDashboard::PutData("ElevatorMove: up", new ElevatorMove(2.7));
from wpilib import SmartDashboard

SmartDashboard.putData("ElevatorMove: up", ElevatorMove(2.7))

Shuffleboard 将显示命令名称和一个用于执行命令的按钮。这样,可以轻松地测试单个命令和命令组,而无需在机器人程序中使用特殊的测试代码。在下图中,Shuffleboard 列表中包含许多命令。一次按下按钮将运行命令,再次按下将停止命令。要使用此功能,机器人必须开启遥控模式。

../../../../../_images/commands-subsystems-3.png