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.
- udaan-1.0.1/.gitignore +149 -0
- udaan-1.0.1/LICENSE +28 -0
- udaan-1.0.1/PKG-INFO +219 -0
- udaan-1.0.1/README.md +153 -0
- udaan-1.0.1/pyproject.toml +226 -0
- udaan-1.0.1/tests/__init__.py +0 -0
- udaan-1.0.1/tests/test_base_models.py +160 -0
- udaan-1.0.1/tests/test_control.py +90 -0
- udaan-1.0.1/tests/test_flat2state.py +69 -0
- udaan-1.0.1/tests/test_manif.py +156 -0
- udaan-1.0.1/tests/test_quadrotor.py +98 -0
- udaan-1.0.1/tests/test_trajectory.py +165 -0
- udaan-1.0.1/udaan/__init__.py +33 -0
- udaan-1.0.1/udaan/__main__.py +5 -0
- udaan-1.0.1/udaan/cli/__init__.py +41 -0
- udaan-1.0.1/udaan/cli/demos.py +79 -0
- udaan-1.0.1/udaan/cli/generate.py +32 -0
- udaan-1.0.1/udaan/cli/run.py +199 -0
- udaan-1.0.1/udaan/control/__init__.py +66 -0
- udaan-1.0.1/udaan/control/quadrotor/__init__.py +15 -0
- udaan-1.0.1/udaan/control/quadrotor/geometric_attitude.py +80 -0
- udaan-1.0.1/udaan/control/quadrotor/geometric_l1_attitude.py +185 -0
- udaan-1.0.1/udaan/control/quadrotor/position_l1.py +107 -0
- udaan-1.0.1/udaan/control/quadrotor/position_pd.py +32 -0
- udaan-1.0.1/udaan/control/quadrotor/propeller_allocation.py +54 -0
- udaan-1.0.1/udaan/control/quadrotor_cspayload/__init__.py +7 -0
- udaan-1.0.1/udaan/control/quadrotor_cspayload/payload_controller.py +62 -0
- udaan-1.0.1/udaan/core/__init__.py +37 -0
- udaan-1.0.1/udaan/core/exceptions.py +75 -0
- udaan-1.0.1/udaan/core/types.py +73 -0
- udaan-1.0.1/udaan/manif/S2.py +40 -0
- udaan-1.0.1/udaan/manif/SO3.py +77 -0
- udaan-1.0.1/udaan/manif/__init__.py +16 -0
- udaan-1.0.1/udaan/manif/utils.py +33 -0
- udaan-1.0.1/udaan/models/__init__.py +24 -0
- udaan-1.0.1/udaan/models/assets/mjcf/multi_quad_pointmass.xml +68 -0
- udaan-1.0.1/udaan/models/assets/mjcf/multi_quad_rigidbody.xml +125 -0
- udaan-1.0.1/udaan/models/assets/mjcf/quad_cable_mj.xml +127 -0
- udaan-1.0.1/udaan/models/assets/mjcf/quad_flxcbl_mj.xml +265 -0
- udaan-1.0.1/udaan/models/assets/mjcf/quad_payload_mj.xml +67 -0
- udaan-1.0.1/udaan/models/assets/mjcf/quadrotor.xml +31 -0
- udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_comparison.xml +60 -0
- udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_l1_comparison.xml +62 -0
- udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_mj.xml +52 -0
- udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_payload.xml +44 -0
- udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_quat.xml +43 -0
- udaan-1.0.1/udaan/models/assets/mjcf/quadrotor_x.xml +62 -0
- udaan-1.0.1/udaan/models/assets/mjcf/scene.xml +25 -0
- udaan-1.0.1/udaan/models/assets/mjcf/two_quad_linearpayload.xml +78 -0
- udaan-1.0.1/udaan/models/assets/mjcf/two_quad_masslesslink_payload.xml +76 -0
- udaan-1.0.1/udaan/models/base/__init__.py +72 -0
- udaan-1.0.1/udaan/models/base/floating_pointmass.py +55 -0
- udaan-1.0.1/udaan/models/base/multi_pointmass_suspended_payload.py +123 -0
- udaan-1.0.1/udaan/models/base/pointmass_suspended_payload.py +123 -0
- udaan-1.0.1/udaan/models/base/quadrotor.py +364 -0
- udaan-1.0.1/udaan/models/base/quadrotor_cspayload.py +290 -0
- udaan-1.0.1/udaan/models/base/s2_pendulum.py +70 -0
- udaan-1.0.1/udaan/models/bullet/__init__.py +1 -0
- udaan-1.0.1/udaan/models/mujoco/__init__.py +331 -0
- udaan-1.0.1/udaan/models/mujoco/multi_quad_cs_pointmass.py +236 -0
- udaan-1.0.1/udaan/models/mujoco/multi_quad_rigidbody.py +230 -0
- udaan-1.0.1/udaan/models/mujoco/quadrotor.py +136 -0
- udaan-1.0.1/udaan/models/mujoco/quadrotor_comparison.py +149 -0
- udaan-1.0.1/udaan/models/mujoco/quadrotor_cspayload.py +344 -0
- udaan-1.0.1/udaan/models/mujoco/quadrotor_fleet.py +242 -0
- udaan-1.0.1/udaan/py.typed +2 -0
- udaan-1.0.1/udaan/utils/__init__.py +32 -0
- udaan-1.0.1/udaan/utils/assets/__init__.py +11 -0
- udaan-1.0.1/udaan/utils/assets/mujoco_asset_creator.py +651 -0
- udaan-1.0.1/udaan/utils/assets/xml_model_generator.py +92 -0
- udaan-1.0.1/udaan/utils/flat2state.py +251 -0
- udaan-1.0.1/udaan/utils/geometry.py +12 -0
- udaan-1.0.1/udaan/utils/logging.py +113 -0
- udaan-1.0.1/udaan/utils/printout.py +89 -0
- udaan-1.0.1/udaan/utils/trajectory/__init__.py +33 -0
- udaan-1.0.1/udaan/utils/trajectory/trajectory.py +307 -0
- udaan-1.0.1/udaan/utils/vfx/__init__.py +141 -0
- udaan-1.0.1/udaan/utils/vfx/quadrotor_cspayload_vfx.py +34 -0
- 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.
|