blob: f1ddd75a12fc0beea458922643fae2ae0581060b [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
179 const splineLeftVelocity = velocityPlot.addMessageLine(
180 status, ['trajectory_logging', 'left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800181 splineLeftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800182 splineLeftVelocity.setDrawLine(false);
183
184 const splineRightVelocity = velocityPlot.addMessageLine(
185 status, ['trajectory_logging', 'right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800186 splineRightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800187 splineRightVelocity.setDrawLine(false);
188
189 const leftVelocity =
190 velocityPlot.addMessageLine(status, ['estimated_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800191 leftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800192 const rightVelocity =
193 velocityPlot.addMessageLine(status, ['estimated_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800194 rightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800195
196 const ekfLeftVelocity =
197 velocityPlot.addMessageLine(status, ['localizer', 'left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800198 ekfLeftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800199 ekfLeftVelocity.setPointSize(0.0);
200 const ekfRightVelocity =
201 velocityPlot.addMessageLine(status, ['localizer', 'right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800202 ekfRightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800203 ekfRightVelocity.setPointSize(0.0);
204
205 // Heading
milind upadhyay9bd381d2021-01-23 13:44:13 -0800206 const yawPlot = aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
207 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800208 yawPlot.plot.getAxisLabels().setTitle('Robot Yaw');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800209 yawPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800210 yawPlot.plot.getAxisLabels().setYLabel('Yaw (rad)');
211
212 const splineYaw =
213 yawPlot.addMessageLine(status, ['trajectory_logging', 'theta']);
214 splineYaw.setDrawLine(false);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800215 splineYaw.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800216
217 const ekfYaw = yawPlot.addMessageLine(status, ['localizer', 'theta']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800218 ekfYaw.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800219
220 const downEstimatorYaw =
221 yawPlot.addMessageLine(status, ['down_estimator', 'yaw']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800222 downEstimatorYaw.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800223
224 // Pitch/Roll
225 const orientationPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800226 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
227 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800228 orientationPlot.plot.getAxisLabels().setTitle('Orientation');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800229 orientationPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800230 orientationPlot.plot.getAxisLabels().setYLabel('Angle (rad)');
231
232 const roll = orientationPlot.addMessageLine(
233 status, ['down_estimator', 'lateral_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800234 roll.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800235 roll.setLabel('roll');
236 const pitch = orientationPlot.addMessageLine(
237 status, ['down_estimator', 'longitudinal_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800238 pitch.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800239 pitch.setLabel('pitch');
240
241 // Accelerometer/Gravity
242 const accelPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800243 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
244 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800245 accelPlot.plot.getAxisLabels().setTitle('Accelerometer Readings');
246 accelPlot.plot.getAxisLabels().setYLabel('Acceleration (g)');
247 accelPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
248
249 const expectedAccelX =
250 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800251 expectedAccelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800252 expectedAccelX.setPointSize(0);
253 const expectedAccelY =
254 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800255 expectedAccelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800256 expectedAccelY.setPointSize(0);
257 const expectedAccelZ =
258 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800259 expectedAccelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800260 expectedAccelZ.setPointSize(0);
261
262 const gravity_magnitude =
263 accelPlot.addMessageLine(status, ['down_estimator', 'gravity_magnitude']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800264 gravity_magnitude.setColor(WHITE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800265 gravity_magnitude.setPointSize(0);
266
267 const accelX = accelPlot.addMessageLine(imu, ['accelerometer_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800268 accelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800269 accelX.setDrawLine(false);
270 const accelY = accelPlot.addMessageLine(imu, ['accelerometer_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800271 accelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800272 accelY.setDrawLine(false);
273 const accelZ = accelPlot.addMessageLine(imu, ['accelerometer_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800274 accelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800275 accelZ.setDrawLine(false);
276
277 // Absolute X Position
278 const xPositionPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800279 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
280 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800281 xPositionPlot.plot.getAxisLabels().setTitle('X Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800282 xPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800283 xPositionPlot.plot.getAxisLabels().setYLabel('X Position (m)');
284
285 const localizerX = xPositionPlot.addMessageLine(status, ['x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800286 localizerX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800287 const splineX =
288 xPositionPlot.addMessageLine(status, ['trajectory_logging', 'x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800289 splineX.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800290
291 // Absolute Y Position
292 const yPositionPlot =
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 yPositionPlot.plot.getAxisLabels().setTitle('Y Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800296 yPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800297 yPositionPlot.plot.getAxisLabels().setYLabel('Y Position (m)');
298
299 const localizerY = yPositionPlot.addMessageLine(status, ['y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800300 localizerY.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800301 const splineY =
302 yPositionPlot.addMessageLine(status, ['trajectory_logging', 'y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800303 splineY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800304
305 // Gyro
306 const gyroPlot =
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 gyroPlot.plot.getAxisLabels().setTitle('Gyro Readings');
310 gyroPlot.plot.getAxisLabels().setYLabel('Angular Velocity (rad / sec)');
311 gyroPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
312
313 const gyroZeroX =
314 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_x_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800315 gyroZeroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800316 gyroZeroX.setPointSize(0);
317 gyroZeroX.setLabel('Gyro X Zero');
318 const gyroZeroY =
319 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_y_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800320 gyroZeroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800321 gyroZeroY.setPointSize(0);
322 gyroZeroY.setLabel('Gyro Y Zero');
323 const gyroZeroZ =
324 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_z_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800325 gyroZeroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800326 gyroZeroZ.setPointSize(0);
327 gyroZeroZ.setLabel('Gyro Z Zero');
328
329 const gyroX = gyroPlot.addMessageLine(imu, ['gyro_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800330 gyroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800331 const gyroY = gyroPlot.addMessageLine(imu, ['gyro_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800332 gyroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800333 const gyroZ = gyroPlot.addMessageLine(imu, ['gyro_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800334 gyroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800335
336 // IMU States
337 const imuStatePlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800338 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
339 currentTop += DEFAULT_HEIGHT / 2;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800340 imuStatePlot.plot.getAxisLabels().setTitle('IMU State');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800341 imuStatePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800342 imuStatePlot.plot.setDefaultYRange([-0.1, 1.1]);
343
344 const zeroedLine = imuStatePlot.addMessageLine(status, ['zeroing', 'zeroed']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800345 zeroedLine.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800346 zeroedLine.setDrawLine(false);
347 zeroedLine.setLabel('IMU Zeroed');
348 const faultedLine =
349 imuStatePlot.addMessageLine(status, ['zeroing', 'faulted']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800350 faultedLine.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800351 faultedLine.setPointSize(0);
352 faultedLine.setLabel('IMU Faulted');
353}