blob: 90c58cf7a35a8d7e855d2cf27621c431c3b8c2a7 [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';
5
6import Connection = proxy.Connection;
7
milind upadhyay9bd381d2021-01-23 13:44:13 -08008const TIME = AosPlotter.TIME;
9const DEFAULT_WIDTH = AosPlotter.DEFAULT_WIDTH;
10const DEFAULT_HEIGHT = AosPlotter.DEFAULT_HEIGHT;
11const RED = AosPlotter.RED;
12const GREEN = AosPlotter.GREEN;
13const BLUE = AosPlotter.BLUE;
14const BROWN = AosPlotter.BROWN;
15const PINK = AosPlotter.PINK;
16const CYAN = AosPlotter.CYAN;
17const WHITE = AosPlotter.WHITE;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080018
19export function plotDrivetrain(conn: Connection, element: Element): void {
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080020 const aosPlotter = new AosPlotter(conn);
21
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080022 const goal = aosPlotter.addMessageSource('/drivetrain', 'frc971.control_loops.drivetrain.Goal');
milind upadhyay9bd381d2021-01-23 13:44:13 -080023 const position = aosPlotter.addMessageSource("/drivetrain",
24 "frc971.control_loops.drivetrain.Position");
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080025 const status = aosPlotter.addMessageSource(
26 '/drivetrain', 'frc971.control_loops.drivetrain.Status');
27 const output = aosPlotter.addMessageSource(
28 '/drivetrain', 'frc971.control_loops.drivetrain.Output');
29 const imu = aosPlotter.addRawMessageSource(
30 '/drivetrain', 'frc971.IMUValuesBatch',
31 new ImuMessageHandler(conn.getSchema('frc971.IMUValuesBatch')));
32
33 let currentTop = 0;
34
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080035 // Polydrivetrain (teleop control) plots
36 const teleopPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -080037 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
38 currentTop += DEFAULT_HEIGHT / 2;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080039 teleopPlot.plot.getAxisLabels().setTitle('Drivetrain Teleop Goals');
milind upadhyay9bd381d2021-01-23 13:44:13 -080040 teleopPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080041 teleopPlot.plot.getAxisLabels().setYLabel('bool, throttle/wheel values');
42 teleopPlot.plot.setDefaultYRange([-1.1, 1.1]);
43
44 const quickTurn = teleopPlot.addMessageLine(goal, ['quickturn']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080045 quickTurn.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080046 const throttle = teleopPlot.addMessageLine(goal, ['throttle']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080047 throttle.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080048 const wheel = teleopPlot.addMessageLine(goal, ['wheel']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080049 wheel.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080050
51 // Drivetrain Control Mode
52 const modePlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -080053 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
54 currentTop += DEFAULT_HEIGHT / 2;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080055 // TODO(james): Actually add enum support.
56 modePlot.plot.getAxisLabels().setTitle(
57 'Drivetrain Mode [POLYDRIVE, MOTION_PROFILE, ' +
58 'SPLINE_FOLLOWER, LINE_FOLLOWER]');
milind upadhyay9bd381d2021-01-23 13:44:13 -080059 modePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080060 modePlot.plot.getAxisLabels().setYLabel('ControllerType');
61 modePlot.plot.setDefaultYRange([-0.1, 3.1]);
62
63 const controllerType = modePlot.addMessageLine(goal, ['controller_type']);
64 controllerType.setDrawLine(false);
65
milind upadhyay9bd381d2021-01-23 13:44:13 -080066 // Drivetrain Status estimated relative position
milind upadhyayb81e6a42021-01-08 19:48:30 -080067 const positionPlot = aosPlotter.addPlot(element, [0, currentTop],
milind upadhyay9bd381d2021-01-23 13:44:13 -080068 [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
69 currentTop += DEFAULT_HEIGHT;
milind upadhyayb81e6a42021-01-08 19:48:30 -080070 positionPlot.plot.getAxisLabels().setTitle("Estimated Relative Position " +
71 "of the Drivetrain");
milind upadhyay9bd381d2021-01-23 13:44:13 -080072 positionPlot.plot.getAxisLabels().setXLabel(TIME);
milind upadhyayb81e6a42021-01-08 19:48:30 -080073 positionPlot.plot.getAxisLabels().setYLabel("Relative Position (m)");
74 const leftPosition =
75 positionPlot.addMessageLine(status, ["estimated_left_position"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080076 leftPosition.setColor(RED);
milind upadhyayb81e6a42021-01-08 19:48:30 -080077 const rightPosition =
78 positionPlot.addMessageLine(status, ["estimated_right_position"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080079 rightPosition.setColor(GREEN);
milind upadhyayb81e6a42021-01-08 19:48:30 -080080 const leftPositionGoal =
81 positionPlot.addMessageLine(status, ["profiled_left_position_goal"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080082 leftPositionGoal.setColor(BLUE);
milind upadhyayb81e6a42021-01-08 19:48:30 -080083 const rightPositionGoal =
84 positionPlot.addMessageLine(status, ["profiled_right_position_goal"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080085 rightPositionGoal.setColor(PINK);
86 const leftEncoder = positionPlot.addMessageLine(position, ["left_encoder"]);
87 leftEncoder.setColor(BROWN);
88 const rightEncoder = positionPlot.addMessageLine(position, ["right_encoder"]);
89 rightEncoder.setColor(CYAN);
milind upadhyayb81e6a42021-01-08 19:48:30 -080090
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080091 // Drivetrain Output Voltage
92 const outputPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -080093 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
94 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080095 outputPlot.plot.getAxisLabels().setTitle('Drivetrain Output');
milind upadhyay9bd381d2021-01-23 13:44:13 -080096 outputPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080097 outputPlot.plot.getAxisLabels().setYLabel('Voltage (V)');
98
99 const leftVoltage = outputPlot.addMessageLine(output, ['left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800100 leftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800101 const rightVoltage = outputPlot.addMessageLine(output, ['right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800102 rightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800103
104 // Voltage Errors
105 const voltageErrors =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800106 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
107 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800108 voltageErrors.plot.getAxisLabels().setTitle('Voltage Errors');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800109 voltageErrors.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800110 voltageErrors.plot.getAxisLabels().setYLabel('Voltage (V)');
111
112 const leftVoltageError =
113 voltageErrors.addMessageLine(status, ['left_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800114 leftVoltageError.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800115 const rightVoltageError =
116 voltageErrors.addMessageLine(status, ['right_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800117 rightVoltageError.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800118
119 const ekfLeftVoltageError =
120 voltageErrors.addMessageLine(status, ['localizer', 'left_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800121 ekfLeftVoltageError.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800122 const ekfRightVoltageError = voltageErrors.addMessageLine(
123 status, ['localizer', 'right_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800124 ekfRightVoltageError.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800125
126 // Sundry components of the output voltages
127 const otherVoltages =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800128 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
129 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800130 otherVoltages.plot.getAxisLabels().setTitle('Other Voltage Components');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800131 otherVoltages.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800132 otherVoltages.plot.getAxisLabels().setYLabel('Voltage (V)');
133
134 const ffLeftVoltage = otherVoltages.addMessageLine(
135 status, ['poly_drive_logging', 'ff_left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800136 ffLeftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800137 ffLeftVoltage.setPointSize(0);
138 const ffRightVoltage = otherVoltages.addMessageLine(
139 status, ['poly_drive_logging', 'ff_right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800140 ffRightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800141 ffRightVoltage.setPointSize(0);
142
143 const uncappedLeftVoltage =
144 otherVoltages.addMessageLine(status, ['uncapped_left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800145 uncappedLeftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800146 uncappedLeftVoltage.setDrawLine(false);
147 const uncappedRightVoltage =
148 otherVoltages.addMessageLine(status, ['uncapped_right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800149 uncappedRightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800150 uncappedRightVoltage.setDrawLine(false);
151
152 // Drivetrain Velocities
153 const velocityPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800154 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
155 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800156 velocityPlot.plot.getAxisLabels().setTitle('Velocity Plots');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800157 velocityPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800158 velocityPlot.plot.getAxisLabels().setYLabel('Wheel Velocity (m/s)');
159
160 const ssLeftVelocityGoal =
161 velocityPlot.addMessageLine(status, ['profiled_left_velocity_goal']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800162 ssLeftVelocityGoal.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800163 ssLeftVelocityGoal.setPointSize(0.0);
164 const ssRightVelocityGoal =
165 velocityPlot.addMessageLine(status, ['profiled_right_velocity_goal']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800166 ssRightVelocityGoal.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800167 ssRightVelocityGoal.setPointSize(0.0);
168
169 const polyLeftVelocity = velocityPlot.addMessageLine(
170 status, ['poly_drive_logging', 'goal_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800171 polyLeftVelocity.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800172 polyLeftVelocity.setDrawLine(false);
173
174 const polyRightVelocity = velocityPlot.addMessageLine(
175 status, ['poly_drive_logging', 'goal_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800176 polyRightVelocity.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800177 polyRightVelocity.setDrawLine(false);
178
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800179 const leftVelocity =
180 velocityPlot.addMessageLine(status, ['estimated_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800181 leftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800182 const rightVelocity =
183 velocityPlot.addMessageLine(status, ['estimated_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800184 rightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800185
milind upadhyay6079d4f2021-01-24 13:59:57 -0800186 const leftSpeed = velocityPlot.addMessageLine(position, ["left_speed"]);
187 leftSpeed.setColor(BLUE);
188 const rightSpeed = velocityPlot.addMessageLine(position, ["right_speed"]);
189 rightSpeed.setColor(BROWN);
190
191 // Drivetrain trajectory and localizer velocities
192 const velocityPlot2 = aosPlotter.addPlot(element, [0, currentTop],
193 [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
194 currentTop += DEFAULT_HEIGHT;
195 velocityPlot2.plot.getAxisLabels().setTitle(
196 "Trajectory and Localizer Velocity Plots");
197 velocityPlot2.plot.getAxisLabels().setXLabel(TIME);
198 velocityPlot2.plot.getAxisLabels().setYLabel('Wheel Velocity (m/s)');
199
200 const splineLeftVelocity = velocityPlot2.addMessageLine(
201 status, ['trajectory_logging', 'left_velocity']);
202 splineLeftVelocity.setColor(RED);
203 splineLeftVelocity.setDrawLine(false);
204
205 const splineRightVelocity = velocityPlot2.addMessageLine(
206 status, ['trajectory_logging', 'right_velocity']);
207 splineRightVelocity.setColor(GREEN);
208 splineRightVelocity.setDrawLine(false);
209
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800210 const ekfLeftVelocity =
milind upadhyay6079d4f2021-01-24 13:59:57 -0800211 velocityPlot2.addMessageLine(status, ['localizer', 'left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800212 ekfLeftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800213 ekfLeftVelocity.setPointSize(0.0);
214 const ekfRightVelocity =
milind upadhyay6079d4f2021-01-24 13:59:57 -0800215 velocityPlot2.addMessageLine(status, ['localizer', 'right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800216 ekfRightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800217 ekfRightVelocity.setPointSize(0.0);
218
219 // Heading
milind upadhyay9bd381d2021-01-23 13:44:13 -0800220 const yawPlot = aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
221 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800222 yawPlot.plot.getAxisLabels().setTitle('Robot Yaw');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800223 yawPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800224 yawPlot.plot.getAxisLabels().setYLabel('Yaw (rad)');
225
226 const splineYaw =
227 yawPlot.addMessageLine(status, ['trajectory_logging', 'theta']);
228 splineYaw.setDrawLine(false);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800229 splineYaw.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800230
231 const ekfYaw = yawPlot.addMessageLine(status, ['localizer', 'theta']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800232 ekfYaw.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800233
234 const downEstimatorYaw =
235 yawPlot.addMessageLine(status, ['down_estimator', 'yaw']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800236 downEstimatorYaw.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800237
238 // Pitch/Roll
239 const orientationPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800240 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
241 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800242 orientationPlot.plot.getAxisLabels().setTitle('Orientation');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800243 orientationPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800244 orientationPlot.plot.getAxisLabels().setYLabel('Angle (rad)');
245
246 const roll = orientationPlot.addMessageLine(
247 status, ['down_estimator', 'lateral_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800248 roll.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800249 roll.setLabel('roll');
250 const pitch = orientationPlot.addMessageLine(
251 status, ['down_estimator', 'longitudinal_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800252 pitch.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800253 pitch.setLabel('pitch');
254
255 // Accelerometer/Gravity
256 const accelPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800257 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
258 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800259 accelPlot.plot.getAxisLabels().setTitle('Accelerometer Readings');
260 accelPlot.plot.getAxisLabels().setYLabel('Acceleration (g)');
261 accelPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
262
263 const expectedAccelX =
264 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800265 expectedAccelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800266 expectedAccelX.setPointSize(0);
267 const expectedAccelY =
268 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800269 expectedAccelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800270 expectedAccelY.setPointSize(0);
271 const expectedAccelZ =
272 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800273 expectedAccelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800274 expectedAccelZ.setPointSize(0);
275
276 const gravity_magnitude =
277 accelPlot.addMessageLine(status, ['down_estimator', 'gravity_magnitude']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800278 gravity_magnitude.setColor(WHITE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800279 gravity_magnitude.setPointSize(0);
280
281 const accelX = accelPlot.addMessageLine(imu, ['accelerometer_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800282 accelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800283 accelX.setDrawLine(false);
284 const accelY = accelPlot.addMessageLine(imu, ['accelerometer_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800285 accelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800286 accelY.setDrawLine(false);
287 const accelZ = accelPlot.addMessageLine(imu, ['accelerometer_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800288 accelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800289 accelZ.setDrawLine(false);
290
291 // Absolute X Position
292 const xPositionPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800293 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
294 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800295 xPositionPlot.plot.getAxisLabels().setTitle('X Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800296 xPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800297 xPositionPlot.plot.getAxisLabels().setYLabel('X Position (m)');
298
299 const localizerX = xPositionPlot.addMessageLine(status, ['x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800300 localizerX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800301 const splineX =
302 xPositionPlot.addMessageLine(status, ['trajectory_logging', 'x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800303 splineX.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800304
305 // Absolute Y Position
306 const yPositionPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800307 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
308 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800309 yPositionPlot.plot.getAxisLabels().setTitle('Y Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800310 yPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800311 yPositionPlot.plot.getAxisLabels().setYLabel('Y Position (m)');
312
313 const localizerY = yPositionPlot.addMessageLine(status, ['y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800314 localizerY.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800315 const splineY =
316 yPositionPlot.addMessageLine(status, ['trajectory_logging', 'y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800317 splineY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800318
319 // Gyro
320 const gyroPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800321 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
322 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800323 gyroPlot.plot.getAxisLabels().setTitle('Gyro Readings');
324 gyroPlot.plot.getAxisLabels().setYLabel('Angular Velocity (rad / sec)');
325 gyroPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
326
327 const gyroZeroX =
328 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_x_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800329 gyroZeroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800330 gyroZeroX.setPointSize(0);
331 gyroZeroX.setLabel('Gyro X Zero');
332 const gyroZeroY =
333 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_y_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800334 gyroZeroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800335 gyroZeroY.setPointSize(0);
336 gyroZeroY.setLabel('Gyro Y Zero');
337 const gyroZeroZ =
338 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_z_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800339 gyroZeroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800340 gyroZeroZ.setPointSize(0);
341 gyroZeroZ.setLabel('Gyro Z Zero');
342
343 const gyroX = gyroPlot.addMessageLine(imu, ['gyro_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800344 gyroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800345 const gyroY = gyroPlot.addMessageLine(imu, ['gyro_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800346 gyroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800347 const gyroZ = gyroPlot.addMessageLine(imu, ['gyro_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800348 gyroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800349
350 // IMU States
351 const imuStatePlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800352 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
353 currentTop += DEFAULT_HEIGHT / 2;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800354 imuStatePlot.plot.getAxisLabels().setTitle('IMU State');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800355 imuStatePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800356 imuStatePlot.plot.setDefaultYRange([-0.1, 1.1]);
357
358 const zeroedLine = imuStatePlot.addMessageLine(status, ['zeroing', 'zeroed']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800359 zeroedLine.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800360 zeroedLine.setDrawLine(false);
361 zeroedLine.setLabel('IMU Zeroed');
362 const faultedLine =
363 imuStatePlot.addMessageLine(status, ['zeroing', 'faulted']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800364 faultedLine.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800365 faultedLine.setPointSize(0);
366 faultedLine.setLabel('IMU Faulted');
367}