selecting-reachable-grasp

SkillDev tools

Walk a ranked list of candidate grasp poses and take the first the

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the selecting-reachable-grasp skill

What this skill tells your AI

The instructions your AI receives, as published by graph-robots/open-robot-skills in skills/selecting-reachable-grasp/SKILL.md and read by ahel’s review.

poses is a list of Se3Pose, best first -- a propose skill's poses output, or the poses field of a GraspCandidates. It is declared here in prose rather than under required_inputs because the registry has no name for a bare list of poses, and a GraspCandidates is a dict the script does not take.

One strategy for the select stage: reachability, then clearance, first match wins.

Why this is its own skill

A proposer ranks by the object's geometry, which is the only thing it knows. Whether the arm can hold a pose is a different question, and entry 0 is routinely the one it cannot. Nothing downstream notices — IK returns something, the servo drives to it, and the jaws close on air. A study packet put it exactly: "gripper closed on nothing while grasping ring_spanner_19".

Taking the first that passes rather than the best: the list arrives ranked by a proposer that knows things about the object this skill does not, and re-ranking here would silently overrule it.

When to use

  • After every propose rung. There is no case where taking candidate 0 unchecked is better than walking the list.

When NOT to use

  • As a substitute for a collision-aware planner on the carry. This gates the grasp configuration, not the path to it. The two are different halves: a corridor test refuses a grasp whose descent goes through a shelf; a planner routes the carry around a beam. Neither substitutes for the other.

Recommended subgraph state flow

select → (selected | none_reachable)

A single script node. Inputs: poses (built from the proposer's stations and robot.grasp_frame's rotation), arm_id, object_name, check_clearance. Router on route.

Downstream, execute the selection with motion.plan_linear(orientation="lock")robot.execute_trajectory so the closing heading is actually held — robot.go_to_pose leaves the wrist roll free and discards it.

Required end states

End stateMeaning
selectedpose and joint_config. Read index to see how far down the list it had to go, and corridor_checked to see whether clearance ran.
none_reachableNothing in the list solved. Route to another propose rung, not back to this one.

Signals

GitHub stars
41
Forks
7
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
selecting-reachable-grasp
Source
github.com/graph-robots/open-robot-skills