The problem
Motion planning keeps a gripper off the table using its collision model. If the real fingertips reach further than the model (different fingers, an adapter plate, or a frame offset that was only estimated), the planner will drive them into the table. On one xArm cell, the real fingertips reached 24 mm past the gripper's model.
How it works
- It works the way machinists set up a tool: bring the fingertips down onto the work surface until they just pinch a sheet of paper.
reach = gripper-frame height at contact − table height (− the paper's 0.1 mm) - Jog with paper: the closed gripper points straight down and jogs toward bare table in steps as small as 0.1 mm until the paper drags.
- Manual mode: on arms that support it, such as UFactory xArms, you rest the fingertips on the table by hand while a status card shows the live tilt.
- Table height comes from an RGB-D camera, which also picks bare spots to touch, or from a known height in the world frame.
- Frame update: the module shifts the gripper's frame along its pointing axis so the collision model ends exactly at the real fingertips,
then writes it back through Viam's API. For a gripper defined in a shared fragment, it adds a per-machine
fragment_modsoverride instead of editing the fragment. - Everything runs from the machine's CONTROL tab in the Viam app: step buttons, a jog-step switch, and a live status card.
My role
Solo project: design, implementation, and documentation.
Gallery
Add: Photos of the touch-off on the xArm, or screenshots of the CONTROL tab