Multiple Humanoids robots Collapse on Spawn in Isaac Sim

  1. Isaac Sim: 4.2.0

  2. OS: Ubuntu 22.04

  3. Model: NVIDIA GeForce RTX 4090

Topic Description
Multi-Robot Humanoid Spawn

Detailed Description

Hi everyone, I hope this is the right place to ask.

I’m working on a 3v3 simulation with Booster K1 humanoid robots, and I’m facing an issue where spawning multiple robots causes them to lose articulation stability. The single-robot demo works perfectly, but the moment I spawn a second robot using add_reference_to_stage(), both robots collapse into a limp, ragdoll-like state with no apparent joint stiffness.

What I’m trying to achieve:

  • Spawn 2 K1 humanoid robots at different positions

  • Have each robot maintain articulation stability

  • Later enable independent ROS 2 control via namespaced topics (/robot1/..., /robot2/...)
    (Actually I’m not sure. It seems to be directly connected to FastDDS, not ROS topics, and I’m not sure what the communication is..)

What actually happens:

  • Both robots spawn with correct visual appearance and positioning

  • As soon as the simulation runs, both robots go completely limp (zero joint resistance, ragdoll behavior)

  • No Isaac Sim errors during spawn

  • The same USD and setup work flawlessly with a single robot


Steps to Reproduce

  1. Load the provided USD files into Isaac Sim

  2. Spawn first robot:

add_reference_to_stage(usd_path="k1.usd", prim_path="/World/robot1")
  1. Spawn second robot:
add_reference_to_stage(usd_path="k1.usd", prim_path="/World/robot2")

Expected: Both robots stand and maintain posture
Actual: Both robots immediately collapse like ragdolls


Error Messages

No explicit errors in the Isaac Sim console. Only these warnings (which also appear in the working single-robot case):


Screenshots or Videos


Additional Information – What I’ve Tried

  • Physics parameters: Checked articulation root, joint stiffness, damping values – all match the working single-robot setup

  • Prim initialization timing: Added explicit waits with simulation_app.update() loops to ensure prims fully initialize before physics starts

  • Different spawn methods: Tried both referencing and direct USD loading – same result

  • Namespace isolation: Verified prim paths are unique (/World/robot1, /World/robot2)

  • Asset validation: Single USD works alone; the issue only appears with 2+ instances


Questions for the Isaac Sim Community

I know this setup eventually involves ROS 2, but in this minimal reproduction no ROS nodes are running; it’s purely Isaac Sim and USD/physics. I’d really appreciate insights on:

  1. Multi-articulated robot spawning: Has anyone successfully spawned multiple complex humanoid/articulated robots (similar to T1, H1, Atlas, etc.) in the same Isaac Sim scene using repeated references to the same USD?

  2. USD instance physics: When calling add_reference_to_stage() multiple times with the same USD, are there known physics or articulation-root conflicts I should be aware of (e.g., shared names, paths, or internal identifiers)?

  3. Physics solver scaling: Do physics solver parameters (iteration counts, substeps) typically need adjustment when simulating multiple humanoid robots in the same scene?


The breakdown occurs before any external commands are applied, so I believe the root cause is in how I’m instantiating and configuring the humanoid USDs in Isaac Sim. I’m trying to understand whether this is:

I’m sure there’s something I missed and misread because I’m not good at. Or maybe I’m not finding a library for multi-robot that’s not this way.. I’d really appreciate any help..

Thank you very much for taking the time to read this and for any insights you can share.

USD Files:

Hi, I don’t see the USD file in the provided link, can you attach it here?

For your questions, yes, you can call add_reference_to_stage() multiple times with the same humanoid/articulated robot USD, as long as each instance is placed under a unique prim path and the USD is authored correctly for instancing (separate articulations, no hard‑coded world paths).
To avoid “weird” behavior when duplicating complex humanoids, make sure the USD is authored with:

  • A single Articulation root under the referenced prim (no links or joints defined directly under /World).
  • No absolute stage paths baked inside (e.g., collisions, joints, or controllers that point to /World/… instead of relative paths under the robot root).
  • Unique names only within the robot prim, not globally on the stage, so instancing under different prim paths does not create name conflicts.

If multiple humanoids “collapse” or behave incorrectly when you reuse the same USD, the cause is usually not add_reference_to_stage() itself but one of these:

  • All instances start in the same location and interpenetrate; separate them in x/y before or right after spawn (e.g., via World/Articulation position).
  • The default joint state (e.g., standing pose) is not written to each articulation after creation, so they drop under gravity; use the robot’s default_joint_pos/default_joint_vel and write them to sim for each instance.
  • Physics settings (substeps, iterations) are too low for many high-DOF humanoids; increasing solver iterations and substeps is recommended for multiple articulated robots.
1 Like

Thank you so much for the detailed explanation! I think I may have shared the wrong link earlier —

https://booster.feishu.cn/wiki/Ly55wYhRZivZdhkou09cs1oPn6e

k1 USD.zip (4.8 MB)

here is the correct document along with the USD file attached.
Would you mind taking a look and letting me know if this setup is valid for running multiple humanoids in Isaac Sim?

Thanks for sharing the USD file. There’s no difference for me to spawn only one robot or two, since I didn’t send control commands to the robot, when running simulation it will collapse. Since one instance setup works for you, I think you should check the controls you sent to the robots, probably only one robot can get the controls and others can’t.