blob: b2120efcf61e7d395ee874ee1622e2b004eae593 [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';
James Kuszmauldac091f2022-03-22 09:35:06 -07003import {Connection} from 'org_frc971/aos/network/www/proxy';
James Kuszmaul9c23d262021-09-25 21:50:02 -07004import {BLUE, BROWN, CYAN, GREEN, PINK, RED, WHITE} from 'org_frc971/aos/network/www/colors';
5import {MessageHandler, TimestampedMessage} from 'org_frc971/aos/network/www/aos_plotter';
6import {Point} from 'org_frc971/aos/network/www/plotter';
7import {Table} from 'org_frc971/aos/network/www/reflection';
James Kuszmauldac091f2022-03-22 09:35:06 -07008import {ByteBuffer} from 'flatbuffers';
James Kuszmaul136aa2b2022-04-02 14:50:56 -07009import {Schema} from 'flatbuffers_reflection/reflection_generated';
James Kuszmaul9c23d262021-09-25 21:50:02 -070010
11const TIME = AosPlotter.TIME;
James Kuszmaul9c23d262021-09-25 21:50:02 -070012
13
14export function plotLocalizer(conn: Connection, element: Element) : void {
15 const aosPlotter = new AosPlotter(conn);
16 const localizerDebug =
17 aosPlotter.addMessageSource('/drivetrain', 'y2020.control_loops.drivetrain.LocalizerDebug');
18 const imageMatch =
19 aosPlotter.addMessageSource('/pi1/camera', 'frc971.vision.sift.ImageMatchResult');
James Kuszmauled177c42021-09-30 18:53:08 -070020 const drivetrainStatus = aosPlotter.addMessageSource(
21 '/drivetrain', 'frc971.control_loops.drivetrain.Status');
22 const superstructureStatus = aosPlotter.addMessageSource(
23 '/superstructure', 'y2020.control_loops.superstructure.Status');
James Kuszmaul9c23d262021-09-25 21:50:02 -070024
Austin Schuhc2e9c502021-11-25 21:23:24 -080025 const imageAcceptedPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070026 imageAcceptedPlot.plot.getAxisLabels().setTitle('Image Acceptance');
27 imageAcceptedPlot.plot.getAxisLabels().setXLabel(TIME);
28 imageAcceptedPlot.plot.getAxisLabels().setYLabel('[bool]');
29 imageAcceptedPlot.plot.setDefaultYRange([-0.05, 1.05]);
30
31 imageAcceptedPlot.addMessageLine(localizerDebug, ['matches[]', 'accepted'])
32 .setColor(RED)
33 .setDrawLine(false);
34
Austin Schuhc2e9c502021-11-25 21:23:24 -080035 const impliedXPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070036 impliedXPlot.plot.getAxisLabels().setTitle('Implied Robot X');
37 impliedXPlot.plot.getAxisLabels().setXLabel(TIME);
38 impliedXPlot.plot.getAxisLabels().setYLabel('[m]');
39
40 impliedXPlot.addMessageLine(localizerDebug, ['matches[]', 'implied_robot_x'])
41 .setColor(RED)
42 .setDrawLine(false);
43 impliedXPlot.addMessageLine(imageMatch, ['camera_poses[]', 'field_to_camera', 'data[3]'])
44 .setColor(BLUE)
45 .setDrawLine(false);
James Kuszmauled177c42021-09-30 18:53:08 -070046 impliedXPlot.addMessageLine(drivetrainStatus, ['x'])
47 .setColor(GREEN)
48 .setLabel('Localizer X');
James Kuszmaul9c23d262021-09-25 21:50:02 -070049
Austin Schuhc2e9c502021-11-25 21:23:24 -080050 const impliedYPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070051 impliedYPlot.plot.getAxisLabels().setTitle('Implied Robot Y');
52 impliedYPlot.plot.getAxisLabels().setXLabel(TIME);
53 impliedYPlot.plot.getAxisLabels().setYLabel('[m]');
54
55 impliedYPlot.addMessageLine(localizerDebug, ['matches[]', 'implied_robot_y'])
56 .setColor(RED)
57 .setDrawLine(false);
58 impliedYPlot.addMessageLine(imageMatch, ['camera_poses[]', 'field_to_camera', 'data[7]'])
59 .setColor(BLUE)
60 .setDrawLine(false);
James Kuszmauled177c42021-09-30 18:53:08 -070061 impliedYPlot.addMessageLine(drivetrainStatus, ['y'])
62 .setColor(GREEN)
63 .setLabel('Localizer Y');
James Kuszmaul9c23d262021-09-25 21:50:02 -070064
Austin Schuhc2e9c502021-11-25 21:23:24 -080065 const impliedHeadingPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070066 impliedHeadingPlot.plot.getAxisLabels().setTitle('Implied Robot Theta');
67 impliedHeadingPlot.plot.getAxisLabels().setXLabel(TIME);
68 impliedHeadingPlot.plot.getAxisLabels().setYLabel('[rad]');
69
70 impliedHeadingPlot.addMessageLine(localizerDebug, ['matches[]', 'implied_robot_theta'])
71 .setColor(RED)
72 .setDrawLine(false);
James Kuszmauled177c42021-09-30 18:53:08 -070073 impliedHeadingPlot.addMessageLine(drivetrainStatus, ['theta'])
74 .setColor(GREEN)
75 .setLabel('Localizer Theta');
James Kuszmaul9c23d262021-09-25 21:50:02 -070076
Austin Schuhc2e9c502021-11-25 21:23:24 -080077 const impliedTurretGoalPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070078 impliedTurretGoalPlot.plot.getAxisLabels().setTitle('Implied Turret Goal');
79 impliedTurretGoalPlot.plot.getAxisLabels().setXLabel(TIME);
80 impliedTurretGoalPlot.plot.getAxisLabels().setYLabel('[rad]');
81
82 impliedTurretGoalPlot.addMessageLine(localizerDebug, ['matches[]', 'implied_turret_goal'])
83 .setColor(RED)
84 .setDrawLine(false);
James Kuszmauled177c42021-09-30 18:53:08 -070085 impliedTurretGoalPlot.addMessageLine(superstructureStatus, ['aimer', 'turret_position'])
86 .setColor(GREEN);
James Kuszmaul9c23d262021-09-25 21:50:02 -070087
Austin Schuhc2e9c502021-11-25 21:23:24 -080088 const imageTimingPlot = aosPlotter.addPlot(element);
James Kuszmaul9c23d262021-09-25 21:50:02 -070089 imageTimingPlot.plot.getAxisLabels().setTitle('Timing Plot');
90 imageTimingPlot.plot.getAxisLabels().setXLabel(TIME);
91 imageTimingPlot.plot.getAxisLabels().setYLabel('[ns]');
92
93 imageTimingPlot.addMessageLine(localizerDebug, ['matches[]', 'image_age_sec'])
94 .setColor(RED)
95 .setDrawLine(false);
96}