# ocularbear8/avr-2022 architecture

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

- Interactive diagram: https://gitdiagram.com/ocularbear8/avr-2022
- Repository: https://github.com/ocularbear8/avr-2022

## Overview

AVR-2022 is a drone/vehicle control stack: operators use the desktop GUI to monitor telemetry and issue commands; VMC services process sensor data and control flight/peripherals; PCC firmware drives onboard hardware. The graph emphasizes this workflow and preserves the visible map, autonomy, thermal, logging/debug, and telemetry interfaces. VMC module paths and MQTT roles are inferred from the tree and sampled entry points; unsampled wiring is omitted where it cannot be established.

Main entry points: [`GUI/app.py`](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app.py) (GUI application), [`PCC/src/main.cpp`](https://github.com/ocularbear8/avr-2022/blob/main/PCC/src/main.cpp) (PCC firmware), [`GUI/app/tabs/connection/mqtt.py`](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/connection/mqtt.py) (MQTT connection), [`VMC/vio/vio.py`](https://github.com/ocularbear8/avr-2022/blob/main/VMC/vio/vio.py) (Visual odometry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gui["Operator GUI"]
  node_app["GUI application<br/>[app.py]"]
  node_connection["Connections tab<br/>[main.py]"]
  node_mqtt_gui["MQTT connection<br/>[mqtt.py]"]
  node_serial_gui["Serial connection<br/>[serial.py]"]
  node_autonomy["Autonomy<br/>[autonomy.py]"]
  node_map["Moving map<br/>[moving_map.py]"]
  node_control["VMC control<br/>[vmc_control.py]"]
  node_telemetry["VMC telemetry<br/>[vmc_telemetry.py]"]
  node_thermal_view["Thermal view"]
  node_mqtt_debug["MQTT debug<br/>[mqtt_debug.py]"]
  node_mqtt_logger["MQTT logger<br/>[mqtt_logger.py]"]
  node_pcc_tester["PCC tester<br/>[pcc_tester.py]"]
end

subgraph group_vmc["VMC Flight Software"]
  node_fcm["Flight control<br/>[fcc_control.py]"]
  node_fusion["Sensor fusion<br/>[fusion.py]"]
  node_vio["Visual odometry<br/>[vio.py]"]
  node_vio_lib["VIO transforms<br/>[vio_library.py]"]
  node_apriltag["AprilTag processing"]
  node_pcm["Peripheral manager<br/>[pcm.py]"]
  node_thermal["Thermal service<br/>[thermal.py]"]
  node_status["Status lights<br/>[status.py]"]
end

subgraph group_pcc["Peripheral Controller"]
  node_pcc["PCC firmware<br/>[main.cpp]"]
  node_serial_parser["Serial parser<br/>[serial_lib.cpp]"]
  node_servo["Servo driver<br/>[avr_servo.cpp]"]
  node_led["LED driver<br/>[avr_led.cpp]"]
end

node_operator(("Operator"))
node_broker(("MQTT broker"))
node_flight_controller(("Flight controller"))
node_camera(("Camera"))

node_operator -->|"operates"| node_app
node_app -->|"builds"| node_connection
node_app -->|"builds"| node_autonomy
node_app -->|"builds"| node_map
node_app -->|"builds"| node_control
node_app -->|"builds"| node_telemetry
node_app -->|"builds"| node_thermal_view
node_app -->|"builds"| node_mqtt_debug
node_app -->|"builds"| node_mqtt_logger
node_app -->|"builds"| node_pcc_tester
node_connection -->|"embeds"| node_mqtt_gui
node_connection -->|"embeds"| node_serial_gui
node_app -->|"connects signals"| node_mqtt_gui
node_control -->|"publishes commands"| node_mqtt_gui
node_mqtt_gui -->|"publishes/subscribes"| node_broker
node_mqtt_debug -->|"receives messages"| node_mqtt_gui
node_mqtt_logger -->|"logs messages"| node_broker
node_map -->|"reads telemetry"| node_broker
node_telemetry -->|"reads telemetry"| node_broker
node_autonomy -->|"sends actions"| node_broker
node_thermal_view -->|"reads/sets thermal"| node_broker
node_pcc_tester -->|"tests serial device"| node_serial_gui
node_serial_gui -->|"serial commands"| node_pcc
node_pcc -->|"polls packets"| node_serial_parser
node_pcc -->|"drives servos"| node_servo
node_pcc -->|"drives LEDs"| node_led
node_pcc -->|"serial link"| node_pcm
node_fcm -->|"publishes/subscribes"| node_broker
node_fcm -->|"controls via MAVSDK"| node_flight_controller
node_fusion -->|"publishes/subscribes"| node_broker
node_vio -->|"transforms pose"| node_vio_lib
node_vio -->|"captures frames"| node_camera
node_vio -->|"publishes telemetry"| node_broker
node_apriltag -->|"processes imagery"| node_camera
node_apriltag -->|"publishes detections"| node_broker
node_pcm -->|"publishes/subscribes"| node_broker
node_thermal -->|"publishes/subscribes"| node_broker
node_status -->|"subscribes status"| node_broker
node_fusion -->|"feeds fused data"| node_fcm
node_vio -->|"provides pose"| node_fusion
node_apriltag -.->|"provides detections"| node_fusion
node_pcm -->|"sends peripheral commands"| node_pcc

click node_app "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app.py"
click node_connection "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/connection/main.py"
click node_mqtt_gui "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/connection/mqtt.py"
click node_serial_gui "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/connection/serial.py"
click node_autonomy "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/autonomy.py"
click node_map "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/moving_map.py"
click node_control "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/vmc_control.py"
click node_telemetry "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/vmc_telemetry.py"
click node_thermal_view "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/thermal_view_control.py"
click node_mqtt_debug "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/mqtt_debug.py"
click node_mqtt_logger "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/mqtt_logger.py"
click node_pcc_tester "https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/pcc_tester.py"
click node_fcm "https://github.com/ocularbear8/avr-2022/blob/main/VMC/fcm/fcc_control.py"
click node_fusion "https://github.com/ocularbear8/avr-2022/blob/main/VMC/fusion/fusion.py"
click node_vio "https://github.com/ocularbear8/avr-2022/blob/main/VMC/vio/vio.py"
click node_vio_lib "https://github.com/ocularbear8/avr-2022/blob/main/VMC/vio/vio_library.py"
click node_apriltag "https://github.com/ocularbear8/avr-2022/blob/main/VMC/apriltag/python/apriltag_processor.py"
click node_pcm "https://github.com/ocularbear8/avr-2022/blob/main/VMC/pcm/pcm.py"
click node_thermal "https://github.com/ocularbear8/avr-2022/blob/main/VMC/thermal/thermal.py"
click node_status "https://github.com/ocularbear8/avr-2022/blob/main/VMC/status/status.py"
click node_pcc "https://github.com/ocularbear8/avr-2022/blob/main/PCC/src/main.cpp"
click node_serial_parser "https://github.com/ocularbear8/avr-2022/blob/main/PCC/libraries/AVR_SerialParser/serial_lib.cpp"
click node_servo "https://github.com/ocularbear8/avr-2022/blob/main/PCC/libraries/AVR_ServoDriver/avr_servo.cpp"
click node_led "https://github.com/ocularbear8/avr-2022/blob/main/PCC/libraries/AVR_NeoDriver/avr_led.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_app,node_connection,node_mqtt_gui,node_serial_gui,node_autonomy,node_map,node_control,node_telemetry,node_thermal_view,node_mqtt_debug,node_mqtt_logger,node_pcc_tester toneBlue
class node_fcm,node_fusion,node_vio,node_vio_lib,node_apriltag,node_pcm,node_thermal,node_status toneAmber
class node_pcc,node_serial_parser,node_servo,node_led toneMint
class node_operator,node_broker,node_flight_controller,node_camera toneIndigo
```

## Components

### Operator GUI

- [GUI application](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app.py): `GUI/app.py`
- [Connections tab](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/connection/main.py): `GUI/app/tabs/connection/main.py`
- [MQTT connection](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/connection/mqtt.py): `GUI/app/tabs/connection/mqtt.py`
- [Serial connection](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/connection/serial.py): `GUI/app/tabs/connection/serial.py`
- [Autonomy](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/autonomy.py): `GUI/app/tabs/autonomy.py`
- [Moving map](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/moving_map.py): `GUI/app/tabs/moving_map.py`
- [VMC control](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/vmc_control.py): `GUI/app/tabs/vmc_control.py`
- [VMC telemetry](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/vmc_telemetry.py): `GUI/app/tabs/vmc_telemetry.py`
- [Thermal view](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/thermal_view_control.py): `GUI/app/tabs/thermal_view_control.py`
- [MQTT debug](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/mqtt_debug.py): `GUI/app/tabs/mqtt_debug.py`
- [MQTT logger](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/mqtt_logger.py): `GUI/app/tabs/mqtt_logger.py`
- [PCC tester](https://github.com/ocularbear8/avr-2022/blob/main/GUI/app/tabs/pcc_tester.py): `GUI/app/tabs/pcc_tester.py`

### VMC Flight Software

- [Flight control](https://github.com/ocularbear8/avr-2022/blob/main/VMC/fcm/fcc_control.py): `VMC/fcm/fcc_control.py`
- [Sensor fusion](https://github.com/ocularbear8/avr-2022/blob/main/VMC/fusion/fusion.py): `VMC/fusion/fusion.py`
- [Visual odometry](https://github.com/ocularbear8/avr-2022/blob/main/VMC/vio/vio.py): `VMC/vio/vio.py`
- [VIO transforms](https://github.com/ocularbear8/avr-2022/blob/main/VMC/vio/vio_library.py): `VMC/vio/vio_library.py`
- [AprilTag processing](https://github.com/ocularbear8/avr-2022/blob/main/VMC/apriltag/python/apriltag_processor.py): `VMC/apriltag/python/apriltag_processor.py`
- [Peripheral manager](https://github.com/ocularbear8/avr-2022/blob/main/VMC/pcm/pcm.py): `VMC/pcm/pcm.py`
- [Thermal service](https://github.com/ocularbear8/avr-2022/blob/main/VMC/thermal/thermal.py): `VMC/thermal/thermal.py`
- [Status lights](https://github.com/ocularbear8/avr-2022/blob/main/VMC/status/status.py): `VMC/status/status.py`

### Peripheral Controller

- [PCC firmware](https://github.com/ocularbear8/avr-2022/blob/main/PCC/src/main.cpp): `PCC/src/main.cpp`
- [Serial parser](https://github.com/ocularbear8/avr-2022/blob/main/PCC/libraries/AVR_SerialParser/serial_lib.cpp): `PCC/libraries/AVR_SerialParser/serial_lib.cpp`
- [Servo driver](https://github.com/ocularbear8/avr-2022/blob/main/PCC/libraries/AVR_ServoDriver/avr_servo.cpp): `PCC/libraries/AVR_ServoDriver/avr_servo.cpp`
- [LED driver](https://github.com/ocularbear8/avr-2022/blob/main/PCC/libraries/AVR_NeoDriver/avr_led.cpp): `PCC/libraries/AVR_NeoDriver/avr_led.cpp`

### Other components

- **Operator**
- **MQTT broker**
- **Flight controller**
- **Camera**

## Connections

- Operator → GUI application: operates
- GUI application → Connections tab: builds
- GUI application → Autonomy: builds
- GUI application → Moving map: builds
- GUI application → VMC control: builds
- GUI application → VMC telemetry: builds
- GUI application → Thermal view: builds
- GUI application → MQTT debug: builds
- GUI application → MQTT logger: builds
- GUI application → PCC tester: builds
- Connections tab → MQTT connection: embeds
- Connections tab → Serial connection: embeds
- GUI application → MQTT connection: connects signals
- VMC control → MQTT connection: publishes commands
- MQTT connection → MQTT broker: publishes/subscribes
- MQTT debug → MQTT connection: receives messages
- MQTT logger → MQTT broker: logs messages
- Moving map → MQTT broker: reads telemetry
- VMC telemetry → MQTT broker: reads telemetry
- Autonomy → MQTT broker: sends actions
- Thermal view → MQTT broker: reads/sets thermal
- PCC tester → Serial connection: tests serial device
- Serial connection → PCC firmware: serial commands
- PCC firmware → Serial parser: polls packets
- PCC firmware → Servo driver: drives servos
- PCC firmware → LED driver: drives LEDs
- PCC firmware → Peripheral manager: serial link
- Flight control → MQTT broker: publishes/subscribes
- Flight control → Flight controller: controls via MAVSDK
- Sensor fusion → MQTT broker: publishes/subscribes
- Visual odometry → VIO transforms: transforms pose
- Visual odometry → Camera: captures frames
- Visual odometry → MQTT broker: publishes telemetry
- AprilTag processing → Camera: processes imagery
- AprilTag processing → MQTT broker: publishes detections
- Peripheral manager → MQTT broker: publishes/subscribes
- Thermal service → MQTT broker: publishes/subscribes
- Status lights → MQTT broker: subscribes status
- Sensor fusion → Flight control: feeds fused data
- Visual odometry → Sensor fusion: provides pose
- AprilTag processing → Sensor fusion: provides detections
- Peripheral manager → PCC firmware: sends peripheral commands
