blob: 91edd7c868f88de49af9ac7ab31634db9d48a291 [file] [log] [blame]
// Provides a basic plot for debugging IMU-related issues on a robot.
import {AosPlotter} from '../../aos/network/www/aos_plotter';
import {ImuMessageHandler} from '../../frc971/wpilib/imu_plot_utils';
import * as proxy from '../../aos/network/www/proxy';
import Connection = proxy.Connection;
export function plotImu(conn: Connection, element: Element): void {
const width = 900;
const height = 400;
const aosPlotter = new AosPlotter(conn);
const accelPlot = aosPlotter.addPlot(element, [width, height]);
accelPlot.plot.getAxisLabels().setTitle('Accelerometer Readings');
accelPlot.plot.getAxisLabels().setYLabel('Acceleration (g)');
accelPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
const drivetrainStatus = aosPlotter.addMessageSource(
'/drivetrain', 'frc971.control_loops.drivetrain.Status');
const imu = aosPlotter.addRawMessageSource(
'/localizer', 'frc971.IMUValuesBatch',
new ImuMessageHandler(conn.getSchema('frc971.IMUValuesBatch')));
const accelX = accelPlot.addMessageLine(imu, ['accelerometer_x']);
accelX.setColor([1, 0, 0]);
const accelY = accelPlot.addMessageLine(imu, ['accelerometer_y']);
accelY.setColor([0, 1, 0]);
const accelZ = accelPlot.addMessageLine(imu, ['accelerometer_z']);
accelZ.setColor([0, 0, 1]);
const gyroPlot = aosPlotter.addPlot(element, [width, height]);
gyroPlot.plot.getAxisLabels().setTitle('Gyro Readings');
gyroPlot.plot.getAxisLabels().setYLabel('Angular Velocity (rad / sec)');
gyroPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
const gyroZeroX =
gyroPlot.addMessageLine(drivetrainStatus, ['zeroing', 'gyro_x_average']);
gyroZeroX.setColor([1, 0, 0]);
gyroZeroX.setPointSize(0);
gyroZeroX.setLabel('Gyro X Zero');
const gyroZeroY =
gyroPlot.addMessageLine(drivetrainStatus, ['zeroing', 'gyro_y_average']);
gyroZeroY.setColor([0, 1, 0]);
gyroZeroY.setPointSize(0);
gyroZeroY.setLabel('Gyro Y Zero');
const gyroZeroZ =
gyroPlot.addMessageLine(drivetrainStatus, ['zeroing', 'gyro_z_average']);
gyroZeroZ.setColor([0, 0, 1]);
gyroZeroZ.setPointSize(0);
gyroZeroZ.setLabel('Gyro Z Zero');
const gyroX = gyroPlot.addMessageLine(imu, ['gyro_x']);
gyroX.setColor([1, 0, 0]);
const gyroY = gyroPlot.addMessageLine(imu, ['gyro_y']);
gyroY.setColor([0, 1, 0]);
const gyroZ = gyroPlot.addMessageLine(imu, ['gyro_z']);
gyroZ.setColor([0, 0, 1]);
const tempPlot = aosPlotter.addPlot(element, [width, height / 2]);
tempPlot.plot.getAxisLabels().setTitle('IMU Temperature');
tempPlot.plot.getAxisLabels().setYLabel('Temperature (deg C)');
tempPlot.plot.getAxisLabels().setXLabel('Monotonic Reading Time (sec)');
tempPlot.addMessageLine(imu, ['temperature']);
const statePlot = aosPlotter.addPlot(element, [width, height / 2]);
statePlot.plot.getAxisLabels().setTitle('IMU State');
statePlot.plot.getAxisLabels().setXLabel('Monotonic Sent Time (sec)');
statePlot.plot.setDefaultYRange([-0.1, 1.1]);
const zeroedLine =
statePlot.addMessageLine(drivetrainStatus, ['zeroing', 'zeroed']);
zeroedLine.setColor([1, 0, 0]);
zeroedLine.setDrawLine(false);
const faultedLine =
statePlot.addMessageLine(drivetrainStatus, ['zeroing', 'faulted']);
faultedLine.setColor([0, 1, 0]);
faultedLine.setPointSize(0);
}