-
Notifications
You must be signed in to change notification settings - Fork 857
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes invisible to secondary rays for markers (#316)
# Description Earlier, the markers set "invisible" to secondary rays on the wrong prim (XForm instead of mesh). For context, this property is used when we don't want to see the marker prims on secondary rendering operations used to compute depth and semantic images. However, the markers are still visible on RGB. This MR makes sure that the marker prims are invisible to these rays by setting the property on the correct prim. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots | Before | After | | ------ | ----- | | ![earlier](https://github.com/isaac-orbit/orbit/assets/12863862/140f0afb-86bc-48e9-9812-7e7d9489cecb) | ![now](https://github.com/isaac-orbit/orbit/assets/12863862/643b1ed3-b454-4a94-b2e7-256aed012d13) | ## Checklist - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./orbit.sh --format` - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] 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 - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
- Loading branch information
Showing
5 changed files
with
235 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
158 changes: 158 additions & 0 deletions
158
source/extensions/omni.isaac.orbit/test/markers/check_markers_visibility.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,158 @@ | ||
# Copyright (c) 2022-2023, The ORBIT Project Developers. | ||
# All rights reserved. | ||
# | ||
# SPDX-License-Identifier: BSD-3-Clause | ||
|
||
""" | ||
This script checks if the debug markers are visible from the camera. | ||
To check if the markers are visible on different rendering modalities, you can switch them by going | ||
through the synthetic data generation tool in the Isaac Sim UI. For more information, | ||
please check: https://www.youtube.com/watch?v=vLk-f9LWj48&ab_channel=NVIDIAOmniverse | ||
.. code-block:: bash | ||
# Usage | ||
./orbit.sh -p source/extensions/omni.isaac.orbit/test/markers/check_markers_visibility.py | ||
""" | ||
|
||
from __future__ import annotations | ||
|
||
"""Launch Isaac Sim Simulator first.""" | ||
|
||
|
||
import argparse | ||
|
||
from omni.isaac.orbit.app import AppLauncher | ||
|
||
# add argparse arguments | ||
parser = argparse.ArgumentParser(description="Check if the debug markers are visible from the camera.") | ||
parser.add_argument("--num_envs", type=int, default=2, help="Number of environments to spawn.") | ||
# append AppLauncher cli args | ||
AppLauncher.add_app_launcher_args(parser) | ||
# parse the arguments | ||
args_cli = parser.parse_args() | ||
|
||
# launch omniverse app | ||
app_launcher = AppLauncher(args_cli) | ||
simulation_app = app_launcher.app | ||
|
||
"""Rest everything follows.""" | ||
|
||
import traceback | ||
|
||
import carb | ||
|
||
import omni.isaac.orbit.sim as sim_utils | ||
from omni.isaac.orbit.assets import ArticulationCfg, AssetBaseCfg | ||
from omni.isaac.orbit.assets.config.anymal import ANYMAL_C_CFG | ||
from omni.isaac.orbit.scene import InteractiveScene, InteractiveSceneCfg | ||
from omni.isaac.orbit.sensors import RayCasterCfg, patterns | ||
from omni.isaac.orbit.utils import configclass | ||
|
||
|
||
@configclass | ||
class SensorsSceneCfg(InteractiveSceneCfg): | ||
"""Design the scene with sensors on the robot.""" | ||
|
||
# ground plane | ||
ground = AssetBaseCfg(prim_path="/World/defaultGroundPlane", spawn=sim_utils.GroundPlaneCfg()) | ||
|
||
# lights | ||
dome_light = AssetBaseCfg( | ||
prim_path="/World/Light", spawn=sim_utils.DomeLightCfg(intensity=3000.0, color=(0.75, 0.75, 0.75)) | ||
) | ||
|
||
# robot | ||
robot: ArticulationCfg = ANYMAL_C_CFG.replace(prim_path="{ENV_REGEX_NS}/Robot") | ||
|
||
# sensors | ||
height_scanner = RayCasterCfg( | ||
prim_path="{ENV_REGEX_NS}/Robot/base", | ||
update_period=0.02, | ||
offset=RayCasterCfg.OffsetCfg(pos=(0.0, 0.0, 20.0)), | ||
attach_yaw_only=True, | ||
pattern_cfg=patterns.GridPatternCfg(resolution=0.1, size=[1.6, 1.0]), | ||
debug_vis=True, | ||
mesh_prim_paths=["/World/defaultGroundPlane"], | ||
) | ||
|
||
|
||
def run_simulator( | ||
sim: sim_utils.SimulationContext, | ||
scene: InteractiveScene, | ||
): | ||
"""Run the simulator.""" | ||
|
||
# Define simulation stepping | ||
sim_dt = sim.get_physics_dt() | ||
sim_time = 0.0 | ||
count = 0 | ||
|
||
# Simulate physics | ||
while simulation_app.is_running(): | ||
# Reset | ||
if count % 500 == 0: | ||
# reset counter | ||
count = 0 | ||
# reset the scene entities | ||
# root state | ||
root_state = scene["robot"].data.default_root_state.clone() | ||
root_state[:, :3] += scene.env_origins | ||
scene["robot"].write_root_state_to_sim(root_state) | ||
# set joint positions with some noise | ||
joint_pos, joint_vel = ( | ||
scene["robot"].data.default_joint_pos.clone(), | ||
scene["robot"].data.default_joint_vel.clone(), | ||
) | ||
scene["robot"].write_joint_state_to_sim(joint_pos, joint_vel) | ||
# clear internal buffers | ||
scene.reset() | ||
print("[INFO]: Resetting robot state...") | ||
# Apply default actions to the robot | ||
# -- generate actions/commands | ||
targets = scene["robot"].data.default_joint_pos | ||
# -- apply action to the robot | ||
scene["robot"].set_joint_position_target(targets) | ||
# -- write data to sim | ||
scene.write_data_to_sim() | ||
# perform step | ||
sim.step() | ||
# update sim-time | ||
sim_time += sim_dt | ||
count += 1 | ||
# update buffers | ||
scene.update(sim_dt) | ||
|
||
|
||
def main(): | ||
"""Main function.""" | ||
|
||
# Initialize the simulation context | ||
sim_cfg = sim_utils.SimulationCfg(dt=0.005, substeps=1) | ||
sim = sim_utils.SimulationContext(sim_cfg) | ||
# Set main camera | ||
sim.set_camera_view(eye=[3.5, 3.5, 3.5], target=[0.0, 0.0, 0.0]) | ||
# design scene | ||
scene_cfg = SensorsSceneCfg(num_envs=args_cli.num_envs, env_spacing=2.0) | ||
scene = InteractiveScene(scene_cfg) | ||
# Play the simulator | ||
sim.reset() | ||
# Now we are ready! | ||
print("[INFO]: Setup complete...") | ||
# Run the simulator | ||
run_simulator(sim, scene) | ||
|
||
|
||
if __name__ == "__main__": | ||
try: | ||
# run the main execution | ||
main() | ||
except Exception as err: | ||
carb.log_error(err) | ||
carb.log_error(traceback.format_exc()) | ||
raise | ||
finally: | ||
# close sim app | ||
simulation_app.close() |
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