blob: bc271707ebe5c51e0837c8bad82e925c309c9086 [file] [log] [blame]
import {AosPlotter} from 'org_frc971/aos/network/www/aos_plotter';
import * as proxy from 'org_frc971/aos/network/www/proxy';
import {BLUE, BROWN, CYAN, GREEN, PINK, RED, WHITE} from 'org_frc971/aos/network/www/colors';
import Connection = proxy.Connection;
const TIME = AosPlotter.TIME;
// magenta, yellow, cyan, orange
const PI_COLORS = [[255, 0, 255], [255, 255, 0], [0, 255, 255], [255, 165, 0]];
export function plotVision(conn: Connection, element: Element): void {
const aosPlotter = new AosPlotter(conn);
const targets = [];
for (const pi of ["pi1", "pi2", "pi3", "pi4"]) {
targets.push(aosPlotter.addMessageSource(
'/' + pi + '/camera', 'y2022.vision.TargetEstimate'));
}
const localizer = aosPlotter.addMessageSource(
'/localizer', 'frc971.controls.LocalizerVisualization');
const localizerOutput = aosPlotter.addMessageSource(
'/localizer', 'frc971.controls.LocalizerOutput');
const superstructureStatus = aosPlotter.addMessageSource(
'/superstructure', 'y2022.control_loops.superstructure.Status');
const rejectionPlot = aosPlotter.addPlot(element);
rejectionPlot.plot.getAxisLabels().setTitle("Rejection Reasons");
rejectionPlot.plot.getAxisLabels().setXLabel(TIME);
rejectionPlot.plot.getAxisLabels().setYLabel("[bool, enum]");
rejectionPlot.addMessageLine(localizer, ['targets[]', 'accepted'])
.setDrawLine(false)
.setColor(BLUE);
rejectionPlot.addMessageLine(localizer, ['targets[]', 'rejection_reason'])
.setDrawLine(false)
.setColor(RED);
const xPlot = aosPlotter.addPlot(element);
xPlot.plot.getAxisLabels().setTitle("X Position");
xPlot.plot.getAxisLabels().setXLabel(TIME);
xPlot.plot.getAxisLabels().setYLabel("[m]");
xPlot.addMessageLine(localizer, ['targets[]', 'implied_robot_x'])
.setDrawLine(false)
.setColor(RED);
xPlot.addMessageLine(localizerOutput, ['x'])
.setDrawLine(false)
.setColor(BLUE);
const yPlot = aosPlotter.addPlot(element);
yPlot.plot.getAxisLabels().setTitle("X Position");
yPlot.plot.getAxisLabels().setXLabel(TIME);
yPlot.plot.getAxisLabels().setYLabel("[m]");
yPlot.addMessageLine(localizer, ['targets[]', 'implied_robot_y'])
.setDrawLine(false)
.setColor(RED);
yPlot.addMessageLine(localizerOutput, ['y'])
.setDrawLine(false)
.setColor(BLUE);
const turretPlot = aosPlotter.addPlot(element);
turretPlot.plot.getAxisLabels().setTitle("Turret Position");
turretPlot.plot.getAxisLabels().setXLabel(TIME);
turretPlot.plot.getAxisLabels().setYLabel("[m]");
turretPlot.addMessageLine(localizer, ['targets[]', 'implied_turret_goal'])
.setDrawLine(false)
.setColor(RED);
turretPlot.addMessageLine(superstructureStatus, ['turret', 'position'])
.setPointSize(0.0)
.setColor(BLUE);
turretPlot
.addMessageLine(
superstructureStatus, ['aimer', 'turret_position'])
.setPointSize(0.0)
.setColor(GREEN);
const anglePlot = aosPlotter.addPlot(element);
anglePlot.plot.getAxisLabels().setTitle("TargetEstimate Angle");
anglePlot.plot.getAxisLabels().setXLabel(TIME);
anglePlot.plot.getAxisLabels().setYLabel("[rad]");
for (let ii = 0; ii < targets.length; ++ii) {
anglePlot.addMessageLine(targets[ii], ['angle_to_target'])
.setDrawLine(false)
.setColor(PI_COLORS[ii])
.setLabel('pi' + ii);
}
const distancePlot = aosPlotter.addPlot(element);
distancePlot.plot.getAxisLabels().setTitle("TargetEstimate Distance");
distancePlot.plot.getAxisLabels().setXLabel(TIME);
distancePlot.plot.getAxisLabels().setYLabel("[rad]");
for (let ii = 0; ii < targets.length; ++ii) {
distancePlot.addMessageLine(targets[ii], ['distance'])
.setDrawLine(false)
.setColor(PI_COLORS[ii])
.setLabel('pi' + ii);
}
const confidencePlot = aosPlotter.addPlot(element);
confidencePlot.plot.getAxisLabels().setTitle("TargetEstimate Confidence");
confidencePlot.plot.getAxisLabels().setXLabel(TIME);
confidencePlot.plot.getAxisLabels().setYLabel("[rad]");
for (let ii = 0; ii < targets.length; ++ii) {
confidencePlot.addMessageLine(targets[ii], ['confidence'])
.setDrawLine(false)
.setColor(PI_COLORS[ii])
.setLabel('pi' + ii);
}
}