Isaac Sim Version
4.2.0
Operating System
Ubuntu 22.04
GPU Information
- Model: GeForce RTX 4080
- Driver Version: 550
How to Add Surface Gripper Joint to Articulation in Isaac Sim?
Detailed Description
I am trying to create a “teleporter” for a robotic arm to skip movements that are already working fine, while closely monitoring the ones still in development. I don’t want to speed up the simulation, as that might introduce other problems.
When teleporting (setting joint positions for the articulation), everything works as expected. However, the issue arises with gripped tools or objects being held by the tools—the teleport movements are too abrupt to keep them properly aligned.
To address this, I need to add a Surface Gripper (either as an OmniGraph Node or entirely through code) to the articulation. When I tested mounting the tool directly onto the robot (without surface gripper), it worked as expected. However, I need the flexibility to change tools and/or objects as needed.
Using the Physics Authoring Tool, I can see that the 6DOF fixed joint of the Surface Gripper is not part of the articulation.
Additional Information
What I’ve Tried
- Adjusted various parameters to make the joints more stiff/stable/damp for SurfaceGripperNode, including projection settings for parents joints, etc.
- Created the Surface Gripper using OmniGraph, and also directly through code.
- Attempted to access the created 6DOF fixed joint from code using its prim path. However, this was not possible as the joint is not actually present in the stage, making it unclear whether the joint is excluded from the articulation.
- Reinitialized the entire articulation immediately after a successful grasp, including removing and re-adding the articulation to the scene, as well as removing and re-adding the root API of the articulation:
world.scene.remove_object(self.robot.prim_path)
src_prim = get_prim(self.robot.prim_path)
tgt_prim = get_prim(self.robot.prim_path)
if src_prim.HasAPI(UsdPhysics.ArticulationRootAPI):
src_prim.RemoveAPI(UsdPhysics.ArticulationRootAPI)
if src_prim.HasAPI(PhysxSchema.PhysxArticulationAPI):
src_prim.RemoveAPI(PhysxSchema.PhysxArticulationAPI)
tgt_prim.ApplyAPI(UsdPhysics.ArticulationRootAPI)
tgt_prim.ApplyAPI(PhysxSchema.PhysxArticulationAPI)
self.robot.articulation = Articulation(self.robot.prim_path, name=self.robot.prim_path)
world.scene.add(self.robot.articulation) # type: ignore
self.robot.articulation.initialize()
- Or combination of points above.