blob: 6768e1c0af7b00cf2e2406dce2e4bf0cbaf8cfb8 [file] [log] [blame]
James Kuszmaul5f5e1232020-12-22 20:58:00 -08001// Provides a basic plot for debugging IMU-related issues on a robot.
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
8export function plotImu(conn: Connection, element: Element): void {
9 const width = 900;
10 const height = 400;
11 const aosPlotter = new AosPlotter(conn);
12
Austin Schuhc2e9c502021-11-25 21:23:24 -080013 const accelPlot = aosPlotter.addPlot(element, [width, height]);
James Kuszmaul5f5e1232020-12-22 20:58:00 -080014 accelPlot.plot.getAxisLabels().setTitle('Accelerometer Readings');
15 accelPlot.plot.getAxisLabels().setYLabel('Acceleration (g)');
16 accelPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
17
18 const drivetrainStatus = aosPlotter.addMessageSource(
19 '/drivetrain', 'frc971.control_loops.drivetrain.Status');
20
21 const imu = aosPlotter.addRawMessageSource(
James Kuszmaul207ae322022-02-25 21:15:31 -080022 '/localizer', 'frc971.IMUValuesBatch',
James Kuszmaul5f5e1232020-12-22 20:58:00 -080023 new ImuMessageHandler(conn.getSchema('frc971.IMUValuesBatch')));
24
25 const accelX = accelPlot.addMessageLine(imu, ['accelerometer_x']);
26 accelX.setColor([1, 0, 0]);
27 const accelY = accelPlot.addMessageLine(imu, ['accelerometer_y']);
28 accelY.setColor([0, 1, 0]);
29 const accelZ = accelPlot.addMessageLine(imu, ['accelerometer_z']);
30 accelZ.setColor([0, 0, 1]);
31
Austin Schuhc2e9c502021-11-25 21:23:24 -080032 const gyroPlot = aosPlotter.addPlot(element, [width, height]);
James Kuszmaul5f5e1232020-12-22 20:58:00 -080033 gyroPlot.plot.getAxisLabels().setTitle('Gyro Readings');
34 gyroPlot.plot.getAxisLabels().setYLabel('Angular Velocity (rad / sec)');
35 gyroPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
36
37 const gyroZeroX =
38 gyroPlot.addMessageLine(drivetrainStatus, ['zeroing', 'gyro_x_average']);
39 gyroZeroX.setColor([1, 0, 0]);
40 gyroZeroX.setPointSize(0);
41 gyroZeroX.setLabel('Gyro X Zero');
42 const gyroZeroY =
43 gyroPlot.addMessageLine(drivetrainStatus, ['zeroing', 'gyro_y_average']);
44 gyroZeroY.setColor([0, 1, 0]);
45 gyroZeroY.setPointSize(0);
46 gyroZeroY.setLabel('Gyro Y Zero');
47 const gyroZeroZ =
48 gyroPlot.addMessageLine(drivetrainStatus, ['zeroing', 'gyro_z_average']);
49 gyroZeroZ.setColor([0, 0, 1]);
50 gyroZeroZ.setPointSize(0);
51 gyroZeroZ.setLabel('Gyro Z Zero');
52
53 const gyroX = gyroPlot.addMessageLine(imu, ['gyro_x']);
54 gyroX.setColor([1, 0, 0]);
55 const gyroY = gyroPlot.addMessageLine(imu, ['gyro_y']);
56 gyroY.setColor([0, 1, 0]);
57 const gyroZ = gyroPlot.addMessageLine(imu, ['gyro_z']);
58 gyroZ.setColor([0, 0, 1]);
59
Austin Schuhc2e9c502021-11-25 21:23:24 -080060 const tempPlot = aosPlotter.addPlot(element, [width, height / 2]);
James Kuszmaul5f5e1232020-12-22 20:58:00 -080061 tempPlot.plot.getAxisLabels().setTitle('IMU Temperature');
62 tempPlot.plot.getAxisLabels().setYLabel('Temperature (deg C)');
63 tempPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
64
65 tempPlot.addMessageLine(imu, ['temperature']);
66
Austin Schuhc2e9c502021-11-25 21:23:24 -080067 const statePlot = aosPlotter.addPlot(element, [width, height / 2]);
James Kuszmaul5f5e1232020-12-22 20:58:00 -080068 statePlot.plot.getAxisLabels().setTitle('IMU State');
69 statePlot.plot.getAxisLabels().setXLabel('Monotonic Sent Time (sec)');
70 statePlot.plot.setDefaultYRange([-0.1, 1.1]);
71
72 const zeroedLine =
73 statePlot.addMessageLine(drivetrainStatus, ['zeroing', 'zeroed']);
74 zeroedLine.setColor([1, 0, 0]);
75 zeroedLine.setDrawLine(false);
76 const faultedLine =
77 statePlot.addMessageLine(drivetrainStatus, ['zeroing', 'faulted']);
78 faultedLine.setColor([0, 1, 0]);
79 faultedLine.setPointSize(0);
80}