# boosterrobotics/robocup_demo architecture

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

- Interactive diagram: https://gitdiagram.com/boosterrobotics/robocup_demo
- Repository: https://github.com/boosterrobotics/robocup_demo

## Overview

Booster RoboCup Demo runs a perception-to-action match workflow: vision recognizes field objects and estimates their robot-relative positions; the GameController adapter converts referee broadcasts to ROS topics; brain combines those inputs, selects match behavior, and commands the robot. Calibration and visualization are additional product capabilities. The README documents the main program boundaries; source excerpts and the index show selected internal ownership, but do not establish every ROS topic or runtime connection, so those links are omitted where evidence is absent.

Main entry points: [`src/brain/src/brain.cpp`](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain.cpp) (Match decision), [`src/vision/src/vision_node.cpp`](https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/vision_node.cpp) (Vision node), [`src/game_controller/src/game_controller_node.cpp`](https://github.com/boosterrobotics/robocup_demo/blob/main/src/game_controller/src/game_controller_node.cpp) (GameController adapter), [`src/brain/src/robot_client.cpp`](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/robot_client.cpp) (Motion commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_perception["Vision and calibration"]
  node_vision["Vision node<br/>[vision_node.cpp]"]
  node_detection["Object detection<br/>[detector.cc]"]
  node_segmentation["Segmentation<br/>[segmentor.cc]"]
  node_pose["Pose estimation<br/>[pose_estimator.cpp]"]
  node_calibration["Camera calibration"]
  node_converter["Detection converter"]
end

subgraph group_match["Match inputs"]
  node_gamecontroller["GameController adapter"]
end

subgraph group_decision["Brain and behavior"]
  node_brainentry["Brain node<br/>[main.cpp]"]
  node_brain["Match decision<br/>[brain.cpp]"]
  node_tree["Behavior tree<br/>[brain_tree.cpp]"]
  node_config["Brain configuration<br/>[brain_config.cpp]"]
  node_state["Runtime state<br/>[brain_data.cpp]"]
  node_localization["Robot localization<br/>[locator.cpp]"]
  node_communication["Team communication"]
  node_visualization["Match visualization"]
  node_math["Coordinate utilities<br/>[math.h]"]
  node_misc["Brain utilities<br/>[misc.h]"]
  node_print["Logging utilities<br/>[print.h]"]
end

subgraph group_robot["Robot interface"]
  node_robotclient["Motion commands<br/>[robot_client.cpp]"]
end

node_camera(("Camera streams"))
node_referee(("Referee broadcast"))
node_robot(("Booster robot"))

node_camera -->|"provides images"| node_vision
node_vision -.->|"detects objects"| node_detection
node_vision -.->|"segments field"| node_segmentation
node_vision -.->|"estimates positions"| node_pose
node_vision -->|"supplies visual data"| node_brain
node_referee -->|"broadcasts packets"| node_gamecontroller
node_gamecontroller -->|"publishes game data"| node_brain
node_brainentry -->|"constructs"| node_brain
node_brain -->|"ticks behavior"| node_tree
node_brain -->|"uses configuration"| node_config
node_brain -->|"uses runtime state"| node_state
node_brain -->|"uses localization"| node_localization
node_brain -->|"uses communication"| node_communication
node_brain -->|"publishes markers"| node_visualization
node_brain -->|"issues actions"| node_robotclient
node_robotclient -->|"sends motion commands"| node_robot
node_calibration -->|"uses estimator"| node_pose
node_vision -.->|"reads camera data"| node_camera
node_math -->|"supports calculations"| node_brain
node_misc -->|"supports utilities"| node_brain
node_print -->|"formats output"| node_brain

click node_vision "https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/vision_node.cpp"
click node_detection "https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/model/detector.cc"
click node_segmentation "https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/model/segmentor.cc"
click node_pose "https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/pose_estimator/pose_estimator.cpp"
click node_calibration "https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/calibration/calibration_node.cpp"
click node_converter "https://github.com/boosterrobotics/robocup_demo/blob/main/src/detection_converter/scripts/detection_converter_node.py"
click node_gamecontroller "https://github.com/boosterrobotics/robocup_demo/blob/main/src/game_controller/src/game_controller_node.cpp"
click node_brainentry "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/main.cpp"
click node_brain "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain.cpp"
click node_tree "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain_tree.cpp"
click node_config "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain_config.cpp"
click node_state "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain_data.cpp"
click node_localization "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/locator.cpp"
click node_communication "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain_communication.cpp"
click node_visualization "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/visualization_publisher.cpp"
click node_robotclient "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/robot_client.cpp"
click node_math "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/include/utils/math.h"
click node_misc "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/include/utils/misc.h"
click node_print "https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/include/utils/print.h"

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_vision,node_detection,node_segmentation,node_pose,node_calibration,node_converter toneBlue
class node_gamecontroller toneAmber
class node_brainentry,node_brain,node_tree,node_config,node_state,node_localization,node_communication,node_visualization,node_math,node_misc,node_print toneMint
class node_robotclient toneRose
class node_camera,node_referee,node_robot toneIndigo
```

## Components

### Vision and calibration

- [Vision node](https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/vision_node.cpp): `src/vision/src/vision_node.cpp`
- [Object detection](https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/model/detector.cc): `src/vision/src/model/detector.cc`
- [Segmentation](https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/model/segmentor.cc): `src/vision/src/model/segmentor.cc`
- [Pose estimation](https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/pose_estimator/pose_estimator.cpp): `src/vision/src/pose_estimator/pose_estimator.cpp`
- [Camera calibration](https://github.com/boosterrobotics/robocup_demo/blob/main/src/vision/src/calibration/calibration_node.cpp): `src/vision/src/calibration/calibration_node.cpp`
- [Detection converter](https://github.com/boosterrobotics/robocup_demo/blob/main/src/detection_converter/scripts/detection_converter_node.py): `src/detection_converter/scripts/detection_converter_node.py`

### Match inputs

- [GameController adapter](https://github.com/boosterrobotics/robocup_demo/blob/main/src/game_controller/src/game_controller_node.cpp): `src/game_controller/src/game_controller_node.cpp`

### Brain and behavior

- [Brain node](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/main.cpp): `src/brain/src/main.cpp`
- [Match decision](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain.cpp): `src/brain/src/brain.cpp`
- [Behavior tree](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain_tree.cpp): `src/brain/src/brain_tree.cpp`
- [Brain configuration](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain_config.cpp): `src/brain/src/brain_config.cpp`
- [Runtime state](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain_data.cpp): `src/brain/src/brain_data.cpp`
- [Robot localization](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/locator.cpp): `src/brain/src/locator.cpp`
- [Team communication](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/brain_communication.cpp): `src/brain/src/brain_communication.cpp`
- [Match visualization](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/visualization_publisher.cpp): `src/brain/src/visualization_publisher.cpp`
- [Coordinate utilities](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/include/utils/math.h): `src/brain/include/utils/math.h`
- [Brain utilities](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/include/utils/misc.h): `src/brain/include/utils/misc.h`
- [Logging utilities](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/include/utils/print.h): `src/brain/include/utils/print.h`

### Robot interface

- [Motion commands](https://github.com/boosterrobotics/robocup_demo/blob/main/src/brain/src/robot_client.cpp): `src/brain/src/robot_client.cpp`

### Other components

- **Camera streams**
- **Referee broadcast**
- **Booster robot**

## Connections

- Camera streams → Vision node: provides images
- Vision node → Object detection: detects objects
- Vision node → Segmentation: segments field
- Vision node → Pose estimation: estimates positions
- Vision node → Match decision: supplies visual data
- Referee broadcast → GameController adapter: broadcasts packets
- GameController adapter → Match decision: publishes game data
- Brain node → Match decision: constructs (evidence: `src/brain/src/main.cpp`)
- Match decision → Behavior tree: ticks behavior
- Match decision → Brain configuration: uses configuration
- Match decision → Runtime state: uses runtime state
- Match decision → Robot localization: uses localization
- Match decision → Team communication: uses communication
- Match decision → Match visualization: publishes markers
- Match decision → Motion commands: issues actions
- Motion commands → Booster robot: sends motion commands
- Camera calibration → Pose estimation: uses estimator (evidence: `src/vision/src/calibration/calibration_node.cpp`)
- Vision node → Camera streams: reads camera data
- Coordinate utilities → Match decision: supports calculations (evidence: `src/brain/src/brain.cpp`)
- Brain utilities → Match decision: supports utilities (evidence: `src/brain/src/brain.cpp`)
- Logging utilities → Match decision: formats output (evidence: `src/brain/src/brain.cpp`)
