# skybrush-io/ardupilot architecture

> Architecture diagram of the GitHub repository skybrush-io/ardupilot, 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/skybrush-io/ardupilot
- Repository: https://github.com/skybrush-io/ardupilot
- Video tour (about a minute): https://gitdiagram.com/skybrush-io/ardupilot/video

## Overview

ArduPilot is a family of autopilot firmware for multirotors, fixed-wing aircraft, ground and surface vehicles, submarines, blimps, and antenna trackers. The principal workflow is a user operating a vehicle through its autopilot; vehicle-specific mode, navigation, and actuator code supports that control. The tree also exposes peripheral firmware and shared persistent-storage layers. The README establishes the product scope, but the sampled source is chiefly storage code, so detailed runtime call wiring is not evidenced and is omitted.

Main entry points: [`ArduCopter/Copter.cpp`](https://github.com/skybrush-io/ardupilot/blob/master/ArduCopter/Copter.cpp) (Copter), [`ArduPlane/Plane.cpp`](https://github.com/skybrush-io/ardupilot/blob/master/ArduPlane/Plane.cpp) (Plane), [`Rover/Rover.cpp`](https://github.com/skybrush-io/ardupilot/blob/master/Rover/Rover.cpp) (Rover), [`ArduSub/Sub.cpp`](https://github.com/skybrush-io/ardupilot/blob/master/ArduSub/Sub.cpp) (Submarine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_vehicles["Vehicle firmware"]
  node_copter["Copter<br/>[Copter.cpp]"]
  node_plane["Plane<br/>[Plane.cpp]"]
  node_rover["Rover<br/>[Rover.cpp]"]
  node_sub["Submarine<br/>[Sub.cpp]"]
  node_tracker["Antenna tracker<br/>[Tracker.cpp]"]
  node_blimp["Blimp<br/>[Blimp.cpp]"]
end

subgraph group_flight["Control stages"]
  node_copter_modes["Copter modes<br/>[mode.cpp]"]
  node_plane_modes["Plane modes<br/>[mode.cpp]"]
  node_rover_modes["Rover modes<br/>[mode.cpp]"]
  node_sub_modes["Sub modes<br/>[mode.cpp]"]
  node_tracker_modes["Tracker modes<br/>[mode.cpp]"]
  node_blimp_modes["Blimp modes<br/>[mode.cpp]"]
  node_copter_nav["Copter navigation<br/>[navigation.cpp]"]
  node_plane_nav["Plane navigation<br/>[navigation.cpp]"]
  node_rover_steering["Rover steering<br/>[Steering.cpp]"]
  node_sub_actuators["Sub actuators<br/>[actuators.cpp]"]
  node_tracker_servos["Tracker servos<br/>[servos.cpp]"]
end

subgraph group_shared["Shared runtime"]
  node_gcs["MAVLink interfaces"]
  node_storage_manager["Storage mapping<br/>[StorageManager.cpp]"]
  node_hal_storage[("HAL storage<br/>[Storage.cpp]")]
end

subgraph group_peripherals["Peripheral firmware"]
  node_periph["AP_Periph<br/>[AP_Periph.cpp]"]
  node_bootloader["Bootloader<br/>[AP_Bootloader.cpp]"]
end

node_operator(("Vehicle operator"))

node_operator -->|"operates"| node_copter
node_operator -->|"operates"| node_plane
node_operator -->|"operates"| node_rover
node_operator -->|"operates"| node_sub
node_operator -->|"operates"| node_tracker
node_operator -->|"operates"| node_blimp

click node_copter "https://github.com/skybrush-io/ardupilot/blob/master/ArduCopter/Copter.cpp"
click node_plane "https://github.com/skybrush-io/ardupilot/blob/master/ArduPlane/Plane.cpp"
click node_rover "https://github.com/skybrush-io/ardupilot/blob/master/Rover/Rover.cpp"
click node_sub "https://github.com/skybrush-io/ardupilot/blob/master/ArduSub/Sub.cpp"
click node_tracker "https://github.com/skybrush-io/ardupilot/blob/master/AntennaTracker/Tracker.cpp"
click node_blimp "https://github.com/skybrush-io/ardupilot/blob/master/Blimp/Blimp.cpp"
click node_copter_modes "https://github.com/skybrush-io/ardupilot/blob/master/ArduCopter/mode.cpp"
click node_plane_modes "https://github.com/skybrush-io/ardupilot/blob/master/ArduPlane/mode.cpp"
click node_rover_modes "https://github.com/skybrush-io/ardupilot/blob/master/Rover/mode.cpp"
click node_sub_modes "https://github.com/skybrush-io/ardupilot/blob/master/ArduSub/mode.cpp"
click node_tracker_modes "https://github.com/skybrush-io/ardupilot/blob/master/AntennaTracker/mode.cpp"
click node_blimp_modes "https://github.com/skybrush-io/ardupilot/blob/master/Blimp/mode.cpp"
click node_copter_nav "https://github.com/skybrush-io/ardupilot/blob/master/ArduCopter/navigation.cpp"
click node_plane_nav "https://github.com/skybrush-io/ardupilot/blob/master/ArduPlane/navigation.cpp"
click node_rover_steering "https://github.com/skybrush-io/ardupilot/blob/master/Rover/Steering.cpp"
click node_sub_actuators "https://github.com/skybrush-io/ardupilot/blob/master/ArduSub/actuators.cpp"
click node_tracker_servos "https://github.com/skybrush-io/ardupilot/blob/master/AntennaTracker/servos.cpp"
click node_gcs "https://github.com/skybrush-io/ardupilot/blob/master/ArduCopter/GCS_MAVLink_Copter.cpp"
click node_storage_manager "https://github.com/skybrush-io/ardupilot/blob/master/libraries/StorageManager/StorageManager.cpp"
click node_hal_storage "https://github.com/skybrush-io/ardupilot/blob/master/libraries/AP_HAL_ChibiOS/Storage.cpp"
click node_periph "https://github.com/skybrush-io/ardupilot/blob/master/Tools/AP_Periph/AP_Periph.cpp"
click node_bootloader "https://github.com/skybrush-io/ardupilot/blob/master/Tools/AP_Bootloader/AP_Bootloader.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_copter,node_plane,node_rover,node_sub,node_tracker,node_blimp toneBlue
class node_copter_modes,node_plane_modes,node_rover_modes,node_sub_modes,node_tracker_modes,node_blimp_modes,node_copter_nav,node_plane_nav,node_rover_steering,node_sub_actuators,node_tracker_servos toneAmber
class node_gcs,node_storage_manager,node_hal_storage toneMint
class node_periph,node_bootloader toneRose
class node_operator toneIndigo
```

## Components

### Vehicle firmware

- [Copter](https://github.com/skybrush-io/ardupilot/blob/master/ArduCopter/Copter.cpp): `ArduCopter/Copter.cpp`
- [Plane](https://github.com/skybrush-io/ardupilot/blob/master/ArduPlane/Plane.cpp): `ArduPlane/Plane.cpp`
- [Rover](https://github.com/skybrush-io/ardupilot/blob/master/Rover/Rover.cpp): `Rover/Rover.cpp`
- [Submarine](https://github.com/skybrush-io/ardupilot/blob/master/ArduSub/Sub.cpp): `ArduSub/Sub.cpp`
- [Antenna tracker](https://github.com/skybrush-io/ardupilot/blob/master/AntennaTracker/Tracker.cpp): `AntennaTracker/Tracker.cpp`
- [Blimp](https://github.com/skybrush-io/ardupilot/blob/master/Blimp/Blimp.cpp): `Blimp/Blimp.cpp`

### Control stages

- [Copter modes](https://github.com/skybrush-io/ardupilot/blob/master/ArduCopter/mode.cpp): `ArduCopter/mode.cpp`
- [Plane modes](https://github.com/skybrush-io/ardupilot/blob/master/ArduPlane/mode.cpp): `ArduPlane/mode.cpp`
- [Rover modes](https://github.com/skybrush-io/ardupilot/blob/master/Rover/mode.cpp): `Rover/mode.cpp`
- [Sub modes](https://github.com/skybrush-io/ardupilot/blob/master/ArduSub/mode.cpp): `ArduSub/mode.cpp`
- [Tracker modes](https://github.com/skybrush-io/ardupilot/blob/master/AntennaTracker/mode.cpp): `AntennaTracker/mode.cpp`
- [Blimp modes](https://github.com/skybrush-io/ardupilot/blob/master/Blimp/mode.cpp): `Blimp/mode.cpp`
- [Copter navigation](https://github.com/skybrush-io/ardupilot/blob/master/ArduCopter/navigation.cpp): `ArduCopter/navigation.cpp`
- [Plane navigation](https://github.com/skybrush-io/ardupilot/blob/master/ArduPlane/navigation.cpp): `ArduPlane/navigation.cpp`
- [Rover steering](https://github.com/skybrush-io/ardupilot/blob/master/Rover/Steering.cpp): `Rover/Steering.cpp`
- [Sub actuators](https://github.com/skybrush-io/ardupilot/blob/master/ArduSub/actuators.cpp): `ArduSub/actuators.cpp`
- [Tracker servos](https://github.com/skybrush-io/ardupilot/blob/master/AntennaTracker/servos.cpp): `AntennaTracker/servos.cpp`

### Shared runtime

- [MAVLink interfaces](https://github.com/skybrush-io/ardupilot/blob/master/ArduCopter/GCS_MAVLink_Copter.cpp): `ArduCopter/GCS_MAVLink_Copter.cpp`
- [Storage mapping](https://github.com/skybrush-io/ardupilot/blob/master/libraries/StorageManager/StorageManager.cpp): `libraries/StorageManager/StorageManager.cpp`
- [HAL storage](https://github.com/skybrush-io/ardupilot/blob/master/libraries/AP_HAL_ChibiOS/Storage.cpp): `libraries/AP_HAL_ChibiOS/Storage.cpp`

### Peripheral firmware

- [AP_Periph](https://github.com/skybrush-io/ardupilot/blob/master/Tools/AP_Periph/AP_Periph.cpp): `Tools/AP_Periph/AP_Periph.cpp`
- [Bootloader](https://github.com/skybrush-io/ardupilot/blob/master/Tools/AP_Bootloader/AP_Bootloader.cpp): `Tools/AP_Bootloader/AP_Bootloader.cpp`

### Other components

- **Vehicle operator**

## Connections

- Vehicle operator → Copter: operates
- Vehicle operator → Plane: operates
- Vehicle operator → Rover: operates
- Vehicle operator → Submarine: operates
- Vehicle operator → Antenna tracker: operates
- Vehicle operator → Blimp: operates
