blob: f55f965b066eae2e0e3d136e17b2afc193a6520c [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
27 let currentTop = 0;
28
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080029 // Polydrivetrain (teleop control) plots
30 const teleopPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -080031 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
32 currentTop += DEFAULT_HEIGHT / 2;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080033 teleopPlot.plot.getAxisLabels().setTitle('Drivetrain Teleop Goals');
milind upadhyay9bd381d2021-01-23 13:44:13 -080034 teleopPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080035 teleopPlot.plot.getAxisLabels().setYLabel('bool, throttle/wheel values');
36 teleopPlot.plot.setDefaultYRange([-1.1, 1.1]);
37
38 const quickTurn = teleopPlot.addMessageLine(goal, ['quickturn']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080039 quickTurn.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080040 const throttle = teleopPlot.addMessageLine(goal, ['throttle']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080041 throttle.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080042 const wheel = teleopPlot.addMessageLine(goal, ['wheel']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080043 wheel.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080044
45 // Drivetrain Control Mode
46 const modePlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -080047 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
48 currentTop += DEFAULT_HEIGHT / 2;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080049 // TODO(james): Actually add enum support.
50 modePlot.plot.getAxisLabels().setTitle(
51 'Drivetrain Mode [POLYDRIVE, MOTION_PROFILE, ' +
52 'SPLINE_FOLLOWER, LINE_FOLLOWER]');
milind upadhyay9bd381d2021-01-23 13:44:13 -080053 modePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080054 modePlot.plot.getAxisLabels().setYLabel('ControllerType');
55 modePlot.plot.setDefaultYRange([-0.1, 3.1]);
56
57 const controllerType = modePlot.addMessageLine(goal, ['controller_type']);
58 controllerType.setDrawLine(false);
59
milind upadhyay9bd381d2021-01-23 13:44:13 -080060 // Drivetrain Status estimated relative position
milind upadhyayb81e6a42021-01-08 19:48:30 -080061 const positionPlot = aosPlotter.addPlot(element, [0, currentTop],
milind upadhyay9bd381d2021-01-23 13:44:13 -080062 [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
63 currentTop += DEFAULT_HEIGHT;
milind upadhyayb81e6a42021-01-08 19:48:30 -080064 positionPlot.plot.getAxisLabels().setTitle("Estimated Relative Position " +
65 "of the Drivetrain");
milind upadhyay9bd381d2021-01-23 13:44:13 -080066 positionPlot.plot.getAxisLabels().setXLabel(TIME);
milind upadhyayb81e6a42021-01-08 19:48:30 -080067 positionPlot.plot.getAxisLabels().setYLabel("Relative Position (m)");
68 const leftPosition =
69 positionPlot.addMessageLine(status, ["estimated_left_position"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080070 leftPosition.setColor(RED);
milind upadhyayb81e6a42021-01-08 19:48:30 -080071 const rightPosition =
72 positionPlot.addMessageLine(status, ["estimated_right_position"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080073 rightPosition.setColor(GREEN);
milind upadhyayb81e6a42021-01-08 19:48:30 -080074 const leftPositionGoal =
75 positionPlot.addMessageLine(status, ["profiled_left_position_goal"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080076 leftPositionGoal.setColor(BLUE);
milind upadhyayb81e6a42021-01-08 19:48:30 -080077 const rightPositionGoal =
78 positionPlot.addMessageLine(status, ["profiled_right_position_goal"]);
milind upadhyay9bd381d2021-01-23 13:44:13 -080079 rightPositionGoal.setColor(PINK);
80 const leftEncoder = positionPlot.addMessageLine(position, ["left_encoder"]);
81 leftEncoder.setColor(BROWN);
82 const rightEncoder = positionPlot.addMessageLine(position, ["right_encoder"]);
83 rightEncoder.setColor(CYAN);
milind upadhyayb81e6a42021-01-08 19:48:30 -080084
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080085 // Drivetrain Output Voltage
86 const outputPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -080087 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
88 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080089 outputPlot.plot.getAxisLabels().setTitle('Drivetrain Output');
milind upadhyay9bd381d2021-01-23 13:44:13 -080090 outputPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080091 outputPlot.plot.getAxisLabels().setYLabel('Voltage (V)');
92
93 const leftVoltage = outputPlot.addMessageLine(output, ['left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080094 leftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080095 const rightVoltage = outputPlot.addMessageLine(output, ['right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -080096 rightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -080097
98 // Voltage Errors
99 const voltageErrors =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800100 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
101 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800102 voltageErrors.plot.getAxisLabels().setTitle('Voltage Errors');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800103 voltageErrors.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800104 voltageErrors.plot.getAxisLabels().setYLabel('Voltage (V)');
105
106 const leftVoltageError =
107 voltageErrors.addMessageLine(status, ['left_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800108 leftVoltageError.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800109 const rightVoltageError =
110 voltageErrors.addMessageLine(status, ['right_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800111 rightVoltageError.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800112
113 const ekfLeftVoltageError =
114 voltageErrors.addMessageLine(status, ['localizer', 'left_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800115 ekfLeftVoltageError.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800116 const ekfRightVoltageError = voltageErrors.addMessageLine(
117 status, ['localizer', 'right_voltage_error']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800118 ekfRightVoltageError.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800119
120 // Sundry components of the output voltages
121 const otherVoltages =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800122 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
123 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800124 otherVoltages.plot.getAxisLabels().setTitle('Other Voltage Components');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800125 otherVoltages.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800126 otherVoltages.plot.getAxisLabels().setYLabel('Voltage (V)');
127
128 const ffLeftVoltage = otherVoltages.addMessageLine(
129 status, ['poly_drive_logging', 'ff_left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800130 ffLeftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800131 ffLeftVoltage.setPointSize(0);
132 const ffRightVoltage = otherVoltages.addMessageLine(
133 status, ['poly_drive_logging', 'ff_right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800134 ffRightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800135 ffRightVoltage.setPointSize(0);
136
137 const uncappedLeftVoltage =
138 otherVoltages.addMessageLine(status, ['uncapped_left_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800139 uncappedLeftVoltage.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800140 uncappedLeftVoltage.setDrawLine(false);
141 const uncappedRightVoltage =
142 otherVoltages.addMessageLine(status, ['uncapped_right_voltage']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800143 uncappedRightVoltage.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800144 uncappedRightVoltage.setDrawLine(false);
145
146 // Drivetrain Velocities
147 const velocityPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800148 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
149 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800150 velocityPlot.plot.getAxisLabels().setTitle('Velocity Plots');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800151 velocityPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800152 velocityPlot.plot.getAxisLabels().setYLabel('Wheel Velocity (m/s)');
153
154 const ssLeftVelocityGoal =
155 velocityPlot.addMessageLine(status, ['profiled_left_velocity_goal']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800156 ssLeftVelocityGoal.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800157 ssLeftVelocityGoal.setPointSize(0.0);
158 const ssRightVelocityGoal =
159 velocityPlot.addMessageLine(status, ['profiled_right_velocity_goal']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800160 ssRightVelocityGoal.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800161 ssRightVelocityGoal.setPointSize(0.0);
162
163 const polyLeftVelocity = velocityPlot.addMessageLine(
164 status, ['poly_drive_logging', 'goal_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800165 polyLeftVelocity.setColor(PINK);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800166 polyLeftVelocity.setDrawLine(false);
167
168 const polyRightVelocity = velocityPlot.addMessageLine(
169 status, ['poly_drive_logging', 'goal_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800170 polyRightVelocity.setColor(CYAN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800171 polyRightVelocity.setDrawLine(false);
172
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800173 const leftVelocity =
174 velocityPlot.addMessageLine(status, ['estimated_left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800175 leftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800176 const rightVelocity =
177 velocityPlot.addMessageLine(status, ['estimated_right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800178 rightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800179
milind upadhyay6079d4f2021-01-24 13:59:57 -0800180 const leftSpeed = velocityPlot.addMessageLine(position, ["left_speed"]);
181 leftSpeed.setColor(BLUE);
182 const rightSpeed = velocityPlot.addMessageLine(position, ["right_speed"]);
183 rightSpeed.setColor(BROWN);
184
185 // Drivetrain trajectory and localizer velocities
186 const velocityPlot2 = aosPlotter.addPlot(element, [0, currentTop],
187 [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
188 currentTop += DEFAULT_HEIGHT;
189 velocityPlot2.plot.getAxisLabels().setTitle(
190 "Trajectory and Localizer Velocity Plots");
191 velocityPlot2.plot.getAxisLabels().setXLabel(TIME);
192 velocityPlot2.plot.getAxisLabels().setYLabel('Wheel Velocity (m/s)');
193
194 const splineLeftVelocity = velocityPlot2.addMessageLine(
195 status, ['trajectory_logging', 'left_velocity']);
196 splineLeftVelocity.setColor(RED);
197 splineLeftVelocity.setDrawLine(false);
198
199 const splineRightVelocity = velocityPlot2.addMessageLine(
200 status, ['trajectory_logging', 'right_velocity']);
201 splineRightVelocity.setColor(GREEN);
202 splineRightVelocity.setDrawLine(false);
203
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800204 const ekfLeftVelocity =
milind upadhyay6079d4f2021-01-24 13:59:57 -0800205 velocityPlot2.addMessageLine(status, ['localizer', 'left_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800206 ekfLeftVelocity.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800207 ekfLeftVelocity.setPointSize(0.0);
208 const ekfRightVelocity =
milind upadhyay6079d4f2021-01-24 13:59:57 -0800209 velocityPlot2.addMessageLine(status, ['localizer', 'right_velocity']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800210 ekfRightVelocity.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800211 ekfRightVelocity.setPointSize(0.0);
212
Austin Schuhd99a3c42021-01-30 16:58:00 -0800213 const splineVelocityOffset = velocityPlot2.addMessageLine(
214 status, ['localizer', 'longitudinal_velocity_offset']);
215 splineVelocityOffset.setColor(BROWN);
216 splineVelocityOffset.setPointSize(0.0);
217
218 const splineLateralVelocity = velocityPlot2.addMessageLine(
219 status, ['localizer', 'lateral_velocity']);
220 splineLateralVelocity.setColor(PINK);
221 splineLateralVelocity.setPointSize(0.0);
222
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800223 // Heading
milind upadhyay9bd381d2021-01-23 13:44:13 -0800224 const yawPlot = aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
225 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800226 yawPlot.plot.getAxisLabels().setTitle('Robot Yaw');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800227 yawPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800228 yawPlot.plot.getAxisLabels().setYLabel('Yaw (rad)');
229
230 const splineYaw =
231 yawPlot.addMessageLine(status, ['trajectory_logging', 'theta']);
232 splineYaw.setDrawLine(false);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800233 splineYaw.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800234
235 const ekfYaw = yawPlot.addMessageLine(status, ['localizer', 'theta']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800236 ekfYaw.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800237
238 const downEstimatorYaw =
239 yawPlot.addMessageLine(status, ['down_estimator', 'yaw']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800240 downEstimatorYaw.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800241
242 // Pitch/Roll
243 const orientationPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800244 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
245 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800246 orientationPlot.plot.getAxisLabels().setTitle('Orientation');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800247 orientationPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800248 orientationPlot.plot.getAxisLabels().setYLabel('Angle (rad)');
249
250 const roll = orientationPlot.addMessageLine(
251 status, ['down_estimator', 'lateral_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800252 roll.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800253 roll.setLabel('roll');
254 const pitch = orientationPlot.addMessageLine(
255 status, ['down_estimator', 'longitudinal_pitch']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800256 pitch.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800257 pitch.setLabel('pitch');
258
259 // Accelerometer/Gravity
260 const accelPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800261 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
262 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800263 accelPlot.plot.getAxisLabels().setTitle('Accelerometer Readings');
264 accelPlot.plot.getAxisLabels().setYLabel('Acceleration (g)');
265 accelPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
266
267 const expectedAccelX =
268 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800269 expectedAccelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800270 expectedAccelX.setPointSize(0);
271 const expectedAccelY =
272 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800273 expectedAccelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800274 expectedAccelY.setPointSize(0);
275 const expectedAccelZ =
276 accelPlot.addMessageLine(status, ['down_estimator', 'expected_accel_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800277 expectedAccelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800278 expectedAccelZ.setPointSize(0);
279
280 const gravity_magnitude =
281 accelPlot.addMessageLine(status, ['down_estimator', 'gravity_magnitude']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800282 gravity_magnitude.setColor(WHITE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800283 gravity_magnitude.setPointSize(0);
284
285 const accelX = accelPlot.addMessageLine(imu, ['accelerometer_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800286 accelX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800287 accelX.setDrawLine(false);
288 const accelY = accelPlot.addMessageLine(imu, ['accelerometer_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800289 accelY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800290 accelY.setDrawLine(false);
291 const accelZ = accelPlot.addMessageLine(imu, ['accelerometer_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800292 accelZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800293 accelZ.setDrawLine(false);
294
295 // Absolute X Position
296 const xPositionPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800297 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
298 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800299 xPositionPlot.plot.getAxisLabels().setTitle('X Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800300 xPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800301 xPositionPlot.plot.getAxisLabels().setYLabel('X Position (m)');
302
303 const localizerX = xPositionPlot.addMessageLine(status, ['x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800304 localizerX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800305 const splineX =
306 xPositionPlot.addMessageLine(status, ['trajectory_logging', 'x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800307 splineX.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800308
309 // Absolute Y Position
310 const yPositionPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800311 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
312 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800313 yPositionPlot.plot.getAxisLabels().setTitle('Y Position');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800314 yPositionPlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800315 yPositionPlot.plot.getAxisLabels().setYLabel('Y Position (m)');
316
317 const localizerY = yPositionPlot.addMessageLine(status, ['y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800318 localizerY.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800319 const splineY =
320 yPositionPlot.addMessageLine(status, ['trajectory_logging', 'y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800321 splineY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800322
323 // Gyro
324 const gyroPlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800325 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT]);
326 currentTop += DEFAULT_HEIGHT;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800327 gyroPlot.plot.getAxisLabels().setTitle('Gyro Readings');
328 gyroPlot.plot.getAxisLabels().setYLabel('Angular Velocity (rad / sec)');
329 gyroPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
330
331 const gyroZeroX =
332 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_x_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800333 gyroZeroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800334 gyroZeroX.setPointSize(0);
335 gyroZeroX.setLabel('Gyro X Zero');
336 const gyroZeroY =
337 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_y_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800338 gyroZeroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800339 gyroZeroY.setPointSize(0);
340 gyroZeroY.setLabel('Gyro Y Zero');
341 const gyroZeroZ =
342 gyroPlot.addMessageLine(status, ['zeroing', 'gyro_z_average']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800343 gyroZeroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800344 gyroZeroZ.setPointSize(0);
345 gyroZeroZ.setLabel('Gyro Z Zero');
346
347 const gyroX = gyroPlot.addMessageLine(imu, ['gyro_x']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800348 gyroX.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800349 const gyroY = gyroPlot.addMessageLine(imu, ['gyro_y']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800350 gyroY.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800351 const gyroZ = gyroPlot.addMessageLine(imu, ['gyro_z']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800352 gyroZ.setColor(BLUE);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800353
354 // IMU States
355 const imuStatePlot =
milind upadhyay9bd381d2021-01-23 13:44:13 -0800356 aosPlotter.addPlot(element, [0, currentTop], [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
357 currentTop += DEFAULT_HEIGHT / 2;
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800358 imuStatePlot.plot.getAxisLabels().setTitle('IMU State');
milind upadhyay9bd381d2021-01-23 13:44:13 -0800359 imuStatePlot.plot.getAxisLabels().setXLabel(TIME);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800360 imuStatePlot.plot.setDefaultYRange([-0.1, 1.1]);
361
362 const zeroedLine = imuStatePlot.addMessageLine(status, ['zeroing', 'zeroed']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800363 zeroedLine.setColor(RED);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800364 zeroedLine.setDrawLine(false);
365 zeroedLine.setLabel('IMU Zeroed');
366 const faultedLine =
367 imuStatePlot.addMessageLine(status, ['zeroing', 'faulted']);
milind upadhyay9bd381d2021-01-23 13:44:13 -0800368 faultedLine.setColor(GREEN);
James Kuszmaulc4ae11c2020-12-26 16:26:58 -0800369 faultedLine.setPointSize(0);
370 faultedLine.setLabel('IMU Faulted');
371}