How query the Surface Gripper instance in the current scene?

I have a scene setup in Isaac Sim 4.0 which has a robotic arm that uses a SurfaceGripper.
I want to output the state of the surface gripper (open or closed) in ROS2 similar to how JointStates are output in ROS2.

Based on what I understand I can add elements to the action graph so that on Simulation Playback Tick I read the state of gripper and send it to ROS2 output.

I most Surface Gripper tutorials such as: Surface Gripper Extension — Omniverse IsaacSim latest documentation (
The surface gripper instance is known and saved to a variable in code.


  • Given the primative I know the SurfaceGripper.parentPrimative is applied to how can I get access to the surface gripper instance?

  • If I want to output SurfaceGripper state to ROS2, is writing a custom graph node required?
    ROS 2 Python Custom OmniGraph Node — Omniverse IsaacSim latest documentation (

  • What are other alternative solutions?
    I thought of creating a joint the mimics the state of the surface gripper by querying surface gripper state and applying it to join articulation controller and this allows me to leverage the native ROS2 JointStates node, but that seems like a hack and I don’t think I could have joints on non-rigid bodies that are only for visualization