Failed to get action graph load from .usd in standalone mode

Note: For any Isaac Lab topics, please submit your topic to its GitHub repo ( GitHub - isaac-sim/IsaacLab: Unified framework for robot learning built on NVIDIA Isaac Sim ) following the instructions provided on Isaac Lab’s Contributing Guidelines ( Contribution Guidelines — Isaac Lab Documentation ).

Please provide all relevant details below before submitting your post. This will help the community provide more accurate and timely assistance. After submitting, you can check the appropriate boxes. Remember, you can always edit your post later to include additional information if needed.

Isaac Sim Version

5.1.0

Operating System

Ubuntu 22.04

GPU Information

  • Model: RTX 4070
  • Driver Version: 580.95.05

Topic Description

When adding a Action Graph saved in .usd file as reference to stage in isaac standalone mode, og.get_graph_by_path cannot find the graph added.

Detailed Description

What I’m trying to do: add a preconfigured action graph to stage.

The reason not using og.Controller.edit is that isaacsim.ros2.bridge.ROS2PublishTransformTree will constanly cause invalid prim dereference. But handcraft action graph could work smoothly. So I decided to build action graph beforehand and load it into the stage. And use og.Controller.attribute().set() to configure.

What expected to happen:
After I add action graph to stage

        graph_prim_path = f"{prim_path}/ros2_graph"

        stage_utils.add_reference_to_stage(
            usd_path="stage/ros2_graph.usd",
            prim_path=prim_path
        )

I could get graph and node reference by

        graph = og.get_graph_by_path(graph_prim_path) # now return None

What is actually happen:

I cannot access the action graph in python script even I could modify it in isaac UI.

Steps to Reproduce

  1. load action graph usd when timeline is paused

  2. play timeline and do simulation_app.update()

  3. og.get_graph_by_path will return None

(Add more steps as needed)

Error Messages

2025-12-15 16:06:06,983 [ERROR] [add_mir] OmniGraphError: Could not find OmniGraph node from node description ‘/World/MiRs/mir/mir1/ros2_graph/on_playback_tick’ - Node path ‘/World/MiRs/mir/mir1/ros2_graph/on_playback_tick’ was not an OmniGraph node

raise og.OmniGraphValueError(f"Could not find OmniGraph node from node description ‘{node}’ - {error}")

Screenshots or Videos

(If applicable, add screenshots or links to videos that demonstrate the issue)

Additional Information

What I’ve Tried

I have tried use og.Controller.edit, but in this case it will constantly crash as long as I connect OnPlaybackTick and ROS2PublishTransformTree together.

Related Issues

(If you’re aware of any related issues or forum posts, please link them here)

Additional Context

(Add any other context about the problem here)

Note: For Isaac Sim support, the community is gradually transitioning from this forum to the Isaac Sim GitHub repository so that questions and issues can be tracked, searched, and resolved more efficiently in one place. Whenever possible, please create a GitHub Discussion or Issue there instead of starting a new forum topic.

Thank you for reporting this issue. I’ve reviewed your problem and understand that og.get_graph_by_path() returns None when loading action graphs from USD references in standalone mode, even though the graph appears correctly in the Isaac Sim UI.

Initial Observations

Based on similar patterns in our test suite, this issue typically relates to timing and initialization order when loading USD references containing action graphs. The graph prims may not be fully initialized immediately after add_reference_to_stage().

Quick Suggestions to Try

Before we dig deeper, could you try adding explicit stage updates after loading your reference?

graph_prim_path = f"{prim_path}/ros2_graph"

stage_utils.add_reference_to_stage(
    usd_path="stage/ros2_graph.usd",
    prim_path=prim_path
)

# Add multiple update cycles
for _ in range(5):
    simulation_app.update()

# Verify the prim exists
stage = omni.usd.get_context().get_stage()
graph_prim = stage.GetPrimAtPath(graph_prim_path)
print(f"Prim valid: {graph_prim.IsValid()}, Type: {graph_prim.GetTypeName()}")

# Now try accessing the graph
graph = og.get_graph_by_path(graph_prim_path)
print(f"Graph found: {graph is not None}")

Request for Minimal Reproducible Example

To better assist you, could you share a minimal reproducible example? This would help us identify the exact issue and provide a targeted solution.

Please include:

  • Minimal standalone Python script that reproduces the issue (including imports and initialization)
  • The USD file (ros2_graph.usd)
  • Console output showing any warnings or errors (even if they seem unrelated)

Regarding the ROS2PublishTransformTree Crash

You mentioned that og.Controller.edit with ROS2PublishTransformTree causes an “invalid prim dereference” crash. This likely indicates a separate issue that should be tracked independently from the action graph loading behavior.​

To move this forward, consider opening a discussion in the Isaac Sim GitHub repository with a minimal reproducible example of that crash, and include a link back to this forum topic so the two reports can be cross‑referenced.

Looking forward to your response!

Hello!

We noticed that this topic hasn’t received any recent responses, so we are closing it for now to help keep the forum organized.

If you’re still experiencing this issue or have additional questions, please feel free to create a new topic with updated details. When doing so, we recommend mentioning or linking to this original topic in your new post—this helps provide context and makes it easier for others to assist you.

Thank you for being part of the NVIDIA Isaac Sim community.

Best regards,
The NVIDIA Isaac Sim Forum Team