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?
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.
Yes, Surface Gripper GUI works correctly with Isaac Sim 5.0.0.
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.
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))
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.
Why does it work in the v5.0.0. The “USD writeback” is enabled by default in v5.0.0?
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.