Implementation:ARISE Initiative Robosuite DynamicsModder
Metadata:
- robosuite
- Sim-to-Real Robot Learning from Pixels
- Sim_To_Real_Transfer
- Physics_Simulation
- last_updated: 2026-02-15 12:00 GMT
Overview
Concrete class for randomizing physics dynamics parameters in MuJoCo simulations provided by the robosuite modding utilities.
Description
DynamicsModder modifies MjModel physical parameters including: global (density, viscosity), body (position, quaternion, inertia, mass), geom (friction, solref, solimp), and joint (stiffness, frictionloss, damping, armature). Requires modder.update() after modifications to propagate changes. Inherits from BaseModder.
Usage
Used internally by DomainRandomizationWrapper. Can be used standalone for custom dynamics randomization.
Code Reference
- Source: robosuite
- File: robosuite/utils/mjmod.py
- Lines: L1405-1997
- Signature:
class DynamicsModder(BaseModder):
def __init__(self, sim, random_state=None,
randomize_density=True, randomize_viscosity=True,
density_perturbation_ratio=0.1, viscosity_perturbation_ratio=0.1,
body_names=None, randomize_position=True, randomize_quaternion=True,
randomize_inertia=True, randomize_mass=True,
position_perturbation_size=0.02, quaternion_perturbation_size=0.02,
inertia_perturbation_ratio=0.02, mass_perturbation_ratio=0.02,
geom_names=None, randomize_friction=True, randomize_solref=True,
randomize_solimp=True, friction_perturbation_ratio=0.1,
solref_perturbation_ratio=0.1, solimp_perturbation_ratio=0.1,
joint_names=None, randomize_stiffness=True, randomize_frictionloss=True,
randomize_damping=True, randomize_armature=True,
stiffness_perturbation_ratio=0.1, frictionloss_perturbation_size=0.05,
damping_perturbation_size=0.01, armature_perturbation_size=0.01):
- Import:
from robosuite.utils.mjmod import DynamicsModder
I/O Contract
Inputs:
sim(MjSim, Required): MuJoCo simulation instance to modifyrandom_state(RandomState, Optional): Random state for reproducibilitybody_names(list, Optional, Default: all elements): Body names to randomizegeom_names(list, Optional, Default: all elements): Geometry names to randomizejoint_names(list, Optional, Default: all elements): Joint names to randomize- All
randomize_*parameters (bool, Optional, Default: True): Enable/disable specific randomizations - All
*_perturbation_*parameters (float, Optional): Perturbation magnitudes (see defaults in signature)
Methods:
randomize(): Apply random perturbations to configured parameterssave_defaults(): Store current parameter values as defaultsrestore_defaults(): Reset parameters to saved defaultsupdate(): Must call after modifications to propagate changes to simulation
Usage Examples
The DynamicsModder is typically used through the DomainRandomizationWrapper by specifying dynamics_randomization_args:
from robosuite.wrappers import DomainRandomizationWrapper
# Configure dynamics randomization parameters
dynamics_args = {
'randomize_density': True,
'density_perturbation_ratio': 0.15,
'randomize_friction': True,
'friction_perturbation_ratio': 0.2,
'randomize_mass': True,
'mass_perturbation_ratio': 0.1,
}
# Wrap environment with domain randomization
env = DomainRandomizationWrapper(
env,
dynamics_randomization_args=dynamics_args
)