proposing-short-axis-grasps
One strategy for the propose stage of a pick: a top-down grasp across the narrow dimension of an elongated body.
Why this is its own skill
A pick has stages — propose, select, approach, close — and each has more than one strategy. Treating "grasping" as one indivisible thing is what leaves a policy with a single approach and nowhere to go when it does not fit: it can only jitter the numbers of a strategy that structurally cannot work. Proposing is separated from selecting so that a refusal here ("the short axis is wider than the hand") is a routable exit to a different rung, not a failed episode.
When to use
- The target is longer than it is wide: a handle, spanner, screwdriver, bar.
- Top-down access is available.
- Any privilege tier. The box may come from
sim.get_object_obbor fromgeometry.compute_obbover a segmented cloud — this skill cannot tell which, which is what makes it portable to the vision body.
When NOT to use
- The top is blocked (a shelf, a lid) — use
proposing-side-grasps. - The body is roughly cubic; there is no meaningful short axis to close across.
- The graspable part is a concave interior (the inside of a ring, a pivot between two plates). A box has no opinion about concavity, and neither has this skill.
Recommended subgraph state flow
describe → get_obb → propose → frame → select → END
describe—tool: robot.describe_gripper(for the jaw span).get_obb—tool: sim.get_object_obb,inputs: {object_name: …}. Atcamera_only/none, substitutegeometry.filter_and_compute_obb.propose—script: scripts/<sg>/propose_short_axis.py, inputstarget_obb = Ref("get_obb.obb"),gripper = Ref("describe"). Router onroute:proposed→frame,declined→ the subgraph'sdeclinedexit.frame—tool: robot.grasp_frame,inputs: {close_heading_deg: Ref("propose.close_heading_deg")}.select— handpropose.positionsandframe.rotationtoselecting-reachable-grasp, which walks them.
Required end states
| End state | Meaning |
|---|---|
proposed |
A heading and stations. Continue to select. |
declined |
The hand cannot span this object's short axis. Route to another propose rung — do not retry this one with different numbers. |