Skip to content

get_ee_open_state returns a closed-state predicate; published state preserves legacy polarity #88

Description

@sawhney17

Summary

At VLABench commit cf588fe60c0c7282174fe979f5913170cfe69017,
VLABench/robots/single_arm/franka.py::get_ee_open_state returns true when both finger
positions are below the closed threshold (0.035). The nearby source comment explicitly says
BUG: should be False.

That legacy predicate is externally observable in the official LeRobot mirror. In the pinned
lerobot/vlabench_unified@f61ad898199e746c20af3112f278cc86eb3ca3c4, the last state bit is
copied from the observation, while the last action bit uses the opposite convention (1 = open,
based on target finger qpos above 0.03).

Full-corpus evidence

A checksum-pinned scan of every one of the dataset's 3,114,872 rows found:

  • state and action gripper fields are binary on every row;
  • 2,965,492 / 3,114,872 same-row pairs are complements (95.2043%);
  • 2,988,736 / 3,103,895 comparable state/previous-action pairs are complements (96.2899%);
  • direct same-row agreement is only 149,380 / 3,114,872 (4.7957%).

The source evidence and data statistics support a legacy closed-bit in state versus an open-bit in
action. The residual disagreement is not itself corruption: observation/target timing differs,
and the state/action thresholds are 0.035 versus 0.03.

Exact evidence, source manifest, tests, and non-mutating repair sidecar:

Suggested compatibility-safe repair

I would avoid silently flipping the existing field because that can break checkpoints trained on
the legacy convention. A safer migration is explicit and versioned:

legacy_closed_v1: legacy_state_gripper_closed
explicit_open_v2: state_gripper_open = 1 - legacy_state_gripper_closed

Then:

  1. correct get_ee_open_state for the v2 path, or rename the legacy predicate to what it returns;
  2. require an explicit observation-convention selection for old versus new checkpoints;
  3. test closed/open finger positions at the threshold boundary;
  4. record the convention and exact generator revision in future dataset metadata;
  5. leave action values unchanged.

The linked release includes a 3,114,872-row keyed explicit-open-v2 sidecar. It preserves every
source byte and provides byte and logical-row digests; it is evidence and a migration aid, not a
request to rewrite the existing dataset in place.

Claim boundary

The pinned VLABench commit is a semantic source reference; the dataset card does not identify its
exact generator checkout. This issue does not claim policy degradation, corrupt images/poses, or
that corrected observed state must equal a same-row target action. No silent migration is proposed.

I searched existing VLABench issues for this exact open/closed predicate report and did not find a
duplicate.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions