Source code for isaaclab_contrib.assets.multirotor.multirotor_data

# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

import torch

from isaaclab.assets.articulation.articulation_data import ArticulationData


[docs]class MultirotorData(ArticulationData): """Data container for a multirotor articulation. This class extends the base :class:`~isaaclab.assets.ArticulationData` container to include multirotor-specific data such as thruster states, thrust targets, and computed forces. It provides access to all the state information needed for monitoring and controlling multirotor vehicles. The data container is automatically created and managed by the :class:`~isaaclab_contrib.assets.Multirotor` class. Users typically access this data through the :attr:`Multirotor.data` property. Note: All tensor attributes have shape ``(num_instances, num_thrusters)`` where ``num_instances`` is the number of environment instances and ``num_thrusters`` is the total number of thrusters per multirotor. .. seealso:: - :class:`~isaaclab.assets.ArticulationData`: Base articulation data container - :class:`~isaaclab_contrib.assets.Multirotor`: Multirotor asset class """ thruster_names: list[str] = None """List of thruster names in the multirotor. This list contains the ordered names of all thrusters, matching the order used for indexing in the thrust tensors. The names correspond to the USD body prim names matched by the thruster name expressions in the actuator configuration. Example: ``["rotor_0", "rotor_1", "rotor_2", "rotor_3"]`` for a quadcopter """ default_thruster_rps: torch.Tensor = None """Default thruster RPS (revolutions per second) state of all thrusters. Shape is (num_instances, num_thrusters). This quantity is configured through the :attr:`MultirotorCfg.init_state.rps` parameter and represents the baseline/hover RPS for each thruster. It is used to initialize thruster states during reset operations. For a hovering multirotor, these values should produce enough collective thrust to counteract gravity. Example: For a 1kg quadcopter with 4 thrusters, if each thruster produces 2.5N at 110 RPS, the default might be ``[[110.0, 110.0, 110.0, 110.0]]`` for hover. """ thrust_target: torch.Tensor = None """Thrust targets commanded by the user or controller. Shape is ``(num_instances, num_thrusters)`` This quantity contains the target thrust values set through the :meth:`~isaaclab_contrib.assets.Multirotor.set_thrust_target` method or by action terms in RL environments. These targets are processed by the thruster actuator models to compute actual applied thrusts. The units depend on the actuator model configuration (typically Newtons for force or RPS for rotational speed). """ ## # Thruster commands ## computed_thrust: torch.Tensor = None """Computed thrust from the actuator model before clipping. Shape is (num_instances, num_thrusters). This quantity contains the thrust values computed by the thruster actuator models before any clipping or saturation is applied. It represents the "desired" thrust based on the actuator dynamics (rise/fall times) but may exceed physical limits. The difference between :attr:`computed_thrust` and :attr:`applied_thrust` indicates when the actuator is saturating at its limits. Example Use: Monitor actuator saturation by comparing computed vs applied thrust: .. code-block:: python saturation = multirotor.data.computed_thrust - multirotor.data.applied_thrust is_saturated = saturation.abs() > 1e-6 """ applied_thrust: torch.Tensor = None """Applied thrust from the actuator model after clipping. Shape is (num_instances, num_thrusters). This quantity contains the final thrust values that are actually applied to the simulation after all actuator model processing, including: - Dynamic response (rise/fall time constants) - Clipping to thrust range limits - Any other actuator model constraints This is the "ground truth" thrust that affects the multirotor's motion in the physics simulation. """