Skip to content

Conversation

peterd-NV
Copy link
Contributor

@peterd-NV peterd-NV commented Aug 28, 2025

Description

This PR adds fixes from LightWheel Labs and additional functionality to the IsaacLab recorder.

Fixes # (issue)

  • Fixes performance issue when recording long episode data by replacing the use of torch.cat at every timestep with list append.
  • Fixes configclass validation when key is not a string

Adds Functionality

  • Adds optional episode meta data to HDF5 recorder
  • Adds option to record data pre-physics step
  • Adds joint target data to episode data. Joint target data can be optionally recorded by users and replayed to bypass action term controllers and improve replay determinism.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)

Screenshots

Please attach before and after screenshots of the change if applicable.

Checklist

  • I have run the pre-commit checks 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

@peterd-NV peterd-NV changed the title Peterd/lw patches Improve recorder performance and add additional recording capability Aug 28, 2025
@peterd-NV peterd-NV requested a review from kellyguo11 August 28, 2025 19:50
@@ -188,6 +188,7 @@ def step(self, action: torch.Tensor) -> VecEnvStepReturn:
self.scene.write_data_to_sim()
# simulate
self.sim.step(render=False)
self.recorder_manager.record_pre_physics_step()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't this happening now after the physics step?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The recording right now records the states after a physics step. Here, it's adding functionality to record the states prior to every physics step in the decimation loop which provides more fine grain recording.

Copy link
Contributor Author

@peterd-NV peterd-NV Aug 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The motivation here is that full determinism during replay is not possible when running parallel envs as the physX buffers cannot be flushed on every IsaacLab reset. This can cause significant divergence when replaying data collected with parallel envs by just using env.step as it has to run through the entire action space which may contain controllers that are sensitive to this nondeterminism. Recording at the decimation level every sim dt can help alleviate this by giving users the option of more fine grained control.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that recording pre physics steps is fully optional and will not enabled by our existing default recorder workflows to limit dataset size. Users can take advantage of it via their own recorder terms if needed (like how Lightwheel is currently doing).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants