Changelog#
Version 1.0.0 (November 6, 2026)#
Device Layer#
Breaking changes
Refactored lifecycle hooks in
DeviceandSubstepMeasurementsProcessorto separate state updates from measurement reads:Migration: Move state updates into
on_substep/on_step/on_begin_steppingand replaceget_substep_measurements/process_substep_measurementswithget_measurements()/process_measurements().
- Refactored lifecycle hooks in
Device: on_substepis triggered after every physics substepon_stepis triggered on the final physics substep, afteron_substepand beforeget_measurements.on_begin_steppingis triggered after resets, once the state is final.get_measurementsreplaces the now deprecatedget_substep_measurements.
- Refactored lifecycle hooks in
- Refactored lifecycle hooks in
SubstepMeasurementsProcessor: on_substepis triggered after every physics substep.on_begin_steppingis triggered after resets, once the state is final.process_measurementsreplaces the now deprecatedprocess_substep_measurements.
- Refactored lifecycle hooks in
Task Layer#
Added
MetricProvider,FunctionalMetricProvider, andMetricfor per-episode metric reductions (mean,last,max,sum).
Common Devices#
Breaking changes
Removed
ActuatorDevice.configure_spec()and itstransmissionparameter.Migration: Define actuators in the MJCF or
MjSpecbefore device initialization;ActuatorDevicenow infers transmission types from the compiledMjModel.
Added
TactileDevice(mjSENS_TACTILE) with optional Laplacian smoothing and 2D spatial observation plots in themujoco.studioviewer.Added
<dcmotor>and MIMO actuator support toTorchWrapperandActuatorDevice.After a reset, every history slot of
ContactSensorDeviceholds the reset reading instead of zeros, and its history also advances while the device is dark.The built-in devices implement
get_measurementsinstead ofget_substep_measurements. Subclasses that overrideget_substep_measurementsmust overrideget_measurementsinstead.Camera devices render in
on_substepandon_begin_stepping. Theirget_measurementsreturns the latest frame without rendering, and raises aRuntimeErrorif nothing was rendered since the last reset.After a reset, delayed
StochasticSubstepMeasurementskeys read the reset reading until the delay has passed. Keys without delay apply their bias and latest noise sample to the current reading, and readings pass through until the processor has seen a substep or reset.
Bugs Fixed#
After a partial reset,
DeviceLayeronly refreshes the measurements of the reset environments.ContactSensorDeviceandStochasticSubstepMeasurementsno longer advance their history and delay buffers for environments that are not reset.Features observers and loggers no longer run twice per step when any environment resets.
0.0.1#
Initial open-source release of reaf-sim (reaf.simulation.torch).