AdrianLlopart's picture
chore: publish rSkill OpenRAL/rskill-playbook-find_object v0.1.0
b0356b6 verified
|
Raw
History Blame Contribute Delete
2.49 kB

find-object

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

The goal names a physical object (e.g. "bring the water bottle", "where is my mug?") whose pose is not given in the request and is not in current view.

Preconditions

  • A spatial-memory backend is available (recall_object / resolve_place tools).
  • The robot has a mobile base (to reach candidate places) and a gripper (to open occluding containers). These are declared in capabilities_required.

Steps

  1. Recall. Call recall_object(target). If a status:current pose is returned, skip to Verify.
  2. Memory prior. On a miss, call memory_search(target) over the MEMORY.md Object-Location Log for the last-seen (possibly stale) location. Use it as the top search prior — a stale sighting still beats a blind sweep.
  3. Rank candidates. Build a ranked candidate list from (a) the scene-graph regions/places and (b) commonsense priors ("a water bottle is usually in the kitchen, then the fridge"). Containers whose contents are occluded come first.
  4. Search loop (bounded by playbook.max_steps). For each candidate in rank order:
    • resolve_place(candidate)execute_rskill(NAVIGATE, goal=place).
    • If the candidate is an occluding container, execute_rskill(OPEN, target=container).
    • locate_in_view(target). Stop on a hit.

Verify (done predicate)

locate_in_view confirms the target in view at a known pose. On success, record it: memory_write(op=supersede, section="object_locations", target=<object>, content=<place>) so the next task recalls it directly.

Fallbacks

  • Budget (max_steps) exhausted with no hit → emit_prompt to the operator ("I can't find the water bottle — where should I look?"). This is the terminal human-handoff rung of the replanning ladder.
  • Never loop past max_steps. Every candidate tried and its outcome are on the OTel trace, so the search 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 recall yields a bad plan the kernel still vetoes, never a relaxed check (CLAUDE.md §1.1).