# jonahmccreadyparker/egh450-clean-up architecture

> Architecture diagram of the GitHub repository jonahmccreadyparker/egh450-clean-up, 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/jonahmccreadyparker/egh450-clean-up
- Repository: https://github.com/jonahmccreadyparker/egh450-clean-up

## Overview

This ROS Noetic project supports an indoor search-and-rescue UAV: camera and localization inputs feed target detection and pose estimation; mission software plans movement; an operator monitors mission information; and payload controls can trigger a mid-air release. The README documents these capabilities, while the sampled source mainly covers DepthAI pipeline configuration and an example crop-control client. Consequently, links between project packages represent documented ROS data or control exchanges, not verified direct function calls; optional emulation is shown separately.

Main entry points: [`catkin_ws_G6/src/spar/spar_node/src/spar_node.cpp`](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/spar/spar_node/src/spar_node.cpp) (Flight control), [`catkin_ws_G6/src/depthai_publisher/src/depthai_publisher/dai_publisher.py`](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/depthai_publisher/src/depthai_publisher/dai_publisher.py) (DepthAI publisher), [`catkin_ws_G6/src/egb349_group8_vision/src/egb349_group8_vision/aruco_detector.py`](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egb349_group8_vision/src/egb349_group8_vision/aruco_detector.py) (ArUco detection), [`catkin_ws_G6/src/breadcrumb/src/breadcrumb_node.cpp`](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/breadcrumb/src/breadcrumb_node.cpp) (Path planning)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_sensing["Sensing"]
  node_depthai["DepthAI driver<br/>[camera.cpp]"]
  node_publisher["DepthAI publisher<br/>[dai_publisher.py]"]
end

subgraph group_perception["Perception"]
  node_aruco["ArUco detection<br/>[aruco_detector.py]"]
  node_imageproc["Image processing<br/>[image_processor.py]"]
  node_pose["Target pose<br/>[pose_estimator.py]"]
end

subgraph group_mission["Mission"]
  node_planner["Path planning"]
  node_astar["A-star search<br/>[AStar.cpp]"]
  node_map["Area map<br/>[area_map_node.cpp]"]
  node_emulator["UAV emulator"]
end

subgraph group_operator["Operator tools"]
  node_hud["Mission HUD<br/>[generic_hud.py]"]
  node_mavgui["MAVROS GUI<br/>[mavros_gui.py]"]
  node_rviz["RViz mission view"]
end

subgraph group_actuation["Flight and payload"]
  node_flight["Flight control<br/>[spar_node.cpp]"]
  node_payload["Payload control<br/>[payload_driver.py]"]
  node_deploy["Deployment scripts<br/>[payload_driver.py]"]
end

node_uav(("UAV"))
node_oak["OAK-D camera"]
node_gcs(("Ground operator"))

node_oak -->|"captures images"| node_depthai
node_depthai -->|"publishes streams"| node_publisher
node_publisher -->|"image topics"| node_aruco
node_publisher -->|"image topics"| node_imageproc
node_aruco -->|"marker observations"| node_pose
node_imageproc -->|"image data"| node_pose
node_pose -->|"target pose"| node_rviz
node_aruco -->|"detected markers"| node_rviz
node_planner -->|"requests paths"| node_astar
node_map -->|"map data"| node_planner
node_planner -->|"flight goals"| node_flight
node_uav -->|"flight state"| node_flight
node_flight -->|"telemetry"| node_hud
node_gcs -->|"operator input"| node_mavgui
node_mavgui -->|"flight commands"| node_flight
node_hud -->|"mission display"| node_gcs
node_rviz -->|"visualizes mission"| node_gcs
node_gcs -->|"release request"| node_payload
node_payload -->|"deployment control"| node_deploy
node_deploy -->|"actuates servos"| node_uav
node_emulator -.->|"simulated state"| node_flight

click node_depthai "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/depthai-ros/depthai_ros_driver/src/camera.cpp"
click node_publisher "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/depthai_publisher/src/depthai_publisher/dai_publisher.py"
click node_aruco "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egb349_group8_vision/src/egb349_group8_vision/aruco_detector.py"
click node_imageproc "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egh450_image_processor/src/egh450_image_processor/image_processor.py"
click node_pose "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egh450_target_solvepnp/src/egh450_target_solvepnp/pose_estimator.py"
click node_planner "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/breadcrumb/src/breadcrumb_node.cpp"
click node_astar "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/breadcrumb/src/breadcrumb/AStar.cpp"
click node_map "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/qutas_lab_450/src/area_map_node.cpp"
click node_flight "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/spar/spar_node/src/spar_node.cpp"
click node_payload "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egb349_group8_vision/src/egb349_group8_vision/payload_driver.py"
click node_deploy "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egh450_payload_deploy/scripts/payload_driver.py"
click node_hud "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/rqt_generic_hud/src/rqt_generic_hud/generic_hud.py"
click node_mavgui "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/rqt_mavros_gui/src/rqt_mavros_gui/mavros_gui.py"
click node_emulator "https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/uavasr_emulator/src/uavasr_emulator_node.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_depthai,node_publisher toneBlue
class node_aruco,node_imageproc,node_pose toneAmber
class node_planner,node_astar,node_map,node_emulator toneMint
class node_hud,node_mavgui,node_rviz toneRose
class node_flight,node_payload,node_deploy,node_uav,node_oak,node_gcs toneIndigo
```

## Components

### Sensing

- [DepthAI driver](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/depthai-ros/depthai_ros_driver/src/camera.cpp): `catkin_ws_G6/src/depthai-ros/depthai_ros_driver/src/camera.cpp`
- [DepthAI publisher](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/depthai_publisher/src/depthai_publisher/dai_publisher.py): `catkin_ws_G6/src/depthai_publisher/src/depthai_publisher/dai_publisher.py`

### Perception

- [ArUco detection](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egb349_group8_vision/src/egb349_group8_vision/aruco_detector.py): `catkin_ws_G6/src/egb349_group8_vision/src/egb349_group8_vision/aruco_detector.py`
- [Image processing](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egh450_image_processor/src/egh450_image_processor/image_processor.py): `catkin_ws_G6/src/egh450_image_processor/src/egh450_image_processor/image_processor.py`
- [Target pose](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egh450_target_solvepnp/src/egh450_target_solvepnp/pose_estimator.py): `catkin_ws_G6/src/egh450_target_solvepnp/src/egh450_target_solvepnp/pose_estimator.py`

### Mission

- [Path planning](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/breadcrumb/src/breadcrumb_node.cpp): `catkin_ws_G6/src/breadcrumb/src/breadcrumb_node.cpp`
- [A-star search](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/breadcrumb/src/breadcrumb/AStar.cpp): `catkin_ws_G6/src/breadcrumb/src/breadcrumb/AStar.cpp`
- [Area map](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/qutas_lab_450/src/area_map_node.cpp): `catkin_ws_G6/src/qutas_lab_450/src/area_map_node.cpp`
- [UAV emulator](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/uavasr_emulator/src/uavasr_emulator_node.cpp): `catkin_ws_G6/src/uavasr_emulator/src/uavasr_emulator_node.cpp`

### Operator tools

- [Mission HUD](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/rqt_generic_hud/src/rqt_generic_hud/generic_hud.py): `catkin_ws_G6/src/rqt_generic_hud/src/rqt_generic_hud/generic_hud.py`
- [MAVROS GUI](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/rqt_mavros_gui/src/rqt_mavros_gui/mavros_gui.py): `catkin_ws_G6/src/rqt_mavros_gui/src/rqt_mavros_gui/mavros_gui.py`
- **RViz mission view**

### Flight and payload

- [Flight control](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/spar/spar_node/src/spar_node.cpp): `catkin_ws_G6/src/spar/spar_node/src/spar_node.cpp`
- [Payload control](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egb349_group8_vision/src/egb349_group8_vision/payload_driver.py): `catkin_ws_G6/src/egb349_group8_vision/src/egb349_group8_vision/payload_driver.py`
- [Deployment scripts](https://github.com/jonahmccreadyparker/egh450-clean-up/blob/main/catkin_ws_G6/src/egh450_payload_deploy/scripts/payload_driver.py): `catkin_ws_G6/src/egh450_payload_deploy/scripts/payload_driver.py`

### Other components

- **UAV**
- **OAK-D camera**
- **Ground operator**

## Connections

- OAK-D camera → DepthAI driver: captures images
- DepthAI driver → DepthAI publisher: publishes streams
- DepthAI publisher → ArUco detection: image topics
- DepthAI publisher → Image processing: image topics
- ArUco detection → Target pose: marker observations
- Image processing → Target pose: image data
- Target pose → RViz mission view: target pose
- ArUco detection → RViz mission view: detected markers
- Path planning → A-star search: requests paths
- Area map → Path planning: map data
- Path planning → Flight control: flight goals
- UAV → Flight control: flight state
- Flight control → Mission HUD: telemetry
- Ground operator → MAVROS GUI: operator input
- MAVROS GUI → Flight control: flight commands
- Mission HUD → Ground operator: mission display
- RViz mission view → Ground operator: visualizes mission
- Ground operator → Payload control: release request
- Payload control → Deployment scripts: deployment control
- Deployment scripts → UAV: actuates servos
- UAV emulator → Flight control: simulated state
