Source code for omni.isaac.lab.actuators.actuator_cfg

# Copyright (c) 2022-2024, The Isaac Lab Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

import torch
from collections.abc import Iterable
from dataclasses import MISSING
from typing import Literal

from omni.isaac.lab.utils import configclass

from . import actuator_net, actuator_pd
from .actuator_base import ActuatorBase


[docs]@configclass class ActuatorBaseCfg: """Configuration for default actuators in an articulation.""" class_type: type[ActuatorBase] = MISSING """The associated actuator class. The class should inherit from :class:`omni.isaac.lab.actuators.ActuatorBase`. """ joint_names_expr: list[str] = MISSING """Articulation's joint names that are part of the group. Note: This can be a list of joint names or a list of regex expressions (e.g. ".*"). """ effort_limit: dict[str, float] | float | None = None """Force/Torque limit of the joints in the group. Defaults to None. If None, the limit is set to the value specified in the USD joint prim. """ velocity_limit: dict[str, float] | float | None = None """Velocity limit of the joints in the group. Defaults to None. If None, the limit is set to the value specified in the USD joint prim. """ stiffness: dict[str, float] | float | None = MISSING """Stiffness gains (also known as p-gain) of the joints in the group. If None, the stiffness is set to the value from the USD joint prim. """ damping: dict[str, float] | float | None = MISSING """Damping gains (also known as d-gain) of the joints in the group. If None, the damping is set to the value from the USD joint prim. """ armature: dict[str, float] | float | None = None """Armature of the joints in the group. Defaults to None. If None, the armature is set to the value from the USD joint prim. """ friction: dict[str, float] | float | None = None """Joint friction of the joints in the group. Defaults to None. If None, the joint friction is set to the value from the USD joint prim. """
""" Implicit Actuator Models. """
[docs]@configclass class ImplicitActuatorCfg(ActuatorBaseCfg): """Configuration for an implicit actuator. Note: The PD control is handled implicitly by the simulation. """ class_type: type = actuator_pd.ImplicitActuator
""" Explicit Actuator Models. """
[docs]@configclass class IdealPDActuatorCfg(ActuatorBaseCfg): """Configuration for an ideal PD actuator.""" class_type: type = actuator_pd.IdealPDActuator
[docs]@configclass class DCMotorCfg(IdealPDActuatorCfg): """Configuration for direct control (DC) motor actuator model.""" class_type: type = actuator_pd.DCMotor saturation_effort: float = MISSING """Peak motor force/torque of the electric DC motor (in N-m)."""
[docs]@configclass class ActuatorNetLSTMCfg(DCMotorCfg): """Configuration for LSTM-based actuator model.""" class_type: type = actuator_net.ActuatorNetLSTM # we don't use stiffness and damping for actuator net stiffness = None damping = None network_file: str = MISSING """Path to the file containing network weights."""
[docs]@configclass class ActuatorNetMLPCfg(DCMotorCfg): """Configuration for MLP-based actuator model.""" class_type: type = actuator_net.ActuatorNetMLP # we don't use stiffness and damping for actuator net stiffness = None damping = None network_file: str = MISSING """Path to the file containing network weights.""" pos_scale: float = MISSING """Scaling of the joint position errors input to the network.""" vel_scale: float = MISSING """Scaling of the joint velocities input to the network.""" torque_scale: float = MISSING """Scaling of the joint efforts output from the network.""" input_order: Literal["pos_vel", "vel_pos"] = MISSING """Order of the inputs to the network. The order can be one of the following: * ``"pos_vel"``: joint position errors followed by joint velocities * ``"vel_pos"``: joint velocities followed by joint position errors """ input_idx: Iterable[int] = MISSING """ Indices of the actuator history buffer passed as inputs to the network. The index *0* corresponds to current time-step, while *n* corresponds to n-th time-step in the past. The allocated history length is `max(input_idx) + 1`. """
[docs]@configclass class DelayedPDActuatorCfg(IdealPDActuatorCfg): """Configuration for a delayed PD actuator.""" class_type: type = actuator_pd.DelayedPDActuator min_delay: int = 0 """Minimum number of physics time-steps with which the actuator command may be delayed. Defaults to 0.""" max_delay: int = 0 """Maximum number of physics time-steps with which the actuator command may be delayed. Defaults to 0."""
[docs]@configclass class RemotizedPDActuatorCfg(DelayedPDActuatorCfg): """Configuration for a remotized PD actuator. Note: The torque output limits for this actuator is derived from a linear interpolation of a lookup table in :attr:`joint_parameter_lookup`. This table describes the relationship between joint angles and the output torques. """ class_type: type = actuator_pd.RemotizedPDActuator joint_parameter_lookup: torch.Tensor = MISSING """Joint parameter lookup table. Shape is (num_lookup_points, 3). This tensor describes the relationship between the joint angle (rad), the transmission ratio (in/out), and the output torque (N*m). The table is used to interpolate the output torque based on the joint angle. """