Summary
pi0_pick returns success=true after the end effector descends and rises while the gripper opening is below a threshold. Those conditions can hold when the fingers close on air. The result therefore does not establish that an object has been picked up, and can mislead subsequent transport and release decisions.
The current docstring does describe this heuristic, and the evaluation prompt explicitly says that success is a hint rather than proof. This report concerns a reproducible false positive in the pickup heuristic and its interface design, not a violation of a current contact-based grasp guarantee. It may reasonably be triaged as a behavior improvement rather than a regression.
Version and source
Checked revision: 068cd64f4f175179a13c67d429a4d00ca56fb196, 2026-10-07. Implementation.
The current code still uses descent_done and ascended and closed, with default gripper_open_thresh=0.0, to set success. It has neither a contact query nor a held_objects result. Experimental contact-based fixes have not been incorporated into this source.
Minimal reproduction of the result logic
The companion probe_current.py loads the actual pi0_pick function and replaces only its VLA/environment boundary. With default thresholds, supply:
| Observation |
EEF z in metres |
Gripper opening in metres |
Episode done |
| Initial |
1.00 |
0.080 |
false |
| After chunk 1 |
0.85 |
0.002 |
false |
| After chunk 2 |
0.91 |
0.002 |
false |
The function returns success=true with no object held by the controlled environment. This probe demonstrates the decision rule; physical evidence comes from the recorded run below.
Recorded physical example
LIBERO-PRO, libero_object, task 4, seed 1, 1,000-step budget. Preserve the witness setup that shifts ketchup_1 by [0.4, 0, 0]. Replay through call 44:
{"tool":"pi0_pick","input":{"prompt":"pick up the ketchup bottle","max_chunks":20,"lift_thresh":0.05,"gripper_closed_thresh":0.06}}
The historical result is success=true, peak_lift_m=0.0526, and gripper opening approximately 0.0022 m, although neither finger contacts the object. The ketchup moves only about 0.06 cm during the following 150 steps. The planner later interprets the missing object as a dropped grasp.
Expected behavior and validation
Separate a motion-based early-stop condition from verified grasp status in the structured result, as the prompt already does in prose. If contact evidence is intentionally unavailable, expose the heuristic as such and represent grasp status as unknown rather than implying verified pickup. Any proposed simulator contact API must respect the integration's perception-isolation policy; do not silently expose privileged object state. If contact-based reporting is permitted and added, define its object domain and cover empty grasps, large objects, fixtures, and episode-end paths. Contact alone should not be described as a guarantee of stable retention.
Summary
pi0_pickreturnssuccess=trueafter the end effector descends and rises while the gripper opening is below a threshold. Those conditions can hold when the fingers close on air. The result therefore does not establish that an object has been picked up, and can mislead subsequent transport and release decisions.The current docstring does describe this heuristic, and the evaluation prompt explicitly says that
successis a hint rather than proof. This report concerns a reproducible false positive in the pickup heuristic and its interface design, not a violation of a current contact-based grasp guarantee. It may reasonably be triaged as a behavior improvement rather than a regression.Version and source
Checked revision:
068cd64f4f175179a13c67d429a4d00ca56fb196, 2026-10-07. Implementation.The current code still uses
descent_done and ascended and closed, with defaultgripper_open_thresh=0.0, to set success. It has neither a contact query nor aheld_objectsresult. Experimental contact-based fixes have not been incorporated into this source.Minimal reproduction of the result logic
The companion
probe_current.pyloads the actualpi0_pickfunction and replaces only its VLA/environment boundary. With default thresholds, supply:The function returns
success=truewith no object held by the controlled environment. This probe demonstrates the decision rule; physical evidence comes from the recorded run below.Recorded physical example
LIBERO-PRO,
libero_object, task 4, seed 1, 1,000-step budget. Preserve the witness setup that shiftsketchup_1by[0.4, 0, 0]. Replay through call 44:{"tool":"pi0_pick","input":{"prompt":"pick up the ketchup bottle","max_chunks":20,"lift_thresh":0.05,"gripper_closed_thresh":0.06}}The historical result is
success=true,peak_lift_m=0.0526, and gripper opening approximately 0.0022 m, although neither finger contacts the object. The ketchup moves only about 0.06 cm during the following 150 steps. The planner later interprets the missing object as a dropped grasp.Expected behavior and validation
Separate a motion-based early-stop condition from verified grasp status in the structured result, as the prompt already does in prose. If contact evidence is intentionally unavailable, expose the heuristic as such and represent grasp status as unknown rather than implying verified pickup. Any proposed simulator contact API must respect the integration's perception-isolation policy; do not silently expose privileged object state. If contact-based reporting is permitted and added, define its object domain and cover empty grasps, large objects, fixtures, and episode-end paths. Contact alone should not be described as a guarantee of stable retention.