Imitation learning on the SO-100, from demonstrations to a policy

Imitation learning replaces "program the motion" with "show the motion". For a five-degree-of-freedom arm on a desk, that trade is usually worth making. This page explains the approach, what it is genuinely good at, and where it falls over.

Last updated 2026-08-07

The idea in one paragraph

Instead of writing inverse kinematics and a state machine for a task, you teleoperate the arm through the task a few dozen times while recording what the cameras saw and what the joints did. A neural network then learns the mapping from observation to action. At inference time it sees a fresh camera image and outputs the next joint command.

Why this suits the SO-100 specifically

The SO-100 has no force-torque sensing and modest repeatability. Classical approaches lean on precise models of the arm and the world, which is exactly what this hardware cannot give you. Learning from demonstrations sidesteps the model entirely.

What it is good at, and what it is not

Works wellStruggles
Repetitive tabletop manipulationTasks needing millimetre precision
Tasks that are easy to demonstrate but tedious to codeLong-horizon tasks with many sub-goals
Deformable or irregular objectsSituations far outside the demonstrations
Grasping where exact geometry is unknownAnything requiring force feedback the arm cannot sense

Choosing a policy architecture

You do not need to pick perfectly on the first try. Start simple, get an end-to-end result, then move up if the ceiling is too low.

PolicyData appetiteGood first choice when
ACTLow, 50+ episodesYou want a working result today on one task
Diffusion PolicyMedium, 100+ episodesThe task has several valid ways to succeed
SmolVLAMediumYou want language conditioning without a large GPU
GR00T (fine-tuned)HigherYou want generalisation and have the GPU budget
Do not start with the largest model

A fine-tuned foundation model on 30 inconsistent episodes will perform worse than ACT on the same data, and it will take far longer to tell you so. Prove the data is good with a small policy first.

The full loop

  1. 1
    Record

    Fifty or more consistent demonstrations of one task, with varied object placement.

  2. 2
    Review

    Discard failed and inconsistent episodes. This step has more effect on the outcome than any hyperparameter.

  3. 3
    Train

    Start a training job. Watch the loss curve, but treat it as a smoke signal rather than a measure of success.

  4. 4
    Evaluate on hardware

    Run the policy on the real arm. Success rate on physical attempts is the only metric that counts.

  5. 5
    Diagnose and extend

    Where it fails, record more demonstrations of exactly that situation. Targeted data beats more data.

Validation loss is not success rate

A policy can have a beautiful loss curve and still fail every physical attempt, usually because it learned the average of several incompatible strategies. Always evaluate on the arm.

Frequently asked questions

Do I need my own GPU?

Not for training on this platform, that runs in the cloud. Inference on the arm runs on your own machine, and for ACT-sized policies a normal laptop keeps up.

How long does training take?

An ACT policy on 50 episodes is typically well under an hour. Fine-tuning a foundation model on a few hundred episodes is a matter of hours, not minutes.

Will a policy trained on my arm work on someone else’s SO-100?

Partly, and better if both arms are calibrated. Camera placement matters more than the arm itself, since the policy is largely reading pixels.

Can I combine imitation learning with scripted motion?

Yes, and it is often the pragmatic answer. Script the parts that are trivially reliable, such as the approach to a fixed home position, and learn the parts that are not, such as the grasp.