Skip to content

Commit 452de16

Browse files
Adds documentation for Multirotor feature (isaac-sim#4400)
# Description This MR adds more documentation to the multi-rotor classes to help users understand the features in more detail. ## Type of change - Documentation update ## Checklist - [ ] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Co-authored-by: Pascal Roth <57946385+pascal-roth@users.noreply.github.com>
1 parent 215da03 commit 452de16

19 files changed

Lines changed: 1029 additions & 164 deletions

File tree

docs/source/_static/refs.bib

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,14 @@ @InProceedings{mittal2024symmetry
183183
pages={7433-7439},
184184
doi={10.1109/ICRA57147.2024.10611493}
185185
}
186+
187+
@article{kulkarni2025aerialgym,
188+
author={Kulkarni, Mihir and Rehberg, Welf and Alexis, Kostas},
189+
journal={IEEE Robotics and Automation Letters},
190+
title={Aerial Gym Simulator: A Framework for Highly Parallelized Simulation of Aerial Robots},
191+
year={2025},
192+
volume={10},
193+
number={4},
194+
pages={4093-4100},
195+
doi={10.1109/LRA.2025.3548507}
196+
}

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ section-order = [
6666
"omniverse-extensions",
6767
# Group Isaac Lab extensions together since they are all part of the Isaac Lab project
6868
"isaaclab",
69+
"isaaclab-contrib",
6970
"isaaclab-rl",
7071
"isaaclab-mimic",
7172
"isaaclab-tasks",
@@ -90,6 +91,7 @@ section-order = [
9091

9192
"isaaclab" = ["isaaclab"]
9293
"isaaclab-assets" = ["isaaclab_assets"]
94+
"isaaclab-contrib" = ["isaaclab_contrib"]
9395
"isaaclab-rl" = ["isaaclab_rl"]
9496
"isaaclab-mimic" = ["isaaclab_mimic"]
9597
"isaaclab-tasks" = ["isaaclab_tasks"]

source/isaaclab_assets/isaaclab_assets/robots/arl_robot_1.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
* :obj:`ARL_ROBOT_1_CFG`: The ARL_Robot_1 with (TODO add motor propeller combination)
1111
"""
1212

13-
from isaaclab_contrib.actuators import ThrusterCfg
14-
from isaaclab_contrib.assets import MultirotorCfg
15-
1613
import isaaclab.sim as sim_utils
1714
from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR
1815

16+
from isaaclab_contrib.actuators import ThrusterCfg
17+
from isaaclab_contrib.assets import MultirotorCfg
18+
1919
##
2020
# Configuration - Actuators.
2121
##
Lines changed: 171 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,94 @@
1-
# Isaac Lab: MultiRotor Extension
1+
# Isaac Lab: Community Contributions
22

3-
This extension provides comprehensive support for multirotor systems (drones, quadcopters, hexacopters, etc.)
4-
in Isaac Lab. It includes specialized actuator models, asset classes, and MDP components specifically designed
5-
for multirotor simulation.
3+
This extension (`isaaclab_contrib`) provides a collection of community-contributed components for Isaac Lab. These contributions extend the core framework with specialized robot types, actuator models, sensors, and other features that are not yet part of the main Isaac Lab package but are actively maintained and supported by the community.
64

7-
## Features
5+
## Overview
86

9-
The extension provides the following key components:
7+
The `isaaclab_contrib` package serves as an incubator for experimental and specialized features that:
108

11-
### Assets
9+
- Extend Isaac Lab's capabilities for specific robot types or use cases
10+
- Provide domain-specific actuator models and control interfaces
11+
- Offer specialized MDP components for reinforcement learning tasks
12+
- May eventually be integrated into the core Isaac Lab framework
1213

13-
* **`Multirotor`**: A specialized articulation class that extends the base `Articulation` class to support
14-
multirotor systems with thruster actuators. This class handles the simulation of multirotor dynamics,
15-
including thrust application at specific body locations and integration with the thruster actuator model.
14+
## Current Contributions
1615

17-
### Actuators
16+
### Multirotor Systems
1817

19-
* **`Thruster`**: A low-level motor/thruster dynamics model with separate rise/fall time constants. This
20-
actuator model simulates realistic motor response characteristics including:
21-
- Asymmetric rise and fall time constants
22-
- Thrust limits (minimum and maximum)
23-
- Integration schemes (Euler or RK4)
24-
- Motor spin-up and spin-down dynamics
18+
Comprehensive support for multirotor vehicles (drones, quadcopters, hexacopters, octocopters, etc.) including:
2519

26-
### MDP Components
20+
- **Assets**: `Multirotor` articulation class with thruster-based control
21+
- **Actuators**: `Thruster` model with realistic motor dynamics
22+
- **MDP Components**: `ThrustAction` terms for RL control
2723

28-
* **Thrust Actions**: Action terms specifically designed for multirotor control, allowing direct thrust
29-
commands to individual thrusters or groups of thrusters. These integrate seamlessly with Isaac Lab's
30-
MDP framework for reinforcement learning tasks.
24+
See the [Multirotor Systems](#multirotor-systems-detailed) section below for detailed documentation.
3125

32-
## Using the Extension
26+
## Extension Structure
27+
28+
The extension follows Isaac Lab's standard package structure:
29+
30+
```tree
31+
isaaclab_contrib/
32+
├── actuators/ # Contributed actuator models
33+
│ ├── thruster.py # Thruster actuator for multirotors
34+
│ └── thruster_cfg.py
35+
├── assets/ # Contributed asset classes
36+
│ └── multirotor/ # Multirotor asset implementation
37+
├── mdp/ # MDP components for RL
38+
│ └── actions/ # Action terms
39+
└── utils/ # Utility functions and types
40+
```
41+
42+
## Installation and Usage
3343

34-
To use this extension in your code, import the required components:
44+
The `isaaclab_contrib` package is included with Isaac Lab. To use contributed components:
3545

3646
```python
47+
# Import multirotor components
3748
from isaaclab_contrib.assets import Multirotor, MultirotorCfg
3849
from isaaclab_contrib.actuators import Thruster, ThrusterCfg
3950
from isaaclab_contrib.mdp.actions import ThrustActionCfg
4051
```
4152

42-
### Example: Creating a Multirotor Asset
53+
---
54+
55+
## Multirotor Systems (Detailed)
56+
57+
This section provides detailed documentation for the multirotor contribution, which enables simulation and control of multirotor aerial vehicles in Isaac Lab.
58+
59+
### Features
60+
61+
The multirotor system includes:
62+
63+
#### Assets
4364

44-
Here's how to configure and create a multirotor asset:
65+
- **`Multirotor`**: A specialized articulation class that extends the base `Articulation` class to support multirotor systems with thruster actuators
66+
- Manages multiple thruster actuators as a group
67+
- Applies thrust forces at specific body locations
68+
- Uses allocation matrices for control allocation
69+
- Provides thruster-specific state information through `MultirotorData`
70+
71+
#### Actuators
72+
73+
- **`Thruster`**: A low-level motor/thruster dynamics model with realistic response characteristics:
74+
- **Asymmetric rise and fall time constants**: Models different spin-up/spin-down rates
75+
- **Thrust limits**: Configurable minimum and maximum thrust constraints
76+
- **Integration schemes**: Euler or RK4 integration methods
77+
- **Dynamic response**: Simulates motor transient behavior
78+
79+
#### MDP Components
80+
81+
- **`ThrustAction`**: Action terms specifically designed for multirotor control:
82+
- Direct thrust commands to individual thrusters or groups
83+
- Flexible preprocessing (scaling, offsetting, clipping)
84+
- Automatic hover thrust offset computation
85+
- Integrates with Isaac Lab's MDP framework for RL tasks
86+
87+
<details>
88+
89+
### Quick Start
90+
91+
#### Creating a Multirotor Asset
4592

4693
```python
4794
import isaaclab.sim as sim_utils
@@ -50,88 +97,147 @@ from isaaclab_contrib.actuators import ThrusterCfg
5097

5198
# Define thruster actuator configuration
5299
thruster_cfg = ThrusterCfg(
53-
thrust_limit=(0.0, 10.0), # Min and max thrust in Newtons
54-
rise_time_constant=0.1, # Time constant for thrust increase
55-
fall_time_constant=0.2, # Time constant for thrust decrease
100+
thruster_names_expr=["rotor_[0-3]"], # Match rotors 0-3
101+
thrust_range=(0.0, 10.0), # Min and max thrust in Newtons
102+
rise_time_constant=0.12, # Time constant for thrust increase (120ms)
103+
fall_time_constant=0.25, # Time constant for thrust decrease (250ms)
56104
)
57105

58106
# Create multirotor configuration
59107
multirotor_cfg = MultirotorCfg(
60-
prim_path="/World/envs/env_.*/Robot",
108+
prim_path="/World/envs/env_.*/Quadcopter",
61109
spawn=sim_utils.UsdFileCfg(
62-
usd_path="path/to/your/multirotor.usd",
110+
usd_path="path/to/quadcopter.usd",
111+
),
112+
init_state=MultirotorCfg.InitialStateCfg(
113+
pos=(0.0, 0.0, 1.0), # Start 1m above ground
114+
rps={".*": 110.0}, # All thrusters at 110 RPS (hover)
63115
),
64116
actuators={
65117
"thrusters": thruster_cfg,
66118
},
119+
allocation_matrix=[ # 6x4 matrix for quadcopter
120+
[1.0, 1.0, 1.0, 1.0], # Total vertical thrust
121+
[0.0, 0.0, 0.0, 0.0], # Lateral force X
122+
[0.0, 0.0, 0.0, 0.0], # Lateral force Y
123+
[0.0, 0.13, 0.0, -0.13], # Roll torque
124+
[-0.13, 0.0, 0.13, 0.0], # Pitch torque
125+
[0.01, -0.01, 0.01, -0.01], # Yaw torque
126+
],
127+
rotor_directions=[1, -1, 1, -1], # Alternating CW/CCW
67128
)
68129
```
69130

70-
### Example: Using Thrust Actions in Environments
71-
72-
To use thrust actions in your RL environment:
131+
#### Using Thrust Actions in RL Environments
73132

74133
```python
75134
from isaaclab.envs import ManagerBasedRLEnvCfg
135+
from isaaclab.utils import configclass
76136
from isaaclab_contrib.mdp.actions import ThrustActionCfg
77137

78138
@configclass
79-
class MyMultirotorEnvCfg(ManagerBasedRLEnvCfg):
80-
# ... other configuration ...
81-
82-
# Define actions
83-
actions = ActionsCfg()
139+
class QuadcopterEnvCfg(ManagerBasedRLEnvCfg):
140+
# ... scene, observations, rewards, etc. ...
84141

85142
@configclass
86143
class ActionsCfg:
144+
# Normalized thrust control around hover
87145
thrust = ThrustActionCfg(
88146
asset_name="robot",
89-
thruster_names=["motor_.*"], # regex pattern for thruster names
147+
scale=2.0, # Actions in [-1,1] become [-2,2] N deviation
148+
use_default_offset=True, # Add hover thrust from config
149+
clip={".*": (0.0, 10.0)}, # Constrain final thrust to [0, 10] N
90150
)
151+
152+
actions = ActionsCfg()
91153
```
92154

93-
## Extension Structure
155+
### Key Concepts
94156

95-
The extension follows Isaac Lab's standard structure:
157+
#### Allocation Matrix
96158

97-
```tree
98-
isaaclab_contrib/
99-
├── actuators/ # Thruster actuator implementations
100-
├── assets/ # Multirotor asset classes
101-
│ └── multirotor/
102-
├── mdp/ # MDP components for RL
103-
└── utils/ # Utility functions and types
159+
The allocation matrix maps individual thruster forces to a 6D wrench (force + torque) applied to the multirotor's base link:
160+
161+
```
162+
wrench = allocation_matrix @ thrust_vector
163+
```
164+
165+
Where:
166+
- `wrench`: [Fx, Fy, Fz, Tx, Ty, Tz]ᵀ (6D body wrench)
167+
- `allocation_matrix`: 6 × N matrix (6 DOF, N thrusters)
168+
- `thrust_vector`: [T₁, T₂, ..., Tₙ]ᵀ (N thruster forces)
169+
170+
The matrix encodes the geometric configuration of thrusters including positions, orientations, and moment arms.
171+
172+
#### Thruster Dynamics
173+
174+
The `Thruster` actuator model simulates realistic motor response with asymmetric first-order dynamics:
175+
176+
```
177+
dT/dt = (T_target - T_current) / τ
104178
```
105179

106-
## Key Concepts
180+
Where τ is the time constant (different for rise vs. fall):
181+
- **Rise Time (τ_rise)**: How quickly thrust increases when commanded (typically slower)
182+
- **Fall Time (τ_fall)**: How quickly thrust decreases when commanded (typically faster)
183+
- **Thrust Limits**: Physical constraints [T_min, T_max] enforced after integration
184+
185+
This asymmetry reflects real-world motor behavior primarily caused by ESC (Electronic Speed Controller) response and propeller aerodynamics, which result in slower spin-up (thrust increase) than spin-down. While rotor inertia affects both acceleration and deceleration equally, it is not the main cause of the asymmetric response.
107186

108-
### Thruster Dynamics
187+
#### Thruster Control Modes
109188

110-
The `Thruster` actuator model simulates realistic motor response with asymmetric dynamics:
189+
The multirotor system supports different control approaches:
111190

112-
- **Rise Time**: How quickly thrust increases when commanded
113-
- **Fall Time**: How quickly thrust decreases when commanded
114-
- **Thrust Limits**: Physical constraints on minimum and maximum thrust output
191+
1. **Direct Thrust Control**: Directly command thrust forces/RPS
192+
2. **Normalized Control**: Commands as deviations from hover thrust
193+
3. **Differential Control**: Small adjustments around equilibrium
115194

116-
This asymmetry reflects real-world motor behavior where spinning up often takes longer than spinning down.
195+
The `ThrustAction` term provides flexible preprocessing to support all modes through scaling and offsetting.
117196

118-
### Multirotor Asset
197+
</details>
119198

120-
The `Multirotor` class extends the standard `Articulation` to provide specialized functionality:
199+
### Demo Script
121200

122-
- Manages multiple thruster actuators as a group
123-
- Applies thrust forces at specific body locations
124-
- Integrates with Isaac Lab's physics simulation
125-
- Provides thruster-specific state information through `MultirotorData`
201+
A complete demonstration of quadcopter simulation is available:
202+
203+
```bash
204+
# Run quadcopter demo
205+
./isaaclab.sh -p scripts/demos/quadcopter.py
206+
```
207+
208+
---
126209

127210
## Testing
128211

129-
The extension includes comprehensive unit tests:
212+
The extension includes comprehensive unit tests for all contributed components:
130213

131214
```bash
132-
# Test thruster actuator
215+
# Test multirotor components
216+
python -m pytest source/isaaclab_contrib/test/assets/test_multirotor.py
133217
python -m pytest source/isaaclab_contrib/test/actuators/test_thruster.py
134218

135-
# Test multirotor asset
136-
python -m pytest source/isaaclab_contrib/test/assets/test_multirotor.py
219+
# Run all contrib tests
220+
python -m pytest source/isaaclab_contrib/test/
137221
```
222+
223+
## Contributing
224+
225+
We welcome community contributions to `isaaclab_contrib`! If you have developed:
226+
227+
- Specialized robot asset classes
228+
- Novel actuator models
229+
- Custom MDP components
230+
- Domain-specific utilities
231+
232+
Please follow the Isaac Lab contribution guidelines and open a pull request. Contributions should:
233+
234+
1. Follow the existing package structure
235+
2. Include comprehensive documentation (docstrings, examples)
236+
3. Provide unit tests
237+
4. Be well-tested with Isaac Lab's simulation framework
238+
239+
For more information, see the [Isaac Lab Contributing Guide](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html).
240+
241+
## License
242+
243+
This extension follows the same BSD-3-Clause license as Isaac Lab. See the LICENSE file for details.

source/isaaclab_contrib/isaaclab_contrib/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33
#
44
# SPDX-License-Identifier: BSD-3-Clause
55

6-
"""Package containing multirotor (drone) support for Isaac Lab."""
6+
"""Package for externally contributed components for Isaac Lab.
7+
8+
This package provides externally contributed components for Isaac Lab, such as multirotors.
9+
These components are not part of the core Isaac Lab framework yet, but are planned to be added
10+
in the future. They are contributed by the community to extend the capabilities of Isaac Lab.
11+
"""
712

813
import os
914
import toml

source/isaaclab_contrib/isaaclab_contrib/actuators/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,12 @@
33
#
44
# SPDX-License-Identifier: BSD-3-Clause
55

6+
"""Sub-package for thruster actuator models.
7+
8+
This package provides actuator models specifically designed for multirotor thrusters.
9+
The thruster actuator simulates realistic motor/propeller dynamics including asymmetric
10+
rise and fall time constants, thrust limits, and dynamic response characteristics.
11+
"""
12+
613
from .thruster import Thruster
714
from .thruster_cfg import ThrusterCfg

source/isaaclab_contrib/isaaclab_contrib/assets/__init__.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
#
44
# SPDX-License-Identifier: BSD-3-Clause
55

6-
"""Sub-package for different Isaac Lab external contributions."""
6+
"""Sub-package for externally contributed assets.
7+
8+
This package provides specialized asset classes for simulating externally contributed
9+
robots in Isaac Lab, such as multirotors. These assets are not part of the core
10+
Isaac Lab framework yet, but are planned to be added in the future. They are
11+
contributed by the community to extend the capabilities of Isaac Lab.
12+
"""
713

814
from .multirotor import Multirotor, MultirotorCfg, MultirotorData

0 commit comments

Comments
 (0)