# mechanical-advantage/robotcode2025public architecture

> Architecture diagram of the GitHub repository mechanical-advantage/robotcode2025public, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mechanical-advantage/robotcode2025public
- Repository: https://github.com/mechanical-advantage/robotcode2025public

## Overview

RobotCode2025 is the control software for team 6328’s 2025 robot, Manta. The tree also contains Northstar, a camera-vision runtime with camera capture, AprilTag and object-detection workers, calibration, and streamed overlays. The robot-side source excerpts establish the Java startup entry point, but not how its container, commands, and mechanisms are wired; those capabilities are shown as components without speculative links. Northstar’s sampled worker code establishes its internal processing steps, while capture-to-worker dispatch is not shown.

Main entry points: [`northstar/apriltag_worker.py`](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/apriltag_worker.py) (AprilTag worker), [`northstar/objdetect_worker.py`](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/objdetect_worker.py) (Object detection), [`northstar/output/StreamServer.py`](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/output/StreamServer.py) (MJPEG streaming), [`northstar/output/overlay_util.py`](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/output/overlay_util.py) (Image overlays)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_robot["Robot runtime"]
  node_main["Java startup<br/>[Main.java]"]
  node_robot["Robot lifecycle<br/>[Robot.java]"]
  node_container["Robot container"]
end

subgraph group_control["Robot control"]
  node_commands["Robot commands"]
  node_drive["Swerve drive<br/>[Drive.java]"]
  node_trajectory["Drive trajectories"]
  node_superstructure["Superstructure"]
  node_intake["Intake system<br/>[Intake.java]"]
  node_rollers["Roller systems<br/>[RollerSystem.java]"]
  node_climber["Climber<br/>[Climber.java]"]
  node_objective["Objective tracker"]
  node_vision_robot["Robot vision<br/>[Vision.java]"]
  node_northstar_io["Northstar interface"]
end

subgraph group_vision["Northstar vision"]
  node_capture["Frame capture<br/>[Capture.py]"]
  node_config["Camera config"]
  node_apriltag["AprilTag worker<br/>[apriltag_worker.py]"]
  node_objdetect["Object detection"]
  node_fiducial["Fiducial detection"]
  node_pose["Pose estimation"]
  node_tagangle["Tag angles"]
  node_object_model["Object detector<br/>[ObjectDetector.py]"]
  node_stream["MJPEG streaming<br/>[StreamServer.py]"]
  node_overlay["Image overlays<br/>[overlay_util.py]"]
end

subgraph group_camera["Camera support"]
  node_calibration["Camera calibration"]
  node_capture_native["macOS capture<br/>[context.h]"]
  node_iokit_ctl["Camera controls<br/>[main.cpp]"]
end

node_driver(("Robot operator"))
node_camera_actor(("Camera"))

node_main -->|"starts"| node_robot
node_apriltag -->|"detects tags"| node_fiducial
node_apriltag -->|"estimates pose"| node_pose
node_apriltag -->|"calculates angles"| node_tagangle
node_apriltag -->|"streams frames"| node_stream
node_apriltag -->|"draws overlays"| node_overlay
node_objdetect -->|"detects objects"| node_object_model
node_objdetect -->|"streams frames"| node_stream
node_objdetect -->|"draws overlays"| node_overlay
node_camera_actor -->|"provides frames"| node_capture

click node_main "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/Main.java"
click node_robot "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/Robot.java"
click node_container "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/RobotContainer.java"
click node_commands "https://github.com/mechanical-advantage/robotcode2025public/tree/main/src/main/java/org/littletonrobotics/frc2025/commands"
click node_drive "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/drive/Drive.java"
click node_trajectory "https://github.com/mechanical-advantage/robotcode2025public/tree/main/src/main/java/org/littletonrobotics/frc2025/subsystems/drive/trajectory"
click node_superstructure "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/superstructure/Superstructure.java"
click node_intake "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/intake/Intake.java"
click node_rollers "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/rollers/RollerSystem.java"
click node_climber "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/climber/Climber.java"
click node_objective "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/objectivetracker/ObjectiveTracker.java"
click node_vision_robot "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/vision/Vision.java"
click node_northstar_io "https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/vision/VisionIONorthstar.java"
click node_capture "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/pipeline/Capture.py"
click node_config "https://github.com/mechanical-advantage/robotcode2025public/tree/main/northstar/config"
click node_apriltag "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/apriltag_worker.py"
click node_objdetect "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/objdetect_worker.py"
click node_fiducial "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/pipeline/FiducialDetector.py"
click node_pose "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/pipeline/CameraPoseEstimator.py"
click node_tagangle "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/pipeline/TagAngleCalculator.py"
click node_object_model "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/pipeline/ObjectDetector.py"
click node_stream "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/output/StreamServer.py"
click node_overlay "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/output/overlay_util.py"
click node_calibration "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/calibration/CalibrationSession.py"
click node_capture_native "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/ns-iokit-ctl/openpnp-capture/common/context.h"
click node_iokit_ctl "https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/ns-iokit-ctl/main.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_robot,node_container toneBlue
class node_commands,node_drive,node_trajectory,node_superstructure,node_intake,node_rollers,node_climber,node_objective,node_vision_robot,node_northstar_io toneAmber
class node_capture,node_config,node_apriltag,node_objdetect,node_fiducial,node_pose,node_tagangle,node_object_model,node_stream,node_overlay toneMint
class node_calibration,node_capture_native,node_iokit_ctl toneRose
class node_driver,node_camera_actor toneIndigo
```

## Components

### Robot runtime

- [Java startup](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/Main.java): `src/main/java/org/littletonrobotics/frc2025/Main.java`
- [Robot lifecycle](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/Robot.java): `src/main/java/org/littletonrobotics/frc2025/Robot.java`
- [Robot container](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/RobotContainer.java): `src/main/java/org/littletonrobotics/frc2025/RobotContainer.java`

### Robot control

- [Robot commands](https://github.com/mechanical-advantage/robotcode2025public/tree/main/src/main/java/org/littletonrobotics/frc2025/commands): `src/main/java/org/littletonrobotics/frc2025/commands`
- [Swerve drive](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/drive/Drive.java): `src/main/java/org/littletonrobotics/frc2025/subsystems/drive/Drive.java`
- [Drive trajectories](https://github.com/mechanical-advantage/robotcode2025public/tree/main/src/main/java/org/littletonrobotics/frc2025/subsystems/drive/trajectory): `src/main/java/org/littletonrobotics/frc2025/subsystems/drive/trajectory`
- [Superstructure](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/superstructure/Superstructure.java): `src/main/java/org/littletonrobotics/frc2025/subsystems/superstructure/Superstructure.java`
- [Intake system](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/intake/Intake.java): `src/main/java/org/littletonrobotics/frc2025/subsystems/intake/Intake.java`
- [Roller systems](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/rollers/RollerSystem.java): `src/main/java/org/littletonrobotics/frc2025/subsystems/rollers/RollerSystem.java`
- [Climber](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/climber/Climber.java): `src/main/java/org/littletonrobotics/frc2025/subsystems/climber/Climber.java`
- [Objective tracker](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/objectivetracker/ObjectiveTracker.java): `src/main/java/org/littletonrobotics/frc2025/subsystems/objectivetracker/ObjectiveTracker.java`
- [Robot vision](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/vision/Vision.java): `src/main/java/org/littletonrobotics/frc2025/subsystems/vision/Vision.java`
- [Northstar interface](https://github.com/mechanical-advantage/robotcode2025public/blob/main/src/main/java/org/littletonrobotics/frc2025/subsystems/vision/VisionIONorthstar.java): `src/main/java/org/littletonrobotics/frc2025/subsystems/vision/VisionIONorthstar.java`

### Northstar vision

- [Frame capture](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/pipeline/Capture.py): `northstar/pipeline/Capture.py`
- [Camera config](https://github.com/mechanical-advantage/robotcode2025public/tree/main/northstar/config): `northstar/config`
- [AprilTag worker](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/apriltag_worker.py): `northstar/apriltag_worker.py`
- [Object detection](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/objdetect_worker.py): `northstar/objdetect_worker.py`
- [Fiducial detection](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/pipeline/FiducialDetector.py): `northstar/pipeline/FiducialDetector.py`
- [Pose estimation](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/pipeline/CameraPoseEstimator.py): `northstar/pipeline/CameraPoseEstimator.py`
- [Tag angles](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/pipeline/TagAngleCalculator.py): `northstar/pipeline/TagAngleCalculator.py`
- [Object detector](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/pipeline/ObjectDetector.py): `northstar/pipeline/ObjectDetector.py`
- [MJPEG streaming](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/output/StreamServer.py): `northstar/output/StreamServer.py`
- [Image overlays](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/output/overlay_util.py): `northstar/output/overlay_util.py`

### Camera support

- [Camera calibration](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/calibration/CalibrationSession.py): `northstar/calibration/CalibrationSession.py`
- [macOS capture](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/ns-iokit-ctl/openpnp-capture/common/context.h): `northstar/ns-iokit-ctl/openpnp-capture/common/context.h`
- [Camera controls](https://github.com/mechanical-advantage/robotcode2025public/blob/main/northstar/ns-iokit-ctl/main.cpp): `northstar/ns-iokit-ctl/main.cpp`

### Other components

- **Robot operator**
- **Camera**

## Connections

- Java startup → Robot lifecycle: starts
- AprilTag worker → Fiducial detection: detects tags
- AprilTag worker → Pose estimation: estimates pose
- AprilTag worker → Tag angles: calculates angles
- AprilTag worker → MJPEG streaming: streams frames
- AprilTag worker → Image overlays: draws overlays
- Object detection → Object detector: detects objects
- Object detection → MJPEG streaming: streams frames
- Object detection → Image overlays: draws overlays
- Camera → Frame capture: provides frames
