blob: 86465a53074ec56db596e0c43e4084e2d25307e4 [file] [log] [blame]
James Kuszmaul9c23d262021-09-25 21:50:02 -07001// Provides a plot for debugging robot state-related issues.
2import {AosPlotter} from 'org_frc971/aos/network/www/aos_plotter';
3import * as proxy from 'org_frc971/aos/network/www/proxy';
4import * as configuration from 'org_frc971/aos/configuration_generated';
5import {BLUE, BROWN, CYAN, GREEN, PINK, RED, WHITE} from 'org_frc971/aos/network/www/colors';
6import {MessageHandler, TimestampedMessage} from 'org_frc971/aos/network/www/aos_plotter';
7import {Point} from 'org_frc971/aos/network/www/plotter';
8import {Table} from 'org_frc971/aos/network/www/reflection';
9import {ByteBuffer} from 'org_frc971/external/com_github_google_flatbuffers/ts/byte-buffer';
10
11import Connection = proxy.Connection;
12import Schema = configuration.reflection.Schema;
13
14const TIME = AosPlotter.TIME;
James Kuszmaul9c23d262021-09-25 21:50:02 -070015
16
17export function plotLocalizer(conn: Connection, element: Element) : void {
18 const aosPlotter = new AosPlotter(conn);
19 const localizerDebug =
20 aosPlotter.addMessageSource('/drivetrain', 'y2020.control_loops.drivetrain.LocalizerDebug');
21 const imageMatch =
22 aosPlotter.addMessageSource('/pi1/camera', 'frc971.vision.sift.ImageMatchResult');
James Kuszmauled177c42021-09-30 18:53:08 -070023 const drivetrainStatus = aosPlotter.addMessageSource(
24 '/drivetrain', 'frc971.control_loops.drivetrain.Status');
25 const superstructureStatus = aosPlotter.addMessageSource(
26 '/superstructure', 'y2020.control_loops.superstructure.Status');
James Kuszmaul9c23d262021-09-25 21:50:02 -070027
Austin Schuhc2e9c502021-11-25 21:23:24 -080028 const imageAcceptedPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070029 imageAcceptedPlot.plot.getAxisLabels().setTitle('Image Acceptance');
30 imageAcceptedPlot.plot.getAxisLabels().setXLabel(TIME);
31 imageAcceptedPlot.plot.getAxisLabels().setYLabel('[bool]');
32 imageAcceptedPlot.plot.setDefaultYRange([-0.05, 1.05]);
33
34 imageAcceptedPlot.addMessageLine(localizerDebug, ['matches[]', 'accepted'])
35 .setColor(RED)
36 .setDrawLine(false);
37
Austin Schuhc2e9c502021-11-25 21:23:24 -080038 const impliedXPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070039 impliedXPlot.plot.getAxisLabels().setTitle('Implied Robot X');
40 impliedXPlot.plot.getAxisLabels().setXLabel(TIME);
41 impliedXPlot.plot.getAxisLabels().setYLabel('[m]');
42
43 impliedXPlot.addMessageLine(localizerDebug, ['matches[]', 'implied_robot_x'])
44 .setColor(RED)
45 .setDrawLine(false);
46 impliedXPlot.addMessageLine(imageMatch, ['camera_poses[]', 'field_to_camera', 'data[3]'])
47 .setColor(BLUE)
48 .setDrawLine(false);
James Kuszmauled177c42021-09-30 18:53:08 -070049 impliedXPlot.addMessageLine(drivetrainStatus, ['x'])
50 .setColor(GREEN)
51 .setLabel('Localizer X');
James Kuszmaul9c23d262021-09-25 21:50:02 -070052
Austin Schuhc2e9c502021-11-25 21:23:24 -080053 const impliedYPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070054 impliedYPlot.plot.getAxisLabels().setTitle('Implied Robot Y');
55 impliedYPlot.plot.getAxisLabels().setXLabel(TIME);
56 impliedYPlot.plot.getAxisLabels().setYLabel('[m]');
57
58 impliedYPlot.addMessageLine(localizerDebug, ['matches[]', 'implied_robot_y'])
59 .setColor(RED)
60 .setDrawLine(false);
61 impliedYPlot.addMessageLine(imageMatch, ['camera_poses[]', 'field_to_camera', 'data[7]'])
62 .setColor(BLUE)
63 .setDrawLine(false);
James Kuszmauled177c42021-09-30 18:53:08 -070064 impliedYPlot.addMessageLine(drivetrainStatus, ['y'])
65 .setColor(GREEN)
66 .setLabel('Localizer Y');
James Kuszmaul9c23d262021-09-25 21:50:02 -070067
Austin Schuhc2e9c502021-11-25 21:23:24 -080068 const impliedHeadingPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070069 impliedHeadingPlot.plot.getAxisLabels().setTitle('Implied Robot Theta');
70 impliedHeadingPlot.plot.getAxisLabels().setXLabel(TIME);
71 impliedHeadingPlot.plot.getAxisLabels().setYLabel('[rad]');
72
73 impliedHeadingPlot.addMessageLine(localizerDebug, ['matches[]', 'implied_robot_theta'])
74 .setColor(RED)
75 .setDrawLine(false);
James Kuszmauled177c42021-09-30 18:53:08 -070076 impliedHeadingPlot.addMessageLine(drivetrainStatus, ['theta'])
77 .setColor(GREEN)
78 .setLabel('Localizer Theta');
James Kuszmaul9c23d262021-09-25 21:50:02 -070079
Austin Schuhc2e9c502021-11-25 21:23:24 -080080 const impliedTurretGoalPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070081 impliedTurretGoalPlot.plot.getAxisLabels().setTitle('Implied Turret Goal');
82 impliedTurretGoalPlot.plot.getAxisLabels().setXLabel(TIME);
83 impliedTurretGoalPlot.plot.getAxisLabels().setYLabel('[rad]');
84
85 impliedTurretGoalPlot.addMessageLine(localizerDebug, ['matches[]', 'implied_turret_goal'])
86 .setColor(RED)
87 .setDrawLine(false);
James Kuszmauled177c42021-09-30 18:53:08 -070088 impliedTurretGoalPlot.addMessageLine(superstructureStatus, ['aimer', 'turret_position'])
89 .setColor(GREEN);
James Kuszmaul9c23d262021-09-25 21:50:02 -070090
Austin Schuhc2e9c502021-11-25 21:23:24 -080091 const imageTimingPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070092 imageTimingPlot.plot.getAxisLabels().setTitle('Timing Plot');
93 imageTimingPlot.plot.getAxisLabels().setXLabel(TIME);
94 imageTimingPlot.plot.getAxisLabels().setYLabel('[ns]');
95
96 imageTimingPlot.addMessageLine(localizerDebug, ['matches[]', 'image_age_sec'])
97 .setColor(RED)
98 .setDrawLine(false);
99}