Skip to content

Commit f5107ff

Browse files
committed
add missing cloning pieces into test cases
1 parent 8d854da commit f5107ff

File tree

4 files changed

+51
-19
lines changed

4 files changed

+51
-19
lines changed

source/isaaclab/test/assets/test_articulation.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import isaacsim.core.utils.prims as prim_utils
2424
import pytest
2525
from isaacsim.core.version import get_version
26-
26+
from isaaclab.scene import cloner
2727
import isaaclab.sim as sim_utils
2828
import isaaclab.utils.math as math_utils
2929
import isaaclab.utils.string as string_utils
@@ -178,6 +178,14 @@ def generate_articulation(
178178
prim_utils.create_prim(f"/World/Env_{i}", "Xform", translation=translations[i][:3])
179179
articulation = Articulation(articulation_cfg.replace(prim_path="/World/Env_.*/Robot"))
180180

181+
cloner.usd_replicate(
182+
stage=prim_utils.get_current_stage(),
183+
sources=["/World/Env_0"],
184+
destinations=["/World/Env_{}"],
185+
env_ids=torch.arange(num_articulations),
186+
positions=translations,
187+
)
188+
181189
return articulation, translations
182190

183191

source/isaaclab/test/assets/test_deformable_object.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import isaaclab.sim as sim_utils
2828
import isaaclab.utils.math as math_utils
29+
from isaaclab.scene import cloner
2930
from isaaclab.assets import DeformableObject, DeformableObjectCfg
3031
from isaaclab.sim import build_simulation_context
3132

@@ -85,7 +86,13 @@ def generate_cubes_scene(
8586
init_state=DeformableObjectCfg.InitialStateCfg(pos=(0.0, 0.0, height), rot=initial_rot),
8687
)
8788
cube_object = DeformableObject(cfg=cube_object_cfg)
88-
89+
cloner.usd_replicate(
90+
stage=prim_utils.get_current_stage(),
91+
sources=["/World/Table_0"],
92+
destinations=["/World/Table_{}"],
93+
env_ids=torch.arange(num_cubes),
94+
positions=origins,
95+
)
8996
return cube_object
9097

9198

source/isaaclab/test/sensors/test_multi_tiled_camera.py

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,24 @@
3030

3131
import isaaclab.sim as sim_utils
3232
from isaaclab.sensors.camera import TiledCamera, TiledCameraCfg
33+
from isaaclab.scene import cloner
34+
35+
36+
def _replicate_group_origins(group_index: int, num_cameras: int) -> None:
37+
"""Replicate `/World/Origin_{i}_0` subtree to `/World/Origin_{i}_{1..N-1}` with preserved translations."""
38+
stage = prim_utils.get_current_stage()
39+
fmt = f"/World/Origin_{group_index}_{{}}"
40+
get_translate = (
41+
lambda prim_path: stage.GetPrimAtPath(prim_path).GetAttribute("xformOp:translate").Get()
42+
) # noqa: E731
43+
positions = torch.tensor([get_translate(fmt.format(j)) for j in range(num_cameras)])
44+
cloner.usd_replicate(
45+
stage=stage,
46+
sources=[fmt.format(0)],
47+
destinations=[fmt],
48+
env_ids=torch.arange(num_cameras),
49+
positions=positions,
50+
)
3351

3452

3553
@pytest.fixture()
@@ -82,8 +100,10 @@ def test_multi_tiled_camera_init(setup_camera):
82100

83101
# Create camera
84102
camera_cfg = copy.deepcopy(camera_cfg)
85-
camera_cfg.prim_path = f"/World/Origin_{i}.*/CameraSensor"
103+
camera_cfg.prim_path = f"/World/Origin_{i}_.*/CameraSensor"
86104
camera = TiledCamera(camera_cfg)
105+
# Ensure each origin in this group gets a camera
106+
_replicate_group_origins(i, num_cameras_per_tiled_camera)
87107
tiled_cameras.append(camera)
88108

89109
# Check simulation parameter is set correctly
@@ -178,8 +198,10 @@ def test_all_annotators_multi_tiled_camera(setup_camera):
178198
# Create camera
179199
camera_cfg = copy.deepcopy(camera_cfg)
180200
camera_cfg.data_types = all_annotator_types
181-
camera_cfg.prim_path = f"/World/Origin_{i}.*/CameraSensor"
201+
camera_cfg.prim_path = f"/World/Origin_{i}_.*/CameraSensor"
182202
camera = TiledCamera(camera_cfg)
203+
# Ensure each origin in this group gets a camera
204+
_replicate_group_origins(i, num_cameras_per_tiled_camera)
183205
tiled_cameras.append(camera)
184206

185207
# Check simulation parameter is set correctly
@@ -278,9 +300,11 @@ def test_different_resolution_multi_tiled_camera(setup_camera):
278300

279301
# Create camera
280302
camera_cfg = copy.deepcopy(camera_cfg)
281-
camera_cfg.prim_path = f"/World/Origin_{i}.*/CameraSensor"
303+
camera_cfg.prim_path = f"/World/Origin_{i}_.*/CameraSensor"
282304
camera_cfg.height, camera_cfg.width = resolutions[i]
283305
camera = TiledCamera(camera_cfg)
306+
# Ensure each origin in this group gets a camera
307+
_replicate_group_origins(i, num_cameras_per_tiled_camera)
284308
tiled_cameras.append(camera)
285309

286310
# Check simulation parameter is set correctly
@@ -349,8 +373,10 @@ def test_frame_offset_multi_tiled_camera(setup_camera):
349373

350374
# Create camera
351375
camera_cfg = copy.deepcopy(camera_cfg)
352-
camera_cfg.prim_path = f"/World/Origin_{i}.*/CameraSensor"
376+
camera_cfg.prim_path = f"/World/Origin_{i}_.*/CameraSensor"
353377
camera = TiledCamera(camera_cfg)
378+
# Ensure each origin in this group gets a camera
379+
_replicate_group_origins(i, num_cameras_per_tiled_camera)
354380
tiled_cameras.append(camera)
355381

356382
# modify scene to be less stochastic
@@ -417,9 +443,10 @@ def test_frame_different_poses_multi_tiled_camera(setup_camera):
417443

418444
# Create camera
419445
camera_cfg = copy.deepcopy(camera_cfg)
420-
camera_cfg.prim_path = f"/World/Origin_{i}.*/CameraSensor"
446+
camera_cfg.prim_path = f"/World/Origin_{i}_.*/CameraSensor"
421447
camera_cfg.offset = TiledCameraCfg.OffsetCfg(pos=positions[i], rot=rotations[i], convention="ros")
422448
camera = TiledCamera(camera_cfg)
449+
_replicate_group_origins(i, num_cameras_per_tiled_camera)
423450
tiled_cameras.append(camera)
424451

425452
# Play sim

source/isaaclab/test/sim/test_spawn_shapes.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -249,25 +249,18 @@ def test_spawn_cone_clones_invalid_paths(sim):
249249

250250
def test_spawn_cone_clones(sim):
251251
"""Test spawning of cone clones."""
252-
num_clones = 10
253-
for i in range(num_clones):
254-
prim_utils.create_prim(f"/World/env_{i}", "Xform", translation=(i, i, 0))
252+
prim_utils.create_prim("/World/env_0", "Xform", translation=(0, 0, 0))
255253
# Spawn cone on valid cloning path
256254
cfg = sim_utils.ConeCfg(radius=1.0, height=2.0, copy_from_source=True)
257255
prim = cfg.func("/World/env_.*/Cone", cfg)
258256
# Check validity
259257
assert prim.IsValid()
260258
assert prim_utils.get_prim_path(prim) == "/World/env_0/Cone"
261-
# find matching prims
262-
prims = prim_utils.find_matching_prim_paths("/World/env_*/Cone")
263-
assert len(prims) == num_clones
264259

265260

266261
def test_spawn_cone_clone_with_all_props_global_material(sim):
267262
"""Test spawning of cone clones with global material reference."""
268-
num_clones = 10
269-
for i in range(num_clones):
270-
prim_utils.create_prim(f"/World/env_{i}", "Xform", translation=(i, i, 0))
263+
prim_utils.create_prim("/World/env_0", "Xform", translation=(0, 0, 0))
271264
# Spawn cone on valid cloning path
272265
cfg = sim_utils.ConeCfg(
273266
radius=1.0,
@@ -284,9 +277,6 @@ def test_spawn_cone_clone_with_all_props_global_material(sim):
284277
# Check validity
285278
assert prim.IsValid()
286279
assert prim_utils.get_prim_path(prim) == "/World/env_0/Cone"
287-
# find matching prims
288-
prims = prim_utils.find_matching_prim_paths("/World/env_*/Cone")
289-
assert len(prims) == num_clones
290280
# find matching material prims
291281
prims = prim_utils.find_matching_prim_paths("/Looks/visualMaterial.*")
292282
assert len(prims) == 1

0 commit comments

Comments
 (0)