Koopman-based Linear MPC for Quadrotor Control
Project description
🚁 kq_lmpc_quadrotor: Koopman MPC for Quadrotors Derived From Analytically Derived Koopman Embeddings
A complete Python package for real-time Koopman-based Linear Model Predictive Control (LMPC) of quadrotors.
First hardware-deployed real-time Linear MPC for quadrotors derived using Koopman operator theory, no data required.
Fast QP ⚡ Comparable Performance like NMPC 🎯 Runs on embedded hardware 💻✅
✅ KQ-LMPC = Koopman Lift + Convex MPC + Real-Time Control
A unified Python framework:
- Koopman lifting without machine learning
- Convex linear MPC that runs in real time
- Provable stability + hardware deployability
🌟 Key Features
✅ Analytical Koopman lifting with generalizable observables
→ No neural networks, no training, no data fitting required
✅ Data-free Koopman-lifted LTI + LPV models
→ Derived directly from SE(3) quadrotor dynamics using Lie algebra structure
✅ Real-time Linear MPC (LMPC)
→ Solved as a single convex QP termed KQ-LMPC
→ < 10 ms solve time on Jetson NX / embedded hardware
✅ Trajectory tracking on SE(3)
→ Provable controllability in lifted Koopman space
✅ Closed-loop robustness guarantees
→ Input-to-state practical stability (I-ISpS)
✅ Hardware-ready integration
→ Works with PX4 Offboard Mode, ROS2, MAVSDK, MAVROS
✅ Drop-in MPC module
→ for both KQ-LMPC, NMPC with acados on Python.
🧠 Paper
This work is based on:
"Real-Time Linear MPC for Quadrotors on SE(3): An Analytical Koopman-based Realization"
IEEE Robotics and Automation Letters (RA-L), 2025
Santosh Rajkumar, Chengyu Yang, Yuliang Gu, Sheng Cheng, Naira Hovakimyan, Debdipta Goswami
[Paper PDF] • [ArXiv] • [Video Demos]
If you use this repository, please cite us 🙏
@article{rajkumar2025kqlmpc,
title={Real-Time Linear MPC for Quadrotors on SE(3): An Analytical Koopman-based Realization},
author={Rajkumar, Santosh and Yang, Chengyu and Gu, Yuliang and Cheng, Sheng and Hovakimyan, Naira and Goswami, Debdipta},
journal={IEEE Robotics and Automation Letters},
year={2025}
}
🔧 Installation
*Virtual environment recommended
Install from PyPI (recommended):
pip install kq-lmpc-quadrotor
Install from source
git clone https://github.com/santoshrajkumar/kq-lmpc-quadrotor.git
cd kq-lmpc-quadrotor
pip install -e .
⚡ Quick Demo
lqr_demo
kqlmpc_demo
⚙️ Note: This package uses the acados toolchain for fast MPC.
Please ensure that acados is installed and its Python interface is configured before running the demo/examples with MPC.
Installation guide: https://docs.acados.org/installation/index.html
Python interface: https://docs.acados.org/python_interface/index.html
OS requirement: Linux/Mac (Not tested on Windows).
Ensure that LD_LIBRARY_PATH is set correctly (DYLD_LIBRARY_PATHon MacOS).
Ensure that ACADOS_SOURCE_DIR is set correctly.
Project details
Release history Release notifications | RSS feed
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 kq_lmpc_quadrotor-1.0.7.tar.gz.
File metadata
- Download URL: kq_lmpc_quadrotor-1.0.7.tar.gz
- Upload date:
- Size: 33.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15670710ba95d534d5a03e127ffae18be7b1411ec2de97bb3e452195d3e7309f
|
|
| MD5 |
a91e1a872a2691ff487114c09bde6809
|
|
| BLAKE2b-256 |
48b4482b61db1dfc160b17f4d4cac0e519fe1105948c14bb98623df7ad85d1d4
|
File details
Details for the file kq_lmpc_quadrotor-1.0.7-py3-none-any.whl.
File metadata
- Download URL: kq_lmpc_quadrotor-1.0.7-py3-none-any.whl
- Upload date:
- Size: 35.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c802b7f9e50702484ffb65773ddab23699e4606a45c1abb9646e09b003a571bf
|
|
| MD5 |
96d9457492ca26589a074ca1f9887ac6
|
|
| BLAKE2b-256 |
b5fd464f554b121b4facb97195b48ec4294e874f53fae2b15334dec42cb3ebe2
|