Robot recovery: when retrying helps, and when it hides failure
Read Backtrack, DexPort and ViT-H through a practical lens: frozen policies, action labels, executable motion and bounded recovery. Includes a local state-machine experiment.
Posted · Updated
Paper submissions: 23 October 2026; reviewed here on 26 October. All three are preprints. These are abstract-level briefs, followed by original Token Lab teaching material, not paper reproductions or robot safety certification.
学习指南与本课目录
LEARNING CONTRACT理解 → 实现 → 研究
目标:解释本课机制、复现一个例子、测试一个失败案例。读完不自动代表掌握。
- 理解层:写明假设、形状/单位和一个反例。
- 实现层:复算数值例子并检查边界。
- 研究层:在匹配预算下比较一个替代方法。
Learning goals and prerequisites
You should know conditional probabilities, basic feedback control and the distinction between an observation and an action. Learn to separate policy learning from recovery-controller changes, specify action-label semantics, and evaluate success under a fixed execution budget.
Predict first: a robot recovers twice and finishes a scripted trace. Is this evidence of task completion? What if recovery used more time than the baseline’s entire episode?
Three recent reading briefs
Backtrack: Lightweight Recovery for Frozen VLAs
Version 2610.32941v1 · Submitted
A small trained failure head reads a frozen VLA’s representations. When predicted failure exceeds a threshold, a controller retraces recent achieved arm motion before returning control to the policy. The authors evaluate in LIBERO and MetaWorld. Frozen policy weights do not mean the entire system requires no training: the failure head is learned.
Reading question: Which outcomes label the predictor, and how does recovery consume the episode budget?
DexPort: A Hand-Held Skill Interface for Dexterous Hand Data Collection
Version 2610.32969v1 · Submitted
DexPort uses the same hand hardware for collection and deployment, logging commanded targets as well as measured states. Operators move the interface and select coordinated finger skills; downstream behavior cloning uses wrist motion and hand commands without skill labels. The abstract reports four real-world tasks.
Reading question: Do your action labels describe the command issued or the state eventually reached?
ViT-H: Generative Video-To-Humanoid Control with Motion Tracking Feedback
Version 2610.32966v1 · Submitted
ViT-H generates humanoid reference motions directly from video and uses motion-tracking feedback for preference-based post-training. The authors report experiments on Unitree G1. A motion that looks plausible and one a particular tracker can execute are different objectives.
Reading question: Does a reference remain executable under a different tracker and latency budget?
Connect the ideas to an actual robot stack
Consider a drawer-opening assistant. A demonstration records a handle grasp and a pull. Training on measured joint positions instead of commanded targets can silently change what the policy learns to output. At deployment, a failure predictor may notice a missed grasp, but reversing the arm does not guarantee that the drawer or object returns to its original state. A video-derived reference can also be kinematically plausible while exceeding the tracker’s limits.
| Layer | What changes | Independent check |
|---|---|---|
| Demonstration data | Target commands, states, timing | Units, frames, synchronization and actuator semantics |
| Motion generator | Reference trajectory | Tracking error, limits and contact feasibility |
| Recovery controller | When to pause and retry | Recovery cost, collision checks and terminal success |
A threshold is a decision rule, not a guarantee
Let p be a calibrated failure probability, CF the loss from continuing into failure, and CR a fixed recovery cost. In a deliberately simplified model where recovery prevents failure completely, recover when:
If CF=100 and CR=20 in the same utility units, the threshold is 0.2. If recovery itself fails with probability q=0.1, its expected cost becomes 20+0.1×100=30; the threshold becomes 0.3 under these assumptions. This ignores changing state, future options and risk constraints. Do not use it as a physical safety controller. The demo’s threshold 0.7 is a configurable fixture value, not an estimate from any of the papers.
A scalar risk estimate is dimensionless. Joint targets might be radians, Cartesian targets metres, and delays milliseconds; mixing these in an unweighted cost is invalid. For a horizon H and d joints, explicitly distinguish command arrays of shape H×d from observation arrays sampled at a different frequency.
Run a bounded recovery experiment locally
The synthetic risk stream [0.2, 0.8, 0.3] triggers one recovery at threshold 0.7. With one permitted recovery, [0.8, 0.9] stops at the second high-risk step. No neural network, real robot, API or upload is involved.
Expected: seven PASS checks; trace-ended is not a success verdict.
Download complete implementation. Node.js 22+, no dependencies and no randomness.
node --input-type=module -e "import {run} from './robot-recovery.mjs'; console.log(run())"Complete code and tests
// Original teaching state machine. No robot commands, network or learned predictor.
export function simulate({risks,threshold=0.7,maxRecoveries=1,safe=true}) {
if(!Array.isArray(risks)||!risks.length||risks.some(x=>!Number.isFinite(x)||x<0||x>1)||!Number.isFinite(threshold)||threshold<0||threshold>1||!Number.isInteger(maxRecoveries)||maxRecoveries<0||typeof safe!=='boolean')throw Error('Invalid configuration');
let recoveries=0;const events=[];
for(const risk of risks){
if(risk>=threshold){
if(!safe){events.push('STOP_UNSAFE');return {events,recoveries,status:'stopped'};}
if(recoveries>=maxRecoveries){events.push('STOP_BUDGET');return {events,recoveries,status:'stopped'};}
events.push('PAUSE','RECOVER','RESUME');recoveries++;
}else events.push('ACT');
}
return {events,recoveries,status:'trace-ended'};
}
export function run(){const checks=[];const check=(name,ok)=>{if(!ok)throw Error(name);checks.push('PASS: '+name)};
const recovered=simulate({risks:[.2,.8,.3]});check('one bounded recovery',recovered.recoveries===1&&recovered.events.join(',')==='ACT,PAUSE,RECOVER,RESUME,ACT');
check('unsafe recovery stops',simulate({risks:[.8],safe:false}).events[0]==='STOP_UNSAFE');
check('repeated high risk exhausts budget',simulate({risks:[.8,.9]}).status==='stopped');
check('zero budget stops without recovery',simulate({risks:[.7],maxRecoveries:0}).recoveries===0);
check('threshold equality triggers',simulate({risks:[.7]}).recoveries===1);
let rejected=0;for(const risks of [[],[NaN],[-.1],[1.1]])try{simulate({risks})}catch{rejected++}check('invalid probabilities rejected',rejected===4);
check('trace end is not task success',recovered.status==='trace-ended');
return {checks,recovered,boundary:'A scripted risk stream tests control logic, not a learned failure predictor or a physical robot.'};}
The safe flag stands in for an independently validated recovery check; it does not compute collision-free motion. The script tests state transitions, threshold boundaries, invalid probabilities and budget exhaustion. Real code must also handle sensor loss, asynchronous cancellation and emergency stops.
A reproducible evaluation protocol
- Freeze the policy checkpoint, controller versions, task set, reset distribution and terminal success evaluator.
- Compare no recovery, random intervention and predictor-driven recovery under equal total episode time. Count pauses and recovery motions in that budget.
- Fit and calibrate the failure predictor on development rollouts only. Split by task or scene where appropriate, not adjacent frames from the same rollout.
- Report paired task outcomes, intervention precision/recall, unnecessary interruptions, recovery duration and final success. A detector’s accuracy alone is insufficient.
- Test unseen objects and scenes, several thresholds and a separate tracker. Select thresholds before opening the held-out results.
For example, 60 baseline successes versus 68 recovery successes among 100 episodes is an 8 percentage-point difference. It is not enough to establish significance without the paired outcomes and sampling assumptions. A frozen policy with a better controller is a system-level improvement; it does not prove improved model weights or general recursive self-improvement.
Original interview questions and exercises
Why is reversing a motion not a rollback?
Hint: Think about contacts and objects.
Answer and analysis
The arm configuration is only part of the state. Objects can move, deform or fall; friction and contact are not generally reversible. Recovery needs fresh observations and feasibility checks.
Why are commanded actions different from measured states?
Hint: Consider lag and saturation.
Answer and analysis
A command is an input to the controller. A measured state is its delayed, noisy outcome under dynamics and constraints. Training targets must match the deployment action interface and timestamps.
How can a failure predictor with high accuracy hurt success?
Hint: Class imbalance and false alarms.
Answer and analysis
Most frames may be safe, masking rare failures. False alarms interrupt successful executions; detection delay may make recovery ineffective. Evaluate the closed loop, calibration and intervention costs.
How would you test whether recovery learns new capabilities?
Hint: Separate weights from runtime behavior.
Answer and analysis
Evaluate the same checkpoint with and without recovery, then compare updated checkpoints with a fixed controller. Use untouched tasks, equal budgets and independent success tests to distinguish effects.
Transfer exercise: add a cooldown measured in observation steps. Test a risk stream that oscillates around 0.7. Explain why hysteresis can reduce chattering but delay a legitimate new intervention.
Continue learning
Physical AI curriculum · Reward gains versus capability gains · DPO foundations
Sources were checked on 26 October 2026. The linked paper pages provide author-maintained project links where available; no unverified code release or conference acceptance is claimed. Read the full methods before reproducing the papers.