Skip to content

docs: staged real-robot bring-up procedure - #105

Draft
amburger66 wants to merge 3 commits into
masterfrom
real-robot-bringup-doc
Draft

docs: staged real-robot bring-up procedure#105
amburger66 wants to merge 3 commits into
masterfrom
real-robot-bringup-doc

Conversation

@amburger66

Copy link
Copy Markdown

Docs only — no code changes.

A staged bring-up procedure for the real Franka, from a captured scene to closed-loop active learning. Ordered so that each stage adds exactly one new source of failure, because a failure three stages later is much harder to attribute.

# Arm Cameras Human What it proves
0 A scene exists and its roles resolve
1 The scene is solvable at all, in sim (oracle)
2 dry replay Executor plumbing survives a full episode
3 dry live Perception maps to the twin correctly
4 dry live yes Reset cadence and task rebuild
5 moves Per-option shipping at the hand
6 moves A whole recorded plan
7 moves live The closed loop
8 moves live yes Real active learning

Three things the doc is deliberate about:

  • Stage 1 is a gate. If the oracle cannot solve the captured scene in sim, no amount of hardware work fixes it. It also flags the max_initial_demos: 0 # can't solve the real scene note in envs/all.yaml — that's about the demo generator, not the oracle approach, but it's a warning about this scene.
  • Stage 5 is the risky one and is called out as such: every prior hardware session shipped whole episodes, so per-option shipping has never reached the hand. What makes it safe is RealRobot's session-wide gripper dedup, and the doc says to verify that at the hand rather than in the log.
  • Two settings ship as guesses. real_robot_divergence_atol (0.02 m) and real_robot_settle_s (0.5 s). Stages 3 and 7 exist to measure them, and the doc explicitly says not to raise the tolerance until the warning stops.

Also documents the safety ordering to confirm at Stage 4 — the arm homes before the human is prompted — so it's already trusted by Stage 8.

Every flag name, default value, file path and symbol cited was checked against the code (23 assertions, 0 mismatches), so the doc can't drift silently from the defaults it quotes.

Caveat, stated in the doc itself: nothing in Stages 3+ has been validated on hardware. The pass criteria are what I'd check, not results anyone has seen.

A checkable procedure from a captured scene through oracle-in-sim, a dry
executor, live cameras, first motion, and the closed loop, to real active
learning. Ordered so each stage adds exactly one new source of failure --
a failure three stages later is much harder to attribute.

Two stages exist to replace guessed defaults with measurements:
real_robot_divergence_atol (0.02 m) and real_robot_settle_s (0.5 s) both
ship as guesses, and the doc says where the numbers come from rather than
suggesting the tolerance be raised until the warning stops.

Calls out what has never run: per-option shipping at the hand (every prior
hardware session shipped whole episodes), and live perception through the
conversion path. Every flag name, default, path and symbol cited was checked
against the code.
Stage 1 said to un-skip domino_real in oracle.yaml and offered a bare
`python predicators/main.py --env pybullet_domino_real --approach oracle`
for one-off overrides. Following that produced

    AssertionError: perceived 4 dominoes but only 3 slots

because a bare main.py run inherits none of the env's flags from
envs/all.yaml, and this env does not work on the settings.py defaults --
domino_use_domino_blocks_as_target defaults False, which sizes the domino
component with the target as a separate object. The doc now points at
predicatorv3/oracle_domino_real.yaml and warns against main.py rather than
suggesting it.

Two traps added, both hit while running Stage 1 for real:

  * The scene path must be set in the launcher. envs/all.yaml already sets
    domino_real_scene and a config value beats the settings.py default, so
    editing settings.py has no effect on a launcher run.
  * `import predicators` resolves to the editable install, not the cwd, so
    running from a worktree silently executes another checkout's code. The
    symptom is a fix that appears to do nothing; the doc gives the one-liner
    that shows which tree is actually loaded.

Stage 1 also now says to read the init atoms before believing a pass -- a
goal already true in the initial state yields a length-0 plan and a SOLVED
that means nothing -- and describes what the oracle actually plans over:
hand-written processes, including the two exogenous ones that are the
cascade, on a lattice of loc/angle helpers. That lattice is the likeliest
reason a continuous capture fails, which separates "re-capture the scene"
from "debug the code".

The launcher itself lands in the roll-fold PR; this doc depends on it.
@amburger66

Copy link
Copy Markdown
Author

Updated Stage 1 and the flags section to run through predicatorv3/oracle_domino_real.yaml rather than a bare main.py invocation, after the bare form failed in practice with perceived 4 dominoes but only 3 slots.

Depends on #106, which adds that launcher (alongside the roll-fold fix). Merging this doc first would leave Stage 1 pointing at a file that does not exist yet.

Also added two traps hit while running Stage 1 for real: the scene path must be set in the launcher (envs/all.yaml already sets domino_real_scene, and a config value beats the settings.py default), and import predicators resolves to the editable install rather than your cwd — so running from a worktree silently executes another checkout's code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant