Environment
-
Isaac Sim: 5.0.0
-
Isaac Lab: 2.3.0
-
NVIDIA driver: 580
-
OS: Ubuntu 24.04
Summary
I’m following the Spawning Multiple Assets doc to randomize one rigid object per environment using MultiAssetSpawnerCfg. However, I get two objects overlapping in most environments. In env_0 I only see bowl; from env_1 onward I see bowl + another random object at the same pose (overlapping).
If I remove bowl from the list, then clamp becomes the one that always appears everywhere in addition to the random choice, so it looks like one asset is being spawned globally and then another is spawned per-env.
Docs I followed: multi-asset spawning and disabling physics replication for heterogeneous envs. isaac-sim.github.io
What I expect
- Exactly one object per env, chosen at random from my list.
What I observe
-
env_0: only bowl. -
env_1+: bowl + another random object overlapping at/World/envs/env_i/object.
Minimal code (trimmed)
# cfg snippet
object_cfg: RigidObjectCfg = RigidObjectCfg(
prim_path="/World/envs/env_.*/object",
spawn=sim_utils.MultiAssetSpawnerCfg(
assets_cfg=[
sim_utils.UsdFileCfg(usd_path="/home/.../banana.usd"),
sim_utils.UsdFileCfg(usd_path="/home/.../bowl.usd"),
sim_utils.UsdFileCfg(usd_path="/home/.../clamp.usd"),
# ... other USDs ...
],
random_choice=True,
),
init_state=RigidObjectCfg.InitialStateCfg(pos=(0.0, -0.39, 0.54), rot=(1.0, 0.0, 0.0, 0.0)),
)
# scene cfg
scene: InteractiveSceneCfg = InteractiveSceneCfg(
num_envs=2048,
env_spacing=1.5,
replicate_physics=False, # per docs
)
# env setup
def _setup_scene(self):
self.right_hand = Articulation(self.cfg.right_robot_cfg)
self.object = RigidObject(self.cfg.object_cfg) # single spawn site
spawn_ground_plane(prim_path="/World/ground", cfg=GroundPlaneCfg())
self.scene.clone_environments(copy_from_source=False)
self.scene.articulations["right_hand"] = self.right_hand
self.scene.rigid_objects["object"] = self.object
Notes
-
I’m not creating any other
RigidObject/collection with the same prim path. Just the singleRigidObjectabove. -
replicate_physics=Falseis set, per the doc’s requirement when per-env assets differ. isaac-sim.github.io -
Prim path is a regex:
"/World/envs/env_.*/object", matching the doc’s pattern of using regex prims for multi-env spawning. isaac-sim.github.io -
If I comment out
bowl.usd, the symptom persists but the “always present” object simply becomes a different one (e.g.,clamp.usd). -
I tried spawning before and after
clone_environments(copy_from_source=False); behavior persists. -
I also attempted clearing any existing prims under
/World/envs/env_*/object(viaomni.usd.get_context().get_stage().RemovePrim(path)in a loop) prior to spawning, but it doesn’t change the duplication. (Doc reference for the general multi-asset flow here. isaac-sim.github.io)
Questions
-
Is there any known issue in Isaac Lab 2.3.0 + Isaac Sim 5.0.0 where
MultiAssetSpawnerCfgcould spawn an extra “default” asset (e.g., the first in the list) in addition to the random choice? -
Could
clone_environments(copy_from_source=False)still be cloning a previously spawned prim in some hidden step? The behavior (env_0 vs env_1+) suggests one spawn might be happening pre-clone while another happens post-clone, but I only callRigidObject(self.cfg.object_cfg)once as shown. -
Are there asset-structure constraints that could cause a fallback/duplicate spawn? (I saw the note about “similar asset structuring” for articulations; does anything analogous apply to rigid objects that might trigger unexpected behavior?) isaac-sim.github.io
-
Is there a recommended way to force a single authoritative spawn per env for a regex prim path (e.g., resolve all env paths first, then spawn exactly once per resolved path), beyond what
RigidObjectCfgdoes internally? -
Any debugging tips to log which spawner creates each prim (e.g., an internal flag or verbose mode) so I can tell which call/site produced the “always present” object?
Doc references I used
- Spawning Multiple Assets (MultiAssetSpawnerCfg / MultiUsdFileCfg and the
replicate_physics=Falserequirement). isaac-sim.github.io
Thanks in advance for any pointers! If there’s a better minimal pattern for “exactly one random rigid object per env under the same prim path,” I’d love to try it.
fig 1. Import both objects.
fig 2. Environment

