Scatter_2d with check_for_collisions=3 Still Allows Collisions in Hospital Scene (Isaac Sim 5.1.0)

Hello,
I am working on a dataset-generation workflow using NVIDIA Isaac Sim 5.1.0 (Docker container) and the official Hospital USD scene. I am trying to use Replicator → scatter_2d to randomize the positions of four movable objects(wheelchairs + supply carts) on a specific floor mesh, while ensuring that they do not collide with the static green chairs in the waiting area.

Environment

  • Isaac Sim 5.1.0 (official NVIDIA Docker container)

  • Using the default Hospital USD shipped with Isaac Sim

  • Using Replicator scatter_2d in Script Editor (GUI mode)

  • No additional physics simulation is running; objects are placed kinematically.

However, even when I set:

rep.randomizer.scatter_2d(
surface_prims=surface,
check_for_collisions=3, # avoid all objects
)

the randomized wheelchair can still end up intersecting with the static green chairs, as in the image below:

Here is my replicator version and scatter_2d version:

Replicator version: unknown

scatter_2d function signature:
(surface_prims: Union[omni.replicator.core.scripts.utils.utils.ReplicatorItem, List[str]], no_coll_prims: Union[omni.replicator.core.scripts.utils.utils.ReplicatorItem, List[str]] = None, min_samp: Tuple[float, float, float] = (None, None, None), max_samp: Tuple[float, float, float] = (None, None, None), seed: int = None, offset: int = 0, check_for_collisions: bool = False, input_prims: Union[omni.replicator.core.scripts.utils.utils.ReplicatorItem, List[str]] = None, name: Optional[str] = None) → omni.replicator.core.scripts.utils.utils.ReplicatorItem

Parameters:

  • surface_prims: required
  • no_coll_prims: None
  • min_samp: (None, None, None)
  • max_samp: (None, None, None)
  • seed: None
  • offset: 0
  • check_for_collisions: False
  • input_prims: None
  • name: None

scatter_2d docstring:
Scatter input prims across the surface of the specified surface prims.

Args:
    surface_prims: The prims across which to scatter the input prims. These can be meshes or GeomSubsets which
        specify a subset of a mesh's polygons on which to scatter.
    no_coll_prims: Existing prim(s) to prevent collisions with - if any prims are passed they will be checked for
        collisions which may slow down compute, regardless if \`\`check_for_collisions\`\` is \`\`True\`\` or \`\`False\`\`.
    min_samp: The minimum position in global space to sample from.
    max_samp: The maximum position in global space to sample from.
    seed: Seed to use as initialization for the pseudo-random number generator. If not specified, the global seed
        will be used.
    offset: The distance the prims should be offset along the normal of the surface of the mesh.
    check_for_collisions: Whether the scatter operation should ensure that objects are not intersecting.

            - \`\`0\`\`: No collision checking (fastest)
            - \`\`1\`\`: Check for collisions among the sampled input prims,
            - \`\`2\`\`: No collision checking among sampled input prims, but compute collision convex meshes for all
              the prims on the stage by recursively traversing the stage, and make sure the sampled prims do not
              collide with any of them.
            - \`\`3\`\`: Make sure the sampled prims don't collide with anything (slowest)

    input_prims: The prims to be modified. If using \`\`with\`\` syntax, this argument can be omitted.
    name (optional): A name for the graph node.

Why does check_for_collisions=3 still allow collisions in the Hospital scene?