AdrianLlopart's picture
chore: publish rSkill OpenRAL/rskill-playbook-preflight_reach v0.1.0
102e68e verified
|
Raw
History Blame Contribute Delete
3.07 kB
# preflight-reach
> **Hand-authored decision procedure (SOP).** Unlike the generated `SKILL.md`
> discovery view, this file is the *content the S2 Reasoner reads and follows*.
> It is injected into the reasoner's system prompt when this playbook is
> installed. The `rskill.yaml` `playbook.body_uri` points here.
## Trigger
About to grasp or place an object (e.g. "pick up the mug", "put the can on the
shelf") but it is unclear the embodiment can physically reach the target from
where it currently stands β€” its reachability from the current base and arm pose
is uncertain.
## Preconditions
- The reasoner's `## ROBOT` self-model block is available (DOF, end-effectors,
approximate reach, locomotion, payload limit).
- A spatial-memory / detector backend gives the target pose (`recall_object` /
`query_scene` / `locate_in_view` tools).
## Steps
1. **Read the self-model** (`## ROBOT`). Note locomotion (a fixed arm vs a
mobile base), the arm's approximate reach, and the payload limit. These three
facts decide everything that follows.
2. **Locate the target.** Call `recall_object(target)` (or `query_scene` /
`locate_in_view`) β†’ the target's pose. No pose β†’ defer to the find-object
playbook before continuing.
3. **Reach check.** Is the target within the arm's workspace from the current
base pose, *and* within the payload limit? Compare the target pose against the
self-model's reach envelope and the payload against its limit.
4. **Reachable β†’ done.** If the target is in the workspace and under the payload
limit, allow the manipulation skill to dispatch.
5. **Out of reach AND a mobile base exists β†’** `resolve_place` an approach stand
pose near the target, `execute_rskill(NAVIGATE, goal=stand_pose)`, then
**re-check** (back to step 3) from the new base pose.
6. **Fixed arm and out of reach (or over payload) β†’** do **not** dispatch the
manipulation skill. Hand off (see Fallbacks). A fixed arm cannot stage itself
closer, so navigating is not an option.
## Verify (done predicate)
The target is inside the reachable workspace β€” directly, or after staging the
mobile base β€” and within the payload limit. Only then is the downstream
manipulation skill allowed to dispatch.
## Fallbacks
- Fixed-arm out-of-reach, or target over the payload limit β†’ `emit_prompt` to the
operator ("the mug is outside my workspace / too heavy; please move it closer
or reduce the load"). This is the terminal human-handoff rung of the
replanning ladder.
- Pairs with the stage-for-manipulation playbook: when a mobile base exists, that
playbook owns the staging motion; this one owns the reach decision.
- **Never** loop past `max_steps`. Every reach check, stage, and re-check is on
the OTel trace, so the decision is replayable.
## Safety
This playbook only *decides* and *sequences*. Every motion it triggers is an
`execute_rskill` β†’ Action chunk that still crosses the C++ safety kernel; a wrong
reach estimate yields a bad plan the kernel still vetoes, never a relaxed check
(CLAUDE.md Β§1.1).