-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes outdated sensor data after reset (#1276)
# Description This change adds a call to `update_articulations_kinematic()` after performing reset in an environment to ensure that non-render sensors are updated after performing reset. ## Type of change <!-- As you go through the list, delete the ones that are not applicable. --> - Bug fix (non-breaking change which fixes an issue) ## Checklist - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] 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 <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task --> --------- Signed-off-by: Kelly Guo <[email protected]> Signed-off-by: Kelly Guo <[email protected]>
- Loading branch information
1 parent
b473b4d
commit b6a7729
Showing
7 changed files
with
128 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
89 changes: 89 additions & 0 deletions
89
source/extensions/omni.isaac.lab/test/sensors/test_outdated_sensor.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
# Copyright (c) 2024, The Isaac Lab Project Developers. | ||
# All rights reserved. | ||
# | ||
# SPDX-License-Identifier: BSD-3-Clause | ||
|
||
"""Launch Isaac Sim Simulator first.""" | ||
|
||
from omni.isaac.lab.app import AppLauncher, run_tests | ||
|
||
# launch the simulator | ||
app_launcher = AppLauncher(headless=True, enable_cameras=True) | ||
simulation_app = app_launcher.app | ||
|
||
|
||
"""Rest everything follows.""" | ||
|
||
import gymnasium as gym | ||
import shutil | ||
import tempfile | ||
import torch | ||
import unittest | ||
|
||
import carb | ||
import omni.usd | ||
|
||
import omni.isaac.lab_tasks # noqa: F401 | ||
from omni.isaac.lab_tasks.utils.parse_cfg import parse_env_cfg | ||
|
||
|
||
class TestFrameTransformerAfterReset(unittest.TestCase): | ||
"""Test cases for checking FrameTransformer values after reset.""" | ||
|
||
@classmethod | ||
def setUpClass(cls): | ||
# this flag is necessary to prevent a bug where the simulation gets stuck randomly when running the | ||
# test on many environments. | ||
carb_settings_iface = carb.settings.get_settings() | ||
carb_settings_iface.set_bool("/physics/cooking/ujitsoCollisionCooking", False) | ||
|
||
def setUp(self): | ||
# create a temporary directory to store the test datasets | ||
self.temp_dir = tempfile.mkdtemp() | ||
|
||
def tearDown(self): | ||
# delete the temporary directory after the test | ||
shutil.rmtree(self.temp_dir) | ||
|
||
def test_action_state_reocrder_terms(self): | ||
"""Check FrameTransformer values after reset.""" | ||
for task_name in ["Isaac-Stack-Cube-Franka-IK-Rel-v0"]: | ||
for device in ["cuda:0", "cpu"]: | ||
for num_envs in [1, 2]: | ||
with self.subTest(task_name=task_name, device=device): | ||
omni.usd.get_context().new_stage() | ||
|
||
# parse configuration | ||
env_cfg = parse_env_cfg(task_name, device=device, num_envs=num_envs) | ||
|
||
# create environment | ||
env = gym.make(task_name, cfg=env_cfg) | ||
|
||
# disable control on stop | ||
env.unwrapped.sim._app_control_on_stop_handle = None # type: ignore | ||
|
||
# reset environment | ||
obs = env.reset()[0] | ||
|
||
# get the end effector position after the reset | ||
pre_reset_eef_pos = obs["policy"]["eef_pos"].clone() | ||
print(pre_reset_eef_pos) | ||
|
||
# step the environment with idle actions | ||
idle_actions = torch.zeros(env.action_space.shape, device=env.unwrapped.device) | ||
obs = env.step(idle_actions)[0] | ||
|
||
# get the end effector position after the first step | ||
post_reset_eef_pos = obs["policy"]["eef_pos"] | ||
print(post_reset_eef_pos) | ||
|
||
# check if the end effector position is the same after the reset and the first step | ||
print(torch.all(torch.isclose(pre_reset_eef_pos, post_reset_eef_pos))) | ||
self.assertTrue(torch.all(torch.isclose(pre_reset_eef_pos, post_reset_eef_pos))) | ||
|
||
# close the environment | ||
env.close() | ||
|
||
|
||
if __name__ == "__main__": | ||
run_tests() |