blob: deb300f63534a6c1d0a0d473556313abdd154157 [file] [log] [blame]
James Kuszmaulc4ae11c2020-12-26 16:26:58 -08001// Provides a plot for debugging drivetrain-related issues.
2import {AosPlotter} from 'org_frc971/aos/network/www/aos_plotter';
3import {ImuMessageHandler} from 'org_frc971/frc971/wpilib/imu_plot_utils';
4import * as proxy from 'org_frc971/aos/network/www/proxy';
James Kuszmaul933a9742021-03-07 19:59:06 -08005import {BLUE, BROWN, CYAN, GREEN, PINK, RED, WHITE} from 'org_frc971/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');
23 const imu = aosPlotter.addRawMessageSource(
24 '/drivetrain', 'frc971.IMUValuesBatch',
25 new ImuMessageHandler(conn.getSchema('frc971.IMUValuesBatch')));
26
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080027 // Polydrivetrain (teleop control) plots
28 const teleopPlot =
Austin Schuhc2e9c502021-11-25 21:23:24 -080029 aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080030 teleopPlot.plot.getAxisLabels().setTitle('Drivetrain Teleop Goals');
milind upadhyay9bd381d2021-01-23 13:44:13 -080031 teleopPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080032 teleopPlot.plot.getAxisLabels().setYLabel('bool, throttle/wheel values');
33 teleopPlot.plot.setDefaultYRange([-1.1, 1.1]);
34
35 const quickTurn = teleopPlot.addMessageLine(goal, ['quickturn']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080036 quickTurn.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080037 const throttle = teleopPlot.addMessageLine(goal, ['throttle']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080038 throttle.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080039 const wheel = teleopPlot.addMessageLine(goal, ['wheel']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080040 wheel.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080041
42 // Drivetrain Control Mode
43 const modePlot =
Austin Schuhc2e9c502021-11-25 21:23:24 -080044 aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080045 // TODO(james): Actually add enum support.
46 modePlot.plot.getAxisLabels().setTitle(
47 'Drivetrain Mode [POLYDRIVE, MOTION_PROFILE, ' +
48 'SPLINE_FOLLOWER, LINE_FOLLOWER]');
milind upadhyay9bd381d2021-01-23 13:44:13 -080049 modePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080050 modePlot.plot.getAxisLabels().setYLabel('ControllerType');
51 modePlot.plot.setDefaultYRange([-0.1, 3.1]);
52
53 const controllerType = modePlot.addMessageLine(goal, ['controller_type']);
54 controllerType.setDrawLine(false);
55
milind upadhyay9bd381d2021-01-23 13:44:13 -080056 // Drivetrain Status estimated relative position
Austin Schuhc2e9c502021-11-25 21:23:24 -080057 const positionPlot = aosPlotter.addPlot(element);
milind upadhyayb81e6a42021-01-08 19:48:30 -080058 positionPlot.plot.getAxisLabels().setTitle("Estimated Relative Position " +
59 "of the Drivetrain");
milind upadhyay9bd381d2021-01-23 13:44:13 -080060 positionPlot.plot.getAxisLabels().setXLabel(TIME);
milind upadhyayb81e6a42021-01-08 19:48:30 -080061 positionPlot.plot.getAxisLabels().setYLabel("Relative Position (m)");
62 const leftPosition =
63 positionPlot.addMessageLine(status, ["estimated_left_position"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080064 leftPosition.setColor(RED);
milind upadhyayb81e6a42021-01-08 19:48:30 -080065 const rightPosition =
66 positionPlot.addMessageLine(status, ["estimated_right_position"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080067 rightPosition.setColor(GREEN);
milind upadhyayb81e6a42021-01-08 19:48:30 -080068 const leftPositionGoal =
69 positionPlot.addMessageLine(status, ["profiled_left_position_goal"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080070 leftPositionGoal.setColor(BLUE);
milind upadhyayb81e6a42021-01-08 19:48:30 -080071 const rightPositionGoal =
72 positionPlot.addMessageLine(status, ["profiled_right_position_goal"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080073 rightPositionGoal.setColor(PINK);
74 const leftEncoder = positionPlot.addMessageLine(position, ["left_encoder"]);
75 leftEncoder.setColor(BROWN);
76 const rightEncoder = positionPlot.addMessageLine(position, ["right_encoder"]);
77 rightEncoder.setColor(CYAN);
milind upadhyayb81e6a42021-01-08 19:48:30 -080078
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080079 // Drivetrain Output Voltage
Austin Schuhc2e9c502021-11-25 21:23:24 -080080 const outputPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080081 outputPlot.plot.getAxisLabels().setTitle('Drivetrain Output');
milind upadhyay9bd381d2021-01-23 13:44:13 -080082 outputPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080083 outputPlot.plot.getAxisLabels().setYLabel('Voltage (V)');
84
85 const leftVoltage = outputPlot.addMessageLine(output, ['left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080086 leftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080087 const rightVoltage = outputPlot.addMessageLine(output, ['right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080088 rightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080089
90 // Voltage Errors
Austin Schuhc2e9c502021-11-25 21:23:24 -080091 const voltageErrors = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080092 voltageErrors.plot.getAxisLabels().setTitle('Voltage Errors');
milind upadhyay9bd381d2021-01-23 13:44:13 -080093 voltageErrors.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080094 voltageErrors.plot.getAxisLabels().setYLabel('Voltage (V)');
95
96 const leftVoltageError =
97 voltageErrors.addMessageLine(status, ['left_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080098 leftVoltageError.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080099 const rightVoltageError =
100 voltageErrors.addMessageLine(status, ['right_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800101 rightVoltageError.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800102
103 const ekfLeftVoltageError =
104 voltageErrors.addMessageLine(status, ['localizer', 'left_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800105 ekfLeftVoltageError.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800106 const ekfRightVoltageError = voltageErrors.addMessageLine(
107 status, ['localizer', 'right_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800108 ekfRightVoltageError.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800109
110 // Sundry components of the output voltages
Austin Schuhc2e9c502021-11-25 21:23:24 -0800111 const otherVoltages = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800112 otherVoltages.plot.getAxisLabels().setTitle('Other Voltage Components');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800113 otherVoltages.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800114 otherVoltages.plot.getAxisLabels().setYLabel('Voltage (V)');
115
116 const ffLeftVoltage = otherVoltages.addMessageLine(
117 status, ['poly_drive_logging', 'ff_left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800118 ffLeftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800119 ffLeftVoltage.setPointSize(0);
120 const ffRightVoltage = otherVoltages.addMessageLine(
121 status, ['poly_drive_logging', 'ff_right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800122 ffRightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800123 ffRightVoltage.setPointSize(0);
124
125 const uncappedLeftVoltage =
126 otherVoltages.addMessageLine(status, ['uncapped_left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800127 uncappedLeftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800128 uncappedLeftVoltage.setDrawLine(false);
129 const uncappedRightVoltage =
130 otherVoltages.addMessageLine(status, ['uncapped_right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800131 uncappedRightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800132 uncappedRightVoltage.setDrawLine(false);
133
134 // Drivetrain Velocities
Austin Schuhc2e9c502021-11-25 21:23:24 -0800135 const velocityPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800136 velocityPlot.plot.getAxisLabels().setTitle('Velocity Plots');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800137 velocityPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800138 velocityPlot.plot.getAxisLabels().setYLabel('Wheel Velocity (m/s)');
139
140 const ssLeftVelocityGoal =
141 velocityPlot.addMessageLine(status, ['profiled_left_velocity_goal']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800142 ssLeftVelocityGoal.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800143 ssLeftVelocityGoal.setPointSize(0.0);
144 const ssRightVelocityGoal =
145 velocityPlot.addMessageLine(status, ['profiled_right_velocity_goal']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800146 ssRightVelocityGoal.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800147 ssRightVelocityGoal.setPointSize(0.0);
148
149 const polyLeftVelocity = velocityPlot.addMessageLine(
150 status, ['poly_drive_logging', 'goal_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800151 polyLeftVelocity.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800152 polyLeftVelocity.setDrawLine(false);
153
154 const polyRightVelocity = velocityPlot.addMessageLine(
155 status, ['poly_drive_logging', 'goal_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800156 polyRightVelocity.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800157 polyRightVelocity.setDrawLine(false);
158
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800159 const leftVelocity =
160 velocityPlot.addMessageLine(status, ['estimated_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800161 leftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800162 const rightVelocity =
163 velocityPlot.addMessageLine(status, ['estimated_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800164 rightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800165
milind upadhyay6079d4f2021-01-24 13:59:57 -0800166 const leftSpeed = velocityPlot.addMessageLine(position, ["left_speed"]);
167 leftSpeed.setColor(BLUE);
168 const rightSpeed = velocityPlot.addMessageLine(position, ["right_speed"]);
169 rightSpeed.setColor(BROWN);
170
171 // Drivetrain trajectory and localizer velocities
Austin Schuhc2e9c502021-11-25 21:23:24 -0800172 const velocityPlot2 = aosPlotter.addPlot(element);
milind upadhyay6079d4f2021-01-24 13:59:57 -0800173 velocityPlot2.plot.getAxisLabels().setTitle(
174 "Trajectory and Localizer Velocity Plots");
175 velocityPlot2.plot.getAxisLabels().setXLabel(TIME);
176 velocityPlot2.plot.getAxisLabels().setYLabel('Wheel Velocity (m/s)');
177
178 const splineLeftVelocity = velocityPlot2.addMessageLine(
179 status, ['trajectory_logging', 'left_velocity']);
180 splineLeftVelocity.setColor(RED);
181 splineLeftVelocity.setDrawLine(false);
182
183 const splineRightVelocity = velocityPlot2.addMessageLine(
184 status, ['trajectory_logging', 'right_velocity']);
185 splineRightVelocity.setColor(GREEN);
186 splineRightVelocity.setDrawLine(false);
187
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800188 const ekfLeftVelocity =
milind upadhyay6079d4f2021-01-24 13:59:57 -0800189 velocityPlot2.addMessageLine(status, ['localizer', 'left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800190 ekfLeftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800191 ekfLeftVelocity.setPointSize(0.0);
192 const ekfRightVelocity =
milind upadhyay6079d4f2021-01-24 13:59:57 -0800193 velocityPlot2.addMessageLine(status, ['localizer', 'right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800194 ekfRightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800195 ekfRightVelocity.setPointSize(0.0);
196
Austin Schuhd99a3c42021-01-30 16:58:00 -0800197 const splineVelocityOffset = velocityPlot2.addMessageLine(
198 status, ['localizer', 'longitudinal_velocity_offset']);
199 splineVelocityOffset.setColor(BROWN);
200 splineVelocityOffset.setPointSize(0.0);
201
202 const splineLateralVelocity = velocityPlot2.addMessageLine(
203 status, ['localizer', 'lateral_velocity']);
204 splineLateralVelocity.setColor(PINK);
205 splineLateralVelocity.setPointSize(0.0);
206
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800207 // Heading
Austin Schuhc2e9c502021-11-25 21:23:24 -0800208 const yawPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800209 yawPlot.plot.getAxisLabels().setTitle('Robot Yaw');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800210 yawPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800211 yawPlot.plot.getAxisLabels().setYLabel('Yaw (rad)');
212
213 const splineYaw =
214 yawPlot.addMessageLine(status, ['trajectory_logging', 'theta']);
215 splineYaw.setDrawLine(false);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800216 splineYaw.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800217
218 const ekfYaw = yawPlot.addMessageLine(status, ['localizer', 'theta']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800219 ekfYaw.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800220
221 const downEstimatorYaw =
222 yawPlot.addMessageLine(status, ['down_estimator', 'yaw']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800223 downEstimatorYaw.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800224
225 // Pitch/Roll
Austin Schuhc2e9c502021-11-25 21:23:24 -0800226 const orientationPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800227 orientationPlot.plot.getAxisLabels().setTitle('Orientation');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800228 orientationPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800229 orientationPlot.plot.getAxisLabels().setYLabel('Angle (rad)');
230
231 const roll = orientationPlot.addMessageLine(
232 status, ['down_estimator', 'lateral_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800233 roll.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800234 roll.setLabel('roll');
235 const pitch = orientationPlot.addMessageLine(
236 status, ['down_estimator', 'longitudinal_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800237 pitch.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800238 pitch.setLabel('pitch');
239
240 // Accelerometer/Gravity
Austin Schuhc2e9c502021-11-25 21:23:24 -0800241 const accelPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800242 accelPlot.plot.getAxisLabels().setTitle('Accelerometer Readings');
243 accelPlot.plot.getAxisLabels().setYLabel('Acceleration (g)');
244 accelPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
245
246 const expectedAccelX =
247 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800248 expectedAccelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800249 expectedAccelX.setPointSize(0);
250 const expectedAccelY =
251 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800252 expectedAccelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800253 expectedAccelY.setPointSize(0);
254 const expectedAccelZ =
255 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800256 expectedAccelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800257 expectedAccelZ.setPointSize(0);
258
259 const gravity_magnitude =
260 accelPlot.addMessageLine(status, ['down_estimator', 'gravity_magnitude']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800261 gravity_magnitude.setColor(WHITE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800262 gravity_magnitude.setPointSize(0);
263
264 const accelX = accelPlot.addMessageLine(imu, ['accelerometer_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800265 accelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800266 accelX.setDrawLine(false);
267 const accelY = accelPlot.addMessageLine(imu, ['accelerometer_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800268 accelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800269 accelY.setDrawLine(false);
270 const accelZ = accelPlot.addMessageLine(imu, ['accelerometer_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800271 accelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800272 accelZ.setDrawLine(false);
273
274 // Absolute X Position
Austin Schuhc2e9c502021-11-25 21:23:24 -0800275 const xPositionPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800276 xPositionPlot.plot.getAxisLabels().setTitle('X Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800277 xPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800278 xPositionPlot.plot.getAxisLabels().setYLabel('X Position (m)');
279
280 const localizerX = xPositionPlot.addMessageLine(status, ['x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800281 localizerX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800282 const splineX =
283 xPositionPlot.addMessageLine(status, ['trajectory_logging', 'x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800284 splineX.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800285
286 // Absolute Y Position
Austin Schuhc2e9c502021-11-25 21:23:24 -0800287 const yPositionPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800288 yPositionPlot.plot.getAxisLabels().setTitle('Y Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800289 yPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800290 yPositionPlot.plot.getAxisLabels().setYLabel('Y Position (m)');
291
292 const localizerY = yPositionPlot.addMessageLine(status, ['y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800293 localizerY.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800294 const splineY =
295 yPositionPlot.addMessageLine(status, ['trajectory_logging', 'y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800296 splineY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800297
298 // Gyro
Austin Schuhc2e9c502021-11-25 21:23:24 -0800299 const gyroPlot = aosPlotter.addPlot(element);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800300 gyroPlot.plot.getAxisLabels().setTitle('Gyro Readings');
301 gyroPlot.plot.getAxisLabels().setYLabel('Angular Velocity (rad / sec)');
302 gyroPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
303
304 const gyroZeroX =
305 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_x_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800306 gyroZeroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800307 gyroZeroX.setPointSize(0);
308 gyroZeroX.setLabel('Gyro X Zero');
309 const gyroZeroY =
310 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_y_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800311 gyroZeroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800312 gyroZeroY.setPointSize(0);
313 gyroZeroY.setLabel('Gyro Y Zero');
314 const gyroZeroZ =
315 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_z_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800316 gyroZeroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800317 gyroZeroZ.setPointSize(0);
318 gyroZeroZ.setLabel('Gyro Z Zero');
319
320 const gyroX = gyroPlot.addMessageLine(imu, ['gyro_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800321 gyroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800322 const gyroY = gyroPlot.addMessageLine(imu, ['gyro_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800323 gyroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800324 const gyroZ = gyroPlot.addMessageLine(imu, ['gyro_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800325 gyroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800326
327 // IMU States
328 const imuStatePlot =
Austin Schuhc2e9c502021-11-25 21:23:24 -0800329 aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800330 imuStatePlot.plot.getAxisLabels().setTitle('IMU State');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800331 imuStatePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800332 imuStatePlot.plot.setDefaultYRange([-0.1, 1.1]);
333
334 const zeroedLine = imuStatePlot.addMessageLine(status, ['zeroing', 'zeroed']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800335 zeroedLine.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800336 zeroedLine.setDrawLine(false);
337 zeroedLine.setLabel('IMU Zeroed');
338 const faultedLine =
339 imuStatePlot.addMessageLine(status, ['zeroing', 'faulted']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800340 faultedLine.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800341 faultedLine.setPointSize(0);
342 faultedLine.setLabel('IMU Faulted');
343}