# dynamicswarms/crazyflie_hardware architecture

> Architecture diagram of the GitHub repository dynamicswarms/crazyflie_hardware, 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/crazyflie_hardware
- Repository: https://github.com/dynamicswarms/crazyflie_hardware

## Overview

This ROS 2 repository provides Crazyflie radio and per-drone hardware control for dynamic swarms. The main workflow is a client requesting a drone through the gateway; the gateway creates and configures a Crazyflie node, whose CRTP driver communicates over ROS interfaces with the radio node and USB radio. Driver modules also support firmware parameters, logging, console, commands, and localization; localization connects to the tracker and broadcaster. The README is sparse, so subsystem coverage also relies on the tree, launch configuration, and sampled excerpts; unsampled module wiring is represented only where the tree or excerpts support it.

Main entry points: [`src/crazyflie_hardware_cpp/src/crazyflie.cpp`](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crazyflie.cpp) (Crazyflie node), [`src/crtp_cpp/src/crtp_cpp/logic/logic.cpp`](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crtp_cpp/src/crtp_cpp/logic/logic.cpp) (CRTP logic), [`src/crazyflie_hardware_cpp/src/crtp_driver_cpp/localization.cpp`](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/localization.cpp) (Localization module), [`src/crazyradio/src/crazyradio_node.cpp`](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyradio/src/crazyradio_node.cpp) (Crazyradio ROS node)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_management["Fleet management"]
  node_gateway["Crazyflie gateway<br/>[gateway.cpp]"]
end

subgraph group_drivers["Drone drivers"]
  node_cfnode["Crazyflie node<br/>[crazyflie.cpp]"]
  node_commands["Command modules<br/>[hl_commander.cpp]"]
  node_parameters["Firmware parameters<br/>[parameters.cpp]"]
  node_logging["Telemetry logging<br/>[logging.cpp]"]
  node_console["Console<br/>[console.cpp]"]
  node_python_driver["Python driver option<br/>[crazyflie.py]"]
end

subgraph group_transport["CRTP transport"]
  node_roslink["ROS CRTP link<br/>[crtp_link_ros.cpp]"]
  node_crtp_logic["CRTP logic<br/>[logic.cpp]"]
  node_crtp_packer["CRTP packers<br/>[crtp_packer.cpp]"]
  node_radio_node["Crazyradio ROS node"]
  node_link_container["Radio link manager"]
  node_usb_radio["Crazyradio USB<br/>[Crazyradio.cpp]"]
end

subgraph group_localization["Localization"]
  node_localization["Localization module<br/>[localization.cpp]"]
  node_broadcaster["Pose broadcaster<br/>[broadcaster.cpp]"]
end

node_client(("Fleet client"))
node_drone(("Crazyflie aircraft"))
node_tracker["Object tracker"]

node_client -->|"add or remove"| node_gateway
node_gateway -->|"loads component"| node_cfnode
node_cfnode -->|"creates link"| node_roslink
node_cfnode -->|"initializes"| node_commands
node_cfnode -->|"initializes"| node_parameters
node_cfnode -->|"initializes"| node_logging
node_cfnode -->|"creates"| node_console
node_cfnode -->|"creates"| node_localization
node_commands -->|"uses"| node_crtp_logic
node_parameters -->|"uses"| node_crtp_logic
node_logging -->|"uses"| node_crtp_logic
node_console -->|"uses"| node_crtp_logic
node_localization -->|"uses"| node_crtp_logic
node_crtp_logic -->|"encodes packets"| node_crtp_packer
node_roslink -->|"exchanges CRTP"| node_radio_node
node_radio_node -->|"manages links"| node_link_container
node_radio_node -->|"sends packets"| node_usb_radio
node_usb_radio -->|"radio packets"| node_drone
node_drone -->|"radio responses"| node_usb_radio
node_localization -->|"registers object"| node_tracker
node_localization -->|"registers broadcast"| node_broadcaster
node_python_driver -.->|"registers object"| node_tracker
node_python_driver -.->|"registers broadcast"| node_broadcaster

click node_gateway "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_gateway_components/src/gateway.cpp"
click node_cfnode "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crazyflie.cpp"
click node_roslink "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_link_ros.cpp"
click node_commands "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/hl_commander.cpp"
click node_parameters "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/parameters.cpp"
click node_logging "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/logging.cpp"
click node_console "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/console.cpp"
click node_crtp_logic "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crtp_cpp/src/crtp_cpp/logic/logic.cpp"
click node_crtp_packer "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crtp_cpp/src/crtp_cpp/packer/crtp_packer.cpp"
click node_radio_node "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyradio/src/crazyradio_node.cpp"
click node_link_container "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyradio/deps/libcrtp/CrtpLinkContainer.cpp"
click node_usb_radio "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyradio/deps/libcrazyradio/Crazyradio.cpp"
click node_localization "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/localization.cpp"
click node_broadcaster "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/broadcaster.cpp"
click node_python_driver "https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware/crazyflie_hardware/crazyflie.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_gateway,node_client toneBlue
class node_cfnode,node_commands,node_parameters,node_logging,node_console,node_python_driver toneAmber
class node_roslink,node_crtp_logic,node_crtp_packer,node_radio_node,node_link_container,node_usb_radio toneMint
class node_localization,node_broadcaster toneRose
class node_drone,node_tracker toneIndigo
```

## Components

### Fleet management

- [Crazyflie gateway](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_gateway_components/src/gateway.cpp): `src/crazyflie_hardware_gateway_components/src/gateway.cpp`

### Drone drivers

- [Crazyflie node](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crazyflie.cpp): `src/crazyflie_hardware_cpp/src/crazyflie.cpp`
- [Command modules](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/hl_commander.cpp): `src/crazyflie_hardware_cpp/src/crtp_driver_cpp/hl_commander.cpp`
- [Firmware parameters](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/parameters.cpp): `src/crazyflie_hardware_cpp/src/crtp_driver_cpp/parameters.cpp`
- [Telemetry logging](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/logging.cpp): `src/crazyflie_hardware_cpp/src/crtp_driver_cpp/logging.cpp`
- [Console](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/console.cpp): `src/crazyflie_hardware_cpp/src/crtp_driver_cpp/console.cpp`
- [Python driver option](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware/crazyflie_hardware/crazyflie.py): `src/crazyflie_hardware/crazyflie_hardware/crazyflie.py`

### CRTP transport

- [ROS CRTP link](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_link_ros.cpp): `src/crazyflie_hardware_cpp/src/crtp_link_ros.cpp`
- [CRTP logic](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crtp_cpp/src/crtp_cpp/logic/logic.cpp): `src/crtp_cpp/src/crtp_cpp/logic/logic.cpp`
- [CRTP packers](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crtp_cpp/src/crtp_cpp/packer/crtp_packer.cpp): `src/crtp_cpp/src/crtp_cpp/packer/crtp_packer.cpp`
- [Crazyradio ROS node](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyradio/src/crazyradio_node.cpp): `src/crazyradio/src/crazyradio_node.cpp`
- [Radio link manager](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyradio/deps/libcrtp/CrtpLinkContainer.cpp): `src/crazyradio/deps/libcrtp/CrtpLinkContainer.cpp`
- [Crazyradio USB](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyradio/deps/libcrazyradio/Crazyradio.cpp): `src/crazyradio/deps/libcrazyradio/Crazyradio.cpp`

### Localization

- [Localization module](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/crtp_driver_cpp/localization.cpp): `src/crazyflie_hardware_cpp/src/crtp_driver_cpp/localization.cpp`
- [Pose broadcaster](https://github.com/dynamicswarms/crazyflie_hardware/blob/master/src/crazyflie_hardware_cpp/src/broadcaster.cpp): `src/crazyflie_hardware_cpp/src/broadcaster.cpp`

### Other components

- **Fleet client**
- **Crazyflie aircraft**
- **Object tracker**

## Connections

- Fleet client → Crazyflie gateway: add or remove
- Crazyflie gateway → Crazyflie node: loads component
- Crazyflie node → ROS CRTP link: creates link
- Crazyflie node → Command modules: initializes
- Crazyflie node → Firmware parameters: initializes
- Crazyflie node → Telemetry logging: initializes
- Crazyflie node → Console: creates
- Crazyflie node → Localization module: creates
- Command modules → CRTP logic: uses
- Firmware parameters → CRTP logic: uses
- Telemetry logging → CRTP logic: uses
- Console → CRTP logic: uses
- Localization module → CRTP logic: uses
- CRTP logic → CRTP packers: encodes packets
- ROS CRTP link → Crazyradio ROS node: exchanges CRTP
- Crazyradio ROS node → Radio link manager: manages links
- Crazyradio ROS node → Crazyradio USB: sends packets
- Crazyradio USB → Crazyflie aircraft: radio packets
- Crazyflie aircraft → Crazyradio USB: radio responses
- Localization module → Object tracker: registers object
- Localization module → Pose broadcaster: registers broadcast
- Python driver option → Object tracker: registers object
- Python driver option → Pose broadcaster: registers broadcast
