Quadrotor dynamics and control for cable-suspended payload systems
Project description
A Python mujoco based models and controllers for quadcopter cable-suspended payload systems.
Developed as part of the thesis: Dynamics and Control for Collaborative Aerial Manipulation (Kotaru, 2022). Original research code: vkotaru/floating_models. This package is the cleaned-up public release, refactored with Claude.
Features
| :helicopter: Quadrotor dynamics | Single and multi-vehicle SE(3) rigid-body simulation |
| :control_knobs: Geometric controllers | PD on SE(3), L1 adaptive on SO(3), force allocation |
| :chains: Cable-suspended payloads | Tendon and multi-link cable models with S2 pendulum dynamics |
| :people_holding_hands: Cooperative transport | N-quadrotor point-mass and rigid-body payload systems |
| :joystick: MuJoCo integration | Physics-backed simulation with GLFW rendering and GIF recording |
| :straight_ruler: Manifold library | SO(3), S2 exponential maps, geodesic stepping, config errors |
| :chart_with_upwards_trend: Trajectory generation | Polynomial, circular, Lissajous, and smooth reference trajectories |
| :desktop_computer: CLI interface | udaan run commands for quick demos and experiments |
Installation
pip install -e .
MuJoCo is included as a core dependency. VPython visualization is optional:
pip install -e ".[all]"
Quick Start
CLI
udaan run quadrotor -t 10 # quadrotor with geometric control
udaan run quad-payload -t 10 -m tendon # quadrotor + cable-suspended payload
udaan run multi-quad -n 3 -t 10 # multi-quadrotor cooperative payload
udaan run multi-quad-rigid -t 10 # multi-quadrotor rigid-body payload
udaan run fleet --demo l1-comparison -t 10 # L1 vs PD controller comparison
udaan run fleet --demo gain-sweep -t 10 # PD gain tuning comparison
udaan run quadrotor -t 5 -r out.gif # record to GIF
Python
import udaan as U
import numpy as np
mdl = U.models.mujoco.Quadrotor(render=True)
mdl.simulate(tf=10, position=np.array([1., 1., 0.]))
Documentation
:pushpin: Controller roadmap
| Controller | System | Status | Reference |
|---|---|---|---|
| Geometric PD (SE(3)) | Quadrotor | :white_check_mark: Implemented | Lee, Leok, McClamroch 2010 |
| Geometric L1 Adaptive (SO(3)) | Quadrotor | :white_check_mark: Implemented | Kotaru, Wu, Sreenath 2020 |
| Geometric PD (SE(3) x S2) | Quad + Payload | :white_check_mark: Implemented | Sreenath, Lee, Kumar 2013 |
| Propeller Force Allocation | Quadrotor | :white_check_mark: Implemented | — |
| Differential Flatness | Quad + Payload | :construction: Partial (flat2state utils) | Sreenath, Lee, Kumar 2013 |
| NLMPC (CasADi) | Quadrotor | :memo: Planned | — |
| VBLMPC | Quad + Payload | :memo: Planned | Kotaru, Sreenath 2020 |
| Geometric PD | Multi-Quad Payload | :memo: Planned | Lee 2014 |
| RL (Gymnasium) | All | :memo: Planned | — |
:package: Package API reference
Base Models (udaan.models.base)
Math-only dynamics, no simulator dependency.
| Model | State Space | Description |
|---|---|---|
Quadrotor |
SE(3) | Rigid body quadrotor, wrench/accel/prop-force inputs |
QuadrotorCSPayload |
SE(3) x S2 | Quadrotor + cable-suspended point-mass payload |
FloatingPointmass |
R3 | 3D point mass with gravity |
S2Pendulum |
S2 | Spherical pendulum on the 2-sphere |
PointmassSuspendedPayload |
R3 x S2 | Single point-mass agent with suspended payload |
MultiPointmassSuspendedPayload |
R3 x (S2)^n | Multiple point-mass agents, shared payload |
MuJoCo Models (udaan.models.mujoco)
MuJoCo-backed physics with GLFW visualization.
| Model | Description |
|---|---|
Quadrotor |
Single quadrotor |
QuadrotorCSPayload |
Quad + payload (tendon or links cable model) |
MultiQuadrotorCSPointmass |
N quadrotors, shared point-mass payload |
MultiQuadRigidbody |
N quadrotors, shared rigid-body payload |
QuadrotorFleet |
N independent quadrotors for controller comparison |
Manifold Library (udaan.manif)
| Class/Function | Description |
|---|---|
SO3 |
Rotation matrix with exponential map stepping |
S2 |
Unit sphere with geodesic stepping, config error |
hat / vee |
Skew-symmetric matrix operators |
rodrigues_expm |
Rodrigues rotation formula |
expm_taylor_expansion |
Matrix exponential Taylor approximation |
Utilities (udaan.utils)
| Module | Description |
|---|---|
trajectory |
Smooth, polynomial, circular, and Lissajous trajectory generators |
flat2state |
Differential flatness maps for quadrotor and payload systems |
assets |
MuJoCo XML model generator |
vfx |
VPython-based visualization (base models) |
License
BSD 3-Clause License. See LICENSE for details.
Project details
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 udaan-1.0.1.tar.gz.
File metadata
- Download URL: udaan-1.0.1.tar.gz
- Upload date:
- Size: 61.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89a5d2b4ce5946f282e45550210965636214d0972c05079b2a7e611cdcf4b353
|
|
| MD5 |
a208fdeb24df9a76fb7fec1bda92059e
|
|
| BLAKE2b-256 |
56f193182d488c9870d7fc6e3526589aee355f208d038ad648c1aea73eae837f
|
File details
Details for the file udaan-1.0.1-py3-none-any.whl.
File metadata
- Download URL: udaan-1.0.1-py3-none-any.whl
- Upload date:
- Size: 87.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7466b48545f1e46e1a84b6ddfc29494419f42eb1e74fc9679c52b45a8b648516
|
|
| MD5 |
a1e6808234021e2b4609437633c2f536
|
|
| BLAKE2b-256 |
4e24f2f4131fd900c07f4201682fca089ffd7eec0c8e696052dc1a37350593be
|