blob: 5610e9703e229f096ed4767bfefe637f86a667b4 [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');
21 const output = aosPlotter.addMessageSource(
22 '/drivetrain', 'frc971.control_loops.drivetrain.Output');
James Kuszmaul4ddda332022-03-12 15:23:45 -080023 const gyroReading = aosPlotter.addMessageSource(
24 '/drivetrain', 'frc971.sensors.GyroReading');
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080025 const imu = aosPlotter.addRawMessageSource(
26 '/drivetrain', 'frc971.IMUValuesBatch',
27 new ImuMessageHandler(conn.getSchema('frc971.IMUValuesBatch')));
28
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080029 // Polydrivetrain (teleop control) plots
30 const teleopPlot =
Austin Schuhc2e9c502021-11-25 21:23:24 -080031 aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080032 teleopPlot.plot.getAxisLabels().setTitle('Drivetrain Teleop Goals');
milind upadhyay9bd381d2021-01-23 13:44:13 -080033 teleopPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080034 teleopPlot.plot.getAxisLabels().setYLabel('bool, throttle/wheel values');
35 teleopPlot.plot.setDefaultYRange([-1.1, 1.1]);
36
37 const quickTurn = teleopPlot.addMessageLine(goal, ['quickturn']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080038 quickTurn.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080039 const throttle = teleopPlot.addMessageLine(goal, ['throttle']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080040 throttle.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080041 const wheel = teleopPlot.addMessageLine(goal, ['wheel']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080042 wheel.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080043
44 // Drivetrain Control Mode
45 const modePlot =
Austin Schuhc2e9c502021-11-25 21:23:24 -080046 aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080047 // TODO(james): Actually add enum support.
48 modePlot.plot.getAxisLabels().setTitle(
49 'Drivetrain Mode [POLYDRIVE, MOTION_PROFILE, ' +
50 'SPLINE_FOLLOWER, LINE_FOLLOWER]');
milind upadhyay9bd381d2021-01-23 13:44:13 -080051 modePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080052 modePlot.plot.getAxisLabels().setYLabel('ControllerType');
53 modePlot.plot.setDefaultYRange([-0.1, 3.1]);
54
55 const controllerType = modePlot.addMessageLine(goal, ['controller_type']);
56 controllerType.setDrawLine(false);
57
milind upadhyay9bd381d2021-01-23 13:44:13 -080058 // Drivetrain Status estimated relative position
Austin Schuhc2e9c502021-11-25 21:23:24 -080059 const positionPlot = aosPlotter.addPlot(element);
milind upadhyayb81e6a42021-01-08 19:48:30 -080060 positionPlot.plot.getAxisLabels().setTitle("Estimated Relative Position " +
61 "of the Drivetrain");
milind upadhyay9bd381d2021-01-23 13:44:13 -080062 positionPlot.plot.getAxisLabels().setXLabel(TIME);
milind upadhyayb81e6a42021-01-08 19:48:30 -080063 positionPlot.plot.getAxisLabels().setYLabel("Relative Position (m)");
64 const leftPosition =
65 positionPlot.addMessageLine(status, ["estimated_left_position"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080066 leftPosition.setColor(RED);
milind upadhyayb81e6a42021-01-08 19:48:30 -080067 const rightPosition =
68 positionPlot.addMessageLine(status, ["estimated_right_position"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080069 rightPosition.setColor(GREEN);
milind upadhyayb81e6a42021-01-08 19:48:30 -080070 const leftPositionGoal =
71 positionPlot.addMessageLine(status, ["profiled_left_position_goal"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080072 leftPositionGoal.setColor(BLUE);
milind upadhyayb81e6a42021-01-08 19:48:30 -080073 const rightPositionGoal =
74 positionPlot.addMessageLine(status, ["profiled_right_position_goal"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080075 rightPositionGoal.setColor(PINK);
76 const leftEncoder = positionPlot.addMessageLine(position, ["left_encoder"]);
77 leftEncoder.setColor(BROWN);
78 const rightEncoder = positionPlot.addMessageLine(position, ["right_encoder"]);
79 rightEncoder.setColor(CYAN);
milind upadhyayb81e6a42021-01-08 19:48:30 -080080
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080081 // Drivetrain Output Voltage
Austin Schuhc2e9c502021-11-25 21:23:24 -080082 const outputPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080083 outputPlot.plot.getAxisLabels().setTitle('Drivetrain Output');
milind upadhyay9bd381d2021-01-23 13:44:13 -080084 outputPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080085 outputPlot.plot.getAxisLabels().setYLabel('Voltage (V)');
86
87 const leftVoltage = outputPlot.addMessageLine(output, ['left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080088 leftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080089 const rightVoltage = outputPlot.addMessageLine(output, ['right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080090 rightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080091
92 // Voltage Errors
Austin Schuhc2e9c502021-11-25 21:23:24 -080093 const voltageErrors = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080094 voltageErrors.plot.getAxisLabels().setTitle('Voltage Errors');
milind upadhyay9bd381d2021-01-23 13:44:13 -080095 voltageErrors.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080096 voltageErrors.plot.getAxisLabels().setYLabel('Voltage (V)');
97
98 const leftVoltageError =
99 voltageErrors.addMessageLine(status, ['left_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800100 leftVoltageError.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800101 const rightVoltageError =
102 voltageErrors.addMessageLine(status, ['right_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800103 rightVoltageError.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800104
105 const ekfLeftVoltageError =
106 voltageErrors.addMessageLine(status, ['localizer', 'left_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800107 ekfLeftVoltageError.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800108 const ekfRightVoltageError = voltageErrors.addMessageLine(
109 status, ['localizer', 'right_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800110 ekfRightVoltageError.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800111
112 // Sundry components of the output voltages
Austin Schuhc2e9c502021-11-25 21:23:24 -0800113 const otherVoltages = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800114 otherVoltages.plot.getAxisLabels().setTitle('Other Voltage Components');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800115 otherVoltages.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800116 otherVoltages.plot.getAxisLabels().setYLabel('Voltage (V)');
117
118 const ffLeftVoltage = otherVoltages.addMessageLine(
119 status, ['poly_drive_logging', 'ff_left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800120 ffLeftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800121 ffLeftVoltage.setPointSize(0);
122 const ffRightVoltage = otherVoltages.addMessageLine(
123 status, ['poly_drive_logging', 'ff_right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800124 ffRightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800125 ffRightVoltage.setPointSize(0);
126
127 const uncappedLeftVoltage =
128 otherVoltages.addMessageLine(status, ['uncapped_left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800129 uncappedLeftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800130 uncappedLeftVoltage.setDrawLine(false);
131 const uncappedRightVoltage =
132 otherVoltages.addMessageLine(status, ['uncapped_right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800133 uncappedRightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800134 uncappedRightVoltage.setDrawLine(false);
135
136 // Drivetrain Velocities
Austin Schuhc2e9c502021-11-25 21:23:24 -0800137 const velocityPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800138 velocityPlot.plot.getAxisLabels().setTitle('Velocity Plots');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800139 velocityPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800140 velocityPlot.plot.getAxisLabels().setYLabel('Wheel Velocity (m/s)');
141
142 const ssLeftVelocityGoal =
143 velocityPlot.addMessageLine(status, ['profiled_left_velocity_goal']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800144 ssLeftVelocityGoal.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800145 ssLeftVelocityGoal.setPointSize(0.0);
146 const ssRightVelocityGoal =
147 velocityPlot.addMessageLine(status, ['profiled_right_velocity_goal']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800148 ssRightVelocityGoal.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800149 ssRightVelocityGoal.setPointSize(0.0);
150
151 const polyLeftVelocity = velocityPlot.addMessageLine(
152 status, ['poly_drive_logging', 'goal_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800153 polyLeftVelocity.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800154 polyLeftVelocity.setDrawLine(false);
155
156 const polyRightVelocity = velocityPlot.addMessageLine(
157 status, ['poly_drive_logging', 'goal_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800158 polyRightVelocity.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800159 polyRightVelocity.setDrawLine(false);
160
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800161 const leftVelocity =
162 velocityPlot.addMessageLine(status, ['estimated_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800163 leftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800164 const rightVelocity =
165 velocityPlot.addMessageLine(status, ['estimated_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800166 rightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800167
milind upadhyay6079d4f2021-01-24 13:59:57 -0800168 const leftSpeed = velocityPlot.addMessageLine(position, ["left_speed"]);
169 leftSpeed.setColor(BLUE);
170 const rightSpeed = velocityPlot.addMessageLine(position, ["right_speed"]);
171 rightSpeed.setColor(BROWN);
172
173 // Drivetrain trajectory and localizer velocities
Austin Schuhc2e9c502021-11-25 21:23:24 -0800174 const velocityPlot2 = aosPlotter.addPlot(element);
milind upadhyay6079d4f2021-01-24 13:59:57 -0800175 velocityPlot2.plot.getAxisLabels().setTitle(
176 "Trajectory and Localizer Velocity Plots");
177 velocityPlot2.plot.getAxisLabels().setXLabel(TIME);
178 velocityPlot2.plot.getAxisLabels().setYLabel('Wheel Velocity (m/s)');
179
180 const splineLeftVelocity = velocityPlot2.addMessageLine(
181 status, ['trajectory_logging', 'left_velocity']);
182 splineLeftVelocity.setColor(RED);
183 splineLeftVelocity.setDrawLine(false);
184
185 const splineRightVelocity = velocityPlot2.addMessageLine(
186 status, ['trajectory_logging', 'right_velocity']);
187 splineRightVelocity.setColor(GREEN);
188 splineRightVelocity.setDrawLine(false);
189
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800190 const ekfLeftVelocity =
milind upadhyay6079d4f2021-01-24 13:59:57 -0800191 velocityPlot2.addMessageLine(status, ['localizer', 'left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800192 ekfLeftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800193 ekfLeftVelocity.setPointSize(0.0);
194 const ekfRightVelocity =
milind upadhyay6079d4f2021-01-24 13:59:57 -0800195 velocityPlot2.addMessageLine(status, ['localizer', 'right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800196 ekfRightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800197 ekfRightVelocity.setPointSize(0.0);
198
Austin Schuhd99a3c42021-01-30 16:58:00 -0800199 const splineVelocityOffset = velocityPlot2.addMessageLine(
200 status, ['localizer', 'longitudinal_velocity_offset']);
201 splineVelocityOffset.setColor(BROWN);
202 splineVelocityOffset.setPointSize(0.0);
203
204 const splineLateralVelocity = velocityPlot2.addMessageLine(
205 status, ['localizer', 'lateral_velocity']);
206 splineLateralVelocity.setColor(PINK);
207 splineLateralVelocity.setPointSize(0.0);
208
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800209 // Heading
Austin Schuhc2e9c502021-11-25 21:23:24 -0800210 const yawPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800211 yawPlot.plot.getAxisLabels().setTitle('Robot Yaw');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800212 yawPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800213 yawPlot.plot.getAxisLabels().setYLabel('Yaw (rad)');
214
215 const splineYaw =
216 yawPlot.addMessageLine(status, ['trajectory_logging', 'theta']);
217 splineYaw.setDrawLine(false);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800218 splineYaw.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800219
220 const ekfYaw = yawPlot.addMessageLine(status, ['localizer', 'theta']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800221 ekfYaw.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800222
223 const downEstimatorYaw =
224 yawPlot.addMessageLine(status, ['down_estimator', 'yaw']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800225 downEstimatorYaw.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800226
227 // Pitch/Roll
Austin Schuhc2e9c502021-11-25 21:23:24 -0800228 const orientationPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800229 orientationPlot.plot.getAxisLabels().setTitle('Orientation');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800230 orientationPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800231 orientationPlot.plot.getAxisLabels().setYLabel('Angle (rad)');
232
233 const roll = orientationPlot.addMessageLine(
234 status, ['down_estimator', 'lateral_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800235 roll.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800236 roll.setLabel('roll');
237 const pitch = orientationPlot.addMessageLine(
238 status, ['down_estimator', 'longitudinal_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800239 pitch.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800240 pitch.setLabel('pitch');
241
242 // Accelerometer/Gravity
Austin Schuhc2e9c502021-11-25 21:23:24 -0800243 const accelPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800244 accelPlot.plot.getAxisLabels().setTitle('Accelerometer Readings');
245 accelPlot.plot.getAxisLabels().setYLabel('Acceleration (g)');
246 accelPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
247
248 const expectedAccelX =
249 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800250 expectedAccelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800251 expectedAccelX.setPointSize(0);
252 const expectedAccelY =
253 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800254 expectedAccelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800255 expectedAccelY.setPointSize(0);
256 const expectedAccelZ =
257 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800258 expectedAccelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800259 expectedAccelZ.setPointSize(0);
260
261 const gravity_magnitude =
262 accelPlot.addMessageLine(status, ['down_estimator', 'gravity_magnitude']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800263 gravity_magnitude.setColor(WHITE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800264 gravity_magnitude.setPointSize(0);
265
266 const accelX = accelPlot.addMessageLine(imu, ['accelerometer_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800267 accelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800268 accelX.setDrawLine(false);
269 const accelY = accelPlot.addMessageLine(imu, ['accelerometer_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800270 accelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800271 accelY.setDrawLine(false);
272 const accelZ = accelPlot.addMessageLine(imu, ['accelerometer_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800273 accelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800274 accelZ.setDrawLine(false);
275
276 // Absolute X Position
Austin Schuhc2e9c502021-11-25 21:23:24 -0800277 const xPositionPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800278 xPositionPlot.plot.getAxisLabels().setTitle('X Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800279 xPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800280 xPositionPlot.plot.getAxisLabels().setYLabel('X Position (m)');
281
282 const localizerX = xPositionPlot.addMessageLine(status, ['x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800283 localizerX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800284 const splineX =
285 xPositionPlot.addMessageLine(status, ['trajectory_logging', 'x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800286 splineX.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800287
288 // Absolute Y Position
Austin Schuhc2e9c502021-11-25 21:23:24 -0800289 const yPositionPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800290 yPositionPlot.plot.getAxisLabels().setTitle('Y Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800291 yPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800292 yPositionPlot.plot.getAxisLabels().setYLabel('Y Position (m)');
293
294 const localizerY = yPositionPlot.addMessageLine(status, ['y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800295 localizerY.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800296 const splineY =
297 yPositionPlot.addMessageLine(status, ['trajectory_logging', 'y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800298 splineY.setColor(GREEN);
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}