Skip to main content

udaan — aerial robotics framework

A Python MuJoCo-based models and controllers for quadcopter cable-suspended payload systems.

CI License Python 3.10+ MuJoCo


Quadrotor Quad + Payload (tendon) Quad + Payload (links)

Multi-Quad Pointmass Multi-Quad Rigidbody Fleet L1 Comparison


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.

🚁 Quadrotor dynamics  •  🎛 Geometric control on SE(3)/SO(3)  •  ⛓ Cable-suspended payloads  •  🤝 Multi-quad cooperative transport  •  🕹 MuJoCo simulation  •  🖥 CLI interface

Installation

pip install udaan

MuJoCo is included as a core dependency. Install all extras (dev, docs, RL):

pip install udaan[all]

For development:

git clone https://github.com/vkotaru/udaan.git
cd udaan
pip install -e ".[all]"

Quick Start

CLI

# Quadrotor with geometric SE(3) control
udaan run quadrotor                                    # MuJoCo (default)
udaan run quadrotor -m base                            # pure dynamics (no viz)
udaan run quadrotor -m vfx                             # VPython visualization

# Trajectory tracking
udaan run quadrotor --traj hover -p 1,1,0              # hover (default)
udaan run quadrotor --traj spiral -p 0,0,2             # helical spiral
udaan run quadrotor --traj lissajous -p 0,0,2          # 3D Lissajous
udaan run quadrotor --traj circle -p 0,0,1             # circular

# Cable-suspended payload
udaan run quad-payload -t 10 -c tendon                 # spatial tendon cable
udaan run quad-payload -t 10 -c links                  # rigid link chain
udaan run quad-payload -t 10 -c cable                  # composite cable (experimental)
udaan run quad-payload -t 10 -m vfx                   # vpython backend

# Multi-quadrotor cooperative transport
udaan run multi-quad -n 3 -t 10                        # N-quad pointmass payload
udaan run multi-quad-rigid -t 10                       # rigid-body payload

# Fleet: compare controllers side-by-side
udaan run fleet --demo l1-comparison                   # L1 adaptive vs PD
udaan run fleet --demo gain-sweep                      # PD gain comparison
udaan run fleet -n 4 --trail                           # 4 quads with trails

# Cable-payload fleet: compare payload controllers / gains side-by-side
udaan run cspayload-fleet --demo same-gains            # 2 agents, default gains
udaan run cspayload-fleet --demo gain-sweep            # cable kp/kd × [0.5, 1, 1.5, 2]
udaan run cspayload-fleet --demo gain-sweep --same-start  # overlap start, gain-driven divergence
udaan run cspayload-fleet -n 4                         # 4 agents, default gains

# Recording
udaan run quadrotor -t 5 -r out.gif                    # save to GIF
udaan run quadrotor --traj spiral -r spiral.mp4        # save to MP4

Python

from udaan.models.quadrotor import QuadrotorBase, QuadrotorMujoco

# Pure dynamics (no rendering)
mdl = QuadrotorBase()
mdl.simulate(tf=10, position=[1., 1., 0.])

# MuJoCo with visualization
mdl = QuadrotorMujoco(render=True)
mdl.simulate(tf=10, position=[1., 1., 0.])

Documentation

Full API reference, controller roadmap, and tutorials coming soon at udaan.readthedocs.io.

License

BSD 3-Clause License. See LICENSE for details.

Release files for udaan 1.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for udaan 1.3.0
File Size Uploaded
udaan-1.3.0.tar.gz 77.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for udaan 1.3.0
File Interpreter ABI Platform
udaan-1.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 184.9 kB

Release files / udaan-1.3.0.tar.gz

Download URL udaan-1.3.0.tar.gz
Size 77.6 kB
Tags Source
SHA-256 checksum
How to use checksums
b44eb822021a7b8c457ab9099da19e601d6d2b7d7d2815a528ccf888e3479cfa
BLAKE2b-256 checksum
How to use checksums
826af238c9e59d1003988c7a1d174c2580f7e8af6d85bade2f81369acd4be909
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 23, 2026.

Transparency log

Release files / udaan-1.3.0-py3-none-any.whl

Download URL udaan-1.3.0-py3-none-any.whl
Size 107.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2014ee5830ca4cca91c91d7ac293ed6c4bb0261d09d65408c65b8d82ef628a69
BLAKE2b-256 checksum
How to use checksums
7cc469aa468f6bcdcd01190b27e92714a8063ff94c6c8fe30d92d76033f286d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 23, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.3.0 This release

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 release 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