On real robots, the failure monitor that keeps learning wins

. Amit Jadhav, Shaurya Beriwala

We tested SFF, our failure monitor that keeps learning after deployment, on real robot arms run by four different robot AI models. On all four, when the robot's job changed without warning, SFF told failing runs from successful ones better than a frozen monitor and better than the standard detect-and-reset approach.

How well each monitor ranks failing runs above successful ones, after the switch (AUROC)0.40.5 = coin flip0.60.7SmolVLA75 real runs0.6560.4920.524π0.5120 real runs0.6160.5520.552π0149 real runs0.6880.5810.581MolmoAct 290 real runs0.6660.5170.517

SFF (keeps learning)Frozen monitorDetect and reset

Real SO-101 runs from ArmnetBench, after the robot switched to a new task without warning. Each bar is a monitor's within-task AUROC: the chance that a failing run gets a higher risk score than a successful run of the same task. Every monitor read exactly the same signal from the robot's AI model.

Why this matters

A robot that works in a lab will meet new jobs, new objects and new conditions in the field. A failure monitor is supposed to warn before a run fails. Most monitors are trained once and then frozen, so the moment the robot's situation changes, their warnings stop meaning much, and nobody notices. SFF keeps learning from the one thing every run reports for free: whether it worked.

Frozen monitors break when the job changes

SmolVLA0.490.66beforeafterπ0.50.550.62beforeafterπ00.580.69beforeafterMolmoAct 20.520.67beforeafter

SFF (keeps learning) Frozen monitordashed line: coin flip (0.5)

Ranking quality before and after the task switch. Before it, the frozen monitor was fitted to the job and often looks fine. After it, the frozen monitor drops toward a coin flip, while SFF keeps learning and ends ahead on all four models.

On pi0.5 the frozen monitor was the best method before the switch (0.723) and fell to 0.552 after it, while SFF held steady. On MolmoAct 2 the frozen monitor fell from 0.608 to 0.517, close to a coin flip, while SFF reached 0.666. On pi0, SFF starts at a coin flip because it has learned nothing yet, then climbs to 0.688 as outcomes come in. Its lead keeps growing after a change: on pi0, +0.067 over the first 20 runs and +0.169 after that. Detect-and-reset, the usual fix for changing conditions, did not help: on pi0.5, pi0 and MolmoAct 2 its change detector never fired.

Tested on real robot runs

  • Real SO-101 arm: Ring onto a pegRing onto a peg
  • Real SO-101 arm: Stack blocksStack blocks
  • Real SO-101 arm: Tool into a toolboxTool into a toolbox
  • Real SO-101 arm: Unclip a cableUnclip a cable
  • Real SO-101 arm: Eye drops into a basketEye drops into a basket
Five of the real tasks, from the robot's front camera (ArmnetBench, Apache-2.0).

We used ArmnetBench, a public set of 2,499 runs of real SO-101 arms, each marked by a person as a success or a failure. For four AI models the benchmark also published the exact trained models that drove the arms. SFF reads signals from inside the robot's AI model, so we fed every recorded run back through the model that ran it and checked the result: the replayed model reproduces the actions the real robot took to within about one degree. One MolmoAct 2 model missed our replay check, so we left it out.

It also handles physical changes

  • Nominal: as trainedNominalas trained
  • Dim light: light ×0.25Dim lightlight ×0.25
  • Dark objects: target recoloredDark objectstarget recolored
  • Camera moved: 5 cm, 5°Camera moved5 cm, 5°
  • Worn fingers: looks unchangedWorn fingerslooks unchanged
  • Dim + dark: two at onceDim + darktwo at once
  • Blue walls: benignBlue wallsbenign
The physical changes from our simulation study: dim light, recolored objects, a moved camera, worn gripper fingers, two at once, and a harmless change of wall color.

The real-robot runs test a change of job. In simulation we changed the physical world instead, and SFF ranked failures better than the frozen monitor on 4 of 5 test suites, including the one we registered in advance, and beat detect-and-reset on all of them. Read the simulation results.

How SFF works, in two sentences

SFF starts from an ordinary failure monitor trained on normal runs, then, after every run, refits its last layer from whether the run succeeded, with constant memory and no stored data. Its alarm threshold moves only after successful runs, which keeps false alarms at the rate the operator asks for.

How we kept it honest

What comes next

On MolmoAct 2 we also tried a new kind of change: an update to the robot's own model on the same job. SFF was ahead there too, but with only 10 test segments that result is not yet conclusive. And we have trained pi0.5 on our own SO-101 demonstrations, so the next test runs live on our arm. Read about our SO-101 setup.