blob: a60953258c11ec581ca4b1b738f49198638f3bb1 [file] [log] [blame]
James Kuszmaulc4ae11c2020-12-26 16:26:58 -08001// Provides a plot for debugging drivetrain-related issues.
Philipp Schrader548aedf2023-02-17 20:09:13 -08002import {AosPlotter} from '../../../aos/network/www/aos_plotter';
3import {ImuMessageHandler} from '../../../frc971/wpilib/imu_plot_utils';
4import * as proxy from '../../../aos/network/www/proxy';
5import {BLUE, BROWN, CYAN, GREEN, PINK, RED, WHITE} from '../../../aos/network/www/colors';
James Kuszmaulc4ae11c2020-12-26 16:26:58 -08006
7import Connection = proxy.Connection;
8
milind upadhyay9bd381d2021-01-23 13:44:13 -08009const TIME = AosPlotter.TIME;
10const DEFAULT_WIDTH = AosPlotter.DEFAULT_WIDTH;
11const DEFAULT_HEIGHT = AosPlotter.DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080012
13export function plotDrivetrain(conn: Connection, element: Element): void {
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080014 const aosPlotter = new AosPlotter(conn);
15
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080016 const goal = aosPlotter.addMessageSource('/drivetrain', 'frc971.control_loops.drivetrain.Goal');
milind upadhyay9bd381d2021-01-23 13:44:13 -080017 const position = aosPlotter.addMessageSource("/drivetrain",
18 "frc971.control_loops.drivetrain.Position");
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080019 const status = aosPlotter.addMessageSource(
20 '/drivetrain', 'frc971.control_loops.drivetrain.Status');
James Kuszmaul8cdc9f62023-03-12 14:01:14 -070021 const localizerOuput = aosPlotter.addMessageSource(
22 '/localizer', 'frc971.controls.LocalizerOutput');
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080023 const output = aosPlotter.addMessageSource(
24 '/drivetrain', 'frc971.control_loops.drivetrain.Output');
James Kuszmaul4ddda332022-03-12 15:23:45 -080025 const gyroReading = aosPlotter.addMessageSource(
26 '/drivetrain', 'frc971.sensors.GyroReading');
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080027 const imu = aosPlotter.addRawMessageSource(
28 '/drivetrain', 'frc971.IMUValuesBatch',
29 new ImuMessageHandler(conn.getSchema('frc971.IMUValuesBatch')));
30
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080031 // Polydrivetrain (teleop control) plots
32 const teleopPlot =
Austin Schuhc2e9c502021-11-25 21:23:24 -080033 aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080034 teleopPlot.plot.getAxisLabels().setTitle('Drivetrain Teleop Goals');
milind upadhyay9bd381d2021-01-23 13:44:13 -080035 teleopPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080036 teleopPlot.plot.getAxisLabels().setYLabel('bool, throttle/wheel values');
37 teleopPlot.plot.setDefaultYRange([-1.1, 1.1]);
38
39 const quickTurn = teleopPlot.addMessageLine(goal, ['quickturn']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080040 quickTurn.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080041 const throttle = teleopPlot.addMessageLine(goal, ['throttle']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080042 throttle.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080043 const wheel = teleopPlot.addMessageLine(goal, ['wheel']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080044 wheel.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080045
46 // Drivetrain Control Mode
47 const modePlot =
Austin Schuhc2e9c502021-11-25 21:23:24 -080048 aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080049 // TODO(james): Actually add enum support.
50 modePlot.plot.getAxisLabels().setTitle(
51 'Drivetrain Mode [POLYDRIVE, MOTION_PROFILE, ' +
52 'SPLINE_FOLLOWER, LINE_FOLLOWER]');
milind upadhyay9bd381d2021-01-23 13:44:13 -080053 modePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080054 modePlot.plot.getAxisLabels().setYLabel('ControllerType');
55 modePlot.plot.setDefaultYRange([-0.1, 3.1]);
56
57 const controllerType = modePlot.addMessageLine(goal, ['controller_type']);
58 controllerType.setDrawLine(false);
59
milind upadhyay9bd381d2021-01-23 13:44:13 -080060 // Drivetrain Status estimated relative position
Austin Schuhc2e9c502021-11-25 21:23:24 -080061 const positionPlot = aosPlotter.addPlot(element);
milind upadhyayb81e6a42021-01-08 19:48:30 -080062 positionPlot.plot.getAxisLabels().setTitle("Estimated Relative Position " +
63 "of the Drivetrain");
milind upadhyay9bd381d2021-01-23 13:44:13 -080064 positionPlot.plot.getAxisLabels().setXLabel(TIME);
milind upadhyayb81e6a42021-01-08 19:48:30 -080065 positionPlot.plot.getAxisLabels().setYLabel("Relative Position (m)");
66 const leftPosition =
67 positionPlot.addMessageLine(status, ["estimated_left_position"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080068 leftPosition.setColor(RED);
milind upadhyayb81e6a42021-01-08 19:48:30 -080069 const rightPosition =
70 positionPlot.addMessageLine(status, ["estimated_right_position"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080071 rightPosition.setColor(GREEN);
milind upadhyayb81e6a42021-01-08 19:48:30 -080072 const leftPositionGoal =
73 positionPlot.addMessageLine(status, ["profiled_left_position_goal"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080074 leftPositionGoal.setColor(BLUE);
milind upadhyayb81e6a42021-01-08 19:48:30 -080075 const rightPositionGoal =
76 positionPlot.addMessageLine(status, ["profiled_right_position_goal"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080077 rightPositionGoal.setColor(PINK);
78 const leftEncoder = positionPlot.addMessageLine(position, ["left_encoder"]);
79 leftEncoder.setColor(BROWN);
80 const rightEncoder = positionPlot.addMessageLine(position, ["right_encoder"]);
81 rightEncoder.setColor(CYAN);
milind upadhyayb81e6a42021-01-08 19:48:30 -080082
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080083 // Drivetrain Output Voltage
Austin Schuhc2e9c502021-11-25 21:23:24 -080084 const outputPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080085 outputPlot.plot.getAxisLabels().setTitle('Drivetrain Output');
milind upadhyay9bd381d2021-01-23 13:44:13 -080086 outputPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080087 outputPlot.plot.getAxisLabels().setYLabel('Voltage (V)');
88
89 const leftVoltage = outputPlot.addMessageLine(output, ['left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080090 leftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080091 const rightVoltage = outputPlot.addMessageLine(output, ['right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080092 rightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080093
94 // Voltage Errors
Austin Schuhc2e9c502021-11-25 21:23:24 -080095 const voltageErrors = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080096 voltageErrors.plot.getAxisLabels().setTitle('Voltage Errors');
milind upadhyay9bd381d2021-01-23 13:44:13 -080097 voltageErrors.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080098 voltageErrors.plot.getAxisLabels().setYLabel('Voltage (V)');
99
100 const leftVoltageError =
101 voltageErrors.addMessageLine(status, ['left_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800102 leftVoltageError.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800103 const rightVoltageError =
104 voltageErrors.addMessageLine(status, ['right_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800105 rightVoltageError.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800106
107 const ekfLeftVoltageError =
108 voltageErrors.addMessageLine(status, ['localizer', 'left_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800109 ekfLeftVoltageError.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800110 const ekfRightVoltageError = voltageErrors.addMessageLine(
111 status, ['localizer', 'right_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800112 ekfRightVoltageError.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800113
114 // Sundry components of the output voltages
Austin Schuhc2e9c502021-11-25 21:23:24 -0800115 const otherVoltages = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800116 otherVoltages.plot.getAxisLabels().setTitle('Other Voltage Components');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800117 otherVoltages.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800118 otherVoltages.plot.getAxisLabels().setYLabel('Voltage (V)');
119
120 const ffLeftVoltage = otherVoltages.addMessageLine(
121 status, ['poly_drive_logging', 'ff_left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800122 ffLeftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800123 ffLeftVoltage.setPointSize(0);
124 const ffRightVoltage = otherVoltages.addMessageLine(
125 status, ['poly_drive_logging', 'ff_right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800126 ffRightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800127 ffRightVoltage.setPointSize(0);
128
129 const uncappedLeftVoltage =
130 otherVoltages.addMessageLine(status, ['uncapped_left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800131 uncappedLeftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800132 uncappedLeftVoltage.setDrawLine(false);
133 const uncappedRightVoltage =
134 otherVoltages.addMessageLine(status, ['uncapped_right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800135 uncappedRightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800136 uncappedRightVoltage.setDrawLine(false);
137
138 // Drivetrain Velocities
Austin Schuhc2e9c502021-11-25 21:23:24 -0800139 const velocityPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800140 velocityPlot.plot.getAxisLabels().setTitle('Velocity Plots');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800141 velocityPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800142 velocityPlot.plot.getAxisLabels().setYLabel('Wheel Velocity (m/s)');
143
144 const ssLeftVelocityGoal =
145 velocityPlot.addMessageLine(status, ['profiled_left_velocity_goal']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800146 ssLeftVelocityGoal.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800147 ssLeftVelocityGoal.setPointSize(0.0);
148 const ssRightVelocityGoal =
149 velocityPlot.addMessageLine(status, ['profiled_right_velocity_goal']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800150 ssRightVelocityGoal.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800151 ssRightVelocityGoal.setPointSize(0.0);
152
153 const polyLeftVelocity = velocityPlot.addMessageLine(
154 status, ['poly_drive_logging', 'goal_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800155 polyLeftVelocity.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800156 polyLeftVelocity.setDrawLine(false);
157
158 const polyRightVelocity = velocityPlot.addMessageLine(
159 status, ['poly_drive_logging', 'goal_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800160 polyRightVelocity.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800161 polyRightVelocity.setDrawLine(false);
162
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800163 const leftVelocity =
164 velocityPlot.addMessageLine(status, ['estimated_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800165 leftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800166 const rightVelocity =
167 velocityPlot.addMessageLine(status, ['estimated_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800168 rightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800169
milind upadhyay6079d4f2021-01-24 13:59:57 -0800170 const leftSpeed = velocityPlot.addMessageLine(position, ["left_speed"]);
171 leftSpeed.setColor(BLUE);
172 const rightSpeed = velocityPlot.addMessageLine(position, ["right_speed"]);
173 rightSpeed.setColor(BROWN);
174
175 // Drivetrain trajectory and localizer velocities
Austin Schuhc2e9c502021-11-25 21:23:24 -0800176 const velocityPlot2 = aosPlotter.addPlot(element);
milind upadhyay6079d4f2021-01-24 13:59:57 -0800177 velocityPlot2.plot.getAxisLabels().setTitle(
178 "Trajectory and Localizer Velocity Plots");
179 velocityPlot2.plot.getAxisLabels().setXLabel(TIME);
180 velocityPlot2.plot.getAxisLabels().setYLabel('Wheel Velocity (m/s)');
181
182 const splineLeftVelocity = velocityPlot2.addMessageLine(
183 status, ['trajectory_logging', 'left_velocity']);
184 splineLeftVelocity.setColor(RED);
185 splineLeftVelocity.setDrawLine(false);
186
187 const splineRightVelocity = velocityPlot2.addMessageLine(
188 status, ['trajectory_logging', 'right_velocity']);
189 splineRightVelocity.setColor(GREEN);
190 splineRightVelocity.setDrawLine(false);
191
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800192 const ekfLeftVelocity =
milind upadhyay6079d4f2021-01-24 13:59:57 -0800193 velocityPlot2.addMessageLine(status, ['localizer', 'left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800194 ekfLeftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800195 ekfLeftVelocity.setPointSize(0.0);
196 const ekfRightVelocity =
milind upadhyay6079d4f2021-01-24 13:59:57 -0800197 velocityPlot2.addMessageLine(status, ['localizer', 'right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800198 ekfRightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800199 ekfRightVelocity.setPointSize(0.0);
200
Austin Schuhd99a3c42021-01-30 16:58:00 -0800201 const splineVelocityOffset = velocityPlot2.addMessageLine(
202 status, ['localizer', 'longitudinal_velocity_offset']);
203 splineVelocityOffset.setColor(BROWN);
204 splineVelocityOffset.setPointSize(0.0);
205
206 const splineLateralVelocity = velocityPlot2.addMessageLine(
207 status, ['localizer', 'lateral_velocity']);
208 splineLateralVelocity.setColor(PINK);
209 splineLateralVelocity.setPointSize(0.0);
210
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800211 // Heading
Austin Schuhc2e9c502021-11-25 21:23:24 -0800212 const yawPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800213 yawPlot.plot.getAxisLabels().setTitle('Robot Yaw');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800214 yawPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800215 yawPlot.plot.getAxisLabels().setYLabel('Yaw (rad)');
216
217 const splineYaw =
218 yawPlot.addMessageLine(status, ['trajectory_logging', 'theta']);
219 splineYaw.setDrawLine(false);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800220 splineYaw.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800221
222 const ekfYaw = yawPlot.addMessageLine(status, ['localizer', 'theta']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800223 ekfYaw.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800224
225 const downEstimatorYaw =
226 yawPlot.addMessageLine(status, ['down_estimator', 'yaw']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800227 downEstimatorYaw.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800228
229 // Pitch/Roll
Austin Schuhc2e9c502021-11-25 21:23:24 -0800230 const orientationPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800231 orientationPlot.plot.getAxisLabels().setTitle('Orientation');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800232 orientationPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800233 orientationPlot.plot.getAxisLabels().setYLabel('Angle (rad)');
234
235 const roll = orientationPlot.addMessageLine(
236 status, ['down_estimator', 'lateral_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800237 roll.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800238 roll.setLabel('roll');
239 const pitch = orientationPlot.addMessageLine(
240 status, ['down_estimator', 'longitudinal_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800241 pitch.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800242 pitch.setLabel('pitch');
243
244 // Accelerometer/Gravity
Austin Schuhc2e9c502021-11-25 21:23:24 -0800245 const accelPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800246 accelPlot.plot.getAxisLabels().setTitle('Accelerometer Readings');
247 accelPlot.plot.getAxisLabels().setYLabel('Acceleration (g)');
248 accelPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
249
250 const expectedAccelX =
251 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800252 expectedAccelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800253 expectedAccelX.setPointSize(0);
254 const expectedAccelY =
255 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800256 expectedAccelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800257 expectedAccelY.setPointSize(0);
258 const expectedAccelZ =
259 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800260 expectedAccelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800261 expectedAccelZ.setPointSize(0);
262
263 const gravity_magnitude =
264 accelPlot.addMessageLine(status, ['down_estimator', 'gravity_magnitude']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800265 gravity_magnitude.setColor(WHITE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800266 gravity_magnitude.setPointSize(0);
267
268 const accelX = accelPlot.addMessageLine(imu, ['accelerometer_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800269 accelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800270 accelX.setDrawLine(false);
271 const accelY = accelPlot.addMessageLine(imu, ['accelerometer_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800272 accelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800273 accelY.setDrawLine(false);
274 const accelZ = accelPlot.addMessageLine(imu, ['accelerometer_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800275 accelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800276 accelZ.setDrawLine(false);
277
278 // Absolute X Position
Austin Schuhc2e9c502021-11-25 21:23:24 -0800279 const xPositionPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800280 xPositionPlot.plot.getAxisLabels().setTitle('X Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800281 xPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800282 xPositionPlot.plot.getAxisLabels().setYLabel('X Position (m)');
283
James Kuszmaul8cdc9f62023-03-12 14:01:14 -0700284 xPositionPlot.addMessageLine(status, ['x']).setColor(RED);
285 xPositionPlot.addMessageLine(status, ['trajectory_logging', 'x'])
286 .setColor(GREEN);
287 xPositionPlot.addMessageLine(localizerOuput, ['x']).setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800288
289 // Absolute Y Position
Austin Schuhc2e9c502021-11-25 21:23:24 -0800290 const yPositionPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800291 yPositionPlot.plot.getAxisLabels().setTitle('Y Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800292 yPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800293 yPositionPlot.plot.getAxisLabels().setYLabel('Y Position (m)');
294
James Kuszmaul8cdc9f62023-03-12 14:01:14 -0700295 yPositionPlot.addMessageLine(status, ['y']).setColor(RED);
296 yPositionPlot.addMessageLine(status, ['trajectory_logging', 'y'])
297 .setColor(GREEN);
298 yPositionPlot.addMessageLine(localizerOuput, ['y']).setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800299
300 // Gyro
Austin Schuhc2e9c502021-11-25 21:23:24 -0800301 const gyroPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800302 gyroPlot.plot.getAxisLabels().setTitle('Gyro Readings');
303 gyroPlot.plot.getAxisLabels().setYLabel('Angular Velocity (rad / sec)');
304 gyroPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
305
306 const gyroZeroX =
307 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_x_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800308 gyroZeroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800309 gyroZeroX.setPointSize(0);
310 gyroZeroX.setLabel('Gyro X Zero');
311 const gyroZeroY =
312 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_y_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800313 gyroZeroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800314 gyroZeroY.setPointSize(0);
315 gyroZeroY.setLabel('Gyro Y Zero');
316 const gyroZeroZ =
317 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_z_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800318 gyroZeroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800319 gyroZeroZ.setPointSize(0);
320 gyroZeroZ.setLabel('Gyro Z Zero');
321
322 const gyroX = gyroPlot.addMessageLine(imu, ['gyro_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800323 gyroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800324 const gyroY = gyroPlot.addMessageLine(imu, ['gyro_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800325 gyroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800326 const gyroZ = gyroPlot.addMessageLine(imu, ['gyro_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800327 gyroZ.setColor(BLUE);
James Kuszmaul4ddda332022-03-12 15:23:45 -0800328 gyroPlot.addMessageLine(gyroReading, ['velocity']).setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800329
330 // IMU States
331 const imuStatePlot =
Austin Schuhc2e9c502021-11-25 21:23:24 -0800332 aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800333 imuStatePlot.plot.getAxisLabels().setTitle('IMU State');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800334 imuStatePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800335 imuStatePlot.plot.setDefaultYRange([-0.1, 1.1]);
336
337 const zeroedLine = imuStatePlot.addMessageLine(status, ['zeroing', 'zeroed']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800338 zeroedLine.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800339 zeroedLine.setDrawLine(false);
340 zeroedLine.setLabel('IMU Zeroed');
341 const faultedLine =
342 imuStatePlot.addMessageLine(status, ['zeroing', 'faulted']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800343 faultedLine.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800344 faultedLine.setPointSize(0);
345 faultedLine.setLabel('IMU Faulted');
346}