Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
0cf11d6
test additional rendering steps in reset
peterd-NV Oct 21, 2025
ae0b64a
add num_rerenders_on_reset parameter
peterd-NV Oct 22, 2025
0b09800
update deprecation msg
peterd-NV Oct 22, 2025
5228332
Merge branch 'main' of github.com:peterd-NV/IsaacLab into peterd/rere…
peterd-NV Oct 23, 2025
90f521e
update change logs
peterd-NV Oct 23, 2025
1a0e725
restore cosmos env
peterd-NV Oct 27, 2025
4de3256
use sphinx deprecation tag and simplify rerender_on_reset check
peterd-NV Oct 27, 2025
e865f81
use python warning
peterd-NV Oct 27, 2025
fe5d986
lint
peterd-NV Oct 27, 2025
d29049b
Merge branch 'main' of github.com:peterd-NV/IsaacLab into peterd/rere…
peterd-NV Oct 27, 2025
cb80cc1
fix deprecation warning msg for DirectRLEnv
peterd-NV Oct 27, 2025
01506bc
sphinx formatting
peterd-NV Oct 27, 2025
bce53d5
Merge branch 'main' of github.com:peterd-NV/IsaacLab into peterd/rere…
peterd-NV Oct 29, 2025
7a683af
update changelogs
peterd-NV Oct 29, 2025
21683e2
update franka visuomotor env to 200x200 resolution
peterd-NV Oct 29, 2025
1cc1e9f
add 200x200 bcrnn config
peterd-NV Oct 29, 2025
e91a66c
Merge branch 'main' of github.com:peterd-NV/IsaacLab into peterd/rere…
peterd-NV Oct 29, 2025
c95ed47
Merge branch 'main' of github.com:peterd-NV/IsaacLab into peterd/rere…
peterd-NV Oct 30, 2025
edfd95f
update version number in deprecation comment to Isaac lab release ver…
peterd-NV Oct 31, 2025
d965318
add omni log to deprecation mesg
peterd-NV Nov 3, 2025
bf226cc
update to use deprecation warning
peterd-NV Nov 3, 2025
c5c0cbf
Merge branch 'main' of github.com:peterd-NV/IsaacLab into peterd/rere…
peterd-NV Nov 3, 2025
ec22231
Merge branch 'main' into peterd/rerender_on_reset_iterations
peterd-NV Nov 3, 2025
b446d71
Merge branch 'main' into peterd/rerender_on_reset_iterations
peterd-NV Nov 4, 2025
d3569d9
fix changelog
peterd-NV Nov 4, 2025
5c82f89
remove spark visuomotor limitation and omni log
peterd-NV Nov 6, 2025
b9687b4
Merge branch 'main' into peterd/rerender_on_reset_iterations
peterd-NV Nov 6, 2025
88325a6
don't override num-rerenders if rerender flag is set
peterd-NV Nov 6, 2025
3991366
Merge branch 'main' of github.com:peterd-NV/IsaacLab into peterd/rere…
peterd-NV Nov 6, 2025
81f00ea
fix robomimic config parser
peterd-NV Nov 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions docs/source/setup/installation/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,6 @@ Other notable limitations with respect to Isaac Lab include...

#. Multi-node training may require direct connections between Spark machines or additional network configurations.

#. :ref:`Isaac Lab Mimic <generating-additional-demonstrations>` data generation and policy inference for visuomotor environments are not supported on DGX Spark due to a lack of non-DLSS image denoiser on aarch64.

#. :ref:`Running Cosmos Transfer1 <running-cosmos>` is not currently supported on the DGX Spark.

Troubleshooting
Expand Down
14 changes: 13 additions & 1 deletion scripts/imitation_learning/robomimic/train.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
# Third-party imports
import gymnasium as gym
import h5py
import importlib
import json
import numpy as np
import os
Expand Down Expand Up @@ -369,7 +370,18 @@ def main(args: argparse.Namespace):
f" Please check that the gym registry has the entry point: '{cfg_entry_point_key}'."
)

with open(cfg_entry_point_file) as f:
# resolve module path if needed
if ":" in cfg_entry_point_file:
mod_name, file_name = cfg_entry_point_file.split(":")
mod = importlib.import_module(mod_name)
if mod.__file__ is None:
raise ValueError(f"Could not find module file for: '{mod_name}'")
mod_path = os.path.dirname(mod.__file__)
config_file = os.path.join(mod_path, file_name)
else:
config_file = cfg_entry_point_file

with open(config_file) as f:
ext_cfg = json.load(f)
config = config_factory(ext_cfg["algo_name"])
# update config with external json - this will throw errors if
Expand Down
2 changes: 1 addition & 1 deletion source/isaaclab/config/extension.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]

# Note: Semantic Versioning is used: https://semver.org/
version = "0.47.7"
version = "0.47.8"

# Description
title = "Isaac Lab framework for Robot Learning"
Expand Down
16 changes: 16 additions & 0 deletions source/isaaclab/docs/CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,22 @@
Changelog
---------


0.47.8 (2025-11-04)
~~~~~~~~~~~~~~~~~~~

Added
^^^^^

* Added ``num_rerenders_on_reset`` parameter to ManagerBasedEnvCfg and DirectRLEnvCfg to configure the number
of render steps to perform after reset. This enables more control over DLSS rendering behavior after reset.

Changed
^^^^^^^

* Added deprecation warning for ``rerender_on_reset`` parameter in ManagerBasedEnv and DirectRLEnv.


0.47.7 (2025-10-31)
~~~~~~~~~~~~~~~~~~~

Expand Down
25 changes: 21 additions & 4 deletions source/isaaclab/isaaclab/envs/direct_rl_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import math
import numpy as np
import torch
import warnings
import weakref
from abc import abstractmethod
from collections.abc import Sequence
Expand Down Expand Up @@ -219,6 +220,20 @@ def __init__(self, cfg: DirectRLEnvCfg, render_mode: str | None = None, **kwargs
# video matches the simulation
self.metadata["render_fps"] = 1 / self.step_dt

# show deprecation message for rerender_on_reset
if self.cfg.rerender_on_reset:
msg = (
"\033[93m\033[1m[DEPRECATION WARNING] DirectRLEnvCfg.rerender_on_reset is deprecated. Use"
" DirectRLEnvCfg.num_rerenders_on_reset instead.\033[0m"
)
warnings.warn(
msg,
FutureWarning,
stacklevel=2,
)
if self.cfg.num_rerenders_on_reset == 0:
self.cfg.num_rerenders_on_reset = 1

# print the environment information
print("[INFO]: Completed setting up the environment...")

Expand Down Expand Up @@ -300,8 +315,9 @@ def reset(self, seed: int | None = None, options: dict[str, Any] | None = None)
self.sim.forward()

# if sensors are added to the scene, make sure we render to reflect changes in reset
if self.sim.has_rtx_sensors() and self.cfg.rerender_on_reset:
self.sim.render()
if self.sim.has_rtx_sensors() and self.cfg.num_rerenders_on_reset > 0:
for _ in range(self.cfg.num_rerenders_on_reset):
self.sim.render()

if self.cfg.wait_for_textures and self.sim.has_rtx_sensors():
while SimulationManager.assets_loading():
Expand Down Expand Up @@ -377,8 +393,9 @@ def step(self, action: torch.Tensor) -> VecEnvStepReturn:
if len(reset_env_ids) > 0:
self._reset_idx(reset_env_ids)
# if sensors are added to the scene, make sure we render to reflect changes in reset
if self.sim.has_rtx_sensors() and self.cfg.rerender_on_reset:
self.sim.render()
if self.sim.has_rtx_sensors() and self.cfg.num_rerenders_on_reset > 0:
for _ in range(self.cfg.num_rerenders_on_reset):
self.sim.render()

# post-step: step interval event
if self.cfg.events:
Expand Down
16 changes: 16 additions & 0 deletions source/isaaclab/isaaclab/envs/direct_rl_env_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,22 @@ class DirectRLEnvCfg:
to reflect the latest states from the reset. This comes at a cost of performance as an additional render
step will be performed after each time an environment is reset.

.. deprecated:: 2.3.1
This attribute is deprecated and will be removed in the future. Please use
:attr:`num_rerenders_on_reset` instead.

To get the same behaviour as setting this parameter to ``True`` or ``False``, set
:attr:`num_rerenders_on_reset` to 1 or 0, respectively.
"""

num_rerenders_on_reset: int = 0
"""Number of render steps to perform after reset. Defaults to 0, which means no render step will be performed after reset.

* When this is 0, no render step will be performed after reset. Data collected from sensors after performing reset will be stale and will not reflect the
latest states in simulation caused by the reset.
* When this is greater than 0, the specified number of extra render steps will be performed to update the sensor data
to reflect the latest states from the reset. This comes at a cost of performance as additional render
steps will be performed after each time an environment is reset.
"""

wait_for_textures: bool = True
Expand Down
25 changes: 21 additions & 4 deletions source/isaaclab/isaaclab/envs/manager_based_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import builtins
import torch
import warnings
from collections.abc import Sequence
from typing import Any

Expand Down Expand Up @@ -190,6 +191,20 @@ def __init__(self, cfg: ManagerBasedEnvCfg):
if self.cfg.export_io_descriptors:
self.export_IO_descriptors()

# show deprecation message for rerender_on_reset
if self.cfg.rerender_on_reset:
msg = (
"\033[93m\033[1m[DEPRECATION WARNING] ManagerBasedEnvCfg.rerender_on_reset is deprecated. Use"
" ManagerBasedEnvCfg.num_rerenders_on_reset instead.\033[0m"
)
warnings.warn(
msg,
FutureWarning,
stacklevel=2,
)
if self.cfg.num_rerenders_on_reset == 0:
self.cfg.num_rerenders_on_reset = 1

def __del__(self):
"""Cleanup for the environment."""
self.close()
Expand Down Expand Up @@ -353,8 +368,9 @@ def reset(
self.scene.write_data_to_sim()
self.sim.forward()
# if sensors are added to the scene, make sure we render to reflect changes in reset
if self.sim.has_rtx_sensors() and self.cfg.rerender_on_reset:
self.sim.render()
if self.sim.has_rtx_sensors() and self.cfg.num_rerenders_on_reset > 0:
for _ in range(self.cfg.num_rerenders_on_reset):
self.sim.render()

# trigger recorder terms for post-reset calls
self.recorder_manager.record_post_reset(env_ids)
Expand Down Expand Up @@ -413,8 +429,9 @@ def reset_to(
self.sim.forward()

# if sensors are added to the scene, make sure we render to reflect changes in reset
if self.sim.has_rtx_sensors() and self.cfg.rerender_on_reset:
self.sim.render()
if self.sim.has_rtx_sensors() and self.cfg.num_rerenders_on_reset > 0:
for _ in range(self.cfg.num_rerenders_on_reset):
self.sim.render()

# trigger recorder terms for post-reset calls
self.recorder_manager.record_post_reset(env_ids)
Expand Down
16 changes: 16 additions & 0 deletions source/isaaclab/isaaclab/envs/manager_based_env_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,22 @@ class ManagerBasedEnvCfg:
to reflect the latest states from the reset. This comes at a cost of performance as an additional render
step will be performed after each time an environment is reset.

.. deprecated:: 2.3.1
This attribute is deprecated and will be removed in the future. Please use
:attr:`num_rerenders_on_reset` instead.

To get the same behaviour as setting this parameter to ``True`` or ``False``, set
:attr:`num_rerenders_on_reset` to 1 or 0, respectively.
"""

num_rerenders_on_reset: int = 0
"""Number of render steps to perform after reset. Defaults to 0, which means no render step will be performed after reset.

* When this is 0, no render step will be performed after reset. Data collected from sensors after performing reset will be stale and will not reflect the
latest states in simulation caused by the reset.
* When this is greater than 0, the specified number of extra render steps will be performed to update the sensor data
to reflect the latest states from the reset. This comes at a cost of performance as additional render
steps will be performed after each time an environment is reset.
"""

wait_for_textures: bool = True
Expand Down
5 changes: 3 additions & 2 deletions source/isaaclab/isaaclab/envs/manager_based_rl_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,9 @@ def step(self, action: torch.Tensor) -> VecEnvStepReturn:
self._reset_idx(reset_env_ids)

# if sensors are added to the scene, make sure we render to reflect changes in reset
if self.sim.has_rtx_sensors() and self.cfg.rerender_on_reset:
self.sim.render()
if self.sim.has_rtx_sensors() and self.cfg.num_rerenders_on_reset > 0:
for _ in range(self.cfg.num_rerenders_on_reset):
self.sim.render()

# trigger recorder terms for post-reset calls
self.recorder_manager.record_post_reset(reset_env_ids)
Expand Down
10 changes: 10 additions & 0 deletions source/isaaclab_tasks/docs/CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
Changelog
---------


0.11.7 (2025-11-06)
~~~~~~~~~~~~~~~~~~~~

Changed
^^^^^^^

* Changed to use of ``num_rerenders_on_reset`` and ``DLAA`` in visuomotor imitation learning environments.


0.11.7 (2025-10-22)
~~~~~~~~~~~~~~~~~~~~

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -323,9 +323,9 @@ def __post_init__(self):
self.sim.dt = 1 / 100
self.sim.render_interval = 2

# # Set settings for camera rendering
self.rerender_on_reset = True
self.sim.render.antialiasing_mode = "OFF" # disable dlss
# Set settings for camera rendering
self.num_rerenders_on_reset = 3
self.sim.render.antialiasing_mode = "DLAA" # Use DLAA for higher quality rendering

# List of image observations in policy observations
self.image_obs_list = ["robot_pov_cam"]
Original file line number Diff line number Diff line change
Expand Up @@ -359,8 +359,8 @@ def __post_init__(self):
self.sim.render_interval = 2

# Set settings for camera rendering
self.rerender_on_reset = True
self.sim.render.antialiasing_mode = "OFF" # disable dlss
self.num_rerenders_on_reset = 3
self.sim.render.antialiasing_mode = "DLAA" # Use DLAA for higher quality rendering

# List of image observations in policy observations
self.image_obs_list = ["robot_pov_cam"]
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
entry_point="isaaclab.envs:ManagerBasedRLEnv",
kwargs={
"env_cfg_entry_point": f"{__name__}.stack_ik_rel_visuomotor_env_cfg:FrankaCubeStackVisuomotorEnvCfg",
"robomimic_bc_cfg_entry_point": f"{agents.__name__}:robomimic/bc_rnn_image_84.json",
"robomimic_bc_cfg_entry_point": f"{agents.__name__}:robomimic/bc_rnn_image_200.json",
},
disable_env_checker=True,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,8 +196,8 @@
},
"obs_randomizer_class": "CropRandomizer",
"obs_randomizer_kwargs": {
"crop_height": 76,
"crop_width": 76,
"crop_height": 181,
"crop_width": 181,
"num_crops": 1,
"pos_enc": false
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,8 @@ def __post_init__(self):
)

# Set settings for camera rendering
self.rerender_on_reset = True
self.sim.render.antialiasing_mode = "OFF" # disable dlss
self.num_rerenders_on_reset = 1
self.sim.render.antialiasing_mode = "OFF"

# List of image observations in policy observations
self.image_obs_list = ["table_cam", "wrist_cam"]
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,8 @@ def __post_init__(self):
self.scene.wrist_cam = CameraCfg(
prim_path="{ENV_REGEX_NS}/Robot/panda_hand/wrist_cam",
update_period=0.0,
height=84,
width=84,
height=200,
width=200,
data_types=["rgb", "distance_to_image_plane"],
spawn=sim_utils.PinholeCameraCfg(
focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 2)
Expand All @@ -219,8 +219,8 @@ def __post_init__(self):
self.scene.table_cam = CameraCfg(
prim_path="{ENV_REGEX_NS}/table_cam",
update_period=0.0,
height=84,
width=84,
height=200,
width=200,
data_types=["rgb", "distance_to_image_plane"],
spawn=sim_utils.PinholeCameraCfg(
focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 2)
Expand All @@ -231,8 +231,8 @@ def __post_init__(self):
)

# Set settings for camera rendering
self.rerender_on_reset = True
self.sim.render.antialiasing_mode = "OFF" # disable dlss
self.num_rerenders_on_reset = 3
self.sim.render.antialiasing_mode = "DLAA" # Use DLAA for higher quality rendering

# List of image observations in policy observations
self.image_obs_list = ["table_cam", "wrist_cam"]
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,8 @@ def __post_init__(self):
)

# Set settings for camera rendering
self.rerender_on_reset = True
self.sim.render.antialiasing_mode = "OFF" # disable dlss
self.num_rerenders_on_reset = 3
self.sim.render.antialiasing_mode = "DLAA" # Use DLAA for higher quality rendering

# List of image observations in policy observations
self.image_obs_list = ["ego_cam", "left_wrist_cam", "right_wrist_cam"]
Expand Down
Loading