Skip to content

Validate the MCP server against a real gripper #75

Description

@ebarnett3

Every model-coverage issue here (#44, #45, #46) validates the driver, the SDK profile and the hardware tests for one gripper, and each names the MCP only as "confirm the datasheet against the product sheet". Nothing covers running the MCP's tools against a real gripper and checking that what they report is true.

That gap is not theoretical. A bench session on 2026-09-11, on a 2F-85 with TSF-85 pads and the merge train's tip, found defects that no unit test could reach because they only appear when a real gripper is on the other end:

  • the tactile subscriptions never matched the driver's publisher, so all three tactile tools failed with a timeout (QoS: RELIABLE against BEST_EFFORT);
  • gripper_grasp on a 42 mm object answered object_grasped=False, outcome='closed_without_object', because the action returns before the fingers move and reports the commanded position rather than the measured one;
  • every non-grasp move reported stalled_unexpectedly (robotiq_driver: velocity state is always 0.0 #29 surfacing through the tool surface);
  • gripper_verify_grasp answered held on an empty gripper, both open and fully closed, because the shipped tactile constants come from the Isaac twin and the real noise floor is an order of magnitude above the threshold;
  • a successful internal grip was reported as a fault.

Scope

Run the whole tool surface against a real gripper and record what it answers, then fix what is wrong and pin the numbers that are only knowable from hardware.

  • Every motion tool reports an outcome that matches what the fingers did: a clean move is not an anomaly, a grasp on an object is a grasp, a grasp on nothing is not.
  • gripper_get_state agrees with the motion result that preceded it.
  • The tactile tools receive data at all, and gripper_verify_grasp distinguishes holding, closed-on-nothing and open-and-empty.
  • full_scale_counts and contact_threshold measured on a physical TSF-85 and written into the datasheet, replacing the Isaac-tuned values and the "unverified" note.
  • An internal grip on a hollow object reports something an agent can act on.
  • gripper_get_health reports accurately with the driver up, with it stopped, and with the gripper unplugged.
  • The results recorded somewhere durable, so the next hardware change has a baseline to compare against.

Sequencing

After the mcp/ merge train lands. Best run once #74 publishes gOBJ, since several of the items above are consequences of inferring an answer the gripper already gives; before that, the same session mostly re-measures the inference.

Per model

The 2F-85 is covered by this issue. The 2F-140 and the Hand-E variants should get the same pass as part of #46, #44 and #45 rather than a separate issue each.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions