# dynamicswarms/pad_swarming architecture

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

- Interactive diagram: https://gitdiagram.com/dynamicswarms/pad_swarming
- Repository: https://github.com/dynamicswarms/pad_swarming

## Overview

This ROS 2 workspace supports multi-Crazyflie operation with pad-based charging and traffic coordination, plus monitoring/control interfaces. A vehicle controller checks charge state and delegates flight commands; its connection manager advertises availability and serves connect/disconnect requests. Pad-management modules cover pad creation, distribution, spawning, sensing, and traffic rights, while agent packages provide higher-level behaviors. C++ components implement vehicle state and command safety, and collision avoidance is exposed as a service. The README is empty; links among unsampled subsystems are therefore omitted where their wiring is uncertain.

Main entry points: [`src/padflies/padflies/controller.py`](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/controller.py) (Vehicle controller), [`src/padflies/padflies/charge_controller.py`](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/charge_controller.py) (Charge monitor), [`src/padflies/padflies/commander.py`](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/commander.py) (Flight commander), [`src/padflies/padflies/connection_manager.py`](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/connection_manager.py) (Connection manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_agents["Fleet agents"]
  node_agent["Agent behaviors<br/>[agent.py]"]
  node_random_agent["Random walk"]
  node_wand_agent["Wand control<br/>[wand_agent.py]"]
end

subgraph group_vehicle["Vehicle runtime"]
  node_vehicle_controller["Vehicle controller<br/>[controller.py]"]
  node_charge["Charge monitor"]
  node_connection["Connection manager"]
  node_commander["Flight commander<br/>[commander.py]"]
  node_padflie["Padflie runtime<br/>[padflie.py]"]
end

subgraph group_pads["Pad operations"]
  node_pad_creator["Pad creation<br/>[pad_creator.py]"]
  node_pad_spawner["Pad spawning<br/>[pad_spawner.py]"]
  node_pad_distributor["Pad distribution<br/>[pad_distributor.py]"]
  node_point_finder["Point sensing<br/>[point_finder.py]"]
  node_traffic["Pad traffic rights"]
  node_pad_broadcaster["Pad broadcaster<br/>[pad_broadcaster.py]"]
end

subgraph group_safety["Control and safety"]
  node_battery_state["Hardware state"]
  node_position["Position safety"]
  node_yaw["Yaw safety<br/>[yaw_controller.cpp]"]
  node_avoid_client["Avoidance client"]
  node_avoid_service["Avoidance service"]
end

subgraph group_interfaces["Operator interfaces"]
  node_status_ui["Vehicle status UI<br/>[state_plugin.cpp]"]
  node_add_ui["Vehicle setup UI<br/>[add_plugin.py]"]
end

node_operator(("Operator"))
node_crazyflie["Crazyflie hardware"]

node_vehicle_controller -->|"checks charge"| node_charge
node_vehicle_controller -->|"delegates flight"| node_commander
node_connection -->|"reads pose"| node_commander
node_charge -.->|"reads battery state"| node_crazyflie
node_battery_state -->|"subscribes state"| node_crazyflie
node_avoid_client -->|"requests target"| node_avoid_service
node_operator -->|"monitors"| node_status_ui
node_operator -->|"configures fleet"| node_add_ui

click node_agent "https://github.com/dynamicswarms/pad_swarming/blob/master/src/agents/agents/agent.py"
click node_random_agent "https://github.com/dynamicswarms/pad_swarming/blob/master/src/agents/agents/random_walk_agent.py"
click node_wand_agent "https://github.com/dynamicswarms/pad_swarming/blob/master/src/agents/agents/wand_agent.py"
click node_vehicle_controller "https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/controller.py"
click node_charge "https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/charge_controller.py"
click node_connection "https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/connection_manager.py"
click node_commander "https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/commander.py"
click node_padflie "https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/padflie.py"
click node_battery_state "https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies_cpp/src/hardware_state_controller.cpp"
click node_position "https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies_cpp/src/position_controller.cpp"
click node_yaw "https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies_cpp/src/yaw_controller.cpp"
click node_avoid_client "https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies_cpp/src/collision_avoidance_client.cpp"
click node_avoid_service "https://github.com/dynamicswarms/pad_swarming/blob/master/src/collision_avoidance/collision_avoidance/src/collision_avoidance_node.cpp"
click node_pad_creator "https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/pad_creator.py"
click node_pad_spawner "https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/pad_spawner.py"
click node_pad_distributor "https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/pad_distributor.py"
click node_point_finder "https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/point_finder.py"
click node_traffic "https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/pad_traffic_controller.py"
click node_pad_broadcaster "https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/pad_broadcaster.py"
click node_status_ui "https://github.com/dynamicswarms/pad_swarming/blob/master/src/rqt_crazyflies/src/state_plugin.cpp"
click node_add_ui "https://github.com/dynamicswarms/pad_swarming/blob/master/src/rqt_crazyflies_add/rqt_crazyflies_add/add_plugin.py"

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_agent,node_random_agent,node_wand_agent toneBlue
class node_vehicle_controller,node_charge,node_connection,node_commander,node_padflie toneAmber
class node_pad_creator,node_pad_spawner,node_pad_distributor,node_point_finder,node_traffic,node_pad_broadcaster toneMint
class node_battery_state,node_position,node_yaw,node_avoid_client,node_avoid_service toneRose
class node_status_ui,node_add_ui,node_operator,node_crazyflie toneIndigo
```

## Components

### Fleet agents

- [Agent behaviors](https://github.com/dynamicswarms/pad_swarming/blob/master/src/agents/agents/agent.py): `src/agents/agents/agent.py`
- [Random walk](https://github.com/dynamicswarms/pad_swarming/blob/master/src/agents/agents/random_walk_agent.py): `src/agents/agents/random_walk_agent.py`
- [Wand control](https://github.com/dynamicswarms/pad_swarming/blob/master/src/agents/agents/wand_agent.py): `src/agents/agents/wand_agent.py`

### Vehicle runtime

- [Vehicle controller](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/controller.py): `src/padflies/padflies/controller.py`
- [Charge monitor](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/charge_controller.py): `src/padflies/padflies/charge_controller.py`
- [Connection manager](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/connection_manager.py): `src/padflies/padflies/connection_manager.py`
- [Flight commander](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/commander.py): `src/padflies/padflies/commander.py`
- [Padflie runtime](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies/padflies/padflie.py): `src/padflies/padflies/padflie.py`

### Pad operations

- [Pad creation](https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/pad_creator.py): `src/pad_management/pad_management/pad_creator.py`
- [Pad spawning](https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/pad_spawner.py): `src/pad_management/pad_management/pad_spawner.py`
- [Pad distribution](https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/pad_distributor.py): `src/pad_management/pad_management/pad_distributor.py`
- [Point sensing](https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/point_finder.py): `src/pad_management/pad_management/point_finder.py`
- [Pad traffic rights](https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/pad_traffic_controller.py): `src/pad_management/pad_management/pad_traffic_controller.py`
- [Pad broadcaster](https://github.com/dynamicswarms/pad_swarming/blob/master/src/pad_management/pad_management/pad_broadcaster.py): `src/pad_management/pad_management/pad_broadcaster.py`

### Control and safety

- [Hardware state](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies_cpp/src/hardware_state_controller.cpp): `src/padflies_cpp/src/hardware_state_controller.cpp`
- [Position safety](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies_cpp/src/position_controller.cpp): `src/padflies_cpp/src/position_controller.cpp`
- [Yaw safety](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies_cpp/src/yaw_controller.cpp): `src/padflies_cpp/src/yaw_controller.cpp`
- [Avoidance client](https://github.com/dynamicswarms/pad_swarming/blob/master/src/padflies_cpp/src/collision_avoidance_client.cpp): `src/padflies_cpp/src/collision_avoidance_client.cpp`
- [Avoidance service](https://github.com/dynamicswarms/pad_swarming/blob/master/src/collision_avoidance/collision_avoidance/src/collision_avoidance_node.cpp): `src/collision_avoidance/collision_avoidance/src/collision_avoidance_node.cpp`

### Operator interfaces

- [Vehicle status UI](https://github.com/dynamicswarms/pad_swarming/blob/master/src/rqt_crazyflies/src/state_plugin.cpp): `src/rqt_crazyflies/src/state_plugin.cpp`
- [Vehicle setup UI](https://github.com/dynamicswarms/pad_swarming/blob/master/src/rqt_crazyflies_add/rqt_crazyflies_add/add_plugin.py): `src/rqt_crazyflies_add/rqt_crazyflies_add/add_plugin.py`

### Other components

- **Operator**
- **Crazyflie hardware**

## Connections

- Vehicle controller → Charge monitor: checks charge
- Vehicle controller → Flight commander: delegates flight
- Connection manager → Flight commander: reads pose
- Charge monitor → Crazyflie hardware: reads battery state
- Hardware state → Crazyflie hardware: subscribes state
- Avoidance client → Avoidance service: requests target
- Operator → Vehicle status UI: monitors
- Operator → Vehicle setup UI: configures fleet
