udaan 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. udaan-1.0.1/.gitignore +149 -0
  2. udaan-1.0.1/LICENSE +28 -0
  3. udaan-1.0.1/PKG-INFO +219 -0
  4. udaan-1.0.1/README.md +153 -0
  5. udaan-1.0.1/pyproject.toml +226 -0
  6. udaan-1.0.1/tests/__init__.py +0 -0
  7. udaan-1.0.1/tests/test_base_models.py +160 -0
  8. udaan-1.0.1/tests/test_control.py +90 -0
  9. udaan-1.0.1/tests/test_flat2state.py +69 -0
  10. udaan-1.0.1/tests/test_manif.py +156 -0
  11. udaan-1.0.1/tests/test_quadrotor.py +98 -0
  12. udaan-1.0.1/tests/test_trajectory.py +165 -0
  13. udaan-1.0.1/udaan/__init__.py +33 -0
  14. udaan-1.0.1/udaan/__main__.py +5 -0
  15. udaan-1.0.1/udaan/cli/__init__.py +41 -0
  16. udaan-1.0.1/udaan/cli/demos.py +79 -0
  17. udaan-1.0.1/udaan/cli/generate.py +32 -0
  18. udaan-1.0.1/udaan/cli/run.py +199 -0
  19. udaan-1.0.1/udaan/control/__init__.py +66 -0
  20. udaan-1.0.1/udaan/control/quadrotor/__init__.py +15 -0
  21. udaan-1.0.1/udaan/control/quadrotor/geometric_attitude.py +80 -0
  22. udaan-1.0.1/udaan/control/quadrotor/geometric_l1_attitude.py +185 -0
  23. udaan-1.0.1/udaan/control/quadrotor/position_l1.py +107 -0
  24. udaan-1.0.1/udaan/control/quadrotor/position_pd.py +32 -0
  25. udaan-1.0.1/udaan/control/quadrotor/propeller_allocation.py +54 -0
  26. udaan-1.0.1/udaan/control/quadrotor_cspayload/__init__.py +7 -0
  27. udaan-1.0.1/udaan/control/quadrotor_cspayload/payload_controller.py +62 -0
  28. udaan-1.0.1/udaan/core/__init__.py +37 -0
  29. udaan-1.0.1/udaan/core/exceptions.py +75 -0
  30. udaan-1.0.1/udaan/core/types.py +73 -0
  31. udaan-1.0.1/udaan/manif/S2.py +40 -0
  32. udaan-1.0.1/udaan/manif/SO3.py +77 -0
  33. udaan-1.0.1/udaan/manif/__init__.py +16 -0
  34. udaan-1.0.1/udaan/manif/utils.py +33 -0
  35. udaan-1.0.1/udaan/models/__init__.py +24 -0
  36. udaan-1.0.1/udaan/models/assets/mjcf/multi_quad_pointmass.xml +68 -0
  37. udaan-1.0.1/udaan/models/assets/mjcf/multi_quad_rigidbody.xml +125 -0
  38. udaan-1.0.1/udaan/models/assets/mjcf/quad_cable_mj.xml +127 -0
  39. udaan-1.0.1/udaan/models/assets/mjcf/quad_flxcbl_mj.xml +265 -0
  40. udaan-1.0.1/udaan/models/assets/mjcf/quad_payload_mj.xml +67 -0
  41. udaan-1.0.1/udaan/models/assets/mjcf/quadrotor.xml +31 -0
  42. udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_comparison.xml +60 -0
  43. udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_l1_comparison.xml +62 -0
  44. udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_mj.xml +52 -0
  45. udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_payload.xml +44 -0
  46. udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_quat.xml +43 -0
  47. udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_x.xml +62 -0
  48. udaan-1.0.1/udaan/models/assets/mjcf/scene.xml +25 -0
  49. udaan-1.0.1/udaan/models/assets/mjcf/two_quad_linearpayload.xml +78 -0
  50. udaan-1.0.1/udaan/models/assets/mjcf/two_quad_masslesslink_payload.xml +76 -0
  51. udaan-1.0.1/udaan/models/base/__init__.py +72 -0
  52. udaan-1.0.1/udaan/models/base/floating_pointmass.py +55 -0
  53. udaan-1.0.1/udaan/models/base/multi_pointmass_suspended_payload.py +123 -0
  54. udaan-1.0.1/udaan/models/base/pointmass_suspended_payload.py +123 -0
  55. udaan-1.0.1/udaan/models/base/quadrotor.py +364 -0
  56. udaan-1.0.1/udaan/models/base/quadrotor_cspayload.py +290 -0
  57. udaan-1.0.1/udaan/models/base/s2_pendulum.py +70 -0
  58. udaan-1.0.1/udaan/models/bullet/__init__.py +1 -0
  59. udaan-1.0.1/udaan/models/mujoco/__init__.py +331 -0
  60. udaan-1.0.1/udaan/models/mujoco/multi_quad_cs_pointmass.py +236 -0
  61. udaan-1.0.1/udaan/models/mujoco/multi_quad_rigidbody.py +230 -0
  62. udaan-1.0.1/udaan/models/mujoco/quadrotor.py +136 -0
  63. udaan-1.0.1/udaan/models/mujoco/quadrotor_comparison.py +149 -0
  64. udaan-1.0.1/udaan/models/mujoco/quadrotor_cspayload.py +344 -0
  65. udaan-1.0.1/udaan/models/mujoco/quadrotor_fleet.py +242 -0
  66. udaan-1.0.1/udaan/py.typed +2 -0
  67. udaan-1.0.1/udaan/utils/__init__.py +32 -0
  68. udaan-1.0.1/udaan/utils/assets/__init__.py +11 -0
  69. udaan-1.0.1/udaan/utils/assets/mujoco_asset_creator.py +651 -0
  70. udaan-1.0.1/udaan/utils/assets/xml_model_generator.py +92 -0
  71. udaan-1.0.1/udaan/utils/flat2state.py +251 -0
  72. udaan-1.0.1/udaan/utils/geometry.py +12 -0
  73. udaan-1.0.1/udaan/utils/logging.py +113 -0
  74. udaan-1.0.1/udaan/utils/printout.py +89 -0
  75. udaan-1.0.1/udaan/utils/trajectory/__init__.py +33 -0
  76. udaan-1.0.1/udaan/utils/trajectory/trajectory.py +307 -0
  77. udaan-1.0.1/udaan/utils/vfx/__init__.py +141 -0
  78. udaan-1.0.1/udaan/utils/vfx/quadrotor_cspayload_vfx.py +34 -0
  79. udaan-1.0.1/udaan/utils/vfx/quadrotor_vfx.py +95 -0
udaan-1.0.1/.gitignore ADDED
@@ -0,0 +1,149 @@
1
+ MUJOCO_LOG.TXT
2
+
3
+ # Runtime-generated MJCF files
4
+ udaan/models/assets/mjcf/multi_quad_pointmass_*q.xml
5
+ udaan/models/assets/mjcf/fleet_*.xml
6
+
7
+ # Folders
8
+ .vscode/
9
+ .idea/
10
+
11
+ .DS_Store
12
+
13
+ # Byte-compiled / optimized / DLL files
14
+ __pycache__/
15
+ *.py[cod]
16
+ *$py.class
17
+
18
+ # C extensions
19
+ *.so
20
+
21
+ # Distribution / packaging
22
+ .Python
23
+ build/
24
+ develop-eggs/
25
+ dist/
26
+ downloads/
27
+ eggs/
28
+ .eggs/
29
+ lib/
30
+ lib64/
31
+ parts/
32
+ sdist/
33
+ var/
34
+ wheels/
35
+ pip-wheel-metadata/
36
+ share/python-wheels/
37
+ *.egg-info/
38
+ .installed.cfg
39
+ *.egg
40
+ MANIFEST
41
+
42
+ # PyInstaller
43
+ # Usually these files are written by a python script from a template
44
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
45
+ *.manifest
46
+ *.spec
47
+
48
+ # Installer logs
49
+ pip-log.txt
50
+ pip-delete-this-directory.txt
51
+
52
+ # Unit test / coverage reports
53
+ htmlcov/
54
+ .tox/
55
+ .nox/
56
+ .coverage
57
+ .coverage.*
58
+ .cache
59
+ nosetests.xml
60
+ coverage.xml
61
+ *.cover
62
+ *.py,cover
63
+ .hypothesis/
64
+ .pytest_cache/
65
+
66
+ # Translations
67
+ *.mo
68
+ *.pot
69
+
70
+ # Django stuff:
71
+ *.log
72
+ local_settings.py
73
+ db.sqlite3
74
+ db.sqlite3-journal
75
+
76
+ # Flask stuff:
77
+ instance/
78
+ .webassets-cache
79
+
80
+ # Scrapy stuff:
81
+ .scrapy
82
+
83
+ # Sphinx documentation
84
+ docs/_build/
85
+
86
+ # PyBuilder
87
+ target/
88
+
89
+ # Jupyter Notebook
90
+ .ipynb_checkpoints
91
+
92
+ # IPython
93
+ profile_default/
94
+ ipython_config.py
95
+
96
+ # pyenv
97
+ .python-version
98
+
99
+ # pipenv
100
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
101
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
102
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
103
+ # install all needed dependencies.
104
+ #Pipfile.lock
105
+
106
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
107
+ __pypackages__/
108
+
109
+ # Celery stuff
110
+ celerybeat-schedule
111
+ celerybeat.pid
112
+
113
+ # SageMath parsed files
114
+ *.sage.py
115
+
116
+ # Environments
117
+ .env
118
+ .venv
119
+ env/
120
+ venv/
121
+ ENV/
122
+ env.bak/
123
+ venv.bak/
124
+
125
+ # Spyder project settings
126
+ .spyderproject
127
+ .spyproject
128
+
129
+ # Rope project settings
130
+ .ropeproject
131
+
132
+ # mkdocs documentation
133
+ /site
134
+
135
+ # mypy
136
+ .mypy_cache/
137
+ .dmypy.json
138
+ dmypy.json
139
+
140
+ # Pyre type checker
141
+ .pyre/
142
+
143
+ # Ruff cache
144
+ .ruff_cache/
145
+
146
+ # Planning docs (local only)
147
+ GYMNASIUM_PLAN.md
148
+ LANDSCAPE.md
149
+ refactor.md
udaan-1.0.1/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2023, Prasanth Kotaru
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
udaan-1.0.1/PKG-INFO ADDED
@@ -0,0 +1,219 @@
1
+ Metadata-Version: 2.4
2
+ Name: udaan
3
+ Version: 1.0.1
4
+ Summary: Quadrotor dynamics and control for cable-suspended payload systems
5
+ Project-URL: Homepage, https://github.com/vkotaru/udaan
6
+ Project-URL: Documentation, https://udaan.readthedocs.io
7
+ Project-URL: Repository, https://github.com/vkotaru/udaan
8
+ Project-URL: Issues, https://github.com/vkotaru/udaan/issues
9
+ Author: Prasanth Kotaru
10
+ License-Expression: BSD-3-Clause
11
+ License-File: LICENSE
12
+ Keywords: SE3,SO3,cable-suspended-payload,control,geometric-control,mujoco,quadrotor,robotics,simulation
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: BSD License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
+ Classifier: Topic :: Scientific/Engineering :: Physics
22
+ Classifier: Typing :: Typed
23
+ Requires-Python: >=3.10
24
+ Requires-Dist: matplotlib>=3.7
25
+ Requires-Dist: mujoco>=3.0
26
+ Requires-Dist: numpy>=1.24
27
+ Requires-Dist: scipy>=1.10
28
+ Requires-Dist: typer>=0.9
29
+ Provides-Extra: all
30
+ Requires-Dist: control>=0.9; extra == 'all'
31
+ Requires-Dist: gymnasium>=0.29; extra == 'all'
32
+ Requires-Dist: hypothesis>=6.82; extra == 'all'
33
+ Requires-Dist: mujoco>=3.0; extra == 'all'
34
+ Requires-Dist: mypy>=1.5; extra == 'all'
35
+ Requires-Dist: myst-parser>=2.0; extra == 'all'
36
+ Requires-Dist: pre-commit>=3.4; extra == 'all'
37
+ Requires-Dist: pytest-benchmark>=4.0; extra == 'all'
38
+ Requires-Dist: pytest-cov>=4.1; extra == 'all'
39
+ Requires-Dist: pytest>=7.4; extra == 'all'
40
+ Requires-Dist: ruff>=0.1; extra == 'all'
41
+ Requires-Dist: sphinx-autodoc-typehints>=1.24; extra == 'all'
42
+ Requires-Dist: sphinx-rtd-theme>=1.3; extra == 'all'
43
+ Requires-Dist: sphinx>=7.2; extra == 'all'
44
+ Requires-Dist: stable-baselines3>=2.0; extra == 'all'
45
+ Provides-Extra: dev
46
+ Requires-Dist: hypothesis>=6.82; extra == 'dev'
47
+ Requires-Dist: mypy>=1.5; extra == 'dev'
48
+ Requires-Dist: pre-commit>=3.4; extra == 'dev'
49
+ Requires-Dist: pytest-benchmark>=4.0; extra == 'dev'
50
+ Requires-Dist: pytest-cov>=4.1; extra == 'dev'
51
+ Requires-Dist: pytest>=7.4; extra == 'dev'
52
+ Requires-Dist: ruff>=0.1; extra == 'dev'
53
+ Provides-Extra: docs
54
+ Requires-Dist: myst-parser>=2.0; extra == 'docs'
55
+ Requires-Dist: sphinx-autodoc-typehints>=1.24; extra == 'docs'
56
+ Requires-Dist: sphinx-rtd-theme>=1.3; extra == 'docs'
57
+ Requires-Dist: sphinx>=7.2; extra == 'docs'
58
+ Provides-Extra: l1
59
+ Requires-Dist: control>=0.9; extra == 'l1'
60
+ Provides-Extra: mujoco
61
+ Requires-Dist: mujoco>=3.0; extra == 'mujoco'
62
+ Provides-Extra: rl
63
+ Requires-Dist: gymnasium>=0.29; extra == 'rl'
64
+ Requires-Dist: stable-baselines3>=2.0; extra == 'rl'
65
+ Description-Content-Type: text/markdown
66
+
67
+ <p align="center">
68
+ <img src=".media/logo.png" width="240" alt="udaan — aerial robotics framework"/>
69
+ </p>
70
+
71
+ <p align="center">
72
+ <strong> A Python mujoco based models and controllers for quadcopter cable-suspended payload systems.</strong>
73
+ </p>
74
+
75
+ <p align="center">
76
+ <a href="https://github.com/vkotaru/udaan/actions"><img src="https://img.shields.io/github/actions/workflow/status/vkotaru/udaan/ci.yml?branch=main&style=flat-square&logo=githubactions&logoColor=white&label=CI" alt="CI"></a>
77
+ <a href="https://github.com/vkotaru/udaan/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-BSD--3--Clause-blue?style=flat-square" alt="License"></a>
78
+ <a href="https://pypi.org/project/udaan/"><img src="https://img.shields.io/badge/python-3.10%2B-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python 3.10+"></a>
79
+ <a href="https://mujoco.org"><img src="https://img.shields.io/badge/MuJoCo-3.0%2B-76B900?style=flat-square&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiByeD0iMyIgZmlsbD0iIzc2QjkwMCIvPjx0ZXh0IHg9IjgiIHk9IjEyIiBmb250LXNpemU9IjEwIiBmaWxsPSJ3aGl0ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSJib2xkIj5NPC90ZXh0Pjwvc3ZnPg==&logoColor=white" alt="MuJoCo"></a>
80
+ </p>
81
+
82
+ ---
83
+
84
+ <p align="center">
85
+ <img src=".media/quadrotor.gif" width="250" alt="Quadrotor"/>
86
+ <img src=".media/quad_payload_tendon.gif" width="250" alt="Quad + Payload (tendon)"/>
87
+ <img src=".media/quad_payload_links.gif" width="250" alt="Quad + Payload (links)"/>
88
+ </p>
89
+ <p align="center">
90
+ <img src=".media/multi_quad_pointmass.gif" width="250" alt="Multi-Quad Pointmass"/>
91
+ <img src=".media/multi_quad_rigid.gif" width="250" alt="Multi-Quad Rigidbody"/>
92
+ <img src=".media/fleet_l1.gif" width="250" alt="Fleet L1 Comparison"/>
93
+ </p>
94
+
95
+ ---
96
+
97
+ > Developed as part of the thesis: _Dynamics and Control for Collaborative Aerial Manipulation_ ([Kotaru, 2022](https://github.com/vkotaru)).
98
+ > Original research code: [vkotaru/floating_models](https://github.com/vkotaru/floating_models). This package is the cleaned-up public release, refactored with [Claude](https://claude.ai).
99
+
100
+ ## Features
101
+
102
+ | | |
103
+ | ---------------------------------------------------- | ------------------------------------------------------------------ |
104
+ | :helicopter: **Quadrotor dynamics** | Single and multi-vehicle SE(3) rigid-body simulation |
105
+ | :control_knobs: **Geometric controllers** | PD on SE(3), L1 adaptive on SO(3), force allocation |
106
+ | :chains: **Cable-suspended payloads** | Tendon and multi-link cable models with S2 pendulum dynamics |
107
+ | :people_holding_hands: **Cooperative transport** | N-quadrotor point-mass and rigid-body payload systems |
108
+ | :joystick: **MuJoCo integration** | Physics-backed simulation with GLFW rendering and GIF recording |
109
+ | :straight_ruler: **Manifold library** | SO(3), S2 exponential maps, geodesic stepping, config errors |
110
+ | :chart_with_upwards_trend: **Trajectory generation** | Polynomial, circular, Lissajous, and smooth reference trajectories |
111
+ | :desktop_computer: **CLI interface** | `udaan run` commands for quick demos and experiments |
112
+
113
+ ## Installation
114
+
115
+ ```bash
116
+ pip install -e .
117
+ ```
118
+
119
+ MuJoCo is included as a core dependency. VPython visualization is optional:
120
+
121
+ ```bash
122
+ pip install -e ".[all]"
123
+ ```
124
+
125
+ ## Quick Start
126
+
127
+ ### CLI
128
+
129
+ ```bash
130
+ udaan run quadrotor -t 10 # quadrotor with geometric control
131
+ udaan run quad-payload -t 10 -m tendon # quadrotor + cable-suspended payload
132
+ udaan run multi-quad -n 3 -t 10 # multi-quadrotor cooperative payload
133
+ udaan run multi-quad-rigid -t 10 # multi-quadrotor rigid-body payload
134
+ udaan run fleet --demo l1-comparison -t 10 # L1 vs PD controller comparison
135
+ udaan run fleet --demo gain-sweep -t 10 # PD gain tuning comparison
136
+ udaan run quadrotor -t 5 -r out.gif # record to GIF
137
+ ```
138
+
139
+ ### Python
140
+
141
+ ```python
142
+ import udaan as U
143
+ import numpy as np
144
+
145
+ mdl = U.models.mujoco.Quadrotor(render=True)
146
+ mdl.simulate(tf=10, position=np.array([1., 1., 0.]))
147
+ ```
148
+
149
+ ## Documentation
150
+
151
+ <details>
152
+ <summary><strong>:pushpin: Controller roadmap</strong></summary>
153
+
154
+ | Controller | System | Status | Reference |
155
+ | ----------------------------- | ------------------ | ----------------------------------------- | ---------------------------------------------------------------------------------- |
156
+ | Geometric PD (SE(3)) | Quadrotor | :white_check_mark: Implemented | [Lee, Leok, McClamroch 2010](https://ieeexplore.ieee.org/document/5717652) |
157
+ | Geometric L1 Adaptive (SO(3)) | Quadrotor | :white_check_mark: Implemented | [Kotaru, Wu, Sreenath 2020](https://doi.org/10.1115/1.4045558) |
158
+ | Geometric PD (SE(3) x S2) | Quad + Payload | :white_check_mark: Implemented | [Sreenath, Lee, Kumar 2013](https://ieeexplore.ieee.org/abstract/document/6760219) |
159
+ | Propeller Force Allocation | Quadrotor | :white_check_mark: Implemented | — |
160
+ | Differential Flatness | Quad + Payload | :construction: Partial (flat2state utils) | [Sreenath, Lee, Kumar 2013](https://ieeexplore.ieee.org/abstract/document/6760219) |
161
+ | NLMPC (CasADi) | Quadrotor | :memo: Planned | — |
162
+ | VBLMPC | Quad + Payload | :memo: Planned | [Kotaru, Sreenath 2020](https://hybrid-robotics.berkeley.edu/publications/) |
163
+ | Geometric PD | Multi-Quad Payload | :memo: Planned | [Lee 2014](https://ieeexplore.ieee.org/document/6907452) |
164
+ | RL (Gymnasium) | All | :memo: Planned | — |
165
+
166
+ </details>
167
+
168
+ <details>
169
+ <summary><strong>:package: Package API reference</strong></summary>
170
+
171
+ ### Base Models (`udaan.models.base`)
172
+
173
+ Math-only dynamics, no simulator dependency.
174
+
175
+ | Model | State Space | Description |
176
+ | -------------------------------- | ----------- | ---------------------------------------------------- |
177
+ | `Quadrotor` | SE(3) | Rigid body quadrotor, wrench/accel/prop-force inputs |
178
+ | `QuadrotorCSPayload` | SE(3) x S2 | Quadrotor + cable-suspended point-mass payload |
179
+ | `FloatingPointmass` | R3 | 3D point mass with gravity |
180
+ | `S2Pendulum` | S2 | Spherical pendulum on the 2-sphere |
181
+ | `PointmassSuspendedPayload` | R3 x S2 | Single point-mass agent with suspended payload |
182
+ | `MultiPointmassSuspendedPayload` | R3 x (S2)^n | Multiple point-mass agents, shared payload |
183
+
184
+ ### MuJoCo Models (`udaan.models.mujoco`)
185
+
186
+ MuJoCo-backed physics with GLFW visualization.
187
+
188
+ | Model | Description |
189
+ | --------------------------- | -------------------------------------------------- |
190
+ | `Quadrotor` | Single quadrotor |
191
+ | `QuadrotorCSPayload` | Quad + payload (tendon or links cable model) |
192
+ | `MultiQuadrotorCSPointmass` | N quadrotors, shared point-mass payload |
193
+ | `MultiQuadRigidbody` | N quadrotors, shared rigid-body payload |
194
+ | `QuadrotorFleet` | N independent quadrotors for controller comparison |
195
+
196
+ ### Manifold Library (`udaan.manif`)
197
+
198
+ | Class/Function | Description |
199
+ | ----------------------- | ------------------------------------------------ |
200
+ | `SO3` | Rotation matrix with exponential map stepping |
201
+ | `S2` | Unit sphere with geodesic stepping, config error |
202
+ | `hat` / `vee` | Skew-symmetric matrix operators |
203
+ | `rodrigues_expm` | Rodrigues rotation formula |
204
+ | `expm_taylor_expansion` | Matrix exponential Taylor approximation |
205
+
206
+ ### Utilities (`udaan.utils`)
207
+
208
+ | Module | Description |
209
+ | ------------ | ----------------------------------------------------------------- |
210
+ | `trajectory` | Smooth, polynomial, circular, and Lissajous trajectory generators |
211
+ | `flat2state` | Differential flatness maps for quadrotor and payload systems |
212
+ | `assets` | MuJoCo XML model generator |
213
+ | `vfx` | VPython-based visualization (base models) |
214
+
215
+ </details>
216
+
217
+ ## License
218
+
219
+ BSD 3-Clause License. See [LICENSE](LICENSE) for details.
udaan-1.0.1/README.md ADDED
@@ -0,0 +1,153 @@
1
+ <p align="center">
2
+ <img src=".media/logo.png" width="240" alt="udaan — aerial robotics framework"/>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <strong> A Python mujoco based models and controllers for quadcopter cable-suspended payload systems.</strong>
7
+ </p>
8
+
9
+ <p align="center">
10
+ <a href="https://github.com/vkotaru/udaan/actions"><img src="https://img.shields.io/github/actions/workflow/status/vkotaru/udaan/ci.yml?branch=main&style=flat-square&logo=githubactions&logoColor=white&label=CI" alt="CI"></a>
11
+ <a href="https://github.com/vkotaru/udaan/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-BSD--3--Clause-blue?style=flat-square" alt="License"></a>
12
+ <a href="https://pypi.org/project/udaan/"><img src="https://img.shields.io/badge/python-3.10%2B-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python 3.10+"></a>
13
+ <a href="https://mujoco.org"><img src="https://img.shields.io/badge/MuJoCo-3.0%2B-76B900?style=flat-square&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiByeD0iMyIgZmlsbD0iIzc2QjkwMCIvPjx0ZXh0IHg9IjgiIHk9IjEyIiBmb250LXNpemU9IjEwIiBmaWxsPSJ3aGl0ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSJib2xkIj5NPC90ZXh0Pjwvc3ZnPg==&logoColor=white" alt="MuJoCo"></a>
14
+ </p>
15
+
16
+ ---
17
+
18
+ <p align="center">
19
+ <img src=".media/quadrotor.gif" width="250" alt="Quadrotor"/>
20
+ <img src=".media/quad_payload_tendon.gif" width="250" alt="Quad + Payload (tendon)"/>
21
+ <img src=".media/quad_payload_links.gif" width="250" alt="Quad + Payload (links)"/>
22
+ </p>
23
+ <p align="center">
24
+ <img src=".media/multi_quad_pointmass.gif" width="250" alt="Multi-Quad Pointmass"/>
25
+ <img src=".media/multi_quad_rigid.gif" width="250" alt="Multi-Quad Rigidbody"/>
26
+ <img src=".media/fleet_l1.gif" width="250" alt="Fleet L1 Comparison"/>
27
+ </p>
28
+
29
+ ---
30
+
31
+ > Developed as part of the thesis: _Dynamics and Control for Collaborative Aerial Manipulation_ ([Kotaru, 2022](https://github.com/vkotaru)).
32
+ > Original research code: [vkotaru/floating_models](https://github.com/vkotaru/floating_models). This package is the cleaned-up public release, refactored with [Claude](https://claude.ai).
33
+
34
+ ## Features
35
+
36
+ | | |
37
+ | ---------------------------------------------------- | ------------------------------------------------------------------ |
38
+ | :helicopter: **Quadrotor dynamics** | Single and multi-vehicle SE(3) rigid-body simulation |
39
+ | :control_knobs: **Geometric controllers** | PD on SE(3), L1 adaptive on SO(3), force allocation |
40
+ | :chains: **Cable-suspended payloads** | Tendon and multi-link cable models with S2 pendulum dynamics |
41
+ | :people_holding_hands: **Cooperative transport** | N-quadrotor point-mass and rigid-body payload systems |
42
+ | :joystick: **MuJoCo integration** | Physics-backed simulation with GLFW rendering and GIF recording |
43
+ | :straight_ruler: **Manifold library** | SO(3), S2 exponential maps, geodesic stepping, config errors |
44
+ | :chart_with_upwards_trend: **Trajectory generation** | Polynomial, circular, Lissajous, and smooth reference trajectories |
45
+ | :desktop_computer: **CLI interface** | `udaan run` commands for quick demos and experiments |
46
+
47
+ ## Installation
48
+
49
+ ```bash
50
+ pip install -e .
51
+ ```
52
+
53
+ MuJoCo is included as a core dependency. VPython visualization is optional:
54
+
55
+ ```bash
56
+ pip install -e ".[all]"
57
+ ```
58
+
59
+ ## Quick Start
60
+
61
+ ### CLI
62
+
63
+ ```bash
64
+ udaan run quadrotor -t 10 # quadrotor with geometric control
65
+ udaan run quad-payload -t 10 -m tendon # quadrotor + cable-suspended payload
66
+ udaan run multi-quad -n 3 -t 10 # multi-quadrotor cooperative payload
67
+ udaan run multi-quad-rigid -t 10 # multi-quadrotor rigid-body payload
68
+ udaan run fleet --demo l1-comparison -t 10 # L1 vs PD controller comparison
69
+ udaan run fleet --demo gain-sweep -t 10 # PD gain tuning comparison
70
+ udaan run quadrotor -t 5 -r out.gif # record to GIF
71
+ ```
72
+
73
+ ### Python
74
+
75
+ ```python
76
+ import udaan as U
77
+ import numpy as np
78
+
79
+ mdl = U.models.mujoco.Quadrotor(render=True)
80
+ mdl.simulate(tf=10, position=np.array([1., 1., 0.]))
81
+ ```
82
+
83
+ ## Documentation
84
+
85
+ <details>
86
+ <summary><strong>:pushpin: Controller roadmap</strong></summary>
87
+
88
+ | Controller | System | Status | Reference |
89
+ | ----------------------------- | ------------------ | ----------------------------------------- | ---------------------------------------------------------------------------------- |
90
+ | Geometric PD (SE(3)) | Quadrotor | :white_check_mark: Implemented | [Lee, Leok, McClamroch 2010](https://ieeexplore.ieee.org/document/5717652) |
91
+ | Geometric L1 Adaptive (SO(3)) | Quadrotor | :white_check_mark: Implemented | [Kotaru, Wu, Sreenath 2020](https://doi.org/10.1115/1.4045558) |
92
+ | Geometric PD (SE(3) x S2) | Quad + Payload | :white_check_mark: Implemented | [Sreenath, Lee, Kumar 2013](https://ieeexplore.ieee.org/abstract/document/6760219) |
93
+ | Propeller Force Allocation | Quadrotor | :white_check_mark: Implemented | — |
94
+ | Differential Flatness | Quad + Payload | :construction: Partial (flat2state utils) | [Sreenath, Lee, Kumar 2013](https://ieeexplore.ieee.org/abstract/document/6760219) |
95
+ | NLMPC (CasADi) | Quadrotor | :memo: Planned | — |
96
+ | VBLMPC | Quad + Payload | :memo: Planned | [Kotaru, Sreenath 2020](https://hybrid-robotics.berkeley.edu/publications/) |
97
+ | Geometric PD | Multi-Quad Payload | :memo: Planned | [Lee 2014](https://ieeexplore.ieee.org/document/6907452) |
98
+ | RL (Gymnasium) | All | :memo: Planned | — |
99
+
100
+ </details>
101
+
102
+ <details>
103
+ <summary><strong>:package: Package API reference</strong></summary>
104
+
105
+ ### Base Models (`udaan.models.base`)
106
+
107
+ Math-only dynamics, no simulator dependency.
108
+
109
+ | Model | State Space | Description |
110
+ | -------------------------------- | ----------- | ---------------------------------------------------- |
111
+ | `Quadrotor` | SE(3) | Rigid body quadrotor, wrench/accel/prop-force inputs |
112
+ | `QuadrotorCSPayload` | SE(3) x S2 | Quadrotor + cable-suspended point-mass payload |
113
+ | `FloatingPointmass` | R3 | 3D point mass with gravity |
114
+ | `S2Pendulum` | S2 | Spherical pendulum on the 2-sphere |
115
+ | `PointmassSuspendedPayload` | R3 x S2 | Single point-mass agent with suspended payload |
116
+ | `MultiPointmassSuspendedPayload` | R3 x (S2)^n | Multiple point-mass agents, shared payload |
117
+
118
+ ### MuJoCo Models (`udaan.models.mujoco`)
119
+
120
+ MuJoCo-backed physics with GLFW visualization.
121
+
122
+ | Model | Description |
123
+ | --------------------------- | -------------------------------------------------- |
124
+ | `Quadrotor` | Single quadrotor |
125
+ | `QuadrotorCSPayload` | Quad + payload (tendon or links cable model) |
126
+ | `MultiQuadrotorCSPointmass` | N quadrotors, shared point-mass payload |
127
+ | `MultiQuadRigidbody` | N quadrotors, shared rigid-body payload |
128
+ | `QuadrotorFleet` | N independent quadrotors for controller comparison |
129
+
130
+ ### Manifold Library (`udaan.manif`)
131
+
132
+ | Class/Function | Description |
133
+ | ----------------------- | ------------------------------------------------ |
134
+ | `SO3` | Rotation matrix with exponential map stepping |
135
+ | `S2` | Unit sphere with geodesic stepping, config error |
136
+ | `hat` / `vee` | Skew-symmetric matrix operators |
137
+ | `rodrigues_expm` | Rodrigues rotation formula |
138
+ | `expm_taylor_expansion` | Matrix exponential Taylor approximation |
139
+
140
+ ### Utilities (`udaan.utils`)
141
+
142
+ | Module | Description |
143
+ | ------------ | ----------------------------------------------------------------- |
144
+ | `trajectory` | Smooth, polynomial, circular, and Lissajous trajectory generators |
145
+ | `flat2state` | Differential flatness maps for quadrotor and payload systems |
146
+ | `assets` | MuJoCo XML model generator |
147
+ | `vfx` | VPython-based visualization (base models) |
148
+
149
+ </details>
150
+
151
+ ## License
152
+
153
+ BSD 3-Clause License. See [LICENSE](LICENSE) for details.