placing-held-feature
The place stage's geometry: where must the hand be so that the thing it is holding arrives where the goal wants it.
Why this is its own skill
Grasping has a whole ladder of strategies and placing had none, which is backwards for any goal phrased as a relation between a held object's feature and a fixture. The composition is small and the mistake is not:
feature_now = object_position + R(object_rotation) · feature_local
move = target − feature_now
hand_goal = hand_now + move
Without it the obvious move is to drive the hand at the target, and that is wrong by the length of the tool. It fails as a refusal rather than as a miss, so it reads like an unreachable workspace rather than a mis-specified goal — a diagnosis that costs iterations, because the fix it suggests (try the other arm, give up on the target) is not the fix.
When to use
- A goal written as object.feature at fixture.feature or in a region: a loop over a rod, a shaft into a hole, a plug at a bore.
- Any time the held object is large relative to the hand.
When NOT to use
- To orient. This translates only; turn first, then mate.
- Before the object is held. It reads the object's live pose, which before a grasp is wherever it is lying.
Recommended subgraph state flow
locate → orient → mate → plan → execute → verify
locate— the target point. For a welded fixture with no body and no OBB, that issim.queryon the goal's own atom and refs; itsatis the feature's world position.orient— turn the held object so the mating axis lines up, as a lockedmotion.plan_jointat the current position. Transit first, then turn.mate—script: scripts/<sg>/mate_feature.py. Route onroute.plan/execute—motion.plan_linear(end=Ref("mate.hand_goal"), orientation="lock")thenrobot.execute_trajectory. Locked, because the orientation you turned to is the one that must survive the move.verify— re-runmateand readdistance_m. Shrinking means the round worked; flat means the move is not being executed as planned.
Use stop_short_axis/stop_short_m when the fixture is mounted flush to a
board: close the two free axes fully and stop short on the board's normal, so
the approach does not drive the load into the mounting.
Required end states
| End state | Meaning |
|---|---|
ready |
hand_goal, move_m, feature_now, distance_m. |
unknown |
A pose or point could not be read. Nothing moved; fix the inputs. |