Hi All,
I’m currently trying to pick up an object with internal joints using the included UR10 and SurfaceGripper classes. The simulation runs fine (and picks up the object) when there is no joint in the object (i.e. just a simple cube) or if there are no joints in the object I’m trying to pick, but fails with the following message as soon as there is a joint connecting the rigid body that is picked up to something else (e.g., like in a box with a hinge where the lid is lifted or a simplified book with a single hinge). I’m using the standard PickPlaceController from omni.isaac.universal_robots.controllers. Anyone got an idea how to fix this?
This is the error log:
2023-09-18 12:10:47 [15,393,615ms] [Error] [omni.physx.plugin] PhysX error: PxD6JointCreate: actors must be different, FILE /buildAgent/work/16dcef52b68a730f/source/physxextensions/src/ExtD6Joint.cpp, LINE 1141
2023-09-18 12:10:47 [15,393,615ms] [Error] [omni.isaac.dynamic_control.plugin] Failed to create D6 joint
2023-09-18 12:10:47 [15,393,615ms] [Error] [omni.isaac.dynamic_control.plugin] DcSetD6JointProperties: Invalid or expired D6 Joint handle
2023-09-18 12:10:47 [15,393,615ms] [Error] [omni.isaac.dynamic_control.plugin] DcGetD6JointConstraintIsBroken: Invalid or expired D6 Joint handle
This is how I create the UR10, the gripper and the item:
UR10 (from omni.isaac.universal_robots import UR10):
self._ur10_robot = UR10(prim_path=ur10_prim_path, name=ur10_robot_name, attach_gripper=True)
Gripper (from omni.isaac.manipulators.grippers.surface_gripper import SurfaceGripper):
self._gripper = SurfaceGripper(end_effector_prim_path=self._end_effector_prim_path, translate=0.1611, direction="x")
My item:
self._book = scene.add(XFormPrim(
prim_path = book_prim_path,
name = book_name,
position = book_pos,
orientation = book_rot,
scale = np.array([1, 1, 1])
))
And this is how the item (in this case a book) is defined in usd:
Picking this does not work resulting in the error message from above. However, if I remove the revolute joint connecting the front cover and page, I can pick the front cover off the book (as expected).
As far as I can tell, the actual implementation of the gripper’s close()-function is inside a compiled cpython file (omni.isaac.surface_gripper._surface_gripper), so I can’t check what’s happening there.
Any Ideas on what could be going wrong? If anyone needs more info, I’m happy to share.
EDIT: Is the UR10-implementation of the SurfaceGripper somehow different than the one in the Manipulation>SurfaceGripper example? Because there, I can duplicate the cube, connect it with a joint to the original cube, and the SurfaceGripper is able to pick them.