# unl-nimbus-lab/arl-swarm architecture

> Architecture diagram of the GitHub repository unl-nimbus-lab/arl-swarm, 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/unl-nimbus-lab/arl-swarm
- Repository: https://github.com/unl-nimbus-lab/arl-swarm

## Overview

arl-swarm is a ROS-based drone-swarm deployment project, with Freyja providing vehicle state handling, trajectory/control components, and autopilot integration. The principal flight path is state input normalization and publication, combined with a trajectory reference in LQR feedback to produce vehicle commands. The tree and excerpts also show bias/state estimation, waypoint management, ROS message definitions, and example providers. Several subsystem implementations were not sampled, so their relationships are left unconnected rather than inferred from names or co-location.

Main entry points: [`swarm-nodes/Freyja/state_manager/src/state_manager.cpp`](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/state_manager/src/state_manager.cpp) (State manager), [`swarm-nodes/Freyja/state_manager/src/callback_implementations.cpp`](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/state_manager/src/callback_implementations.cpp) (State sources), [`swarm-nodes/Freyja/lqg_controller/src/lqr_control_bias.cpp`](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/lqg_controller/src/lqr_control_bias.cpp) (LQR control), [`swarm-nodes/Freyja/autopilot_handler/apm_handler/src/mavros_translate.cpp`](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/autopilot_handler/apm_handler/src/mavros_translate.cpp) (MAVROS translation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_state["State estimation"]
  node_state_inputs["State sources"]
  node_state_manager["State manager<br/>[state_manager.cpp]"]
  node_filters["State filters<br/>[freyja_filters.cpp]"]
  node_state_estimator["State estimator"]
  node_bias_estimator["Bias estimator<br/>[bias_estimator.cpp]"]
end

subgraph group_flight["Flight control"]
  node_lqr["LQR control"]
  node_lqr_standard["LQR variant<br/>[lqr_control.cpp]"]
  node_lqr_velocity["Velocity LQR"]
  node_ros_messages["ROS message schemas"]
end

subgraph group_mission["Trajectory and mission"]
  node_waypoint_manager["Waypoint manager"]
  node_trajectory_examples["Trajectory providers"]
end

subgraph group_integration["Vehicle integration"]
  node_autopilot_translation["MAVROS translation"]
  node_vehicle_config["Vehicle launch config"]
end

node_operator(("Flight operator"))
node_vehicle(("Autopilot and vehicle"))

node_state_manager -->|"registers callbacks"| node_state_inputs
node_state_inputs -->|"publishes state"| node_state_manager
node_state_manager -->|"uses filters"| node_filters
node_state_manager -.->|"provides state"| node_lqr
node_lqr -->|"sets measurements and input"| node_bias_estimator
node_operator -.->|"launches"| node_vehicle_config
node_vehicle_config -.->|"configures"| node_autopilot_translation
node_autopilot_translation -.->|"translates commands"| node_vehicle

click node_state_inputs "https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/state_manager/src/callback_implementations.cpp"
click node_state_manager "https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/state_manager/src/state_manager.cpp"
click node_filters "https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/state_manager/include/freyja_filters.cpp"
click node_state_estimator "https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/state_manager/src/state_estimator.cpp"
click node_bias_estimator "https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/lqg_controller/src/bias_estimator.cpp"
click node_lqr "https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/lqg_controller/src/lqr_control_bias.cpp"
click node_lqr_standard "https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/lqg_controller/src/lqr_control.cpp"
click node_lqr_velocity "https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/lqg_controller/src/lqr_vel_control.cpp"
click node_ros_messages "https://github.com/unl-nimbus-lab/arl-swarm/tree/main/swarm-nodes/Freyja/freyja_msgs/msg"
click node_waypoint_manager "https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/waypoint_manager/src/waypoint_manager.cpp"
click node_trajectory_examples "https://github.com/unl-nimbus-lab/arl-swarm/tree/main/swarm-nodes/Freyja/freyja_examples/src"
click node_autopilot_translation "https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/autopilot_handler/apm_handler/src/mavros_translate.cpp"
click node_vehicle_config "https://github.com/unl-nimbus-lab/arl-swarm/tree/main/swarm-nodes/Freyja/freyja_configfiles"

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_state_inputs,node_state_manager,node_filters,node_state_estimator,node_bias_estimator toneBlue
class node_lqr,node_lqr_standard,node_lqr_velocity,node_ros_messages toneAmber
class node_waypoint_manager,node_trajectory_examples toneMint
class node_autopilot_translation,node_vehicle_config toneRose
class node_operator,node_vehicle toneIndigo
```

## Components

### State estimation

- [State sources](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/state_manager/src/callback_implementations.cpp): `swarm-nodes/Freyja/state_manager/src/callback_implementations.cpp`
- [State manager](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/state_manager/src/state_manager.cpp): `swarm-nodes/Freyja/state_manager/src/state_manager.cpp`
- [State filters](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/state_manager/include/freyja_filters.cpp): `swarm-nodes/Freyja/state_manager/include/freyja_filters.cpp`
- [State estimator](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/state_manager/src/state_estimator.cpp): `swarm-nodes/Freyja/state_manager/src/state_estimator.cpp`
- [Bias estimator](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/lqg_controller/src/bias_estimator.cpp): `swarm-nodes/Freyja/lqg_controller/src/bias_estimator.cpp`

### Flight control

- [LQR control](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/lqg_controller/src/lqr_control_bias.cpp): `swarm-nodes/Freyja/lqg_controller/src/lqr_control_bias.cpp`
- [LQR variant](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/lqg_controller/src/lqr_control.cpp): `swarm-nodes/Freyja/lqg_controller/src/lqr_control.cpp`
- [Velocity LQR](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/lqg_controller/src/lqr_vel_control.cpp): `swarm-nodes/Freyja/lqg_controller/src/lqr_vel_control.cpp`
- [ROS message schemas](https://github.com/unl-nimbus-lab/arl-swarm/tree/main/swarm-nodes/Freyja/freyja_msgs/msg): `swarm-nodes/Freyja/freyja_msgs/msg`

### Trajectory and mission

- [Waypoint manager](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/waypoint_manager/src/waypoint_manager.cpp): `swarm-nodes/Freyja/waypoint_manager/src/waypoint_manager.cpp`
- [Trajectory providers](https://github.com/unl-nimbus-lab/arl-swarm/tree/main/swarm-nodes/Freyja/freyja_examples/src): `swarm-nodes/Freyja/freyja_examples/src`

### Vehicle integration

- [MAVROS translation](https://github.com/unl-nimbus-lab/arl-swarm/blob/main/swarm-nodes/Freyja/autopilot_handler/apm_handler/src/mavros_translate.cpp): `swarm-nodes/Freyja/autopilot_handler/apm_handler/src/mavros_translate.cpp`
- [Vehicle launch config](https://github.com/unl-nimbus-lab/arl-swarm/tree/main/swarm-nodes/Freyja/freyja_configfiles): `swarm-nodes/Freyja/freyja_configfiles`

### Other components

- **Flight operator**
- **Autopilot and vehicle**

## Connections

- State manager → State sources: registers callbacks (evidence: `swarm-nodes/Freyja/state_manager/src/state_manager.cpp`)
- State sources → State manager: publishes state (evidence: `swarm-nodes/Freyja/state_manager/src/callback_implementations.cpp`)
- State manager → State filters: uses filters
- State manager → LQR control: provides state
- LQR control → Bias estimator: sets measurements and input (evidence: `swarm-nodes/Freyja/lqg_controller/src/lqr_control_bias.cpp`)
- Flight operator → Vehicle launch config: launches
- Vehicle launch config → MAVROS translation: configures
- MAVROS translation → Autopilot and vehicle: translates commands
