Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
1 change: 1 addition & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ Guidelines for modifications:
* Cameron Upright
* Cathy Y. Li
* Cheng-Rong Lai
* Chenyu Cao
* Chenyu Yang
* Connor Smith
* CY (Chien-Ying) Chen
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Fixed
^^^^^

* Fixed camera renderers retaining pre-reset transforms when an environment
resets state without advancing the physics-step counter.
2 changes: 2 additions & 0 deletions source/isaaclab/isaaclab/envs/direct_marl_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -737,6 +737,8 @@ def _reset_idx(self, env_ids: Sequence[int]):
# reset the episode length buffer
self.episode_length_buf[env_ids] = 0

self.sim.render_context.reset_scene_state_cadence()

"""
Implementation-specific functions.
"""
Expand Down
2 changes: 2 additions & 0 deletions source/isaaclab/isaaclab/envs/direct_rl_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,8 @@ def _reset_idx(self, env_ids: Sequence[int]):
# reset the episode length buffer
self.episode_length_buf[env_ids] = 0

self.sim.render_context.reset_scene_state_cadence()

"""
Implementation-specific functions.
"""
Expand Down
2 changes: 2 additions & 0 deletions source/isaaclab/isaaclab/envs/manager_based_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -658,3 +658,5 @@ def _reset_idx(self, env_ids: Sequence[int]):
# -- recorder manager
info = self.recorder_manager.reset(env_ids)
self.extras["log"].update(info)

self.sim.render_context.reset_scene_state_cadence()
2 changes: 2 additions & 0 deletions source/isaaclab/isaaclab/envs/manager_based_rl_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -409,3 +409,5 @@ def _reset_idx(self, env_ids: Sequence[int]):

# reset the episode length buffer
self.episode_length_buf[env_ids] = 0

self.sim.render_context.reset_scene_state_cadence()
15 changes: 15 additions & 0 deletions source/isaaclab/test/envs/test_direct_marl_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,18 @@ def test_initialization(device):
assert len(env.action_spaces) == 2
# close the environment
env.close()


def test_reset_invalidates_renderer_scene_state_cadence():
"""A same-step multi-agent reset must republish renderer scene state."""
sim_utils.create_new_stage()
env = DirectMARLEnv(cfg=get_empty_base_env_cfg())
try:
env._get_observations = lambda: {}
env.sim.render_context._last_scene_state_step = 7

env.reset()

assert env.sim.render_context._last_scene_state_step is None
finally:
env.close()
Comment thread
ruziniuuuuu marked this conversation as resolved.
Outdated
24 changes: 24 additions & 0 deletions source/isaaclab/test/envs/test_env_rendering_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,30 @@ def wrapped_step(dt):
SimulationContext.clear_instance()


@pytest.mark.parametrize("env_type", ["manager_based_env", "manager_based_rl_env", "direct_rl_env"])
def test_env_reset_invalidates_renderer_scene_state_cadence(env_type):
"""A same-step reset must force the next camera read to republish scene state."""
env = None
try:
sim_utils.create_new_stage()
if env_type == "manager_based_env":
env = create_manager_based_env(render_interval=1)
elif env_type == "manager_based_rl_env":
env = create_manager_based_rl_env(render_interval=1)
else:
env = create_direct_rl_env(render_interval=1)

env.sim.render_context._last_scene_state_step = 7
env.reset()

assert env.sim.render_context._last_scene_state_step is None
finally:
if env is not None:
env.close()
else:
SimulationContext.clear_instance()


@pytest.mark.parametrize("env_type", ["manager_based_env", "manager_based_rl_env", "direct_rl_env"])
def test_env_render_false_skips_rendering(env_type, physics_callback, render_callback):
"""Test that setting render_enabled=False skips all rendering while physics continues."""
Expand Down