Skip to main content

aerial-kit

Control stack for aerial robots. The core has no ROS or Matplotlib dependency; simulation and visualization are available as optional extras.

For firmware, hardware integration, and the full ROS 2 / simulation stack, visit the repo: github.com/RawFish69/aerial-kit.

What's in it

  • aerial_kit.types - SimState, ControlTarget, Capabilities, Wrench, CommandKind, Waypoint
  • aerial_kit.interfaces - Controller, DynamicsBackend, Planner ABCs
  • aerial_kit.registry - a pluggable component registry (register_airframe/register_controller/etc., create_* factories)
  • aerial_kit.airframes - Airframe ABC, MultirotorAirframe (mixer-driven quad/hex/ octo), TwinWingAirframe (elevon + differential-thrust allocation, trim)
  • aerial_kit.dynamics - 6-DOF multirotor dynamics, point-mass dynamics, and a hand-rolled 6-DOF fixed-wing model with a flat-plate-blended lift curve, drag polar, and moment derivatives
  • aerial_kit.controllers - PID/LQR/MPC position controllers, and FixedWingL1TECSController (L1 lateral guidance + TECS-lite longitudinal control + coordinated-turn attitude PID)
  • aerial_kit.guidance - l1_bank_command, tecs_command as standalone functions

Quick start

from aerial_kit.registry import register_builtin_components, create_airframe, create_controller

register_builtin_components()
airframe = create_airframe("quad")
controller = create_controller("pid")
print(airframe.capabilities)

register_builtin_components() here registers only what lives inside aerial_kit itself (airframes, controllers) - it has no ROS or matplotlib dependency and does not know about any host application's own dynamics backends or planners. A host application (like sim_py in the parent repo) registers its own backends/planners into the same registry alongside this.

Simulation and visualization

Install the optional simulator and Matplotlib viewer:

python -m pip install "aerial-kit[sim]"

Run the bundled default quadrotor scenario:

aerial-kit-sim
aerial-kit-sim --example fixed-wing
aerial-kit-sim --no-show --save result.png

Quadrotor teleop

Launch real-time keyboard teleoperation with one command:

aerial-kit-teleop
Key Action
W / S or Up / Down forward / backward
A / D or Left / Right strafe left / right
Space / Shift climb / descend
Q / E yaw left / right
X neutralize all commands
P pause / resume
C toggle follow / world camera
- / = zoom the follow camera out / in
H hide the on-screen help
Esc exit

Controls are body-relative, so yawing with Q/E changes where W takes you. Click the plot window first; the HUD shows NO FOCUS when keystrokes are not reaching it, and held keys are released whenever focus is lost.

The equivalent simulator command is aerial-kit-sim --teleop. Without installing the package, run python -m aerial_kit.sim.teleop from the repository root, or python examples/quadrotor/teleop.py from anywhere (which is also what an IDE Run button does). Teleop needs an interactive Matplotlib backend and fails with an explanatory message if the active backend can only write files.

The public Python API accepts a YAML path, a mapping, or a normalized config:

from aerial_kit.sim import load_config, run_simulation
from aerial_kit.visualization import plot_simulation

config = load_config("examples/quadrotor/config.yaml")
result = run_simulation(config)
print(f"goal error: {result.distance_to_goal:.2f} m")
plot_simulation(result)

Complete configurable examples are included in the repository:

  • examples/quadrotor: quad airframe, PID control, and native multirotor dynamics.
  • examples/fixed_wing: twin-motor flying wing, Dubins planning, native 6-DOF dynamics, and L1/TECS control.

The fixed-wing example starts at cruise airspeed to represent a hand launch. A fixed wing cannot be initialized at zero velocity like a hovering multirotor.

Status

Early and actively developed. Be clear-eyed about what's actually verified:

  • Multirotor (quad/hex/octo airframes, PID/LQR/MPC): verified, working. This is the path flying on real hardware in the parent project.
  • Twin-motor wing (TwinWingAirframe, FixedWingL1TECSController, L1/TECS guidance): under development, simulation-only. Not flown on any hardware. Its 6-DOF aero model uses plausible placeholder coefficients, not a fitted model of any specific real airframe, and its guidance gains are validated only in the specific simulated scenarios its own test suite covers - treat it as a research/simulation component, not something to fly as-is.

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aerial_kit-0.2.0.tar.gz (88.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aerial_kit-0.2.0-py3-none-any.whl (105.1 kB view details)

Uploaded Python 3

File details

Details for the file aerial_kit-0.2.0.tar.gz.

File metadata

  • Download URL: aerial_kit-0.2.0.tar.gz
  • Upload date:
  • Size: 88.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aerial_kit-0.2.0.tar.gz
Algorithm Hash digest
SHA256 7ec5320554902ca8286091848456000b1f054eee9c8fde59e2a642c2ae864c9b
MD5 d0dcb169c5263ec72d4252630d31a43c
BLAKE2b-256 5e6a9d02a4fe14ca15f13512b318db4d706c0d9475547d9ca89173efe5a6ff7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for aerial_kit-0.2.0.tar.gz:

Publisher: publish-aerial-kit.yml on RawFish69/aerial-kit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aerial_kit-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: aerial_kit-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 105.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aerial_kit-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d23aa85688bc76fd9f64a783ff20b5a28b9a2a4d0ee9fa3850abff7c397850f8
MD5 82b47b2a3524b61720574e1f383e9cf0
BLAKE2b-256 c16fa2fb5dde96dea8d5e5b82322cca46aa89a760bed635912cf806aae010d49

See more details on using hashes here.

Provenance

The following attestation bundles were made for aerial_kit-0.2.0-py3-none-any.whl:

Publisher: publish-aerial-kit.yml on RawFish69/aerial-kit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.2.1

2 files

This release

0.2.0 This release

2 files

0.1.4

2 files

0.1.3

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page