Isaac Sim 5.1.0. Surface Gripper. The GUI is broken

Isaac Sim Version

5.1.0

Operating System

Ubuntu 24.04

GPU Information

  • Model: RTX5080
  • Driver Version: nvidia-driver-580-open=580.65.06-0ubuntu0.24.04.4

Topic Description

Detailed Description

The GUI for the Surface Gripper extension doesn’t show its’ true state and gripped objects.

Steps to Reproduce

  1. Create a simple example with The Surface Gripper (2x cubes, 1x cone, 1x D6Joint)
  2. Activate the Surface Gripper
  3. Check the Surface Gripper is closed manually in the simulation
  4. Observe the GUI shows its state as “open” and ‘gripped objects’ shows nothing.

Error Messages

No errors were observed.

Screenshots or Videos

Additional Information

I’ve noticed that the the Surface Gripper API has changed (v5.0.0 → v5.1.0):

  • the gripper status was a string, now is a Enum
  • getting the gripped objects: the new function was introduced

So, I assume, the GUI hasn’t changed the API.


By the way, where the code for the GUI and the Surface Gripper extension is located?

Checked the official release v5.1.0 from 21.10.2025. The bug remains. Dear developers, how to fix? @VickNV @Richard3D

Thank you for reporting this issue and for the detailed steps.

From your description, it sounds like the Surface Gripper GUI in Isaac Sim 5.1.0 is out of sync with the backend extension due to recent API changes (status field type and gripped objects access). Your point about the mismatch between 5.0 and 5.1 makes it likely this is indeed a regression.

  • To confirm, did the Surface Gripper GUI work correctly with Isaac Sim 5.0.0 using the same example workflow?
  • Are you observing this problem in both the documentation sample (Surface Gripper Extension — Isaac Sim Documentation) and your custom setups?
  • If you are able to highlight which parts of the documentation or release notes mention these API changes (status type and new object retrieval function), that would help us escalate and track the issue more efficiently.

The relevant code paths are:

  • Core extension: isaacsim/exts/isaacsim.robot.surface_gripper/
  • GUI extension: isaacsim/exts/isaacsim.robot.surface_gripper.ui/
  1. Yes, Surface Gripper GUI works correctly with Isaac Sim 5.0.0.
  2. The documentation is correct. The tutorial code works too. The GUI parts which are created by the tutorial code - they work too. The generic Isaac Sim Properties GUI in the right side of the screen (as depicted on the applied video, I assuming it’s called SurfaceGripperPropertiesWidget) - it doesn’t work in the tutorial.
  3. The source code from the tutorial, which has been changed since the release v5.0.0:

Status API

    def _on_toggle_gripper_button_clicked(self, val=False):
        if self._timeline.is_playing():
            status = self.gripper_interface.get_gripper_status(self.gripper_prim_path)
            if status == surface_gripper.GripperStatus.Open:
                self.gripper_interface.close_gripper(self.gripper_prim_path)
            else:
                self.gripper_interface.open_gripper(self.gripper_prim_path)

Now: if status == surface_gripper.GripperStatus.Open:, before: if status == "Open".

Gripped objects API

    def _on_simulation_step(self, step):
        # Checks if the simulation is playing, and if the stage has been loaded
        if self._timeline.is_playing() and self._stage_id != -1:
            self._toggle_gripper_button_ui()
            objects = self.gripper_interface.get_gripped_objects(self.gripper_prim_path)
            self._models["gripped_objects"].set_value("\n".join(objects))

Now: objects = self.gripper_interface.get_gripped_objects(self.gripper_prim_path), before: objects = gripper_prim.GetRelationship(robot_schema.Relations.GRIPPED_OBJECTS.name)

Thank you for your detailed follow-up and for confirming your findings.

According to information from the internal development team, the current behavior is expected: by default, USD writeback is disabled for the Surface Gripper. As a result, the UI may appear unresponsive or out of sync, since changes aren’t reflected interactively in the GUI. The documentation will be updated in a future release to clarify this behavior.

Questions:

  1. Why does it work in the v5.0.0. The “USD writeback” is enabled by default in v5.0.0?
  2. How to enable “USD writeback” for the Surface Gripper by default in the v5.1.0? I guess, this might be a flag somewhere in the code base? Do I need to file a separate request for the team, who supports Surface Gripper Extension, if you don’t know the details?

Actually, today I need to switch frequently between v5.0.0 and v5.1.0, with all negative consequences (known and unknown).

I develop the simulation scene with Surface Gripper in v5.0.0, because it’s considerably easy to break it, so I use GUI to check everything works.

Then I switch back to v5.1.0 and append cameras to the scene with ROS2 support (somehow our team has troubles with several cameras in v5.0.0, but it’s another long story).

That’s why I want to fix it, at least manually for my own, while the official patch is in the progress.

Anyway, thank you for your support. Looking forward for the documentation update. Honestly, hasn’t caught up with your explanation yet.

Please refer to the release notes for the Surface Gripper extension. You may try enabling USD writeback by calling the setWriteToUsd() API function.

The following code in the Script Editor fixed the problem with Surface Gripper GUI:

import isaacsim.robot.surface_gripper._surface_gripper as surface_gripper
gripper_interface = surface_gripper.acquire_surface_gripper_interface()
gripper_interface.set_write_to_usd(True)

Should be executed once after startup.