diff --git a/elastic-layout-debug.json b/elastic-layout-debug.json index e6a5cdd..666668c 100644 --- a/elastic-layout-debug.json +++ b/elastic-layout-debug.json @@ -2196,6 +2196,492 @@ ] }, "title": "Flywheel Debug" + }, + { + "name": "Conveyor Debug", + "grid_layout": { + "layouts": [], + "containers": [ + { + "title": "Shooter Velocity Test", + "x": 0.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorVelocityEnable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Shooter Test Active", + "x": 128.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorVelocityEnableActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Shooter Holdoff", + "x": 320.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/shooterConveyorTuningControlActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Main Voltage Test", + "x": 768.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/mainConveyor/mainConveyorVoltageEnable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Main Test Active", + "x": 896.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Tuning/mainConveyor/mainConveyorVoltageEnableActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Main Holdoff", + "x": 1088.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/mainConveyorTuningControlActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Shooter Target Velocity", + "x": 0.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Shooter Commanded", + "x": 256.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorCommandedTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Clamped", + "x": 512.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorClampedTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Target Volts", + "x": 768.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/mainConveyor/mainConveyorTargetVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Main Commanded", + "x": 1024.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/mainConveyor/mainConveyorCommandedTargetVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Clamped", + "x": 1280.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/mainConveyor/mainConveyorClampedTargetVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Target Now", + "x": 0.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/conveyorTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Velocity", + "x": 256.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/conveyorVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Error", + "x": 512.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/conveyorVelocityError", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Target Now", + "x": 768.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Conveyor/targetOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Velocity", + "x": 1024.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Conveyor/velocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Output Volts", + "x": 1280.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Conveyor/motorOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Output Volts", + "x": 0.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/shooterConveyorOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Left Current", + "x": 256.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/conveyorLeftStatorCurrent", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Right Current", + "x": 512.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/conveyorRightStatorCurrent", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Current", + "x": 768.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Conveyor/statorCurrent", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Max Velocity", + "x": 1024.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorMaxVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter NT Active", + "x": 1280.0, + "y": 384.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Shooter/conveyorVelocityTuningActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Shooter Velocity", + "x": 0.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/conveyorVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Shooter Target", + "x": 384.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/conveyorTargetVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4283443184, + "line_width": 2.0 + } + }, + { + "title": "Shooter Error", + "x": 768.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/conveyorVelocityError", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4294198070, + "line_width": 2.0 + } + }, + { + "title": "Shooter Output Volts", + "x": 1152.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/shooterConveyorOutputVolts", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4289374890, + "line_width": 2.0 + } + }, + { + "title": "Main Velocity", + "x": 0.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Conveyor/velocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Main Target Volts", + "x": 384.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Conveyor/targetOutputVolts", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4283443184, + "line_width": 2.0 + } + }, + { + "title": "Main Output Volts", + "x": 768.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Conveyor/motorOutputVolts", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4289374890, + "line_width": 2.0 + } + }, + { + "title": "Main Current", + "x": 1152.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Conveyor/statorCurrent", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4294198070, + "line_width": 2.0 + } + } + ] + }, + "title": "Conveyor Debug" } ] } diff --git a/elastic-layout.json b/elastic-layout.json new file mode 100644 index 0000000..f08b730 --- /dev/null +++ b/elastic-layout.json @@ -0,0 +1,2991 @@ +{ + "version": 1.0, + "grid_size": 128, + "tabs": [ + { + "name": "Match Debug", + "grid_layout": { + "layouts": [], + "containers": [ + { + "title": "Field", + "x": 768.0, + "y": 0.0, + "width": 768.0, + "height": 384.0, + "type": "Field", + "properties": { + "topic": "/SmartDashboard/Field", + "period": 0.06, + "field_game": "Reefscape", + "robot_width": 0.85, + "robot_length": 0.85, + "show_other_objects": true, + "show_trajectories": true, + "field_rotation": -180.0, + "robot_color": 4294198070, + "trajectory_color": 4294967295, + "show_robot_outside_widget": true + } + }, + { + "title": "Auto Chooser", + "x": 768.0, + "y": 384.0, + "width": 384.0, + "height": 128.0, + "type": "ComboBox Chooser", + "properties": { + "topic": "/SmartDashboard/Auto Chooser", + "period": 0.06, + "sort_options": false + } + }, + { + "title": "Wanted State", + "x": 0.0, + "y": 0.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/wantedState", + "period": 0.06, + "data_type": "string", + "show_submit_button": false + } + }, + { + "title": "System State", + "x": 256.0, + "y": 0.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/systemState", + "period": 0.06, + "data_type": "string", + "show_submit_button": false + } + }, + { + "title": "Time In State", + "x": 512.0, + "y": 0.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/timeInState", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Can Shoot", + "x": 0.0, + "y": 128.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/canShoot", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Drive Aimed", + "x": 384.0, + "y": 128.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/driveAimed", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Drive Stationary", + "x": 576.0, + "y": 128.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/driveStationary", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Heading Error", + "x": 0.0, + "y": 256.0, + "width": 256.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Superstructure/driveHeadingError", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Flywheel Voltage Offset", + "x": 256.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/flywheelVoltageOffset", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Backboard Offset", + "x": 512.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/backboardPositionOffset", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Hub Status", + "x": 1280.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/GameData2026/HubStatus", + "period": 0.06, + "data_type": "string", + "show_submit_button": false + } + }, + { + "title": "Match Time", + "x": 768.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/GameData2026/MatchTime", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Hub Changes In", + "x": 1024.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/GameData2026/SecondsUntilHubChanges", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Alliance", + "x": 1280.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/GameData2026/Alliance", + "period": 0.06, + "data_type": "string", + "show_submit_button": false + } + } + ] + } + }, + { + "name": "Mechanisms", + "grid_layout": { + "layouts": [], + "containers": [ + { + "title": "Flywheel Velocity", + "x": 0.0, + "y": 0.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/flywheelVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Flywheel Velocity Difference", + "x": 384.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/flywheelVelocityDifference", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Conveyor Volts", + "x": 640.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/shooterConveyorOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Conveyor Velocity", + "x": 0.0, + "y": 256.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/conveyorVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Shooter Conveyor Current", + "x": 384.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/statorCurrent", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Backboard Position", + "x": 896.0, + "y": 0.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/backboardCurrentRate", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Backboard Target", + "x": 1280.0, + "y": 0.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardTargetRate", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Backboard At Target", + "x": 1280.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Shooter/isBackboardAtTarget", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Backboard PID Output", + "x": 896.0, + "y": 256.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/backboardPIDOutput", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Intake Position", + "x": 0.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/IntakeRotater/position", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Intake Output Volts", + "x": 256.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/IntakeRotater/outputVoltage", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Intake Running", + "x": 512.0, + "y": 512.0, + "width": 128.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/IntakeRotater/isRunning", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Intake Output Voltage", + "x": 640.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/IntakeRotater/outputVoltage", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Intake Roller Left", + "x": 0.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/IntakeRoller/leftVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Intake Roller Right", + "x": 256.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/IntakeRoller/rightVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Intake Velocity Difference", + "x": 512.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/IntakeRoller/velocityDifference", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Intake Roller Volts", + "x": 0.0, + "y": 768.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/IntakeRoller/targetOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Intake Roller Left Speed", + "x": 256.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/IntakeRoller/leftVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Intake Roller Right Speed", + "x": 640.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/IntakeRoller/rightVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Intake Rotater Speed", + "x": 1024.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/IntakeRotater/leftVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Main Conveyor Velocity", + "x": 896.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Conveyor/velocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Main Conveyor Volts", + "x": 1280.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Conveyor/targetOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Flywheel Output Volts", + "x": 640.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/flywheelOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + } + ] + } + }, + { + "name": "Aim Pose", + "grid_layout": { + "layouts": [], + "containers": [ + { + "title": "Field", + "x": 768.0, + "y": 0.0, + "width": 768.0, + "height": 384.0, + "type": "Field", + "properties": { + "topic": "/SmartDashboard/Field", + "period": 0.06, + "field_game": "Reefscape", + "robot_width": 0.85, + "robot_length": 0.85, + "show_other_objects": true, + "show_trajectories": true, + "field_rotation": -180.0, + "robot_color": 4294198070, + "trajectory_color": 4294967295, + "show_robot_outside_widget": true + } + }, + { + "title": "Shooter Camera", + "x": 0.0, + "y": 0.0, + "width": 384.0, + "height": 256.0, + "type": "Camera Stream", + "properties": { + "topic": "/CameraPublisher/limelight-left", + "period": 0.06, + "rotation_turns": 0 + } + }, + { + "title": "Intaker Camera", + "x": 384.0, + "y": 0.0, + "width": 384.0, + "height": 256.0, + "type": "Camera Stream", + "properties": { + "topic": "/CameraPublisher/limelight-front", + "period": 0.06, + "rotation_turns": 0 + } + }, + { + "title": "Distance To Hub", + "x": 0.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/AutoControl/distanceToHub", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Angle To Hub", + "x": 256.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/AutoControl/angleDifferenceToHub", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Auto Rotation Rate", + "x": 512.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/AutoControl/autoRotationRate", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Distance To Pass", + "x": 0.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/AutoControl/distanceToPassball", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Angle To Pass", + "x": 256.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/AutoControl/angleDifferenceToPassball", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Actual VX", + "x": 0.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/AutoControl/ActualVX", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Actual VY", + "x": 256.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/AutoControl/ActualVY", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Actual VOmega", + "x": 512.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/AutoControl/ActualVOmega", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Drive Mode", + "x": 768.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Drive/DriveMode", + "period": 0.06, + "data_type": "string", + "show_submit_button": false + } + }, + { + "title": "Field Centric", + "x": 1024.0, + "y": 384.0, + "width": 128.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Drive/IsFieldCentric", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Yaw From State", + "x": 1152.0, + "y": 384.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Drive/YawFromState", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "MetaTag2 Available", + "x": 768.0, + "y": 512.0, + "width": 128.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Positioning/MetaTag2Available", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Using Limelight", + "x": 896.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Positioning/Usingll", + "period": 0.06, + "data_type": "string", + "show_submit_button": false + } + }, + { + "title": "Pose Distance", + "x": 768.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Positioning/PoseDistance", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Rotation Difference", + "x": 1024.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Positioning/RotationDifference", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "MT2 Distance Difference", + "x": 0.0, + "y": 640.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Positioning/MetaTag2DistanceDifference", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "MT2 X Difference", + "x": 384.0, + "y": 640.0, + "width": 192.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Positioning/MetaTag2XDifference", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "MT2 Y Difference", + "x": 576.0, + "y": 640.0, + "width": 192.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Positioning/MetaTag2YDifference", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + } + ] + } + }, + { + "name": "Tuning", + "grid_layout": { + "layouts": [], + "containers": [ + { + "title": "Drive Enable", + "x": 0.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/Drive/Enable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Drive kP", + "x": 128.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/Drive/kP", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Drive kI", + "x": 256.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/Drive/kI", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Drive kD", + "x": 384.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/Drive/kD", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Drive kV", + "x": 512.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/Drive/kV", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Flywheel Enable", + "x": 0.0, + "y": 192.0, + "width": 128.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/flywheel/flywheelEnable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Backboard Enable", + "x": 0.0, + "y": 576.0, + "width": 128.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/backboard/backboardEnable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Backboard kP", + "x": 512.0, + "y": 576.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkP", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Backboard kV", + "x": 640.0, + "y": 576.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkV", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Backboard kS", + "x": 768.0, + "y": 576.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkS", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Backboard kI", + "x": 896.0, + "y": 576.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkI", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Backboard kD", + "x": 1024.0, + "y": 576.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkD", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Backboard kA", + "x": 1152.0, + "y": 576.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkA", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Intake Roller Left Speed", + "x": 512.0, + "y": 960.0, + "width": 384.0, + "height": 128.0, + "type": "Graph", + "properties": { + "topic": "/IntakeRoller/leftVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Intake Roller Right Speed", + "x": 896.0, + "y": 960.0, + "width": 384.0, + "height": 128.0, + "type": "Graph", + "properties": { + "topic": "/IntakeRoller/rightVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Intake Roller Speed Diff", + "x": 1280.0, + "y": 960.0, + "width": 256.0, + "height": 128.0, + "type": "Graph", + "properties": { + "topic": "/IntakeRoller/velocityDifference", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Intake Rotater Left Speed", + "x": 512.0, + "y": 1152.0, + "width": 384.0, + "height": 128.0, + "type": "Graph", + "properties": { + "topic": "/IntakeRotater/leftVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Intake Rotater Right Speed", + "x": 896.0, + "y": 1152.0, + "width": 384.0, + "height": 128.0, + "type": "Graph", + "properties": { + "topic": "/IntakeRotater/rightVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Intake Rotater Speed Diff", + "x": 1280.0, + "y": 1152.0, + "width": 256.0, + "height": 128.0, + "type": "Graph", + "properties": { + "topic": "/IntakeRotater/velocityDifference", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + } + ] + } + }, + { + "name": "Backboard Debug", + "grid_layout": { + "layouts": [], + "containers": [ + { + "title": "Position", + "x": 0.0, + "y": 0.0, + "width": 512.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/backboardCurrentRate", + "period": 0.033, + "data_type": "double", + "time_displayed": 6.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Setpoint Position", + "x": 512.0, + "y": 0.0, + "width": 512.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/backboardSetpointPosition", + "period": 0.033, + "data_type": "double", + "time_displayed": 6.0, + "color": 4294198070, + "line_width": 2.0 + } + }, + { + "title": "Position Enable", + "x": 1024.0, + "y": 0.0, + "width": 256.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/backboard/backboardPositionEnable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Target Position", + "x": 1280.0, + "y": 0.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardTargetPosition", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Position Active", + "x": 1024.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Tuning/backboard/backboardPositionEnableActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Clamped Target", + "x": 1280.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardClampedTargetPosition", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Goal Error", + "x": 0.0, + "y": 256.0, + "width": 512.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/backboardGoalError", + "period": 0.033, + "data_type": "double", + "time_displayed": 6.0, + "color": 4281966278, + "line_width": 2.0 + } + }, + { + "title": "PID Output", + "x": 512.0, + "y": 256.0, + "width": 512.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/backboardPIDOutput", + "period": 0.033, + "data_type": "double", + "time_displayed": 6.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Setpoint Velocity", + "x": 1024.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardSetpointVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Setpoint Error", + "x": 1280.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardSetpointError", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Raw PID Output", + "x": 1024.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardRawPIDOutput", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Clamped PID Output", + "x": 1280.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardClampedPIDOutput", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Output Saturated", + "x": 0.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Shooter/backboardOutputSaturated", + "period": 0.06, + "data_type": "boolean", + "true_color": 4294198070, + "false_color": 4283215696, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Minimum Output", + "x": 256.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Shooter/backboardMinimumOutputActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4294198070, + "false_color": 4283215696, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Final Output Volts", + "x": 512.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Max Output Volts", + "x": 768.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardMaxOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Motor Voltage", + "x": 1024.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardMotorVoltage", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Motor Current", + "x": 1280.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardMotorStatorCurrent", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Motor Position", + "x": 0.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardMotorPosition", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Motor Velocity", + "x": 256.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardMotorVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Tolerance", + "x": 512.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardPositionTolerance", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shoot Position", + "x": 768.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardShootPosition", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Pass Position", + "x": 1024.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardPassPosition", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "System State", + "x": 1280.0, + "y": 640.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/systemState", + "period": 0.06, + "data_type": "string", + "show_submit_button": false + } + }, + { + "title": "Backboard Enable", + "x": 0.0, + "y": 768.0, + "width": 128.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/backboard/backboardEnable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Talon kP", + "x": 512.0, + "y": 768.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkP", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Talon kI", + "x": 640.0, + "y": 768.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkI", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Talon kD", + "x": 768.0, + "y": 768.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkD", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Talon kV", + "x": 896.0, + "y": 768.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkV", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Talon kS", + "x": 1024.0, + "y": 768.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkS", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Talon kA", + "x": 1152.0, + "y": 768.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/backboard/backboardkA", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Min Output Volts", + "x": 1280.0, + "y": 768.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardMinOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + } + ] + } + }, + { + "name": "Flywheel Debug", + "grid_layout": { + "layouts": [], + "containers": [ + { + "title": "Apply Gains", + "x": 0.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/flywheel/flywheelEnable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Velocity Test", + "x": 128.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/flywheel/flywheelVelocityEnable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Test Active", + "x": 256.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Tuning/flywheel/flywheelVelocityEnableActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "At Velocity", + "x": 448.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Shooter/flywheelAtVelocity", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Opposed Follower", + "x": 640.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Shooter/flywheelFollowerOpposed", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Target Velocity", + "x": 0.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Tolerance", + "x": 256.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelVelocityTolerance", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Commanded Target", + "x": 512.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelCommandedTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Clamped Target", + "x": 768.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelClampedTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Active Tolerance", + "x": 1024.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelVelocityToleranceActive", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "kP", + "x": 0.0, + "y": 320.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelkP", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "kI", + "x": 128.0, + "y": 320.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelkI", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "kD", + "x": 256.0, + "y": 320.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelkD", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "kV", + "x": 384.0, + "y": 320.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelkV", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "kA", + "x": 512.0, + "y": 320.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelkA", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "kS", + "x": 640.0, + "y": 320.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/flywheel/flywheelkS", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Target Velocity Now", + "x": 768.0, + "y": 320.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/flywheelTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Velocity Error", + "x": 1024.0, + "y": 320.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/flywheelVelocityError", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Average Velocity", + "x": 0.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/flywheelVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Target Velocity", + "x": 384.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/flywheelTargetVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4283443184, + "line_width": 2.0 + } + }, + { + "title": "Velocity Error", + "x": 768.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/flywheelVelocityError", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4294198070, + "line_width": 2.0 + } + }, + { + "title": "Output Volts", + "x": 1152.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/flywheelOutputVolts", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4289374890, + "line_width": 2.0 + } + }, + { + "title": "Left Velocity", + "x": 0.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/leftFlywheelVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Right Velocity", + "x": 384.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/rightFlywheelVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4283443184, + "line_width": 2.0 + } + }, + { + "title": "Velocity Difference", + "x": 768.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/flywheelVelocityDifference", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4294198070, + "line_width": 2.0 + } + }, + { + "title": "Left Current", + "x": 1152.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/leftFlywheelStatorCurrent", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4289374890, + "line_width": 2.0 + } + }, + { + "title": "Right Current", + "x": 1152.0, + "y": 1024.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/rightFlywheelStatorCurrent", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Left Output Volts", + "x": 256.0, + "y": 1024.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/leftFlywheelOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Right Output Volts", + "x": 512.0, + "y": 1024.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/rightFlywheelOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Left Output Volts Graph", + "x": 0.0, + "y": 1152.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/leftFlywheelOutputVolts", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4283443184, + "line_width": 2.0 + } + }, + { + "title": "Right Output Volts Graph", + "x": 384.0, + "y": 1152.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/rightFlywheelOutputVolts", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4289374890, + "line_width": 2.0 + } + }, + { + "title": "Velocity Offset", + "x": 768.0, + "y": 1024.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/flywheelVelocityOffset", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Can Shoot", + "x": 1024.0, + "y": 1024.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/canShoot", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Shooter Ready", + "x": 1216.0, + "y": 1024.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/shooterAtVelocity", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + } + ] + } + }, + { + "name": "Tab 7", + "grid_layout": { + "layouts": [], + "containers": [ + { + "title": "Field", + "x": 0.0, + "y": 0.0, + "width": 768.0, + "height": 384.0, + "type": "Field", + "properties": { + "topic": "/SmartDashboard/Field", + "period": 0.06, + "field_game": "Rebuilt (No Fuel)", + "robot_width": 0.85, + "robot_length": 0.85, + "show_other_objects": true, + "show_trajectories": true, + "field_rotation": -180.0, + "robot_color": 4294198070, + "trajectory_color": 4294967295, + "show_robot_outside_widget": true + } + }, + { + "title": "Wanted State", + "x": 0.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/wantedState", + "period": 0.06, + "data_type": "string", + "show_submit_button": false + } + }, + { + "title": "System State", + "x": 256.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/systemState", + "period": 0.06, + "data_type": "string", + "show_submit_button": false + } + }, + { + "title": "Can Shoot", + "x": 0.0, + "y": 512.0, + "width": 128.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/canShoot", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Drive Aimed", + "x": 128.0, + "y": 512.0, + "width": 128.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/driveAimed", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Drive Stationary", + "x": 256.0, + "y": 512.0, + "width": 128.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/driveStationary", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Flywheel Voltage Offset", + "x": 0.0, + "y": 640.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/flywheelVoltageOffset", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Backboard Offset", + "x": 128.0, + "y": 640.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/backboardPositionOffset", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Heading Error", + "x": 256.0, + "y": 640.0, + "width": 128.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Superstructure/driveHeadingError", + "period": 0.033, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Auto Chooser", + "x": 0.0, + "y": 768.0, + "width": 384.0, + "height": 128.0, + "type": "ComboBox Chooser", + "properties": { + "topic": "/SmartDashboard/Auto Chooser", + "period": 0.06, + "sort_options": false + } + }, + { + "title": "Match Time", + "x": 768.0, + "y": 0.0, + "width": 256.0, + "height": 128.0, + "type": "Large Text Display", + "properties": { + "topic": "/GameData2026/MatchTime", + "period": 0.06, + "data_type": "double" + } + }, + { + "title": "Hub Changes In", + "x": 768.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Large Text Display", + "properties": { + "topic": "/GameData2026/SecondsUntilHubChanges", + "period": 0.06, + "data_type": "double" + } + }, + { + "title": "Hub Status", + "x": 768.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Large Text Display", + "properties": { + "topic": "/GameData2026/HubStatus", + "period": 0.06, + "data_type": "string" + } + }, + { + "title": "Flywheel Velocity", + "x": 384.0, + "y": 640.0, + "width": 256.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/flywheelVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Shooter Conveyor Velocity", + "x": 640.0, + "y": 640.0, + "width": 256.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/conveyorVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Backboard Position", + "x": 1152.0, + "y": 640.0, + "width": 256.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/backboardCurrentRate", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Main Conveyor Velocity", + "x": 896.0, + "y": 640.0, + "width": 256.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Conveyor/velocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Backboard Target", + "x": 1152.0, + "y": 512.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/backboardTargetRate", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Camera", + "x": 1024.0, + "y": 0.0, + "width": 384.0, + "height": 256.0, + "type": "Camera Stream", + "properties": { + "topic": "/CameraPublisher/limelight-left", + "period": 0.06, + "rotation_turns": 0 + } + }, + { + "title": "Intaker Camera", + "x": 1024.0, + "y": 256.0, + "width": 384.0, + "height": 256.0, + "type": "Camera Stream", + "properties": { + "topic": "/CameraPublisher/limelight-front", + "period": 0.06, + "rotation_turns": 0 + } + }, + { + "title": "MT2 Distance Difference", + "x": 1408.0, + "y": 128.0, + "width": 256.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Positioning/MetaTag2DistanceDifference", + "period": 0.033, + "data_type": "double", + "time_displayed": 5.0, + "color": 4278238420, + "line_width": 2.0 + } + } + ] + } + }, + { + "name": "Conveyor Debug", + "grid_layout": { + "layouts": [], + "containers": [ + { + "title": "Shooter Velocity Test", + "x": 0.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorVelocityEnable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Shooter Test Active", + "x": 128.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorVelocityEnableActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Shooter Holdoff", + "x": 320.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/shooterConveyorTuningControlActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Main Voltage Test", + "x": 768.0, + "y": 0.0, + "width": 128.0, + "height": 128.0, + "type": "Toggle Switch", + "properties": { + "topic": "/Tuning/mainConveyor/mainConveyorVoltageEnable", + "period": 0.06, + "data_type": "boolean" + } + }, + { + "title": "Main Test Active", + "x": 896.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Tuning/mainConveyor/mainConveyorVoltageEnableActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Main Holdoff", + "x": 1088.0, + "y": 0.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Superstructure/mainConveyorTuningControlActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Shooter Target Velocity", + "x": 0.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Shooter Commanded", + "x": 256.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorCommandedTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Clamped", + "x": 512.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorClampedTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Target Volts", + "x": 768.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/mainConveyor/mainConveyorTargetVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": true + } + }, + { + "title": "Main Commanded", + "x": 1024.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/mainConveyor/mainConveyorCommandedTargetVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Clamped", + "x": 1280.0, + "y": 128.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/mainConveyor/mainConveyorClampedTargetVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Target Now", + "x": 0.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/conveyorTargetVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Velocity", + "x": 256.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/conveyorVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Error", + "x": 512.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/conveyorVelocityError", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Target Now", + "x": 768.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Conveyor/targetOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Velocity", + "x": 1024.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Conveyor/velocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Output Volts", + "x": 1280.0, + "y": 256.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Conveyor/motorOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Output Volts", + "x": 0.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/shooterConveyorOutputVolts", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Left Current", + "x": 256.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/conveyorLeftStatorCurrent", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Right Current", + "x": 512.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Shooter/conveyorRightStatorCurrent", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Main Current", + "x": 768.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Conveyor/statorCurrent", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter Max Velocity", + "x": 1024.0, + "y": 384.0, + "width": 256.0, + "height": 128.0, + "type": "Text Display", + "properties": { + "topic": "/Tuning/shooterConveyor/shooterConveyorMaxVelocity", + "period": 0.06, + "data_type": "double", + "show_submit_button": false + } + }, + { + "title": "Shooter NT Active", + "x": 1280.0, + "y": 384.0, + "width": 192.0, + "height": 128.0, + "type": "Boolean Box", + "properties": { + "topic": "/Shooter/conveyorVelocityTuningActive", + "period": 0.06, + "data_type": "boolean", + "true_color": 4283215696, + "false_color": 4294198070, + "true_icon": "None", + "false_icon": "None" + } + }, + { + "title": "Shooter Velocity", + "x": 0.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/conveyorVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Shooter Target", + "x": 384.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/conveyorTargetVelocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4283443184, + "line_width": 2.0 + } + }, + { + "title": "Shooter Error", + "x": 768.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/conveyorVelocityError", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4294198070, + "line_width": 2.0 + } + }, + { + "title": "Shooter Output Volts", + "x": 1152.0, + "y": 512.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Shooter/shooterConveyorOutputVolts", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4289374890, + "line_width": 2.0 + } + }, + { + "title": "Main Velocity", + "x": 0.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Conveyor/velocity", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4278238420, + "line_width": 2.0 + } + }, + { + "title": "Main Target Volts", + "x": 384.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Conveyor/targetOutputVolts", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4283443184, + "line_width": 2.0 + } + }, + { + "title": "Main Output Volts", + "x": 768.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Conveyor/motorOutputVolts", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4289374890, + "line_width": 2.0 + } + }, + { + "title": "Main Current", + "x": 1152.0, + "y": 768.0, + "width": 384.0, + "height": 256.0, + "type": "Graph", + "properties": { + "topic": "/Conveyor/statorCurrent", + "period": 0.033, + "data_type": "double", + "time_displayed": 8.0, + "color": 4294198070, + "line_width": 2.0 + } + } + ] + }, + "title": "Conveyor Debug" + } + ] +} diff --git a/src/main/java/frc/robot/Constants.java b/src/main/java/frc/robot/Constants.java index a3bb1d3..3f6d17c 100644 --- a/src/main/java/frc/robot/Constants.java +++ b/src/main/java/frc/robot/Constants.java @@ -30,6 +30,7 @@ public final class Constants { public static final double shooterConveyorFeedVelocity = 40; public static final double shooterConveyorReverseVelocity = -10; + public static final double shooterConveyorMaxVelocity = 120.0; public static final Slot0Configs flyWheelSlot0Configs = new Slot0Configs() .withKP(0.21) @@ -128,7 +129,7 @@ public final class Constants { public static final double intakeRollerOuttakeVoltage = 3.0; public static final double intakeRotaterRaiseVoltage = 0.8; - public static final double intakeRotaterLowerVoltage = -0.1; + public static final double intakeRotaterLowerVoltage = -1.5; public static final Slot0Configs intakeRollerSlot0Configs = new Slot0Configs() .withKP(0.00).withKI(0.00).withKD(0.00) @@ -146,6 +147,7 @@ public final class Constants { public static class Conveyor { public static final int mainConveyorID = 42; public static final double feedVoltage = 2.5; + public static final double intakeFeedVoltage = 1.5; public static final double reverseVoltage = -2.0; public static final Slot0Configs mainConveyorSlot0Configs = new Slot0Configs() @@ -159,6 +161,7 @@ public final class Constants { public static final double shooterFeedVelocity = Shooter.shooterConveyorFeedVelocity; public static final double shooterReverseVelocity = Shooter.shooterConveyorReverseVelocity; public static final double shootTimeoutSeconds = 4.0; + public static final double prepShootFallbackDelaySeconds = 0.5; public static final double aimToleranceDegrees = 1.5; public static final double stationarySpeedToleranceMetersPerSecond = 0.5; public static final double passBallFlywheelVoltage = Shooter.defaultFlywheelVoltage; @@ -168,7 +171,5 @@ public final class Constants { // Shoot backboard target position in external encoder counts. public static final double backboardShootPosition = 175.0; public static final double backboardReadyPositionTolerance = 100.0; - // Whether the shooting gate requires the drivetrain to be nearly still. - public static final boolean stationaryGateEnabled = true; } } diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index 3dcf292..0ac11f7 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -138,6 +138,9 @@ public class RobotContainer { .onTrue(operatorControls.requestShootHubCommand()) .onFalse(operatorControls.requestIdleCommand()); controller.rightBumper().and(teleopOnly) + .onTrue(Commands.runOnce(() -> driveControls.setBoostEnabled(true))) + .onFalse(Commands.runOnce(() -> driveControls.setBoostEnabled(false))); + controller.b().and(teleopOnly) .onTrue(operatorControls.requestEjectCommand()) .onFalse(operatorControls.requestIdleCommand()); controller.povLeft().onTrue(Commands.runOnce(() -> operatorControls.adjustFlywheelVelocityOffset(-1.0))); @@ -162,6 +165,8 @@ public class RobotContainer { configFlywheelTuner.periodic(() -> shooterSubsystem.applyLeftConfigurationToRight()); configBackboardTuner.periodic(); shooterSubsystem.debugFlywheelVelocityPeriodic(allowMotorOutputTuning); + shooterSubsystem.debugShooterConveyorVelocityPeriodic(allowMotorOutputTuning); + conveyorSubsystem.debugMainConveyorVoltagePeriodic(allowMotorOutputTuning); shooterSubsystem.debugBackboardTargetPeriodic(allowMotorOutputTuning); shooterSubsystem.setRightFlywheelFollowLeft(); shooterSubsystem.setRightConveyorFollowLeft(); diff --git a/src/main/java/frc/robot/controls/DriveControls.java b/src/main/java/frc/robot/controls/DriveControls.java index fac25d3..feb8cc8 100644 --- a/src/main/java/frc/robot/controls/DriveControls.java +++ b/src/main/java/frc/robot/controls/DriveControls.java @@ -37,14 +37,14 @@ public class DriveControls { private final double maxAngularRate = RotationsPerSecond.of(0.75).in(edu.wpi.first.units.Units.RadiansPerSecond); // 默认速度比例,普通驾驶使用。 - private double normalDriveScale = 1.0; - private double normalTurnScale = 1.0; + private double normalDriveScale = 0.6; + private double normalTurnScale = 0.8; // 加速模式比例,按住 RB 时使用。 private double boostDriveScale = 1.0; private double boostTurnScale = 1.0; // 自动瞄准时降低平移速度。 - private double slowDriveScale =0.1; + private double slowDriveScale = 0.3; private boolean boostEnabled = false; diff --git a/src/main/java/frc/robot/subsystems/ConveyorSubsystem.java b/src/main/java/frc/robot/subsystems/ConveyorSubsystem.java index feb9199..6d7f337 100644 --- a/src/main/java/frc/robot/subsystems/ConveyorSubsystem.java +++ b/src/main/java/frc/robot/subsystems/ConveyorSubsystem.java @@ -1,11 +1,14 @@ package frc.robot.subsystems; +import com.ctre.phoenix6.configs.MotorOutputConfigs; import com.ctre.phoenix6.controls.NeutralOut; import com.ctre.phoenix6.controls.VoltageOut; import com.ctre.phoenix6.hardware.TalonFX; +import com.ctre.phoenix6.signals.NeutralModeValue; import edu.wpi.first.networktables.NetworkTable; import edu.wpi.first.networktables.NetworkTableInstance; +import edu.wpi.first.wpilibj.DriverStation; import edu.wpi.first.wpilibj2.command.SubsystemBase; import edu.wpi.first.math.MathUtil; import frc.robot.Constants; @@ -18,15 +21,27 @@ public class ConveyorSubsystem extends SubsystemBase { private final VoltageOut voltageRequest = new VoltageOut(0); private final NeutralOut neutralRequest = new NeutralOut(); private final NetworkTable table = NetworkTableInstance.getDefault().getTable("Conveyor"); + private final NetworkTable tuningTable = NetworkTableInstance.getDefault().getTable("Tuning/mainConveyor"); private double targetOutputVolts = 0.0; + private double commandedDebugVolts = Constants.Conveyor.feedVoltage; + private double clampedDebugVolts = Constants.Conveyor.feedVoltage; + private boolean voltageTuningActive = false; public ConveyorSubsystem() { mainConveyor = new TalonFX(Constants.Conveyor.mainConveyorID); mainConveyor.getConfigurator().apply(Constants.Conveyor.mainConveyorSlot0Configs); + var mainConveyorMotorOutputConfigs = new MotorOutputConfigs(); + mainConveyorMotorOutputConfigs.NeutralMode = NeutralModeValue.Coast; + mainConveyor.getConfigurator().apply(mainConveyorMotorOutputConfigs); + tuningTable.getEntry("mainConveyorVoltageEnable").setDefaultBoolean(false); + tuningTable.getEntry("mainConveyorTargetVolts").setDefaultDouble(Constants.Conveyor.feedVoltage); } public void feedToShooter() { setVoltage(Constants.Conveyor.feedVoltage); } + public void feedForIntake() { + setVoltage(Constants.Conveyor.intakeFeedVoltage); + } public void reverse() { setVoltage(Constants.Conveyor.reverseVoltage); } @@ -39,9 +54,37 @@ public class ConveyorSubsystem extends SubsystemBase { mainConveyor.setControl(voltageRequest.withOutput(targetOutputVolts)); } + public boolean isMainConveyorTuningControlActive() { + return DriverStation.isTestEnabled() + && tuningTable.getEntry("mainConveyorVoltageEnable").getBoolean(false); + } + + public void debugMainConveyorVoltagePeriodic(boolean allowMotorOutput) { + voltageTuningActive = + allowMotorOutput + && DriverStation.isTestEnabled() + && tuningTable.getEntry("mainConveyorVoltageEnable").getBoolean(false); + commandedDebugVolts = tuningTable.getEntry("mainConveyorTargetVolts") + .getDouble(Constants.Conveyor.feedVoltage); + clampedDebugVolts = MathUtil.clamp(commandedDebugVolts, -12.0, 12.0); + + tuningTable.getEntry("mainConveyorVoltageEnableActive").setBoolean(voltageTuningActive); + tuningTable.getEntry("mainConveyorCommandedTargetVolts").setDouble(commandedDebugVolts); + tuningTable.getEntry("mainConveyorClampedTargetVolts").setDouble(clampedDebugVolts); + + if (voltageTuningActive) { + setVoltage(clampedDebugVolts); + } + } + @Override public void periodic() { table.getEntry("velocity").setDouble(mainConveyor.getVelocity().getValueAsDouble()); table.getEntry("targetOutputVolts").setDouble(targetOutputVolts); + table.getEntry("motorOutputVolts").setDouble(mainConveyor.getMotorVoltage().getValueAsDouble()); + table.getEntry("statorCurrent").setDouble(mainConveyor.getStatorCurrent().getValueAsDouble()); + table.getEntry("voltageTuningActive").setBoolean(voltageTuningActive); + table.getEntry("commandedDebugVolts").setDouble(commandedDebugVolts); + table.getEntry("clampedDebugVolts").setDouble(clampedDebugVolts); } } diff --git a/src/main/java/frc/robot/subsystems/IntakeRotaterSubsystem.java b/src/main/java/frc/robot/subsystems/IntakeRotaterSubsystem.java index 30aa25c..a2fcdd3 100644 --- a/src/main/java/frc/robot/subsystems/IntakeRotaterSubsystem.java +++ b/src/main/java/frc/robot/subsystems/IntakeRotaterSubsystem.java @@ -69,9 +69,9 @@ public class IntakeRotaterSubsystem extends SubsystemBase { } public void shootAssist() { - double cycleTime = Timer.getFPGATimestamp() % 1.7; + double cycleTime = Timer.getFPGATimestamp() % 1.6; - if (cycleTime < 0.7) { + if (cycleTime < 0.6) { setVoltage(1); } else if (cycleTime < 0.9) { setVoltage(0.0); diff --git a/src/main/java/frc/robot/subsystems/ShooterSubsystem.java b/src/main/java/frc/robot/subsystems/ShooterSubsystem.java index f569771..b59dd0b 100644 --- a/src/main/java/frc/robot/subsystems/ShooterSubsystem.java +++ b/src/main/java/frc/robot/subsystems/ShooterSubsystem.java @@ -54,12 +54,15 @@ public class ShooterSubsystem extends SubsystemBase { private final NetworkTable shooterNetworkTable; private final NetworkTable flywheelTuningTable; private final NetworkTable backboardTuningTable; + private final NetworkTable shooterConveyorTuningTable; private double flywheelOutputVolts = 0.0; private double flywheelTargetVelocity = 0.0; private double flywheelVelocityTolerance = Constants.Shooter.flywheelReadyVelocityTolerance; private boolean flywheelVelocityTuningActive = false; private double shooterConveyorTargetVelocity = 0.0; + private double shooterConveyorCommandedTargetVelocity = Constants.Shooter.shooterConveyorFeedVelocity; + private double shooterConveyorClampedTargetVelocity = Constants.Shooter.shooterConveyorFeedVelocity; private boolean shooterConveyorVelocityTuningActive = false; private double shooterConveyorOutputVolts = 0.0; private double backboardOutputVolts = 0.0; @@ -123,6 +126,10 @@ public class ShooterSubsystem extends SubsystemBase { backboardTuningTable = NetworkTableInstance.getDefault().getTable("Tuning/backboard"); backboardTuningTable.getEntry("backboardPositionEnable").setDefaultBoolean(false); backboardTuningTable.getEntry("backboardTargetPosition").setDefaultDouble(0.0); + shooterConveyorTuningTable = NetworkTableInstance.getDefault().getTable("Tuning/shooterConveyor"); + shooterConveyorTuningTable.getEntry("shooterConveyorVelocityEnable").setDefaultBoolean(false); + shooterConveyorTuningTable.getEntry("shooterConveyorTargetVelocity") + .setDefaultDouble(Constants.Shooter.shooterConveyorFeedVelocity); } /* ====================== */ @@ -354,7 +361,8 @@ public class ShooterSubsystem extends SubsystemBase { } public boolean isShooterConveyorTuningControlActive() { - return false; + return DriverStation.isTestEnabled() + && shooterConveyorTuningTable.getEntry("shooterConveyorVelocityEnable").getBoolean(false); } public void resetbackboardencoder() { @@ -429,6 +437,34 @@ public class ShooterSubsystem extends SubsystemBase { } } + public void debugShooterConveyorVelocityPeriodic(boolean allowMotorOutput) { + shooterConveyorVelocityTuningActive = + allowMotorOutput + && DriverStation.isTestEnabled() + && shooterConveyorTuningTable.getEntry("shooterConveyorVelocityEnable").getBoolean(false); + shooterConveyorCommandedTargetVelocity = shooterConveyorTuningTable + .getEntry("shooterConveyorTargetVelocity") + .getDouble(Constants.Shooter.shooterConveyorFeedVelocity); + shooterConveyorClampedTargetVelocity = MathUtil.clamp( + shooterConveyorCommandedTargetVelocity, + -Constants.Shooter.shooterConveyorMaxVelocity, + Constants.Shooter.shooterConveyorMaxVelocity + ); + + shooterConveyorTuningTable.getEntry("shooterConveyorVelocityEnableActive") + .setBoolean(shooterConveyorVelocityTuningActive); + shooterConveyorTuningTable.getEntry("shooterConveyorCommandedTargetVelocity") + .setDouble(shooterConveyorCommandedTargetVelocity); + shooterConveyorTuningTable.getEntry("shooterConveyorClampedTargetVelocity") + .setDouble(shooterConveyorClampedTargetVelocity); + shooterConveyorTuningTable.getEntry("shooterConveyorMaxVelocity") + .setDouble(Constants.Shooter.shooterConveyorMaxVelocity); + + if (shooterConveyorVelocityTuningActive) { + runShooterConveyorVelocity(shooterConveyorClampedTargetVelocity); + } + } + @Override public void periodic() { double backboardPosition = getBackboardPosition(); @@ -456,6 +492,10 @@ public class ShooterSubsystem extends SubsystemBase { shooterNetworkTable.getEntry("conveyorVelocity").setDouble(getShooterConveyorVelocity()); shooterNetworkTable.getEntry("conveyorVelocityError").setDouble(getShooterConveyorVelocityError()); shooterNetworkTable.getEntry("conveyorVelocityTuningActive").setBoolean(shooterConveyorVelocityTuningActive); + shooterNetworkTable.getEntry("conveyorCommandedTargetVelocity").setDouble(shooterConveyorCommandedTargetVelocity); + shooterNetworkTable.getEntry("conveyorClampedTargetVelocity").setDouble(shooterConveyorClampedTargetVelocity); + shooterNetworkTable.getEntry("conveyorLeftStatorCurrent").setDouble(leftConveyor.getStatorCurrent().getValueAsDouble()); + shooterNetworkTable.getEntry("conveyorRightStatorCurrent").setDouble(rightConveyor.getStatorCurrent().getValueAsDouble()); shooterNetworkTable.getEntry("backboardCurrentRate").setDouble(backboardPosition); shooterNetworkTable.getEntry("backboardTargetRate").setDouble(backboardSetpointPosition); shooterNetworkTable.getEntry("backboardOutputVolts").setDouble(backboardOutputVolts); diff --git a/src/main/java/frc/robot/subsystems/Superstructure.java b/src/main/java/frc/robot/subsystems/Superstructure.java index d3783b0..87ba041 100644 --- a/src/main/java/frc/robot/subsystems/Superstructure.java +++ b/src/main/java/frc/robot/subsystems/Superstructure.java @@ -182,10 +182,8 @@ public class Superstructure extends SubsystemBase { /* ====================== */ public boolean canShoot() { - boolean stationaryGate = !Constants.Superstructure.stationaryGateEnabled || isDriveStationary(); return shooter.atVelocity() && drive.isAimed() - && stationaryGate && isBackboardReady(); } @@ -257,7 +255,7 @@ public class Superstructure extends SubsystemBase { setSystemState(SystemState.INITIALIZING); } - conveyor.stop(); + stopMainConveyorUnlessTuning(); intakeRoller.stop(); stopFlywheelUnlessTuning(); stopShooterConveyorUnlessTuning(); @@ -266,7 +264,7 @@ public class Superstructure extends SubsystemBase { private void handleIdle() { // 安全默认状态:球路不动,intaker 不主动动作,背板保持受控。 - conveyor.stop(); + stopMainConveyorUnlessTuning(); intakeRoller.stop(); if (!runPostShootIdleAssist()) { intakeRotater.stop(); @@ -298,13 +296,13 @@ public class Superstructure extends SubsystemBase { holdBackboardStowedUnlessTuning(); // Intaker 比赛开始后保持下放,收球何时结束由操作员松开按键决定。 intakeRoller.intake(); - conveyor.feedToShooter(); + intakeFeedMainConveyorUnlessTuning(); setSystemState(SystemState.INTAKING); } private void handleAimHub() { intakeRoller.stop(); - conveyor.stop(); + stopMainConveyorUnlessTuning(); stopFlywheelUnlessTuning(); stopShooterConveyorUnlessTuning(); holdBackboardStowedUnlessTuning(); @@ -323,8 +321,8 @@ public class Superstructure extends SubsystemBase { } private void handlePassBall() { - double targetVelocity = Constants.Superstructure.passBallFlywheelVelocity + flywheelVelocityOffset; - double backboardPosition = Constants.Superstructure.passBallBackboardPosition + backboardPositionOffset; + double targetVelocity = 30; + double backboardPosition = 2000; handlePreparedFeed(targetVelocity, backboardPosition); } @@ -343,27 +341,32 @@ public class Superstructure extends SubsystemBase { // 避免球接触飞轮导致的掉速中断喂球。 intakeRotater.shootAssist(); intakeRoller.intakeforshoot(); - conveyor.feedToShooter(); + feedMainConveyorUnlessTuning(); runShooterConveyorVelocityUnlessTuning(Constants.Superstructure.shooterFeedVelocity); return; } // 未开始喂球前,球路保持静止。 - conveyor.stop(); + stopMainConveyorUnlessTuning(); stopShooterConveyorUnlessTuning(); intakeRoller.stop(); - // 门控条件实时刷新:条件回落时状态同步回退,仪表盘能看到卡在哪一关。 - if (canShoot()) { + // Keep normal gating, but force the shot if prep takes too long. + if (canShoot() || prepShootFallbackElapsed()) { setSystemState(SystemState.SHOOTING); } } + private boolean prepShootFallbackElapsed() { + return systemState == SystemState.PREP_SHOOT + && timeInState() >= Constants.Superstructure.prepShootFallbackDelaySeconds; + } + private void handleEject() { // Eject 反转整条球路,飞轮保持停止。 setSystemState(SystemState.EJECTING); intakeRoller.outtake(); - conveyor.reverse(); + reverseMainConveyorUnlessTuning(); runShooterConveyorVelocityUnlessTuning(Constants.Superstructure.shooterReverseVelocity); stopFlywheelUnlessTuning(); holdBackboardStowedUnlessTuning(); @@ -393,13 +396,37 @@ public class Superstructure extends SubsystemBase { } } + private void feedMainConveyorUnlessTuning() { + if (!conveyor.isMainConveyorTuningControlActive()) { + conveyor.feedToShooter(); + } + } + + private void intakeFeedMainConveyorUnlessTuning() { + if (!conveyor.isMainConveyorTuningControlActive()) { + conveyor.feedForIntake(); + } + } + + private void reverseMainConveyorUnlessTuning() { + if (!conveyor.isMainConveyorTuningControlActive()) { + conveyor.reverse(); + } + } + + private void stopMainConveyorUnlessTuning() { + if (!conveyor.isMainConveyorTuningControlActive()) { + conveyor.stop(); + } + } + private void handleManual() { // 手动模式:状态机不再驱动机构,交给现场手动/调参工具; // 只保持飞轮与喂球停止,避免意外射出。 setSystemState(SystemState.MANUAL_OVERRIDE); stopFlywheelUnlessTuning(); stopShooterConveyorUnlessTuning(); - conveyor.stop(); + stopMainConveyorUnlessTuning(); intakeRoller.stop(); } @@ -441,6 +468,8 @@ public class Superstructure extends SubsystemBase { table.getEntry("flywheelTuningControlActive").setBoolean(shooter.isFlywheelTuningControlActive()); table.getEntry("shooterConveyorTuningControlActive") .setBoolean(shooter.isShooterConveyorTuningControlActive()); + table.getEntry("mainConveyorTuningControlActive") + .setBoolean(conveyor.isMainConveyorTuningControlActive()); table.getEntry("flywheelVoltageOffset").setDouble(flywheelVelocityOffset * Constants.Shooter.flywheelNominalKv); table.getEntry("backboardPositionOffset").setDouble(backboardPositionOffset); }