Skip to content

[Bug Report] Contact reporting broken after saving primitive RigidObject to USD and reloading #4257

@ggboy-stack

Description

@ggboy-stack

If you are submitting a bug report, please fill in the following details and use the tag [bug].

Describe the bug

When spawning a RigidObject using sim_utils.CylinderCfg (or other primitive configs) directly in the code, contact sensors work as expected. However, if the same object is saved to a USD file and then re-loaded into the scene via UsdFileCfg, the contact sensor fails to retrieve contact point information, throwing the error: GPU contact filter for collider is not supported. This suggests that the saved USD lacks the necessary schema or physics metadata (like "Contact Report" API or specific collision settings) that Isaac Sim/Lab automatically applies when spawning via script.

Steps to reproduce

  1. Define a RigidObjectCfg using sim_utils.CylinderCfg with collision_props.
  2. Attach a ContactSensorCfg to the object.
  3. Run the simulation and verify that contact data (force/points) is being received.
  4. Save the generated object/scene to a .usd file via the Isaac Sim UI or Stage recorder.
  5. Modify the script to load the object using UsdFileCfg(usd_path="path/to/saved.usd").
  6. Run the simulation again.
  7. Observe the error: GPU contact filter for collider is not supported and the absence of contact data.
# Minimal config that works initially but fails after USD round-trip
bolt: RigidObjectCfg = RigidObjectCfg(
    prim_path="{ENV_REGEX_NS}/Bolt",
    spawn=sim_utils.UsdFileCfg(
        usd_path=f"{DATA_DIR}/saved_bolt.usd", # Path to the saved file
        rigid_props=sim_utils.RigidBodyPropertiesCfg(),
        collision_props=sim_utils.CollisionPropertiesCfg(),
    ),
    init_state=RigidObjectCfg.InitialStateCfg(pos=(-0.45, 0.0, 0.45)),
)

System Info

Describe the characteristic of your environment:

  • Commit: [0.50.5]
  • Isaac Sim Version: [5.1.0]
  • OS: Ubuntu 22.04
  • GPU: [RTX 4090]
  • CUDA: [13.0]
  • GPU Driver: [581.42]

Additional context

The issue likely stems from the fact that sim_utils.CylinderCfg handles the application of the PhysxContactReportAPI and sets the contactReportThreshold automatically. When saving to USD, these physics schemas might not be serialized correctly, or the UsdFileCfg loader does not re-enable the "GPU Look-up Table" required for contact reporting on that specific prim. Users often need to manually add meshmergecollision or ensure the Contact Report is enabled in the PhysX properties of the USD.

Checklist

  • I have checked that there is no similar issue in the repo (required)
  • I have checked that the issue is not in running Isaac Sim itself and is related to the repo

Acceptance Criteria

  • Contact sensors can successfully retrieve data from objects loaded via USD files.
  • The GPU contact filter error is resolved by ensuring proper schema application during USD loading in sim_utils.
  • Documentation or warnings are provided if specific USD properties (like Contact Report API) must be toggled manually in the USD layer.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions