blob: 0c01f6a4574da6be2f5f41853f820acbdf35807c [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
Austin Schuhd99a3c42021-01-30 16:58:00 -0800219 const splineVelocityOffset = velocityPlot2.addMessageLine(
220 status, ['localizer', 'longitudinal_velocity_offset']);
221 splineVelocityOffset.setColor(BROWN);
222 splineVelocityOffset.setPointSize(0.0);
223
224 const splineLateralVelocity = velocityPlot2.addMessageLine(
225 status, ['localizer', 'lateral_velocity']);
226 splineLateralVelocity.setColor(PINK);
227 splineLateralVelocity.setPointSize(0.0);
228
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800229 // Heading
milind upadhyay9bd381d2021-01-23 13:44:13 -0800230 const yawPlot = aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
231 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800232 yawPlot.plot.getAxisLabels().setTitle('Robot Yaw');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800233 yawPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800234 yawPlot.plot.getAxisLabels().setYLabel('Yaw (rad)');
235
236 const splineYaw =
237 yawPlot.addMessageLine(status, ['trajectory_logging', 'theta']);
238 splineYaw.setDrawLine(false);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800239 splineYaw.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800240
241 const ekfYaw = yawPlot.addMessageLine(status, ['localizer', 'theta']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800242 ekfYaw.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800243
244 const downEstimatorYaw =
245 yawPlot.addMessageLine(status, ['down_estimator', 'yaw']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800246 downEstimatorYaw.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800247
248 // Pitch/Roll
249 const orientationPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800250 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
251 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800252 orientationPlot.plot.getAxisLabels().setTitle('Orientation');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800253 orientationPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800254 orientationPlot.plot.getAxisLabels().setYLabel('Angle (rad)');
255
256 const roll = orientationPlot.addMessageLine(
257 status, ['down_estimator', 'lateral_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800258 roll.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800259 roll.setLabel('roll');
260 const pitch = orientationPlot.addMessageLine(
261 status, ['down_estimator', 'longitudinal_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800262 pitch.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800263 pitch.setLabel('pitch');
264
265 // Accelerometer/Gravity
266 const accelPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800267 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
268 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800269 accelPlot.plot.getAxisLabels().setTitle('Accelerometer Readings');
270 accelPlot.plot.getAxisLabels().setYLabel('Acceleration (g)');
271 accelPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
272
273 const expectedAccelX =
274 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800275 expectedAccelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800276 expectedAccelX.setPointSize(0);
277 const expectedAccelY =
278 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800279 expectedAccelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800280 expectedAccelY.setPointSize(0);
281 const expectedAccelZ =
282 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800283 expectedAccelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800284 expectedAccelZ.setPointSize(0);
285
286 const gravity_magnitude =
287 accelPlot.addMessageLine(status, ['down_estimator', 'gravity_magnitude']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800288 gravity_magnitude.setColor(WHITE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800289 gravity_magnitude.setPointSize(0);
290
291 const accelX = accelPlot.addMessageLine(imu, ['accelerometer_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800292 accelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800293 accelX.setDrawLine(false);
294 const accelY = accelPlot.addMessageLine(imu, ['accelerometer_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800295 accelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800296 accelY.setDrawLine(false);
297 const accelZ = accelPlot.addMessageLine(imu, ['accelerometer_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800298 accelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800299 accelZ.setDrawLine(false);
300
301 // Absolute X Position
302 const xPositionPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800303 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
304 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800305 xPositionPlot.plot.getAxisLabels().setTitle('X Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800306 xPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800307 xPositionPlot.plot.getAxisLabels().setYLabel('X Position (m)');
308
309 const localizerX = xPositionPlot.addMessageLine(status, ['x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800310 localizerX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800311 const splineX =
312 xPositionPlot.addMessageLine(status, ['trajectory_logging', 'x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800313 splineX.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800314
315 // Absolute Y Position
316 const yPositionPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800317 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
318 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800319 yPositionPlot.plot.getAxisLabels().setTitle('Y Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800320 yPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800321 yPositionPlot.plot.getAxisLabels().setYLabel('Y Position (m)');
322
323 const localizerY = yPositionPlot.addMessageLine(status, ['y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800324 localizerY.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800325 const splineY =
326 yPositionPlot.addMessageLine(status, ['trajectory_logging', 'y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800327 splineY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800328
329 // Gyro
330 const gyroPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800331 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
332 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800333 gyroPlot.plot.getAxisLabels().setTitle('Gyro Readings');
334 gyroPlot.plot.getAxisLabels().setYLabel('Angular Velocity (rad / sec)');
335 gyroPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
336
337 const gyroZeroX =
338 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_x_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800339 gyroZeroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800340 gyroZeroX.setPointSize(0);
341 gyroZeroX.setLabel('Gyro X Zero');
342 const gyroZeroY =
343 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_y_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800344 gyroZeroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800345 gyroZeroY.setPointSize(0);
346 gyroZeroY.setLabel('Gyro Y Zero');
347 const gyroZeroZ =
348 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_z_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800349 gyroZeroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800350 gyroZeroZ.setPointSize(0);
351 gyroZeroZ.setLabel('Gyro Z Zero');
352
353 const gyroX = gyroPlot.addMessageLine(imu, ['gyro_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800354 gyroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800355 const gyroY = gyroPlot.addMessageLine(imu, ['gyro_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800356 gyroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800357 const gyroZ = gyroPlot.addMessageLine(imu, ['gyro_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800358 gyroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800359
360 // IMU States
361 const imuStatePlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800362 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
363 currentTop += DEFAULT_HEIGHT / 2;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800364 imuStatePlot.plot.getAxisLabels().setTitle('IMU State');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800365 imuStatePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800366 imuStatePlot.plot.setDefaultYRange([-0.1, 1.1]);
367
368 const zeroedLine = imuStatePlot.addMessageLine(status, ['zeroing', 'zeroed']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800369 zeroedLine.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800370 zeroedLine.setDrawLine(false);
371 zeroedLine.setLabel('IMU Zeroed');
372 const faultedLine =
373 imuStatePlot.addMessageLine(status, ['zeroing', 'faulted']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800374 faultedLine.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800375 faultedLine.setPointSize(0);
376 faultedLine.setLabel('IMU Faulted');
377}