Chad Liu
Writing14 min read

Robot Model Experiment Series 4: SmolVLA (DAgger)

Demos taught SmolVLA where to go, but never how to finish from where it actually ends up. So the model drives, a watcher spots when it gets stuck, an expert rescue skill takes over, and the corrections become the next training data. Success went from 0% to 16%.

roboticsAI

Questions this piece answers

  1. 01What does this article cover?
  2. 02What is DAgger?
  3. 03What are the watcher and the expert rescue skill?
  4. 04How is DAgger data prepared?
  5. 05What comes next?
  6. 06Appendix: how was the expert rescue skill improved?

Demos taught SmolVLA where to go, but never how to finish from where it actually ends up. In the previous post three versions trained on demos never picked up the tube. So this time the model drives, a watcher spots when it gets stuck, an expert rescue skill takes over, and the corrections become the next training data.

What does this article cover?

Two versions: v3 from the previous post running with a watcher, and v4 trained on the corrections it collected. Then, in an appendix, how the expert rescue skill was improved, using a third camera to see what went wrong.

VersionTraining dataLossSuccess ratePerformanceRoot causeSo the next dataset
v347 demos, pauses trimmed (previous post)0.0140 / 30 (0%)Closed the gripper, but the jaws shut beside the tubeDemos show the ideal path, never how to recover from where the model actually ends uplet v3 drive and recorded the expert rescue skill's 25 corrections (DAgger round 1)
v4v3 data + 25 DAgger corrections0.0168 / 50 (16%)Picked up the tube on its own for the first timeStill weak near the base and sometimes closes on nothing. Its own successful runs are not in the data yetadd RL: grade every run and train on the model's own successes, weighted by grade (next post)

Success rate counts the runs where the model lifted the tube with no help.

What is DAgger?

DAgger, short for Dataset Aggregation (Ross, Gordon and Bagnell, CMU, 2011), is the standard fix for a model that gets lost in places the demos never went. Let the model drive, step in when it goes wrong, and add the correction to the training data. The model then learns how to finish from its own mistakes, not just from a perfect demo.

Usually a person does the stepping in. They watch every run and, when the model goes wrong, take over with a leader arm or another teleoperation setup. Their moves become the corrections. That works, but it needs a person at the robot for every run, and that doesn't scale past a few robots.

Standard DAgger flow. The model drives the arm. A person watches and decides when it is going wrong, then takes over with a leader arm or teleop and finishes the task. Every frame is recorded in the DAgger dataset tagged with who was driving, and the next model is trained on the corrections and replaces the old one.

What are the watcher and the expert rescue skill?

In this series, two pieces of software share the person's job, and a person is only needed for edge cases. They are new terms used throughout the rest of this article.

WatcherThe judge. It never moves the arm. It checks the arm 30 times a second while the model drives and decides when the run is stuck.
Expert rescue skillThe scripted pick skill from the previous post. When the watcher hands over, it moves the arm and finishes the pick. Its moves are the corrections.
This series' DAgger flow. The model drives the arm. A software watcher checks 30 times a second and, when the run is stuck, hands over to the expert rescue skill, which takes over where the model stopped and sends corrections to the arm. A person handles edge cases only. Every frame is recorded tagged with who was driving, every run gets a grade, and the next model is trained on the corrections.

The difference matters for cost and scale. A person-run DAgger round costs a person's time per run. Here a round runs on its own: in the 50-run tests in this article, a person stepped in only a few times. The trade-off is that the expert rescue skill is only as good as its script, which is why the appendix covers improving it.

How is DAgger data prepared?

Recording, idle trimming, video conversion and upload work the same way as in the previous post. DAgger adds one rule: keep only the expert rescue skill's frames.

  1. Tag every frame. Each frame carries an intervention tag saying who was driving, the same format LeRobot's own DAgger mode uses.
  2. Keep only the expert rescue skill's frames. From each rescued run, only the frames where the skill was driving go into training. The model's own frames from before the takeover are dropped, because they would teach the stuck behavior again.
  3. Drop failed rescues. When the expert rescue skill also failed, the whole run is left out. Those runs are used to fix the skill instead.
  4. Trim idle frames. As before, every still stretch is cut to 3 frames, now in the human demos too.
DatasetWhat changedEpisodesFrames
v347 demos, idle frames trimmed4723,936
v4Idle trim in the human demos too, plus 25 DAgger correction segments7233,180

DAgger round 1: collecting data with the v3 model

Model: v3 from the previous post. Success rate: 0 of 30 (0%) on its own. 25 rescued by the expert rescue skill.

How a run works

  1. Stuck. The watcher calls a run stuck when the gripper tip moves less than 1.2 cm in 10 seconds, or when 45 seconds pass. A first version used 4 seconds and cut v3 off before it had a chance, so it was lengthened after 3 runs.
  2. Held or not. v3 closes the gripper to about the tube's width, so the joint reading alone can't tell a held tube from an empty grip. The watcher squeezes slightly: if the jaws stop on something, the tube is held.
  3. Takeover. The expert rescue skill starts from wherever v3 left the arm: rise, open, find the tube, line up, grip and lift. It gets two tries.
  4. Reset. The arm sets the tube down at a random spot and angle and starts the next run.

Video

One full run, sped up to 5 seconds (about 11×). v3 lines up and stops above the tube for about 41 seconds, the watcher calls it stuck, and the expert rescue skill takes over and lifts the tube.

A clean correction, sped up to 5 seconds (4×). v3 is stuck above the tube, and the expert rescue skill gets it on the first try.

A correction with a retry, sped up to 5 seconds (about 9×). The skill misses the first grip, rises, lines up again and gets it on the second try. Corrections like this are the most valuable DAgger data, because they show how to come back from a miss.

Dataset collected over 30 runs

OutcomeRuns
v3 picked the tube on its own0
Rescued by the expert rescue skill25
Rescue failed too5

v3 went for the grab a few times, but never held on. Twice its jaws closed beside the tube and pushed it away, and those pushes caused most of the failed rescues, because they left the tube near the base or at a steep angle where the skill struggles.

Data: 30 episodes, 43,721 frames, 19,428 of them corrections from the expert rescue skill. Arm time: about 2 hours.

Model version 4: trained on the DAgger corrections

Dataset: 47 demos + 25 correction segments. Loss 0.016. Success rate: 8 of 50 (16%).

Dataset

The v4 dataset is the v3 data plus the expert rescue skill's correction frames from the 25 rescued runs. v3's own frames would just teach the stuck behavior again, so they are left out, along with the 5 failed rescues.

Training

Dataset72 episodes, 33,180 frames
MachineRunpod H100, $3.99/h, 3 h 12 min, $12.27 in total
SafetyEach checkpoint is uploaded to Hugging Face every 2,500 steps, so training can resume on any machine if the credit runs out

Final loss was 0.016. The machine was deleted after the model was saved.

Video

v4 picks up the tube on its own, sped up to 5 seconds (about 1.7×). It reaches, lines up, closes on the tube and lifts it in 8 seconds, with no help. No version before it managed this once.

Results over 50 runs

OutcomeRuns
v4 picked the tube on its own8
Rescued by the expert rescue skill33
Rescue failed too9

v4 succeeded on its own in 8 of 50 (16%) runs, up from 0 of 30 (0%) for v3. The watcher called a stall after 4 seconds without movement, the same rule used for every later model.

Lesson

Demos teach the ideal path. Corrections from the model's own mistakes teach the finish. The same model, retrained with 25 corrections, went from 0 lifts to 8 of 50 (16%). The expert rescue skill's quality sets the ceiling: wherever the skill itself fails, the model never gets a correction to learn from.

What comes next?

v4 trained only on corrections. Its own successful runs, the best examples of the task in its own style, are still unused. The next post grades every run and trains v5 on the model's own successes, weighted by how well each run went. That adds a first step of reinforcement learning (RL) on top of DAgger. In robot learning this simple, offline form is usually called reward-weighted or filtered behavior cloning: learn from your own runs, keeping and weighting the good ones.

Appendix: how was the expert rescue skill improved?

The expert rescue skill sets the ceiling: every correction the model learns from is one the skill pulled off. In the first rounds the skill itself missed too often, so it got a round of fixes. After every failed rescue, Claude went through all three cameras around the grab, named the cause, and fixed it before the next run.

Rescue success over time

Rescue success counts the runs where the model failed and the expert rescue skill then got the tube up.

Bar chart of rescue success by skill version: original skill 62 percent of 42 rescues, continuous takeover 71 percent of 7, with the fixes 95 percent of 44, with damping 96 percent of 45. The side camera was added during the original-skill tests.
TestsSkill versionRescues neededFirst tryRescued
Tests 1–2, 70 runsOriginal: home spot, search, stop-and-look line-up, fixed grip height. Touch-down, middle aim and the side camera added late in test 242n/a26 (62%)
Test 3, 12 runs savedContinuous takeover75 (71%)5 (71%)
Test 4, 50 runsContinuous takeover plus the fixes below4439 (89%)42 (95%)
Test 5, 50 runsAll fixes, plus damping on the line-up4542 (93%)43 (96%)

Tests 1 and 2 are merged because both used the original skill and each was small on its own (27 and 15 rescues). Taken alone, test 2 dipped to 53%, partly from changes made mid-test that were fixed later.

How the final expert rescue skill works

The original skill went back to a home spot, searched for the tube and lined up in stop-and-look steps. That was slow, swung the arm side to side, and filled the training data with small hovering moves that the models then copied. The final expert rescue skill takes over the way a person would:

  1. Start where the model stopped, with no trip home and no wide search.
  2. In one move, rise to hover if lower, open the jaws and roll them across the tube.
  3. Line up while moving, in small steps, reading the wrist camera only after each step finishes. Reading mid-motion made it chase stale positions and overshoot.
  4. Never close unless lined up. If it isn't settled in time, finish with careful stop-and-look steps instead of grabbing blind.
  5. Feel down to the table, close and lift.

How problems were found: a third camera

The top and wrist cameras can't see height well, and most misses turned out to be height or reach errors. Chad added a webcam level with the table, facing the arm. It records all the time and is used only for analysis, never as input to the model, so the training setup is unchanged.

The SO-101 arm on a desk with the overhead camera on a boom arm, the wrist camera on the gripper, and a webcam on a stand in the foreground at table height

Three cameras: top camera on the boom, wrist camera on the gripper, and the side camera in the front right at table height. The top and wrist views are the model's inputs. The side view is for diagnosis only.

Two side-camera frames: the fixed jaw pressing on top of the tube, and the jaws holding the tube by its thin crimped end

Two misses the other cameras couldn't explain. Left: the wrist view said lined up, but the fixed jaw came down on top of the tube. Right: the jaws held the tube by its thin end, but the grip reading was so low the skill called it a miss and let go.

Every fix, in order

#What went wrongHow it was foundFix
1Jaws closed above the tube near the baseServo loadTouch-down: lower until the shoulder feels the table, rise 6 mm, close
2Jaw landed on the tubeSide cameraNew line-up target from grips that held
3Aim jumped between the tube's endsWrist framesAim at the middle of the tube
4Line-up swung after the wrist rollLogsRead the roll direction from the image
5Thin-end grips counted as missesSide cameraLower held threshold
6Detector locked onto the tableWrist framesStricter color rules
7Wrist camera frozeFrame countsSide camera at 640x480 to share the USB
8Slow, hovering rescuesChad, hover timeContinuous takeover
9Line-up overshotLogsLook only after each step finishes
10Grabbed when not lined upLogs, side cameraNever close blind
11Aim slid to the capSide cameraMeasure the middle from the cap end
12Tube standing on its endSide cameraGrip it halfway up
13Jaws in line with the tubeSide cameraRe-check the crossing angle
14Near the base: 3 cm off and too highChad, side cameraHover above the real table
15Jaw hit the baseChadNarrower opening near the base
16Wrist camera hit the upper armChadTurn limit, and an edge case
17Rescue crashed mid-runLogsLock on the servo bus
18Missed first tries in the training dataRescue clipsCrop the missed first try

Limits of the skill (edge cases)

Situations the expert rescue skill doesn't handle on its own. A person, or Claude driving the arm by hand, gets the tube back. These runs are kept out of the training data and out of the rescue success rate.

  • Tube too close to the base. To cross the tube, the wrist has to turn, and this close to the base the turn swings the wrist camera into the arm's upper link, which can damage it. The skill now detects it, doesn't move, and the run loop waits for a person.
  • Tube pinned under the arm. It ended up right under the parked wrist, where no grip could reach it. Claude used the closed gripper as a rake, rolling the tube outward until it pointed forward, then picked it up normally.
  • Tube pushed out of reach. A failed rescue pushed it past the edge of the arm's normal reach. Claude stretched the arm out past the tube, lowered the closed gripper behind it and dragged it back into range (video below).
  • Tube near the base, before the fixes. Every scripted grip there landed about 3 cm off and too high. Claude drove the arm one small move at a time with Chad coaching from a side view. The fixes above now handle most near-base tubes automatically, except the too-close case.

Pulling the tube back, filmed by Chad from the side, sped up to 5 seconds (about 2×). This is a recovery move between runs, not training data.