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,Waypointaerial_kit.interfaces-Controller,DynamicsBackend,PlannerABCsaerial_kit.registry- a pluggable component registry (register_airframe/register_controller/etc.,create_*factories)aerial_kit.airframes-AirframeABC,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 derivativesaerial_kit.controllers- PID/LQR/MPC position controllers, andFixedWingL1TECSController(L1 lateral guidance + TECS-lite longitudinal control + coordinated-turn attitude PID)aerial_kit.guidance-l1_bank_command,tecs_commandas 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ec5320554902ca8286091848456000b1f054eee9c8fde59e2a642c2ae864c9b
|
|
| MD5 |
d0dcb169c5263ec72d4252630d31a43c
|
|
| BLAKE2b-256 |
5e6a9d02a4fe14ca15f13512b318db4d706c0d9475547d9ca89173efe5a6ff7e
|
Provenance
The following attestation bundles were made for aerial_kit-0.2.0.tar.gz:
Publisher:
publish-aerial-kit.yml on RawFish69/aerial-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aerial_kit-0.2.0.tar.gz -
Subject digest:
7ec5320554902ca8286091848456000b1f054eee9c8fde59e2a642c2ae864c9b - Sigstore transparency entry: 2659636343
- Sigstore integration time:
-
Permalink:
RawFish69/aerial-kit@572d73b8e2220d35aa942f075d1eaf4c8731b4b5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/RawFish69
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-aerial-kit.yml@572d73b8e2220d35aa942f075d1eaf4c8731b4b5 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d23aa85688bc76fd9f64a783ff20b5a28b9a2a4d0ee9fa3850abff7c397850f8
|
|
| MD5 |
82b47b2a3524b61720574e1f383e9cf0
|
|
| BLAKE2b-256 |
c16fa2fb5dde96dea8d5e5b82322cca46aa89a760bed635912cf806aae010d49
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aerial_kit-0.2.0-py3-none-any.whl -
Subject digest:
d23aa85688bc76fd9f64a783ff20b5a28b9a2a4d0ee9fa3850abff7c397850f8 - Sigstore transparency entry: 2659636429
- Sigstore integration time:
-
Permalink:
RawFish69/aerial-kit@572d73b8e2220d35aa942f075d1eaf4c8731b4b5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/RawFish69
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-aerial-kit.yml@572d73b8e2220d35aa942f075d1eaf4c8731b4b5 -
Trigger Event:
push
-
Statement type: