Recording imitation learning data with the SO-100

A policy is only as good as the demonstrations you feed it. This page covers what a usable SO-100 dataset looks like, how many episodes you need before training is worth starting, and the recording mistakes that are invisible until your policy fails.

Last updated 2026-08-07

What one episode actually contains

An episode is a single, complete attempt at a task, from a defined starting state to a success condition. For the SO-100 that means a synchronised stream of joint positions, gripper state and camera frames, plus one natural-language description of what you were trying to do.

StreamTypical rateWhy it matters
Joint positions (6 values)30 HzThe action signal the policy learns to reproduce
Gripper state30 HzOften the difference between grasp and near-miss
Wrist camera30 fpsClose-range detail during the grasp
Scene camera30 fpsObject location and approach path
Task stringonce per episodeConditions language-driven policies
Frame alignment beats frame rate

A 20 Hz recording where actions and images line up trains better than a 60 Hz recording where the camera lags by 80 ms. The client timestamps every stream on arrival and drops frames it cannot align, rather than silently interpolating.

How many episodes do you need

There is no universal number, but the practical thresholds below hold up well for tabletop manipulation with a single SO-100 and two cameras. They assume you vary object placement between episodes, which most beginners do not do enough.

EpisodesWhat you can realistically expect
10 to 20Sanity check only. The pipeline works end to end, the policy does not.
50A policy that succeeds from starting positions close to those you demonstrated.
100 to 200Reasonable robustness across the workspace for one task.
500+Tolerance for lighting changes, distractor objects and moderate variation in the object itself.
Fifty good episodes beat two hundred sloppy ones

Inconsistent demonstrations teach the policy that the task is ambiguous. If you change your approach strategy halfway through a recording session, you have effectively built two small datasets instead of one large one.

The five mistakes that quietly ruin a dataset

  1. Never resetting the scene the same way. If the cube starts somewhere different every time and you never demonstrate the same approach twice, the policy has nothing to generalise from.
  2. Recording failures without marking them. A failed grasp inside your training set teaches the policy to fail. Review and discard, or label them explicitly.
  3. Moving the camera between sessions. The policy learns pixel-to-action mappings. Nudging the tripod invalidates everything recorded before it.
  4. Changing lighting mid-session. Afternoon sun through a window is a different dataset from ceiling light at night.
  5. Teleoperating faster than you can be precise. Jerky demonstrations produce jerky policies, and the SO-100 servos will not thank you for it.

The recording loop in the client

  1. 1
    Describe the task

    One clear sentence, phrased the same way every time for the same task. This string is what language-conditioned policies attend to. "pick up the red cube and place it in the bowl" is good, "test 4" is not.

  2. 2
    Reset the scene

    Move the arm home and place the objects. The camera preview is there so you can confirm framing before you commit, not after.

  3. 3
    Record

    After a three-second countdown, teleoperate the arm through the task. Deliberate, smooth movements. Stop as soon as the task is complete rather than idling in frame.

  4. 4
    Review

    Play the episode back before you keep it. This is the step people skip and later regret. Discarding a bad episode costs seconds, training on it costs hours.

  5. 5
    Upload

    The episode is written locally first and uploaded when you choose. Nothing leaves your machine until you say so.

Frequently asked questions

Do I need two cameras?

One works, two is noticeably better. A wrist camera gives the policy close-range detail during the grasp that a scene camera physically cannot see once the gripper occludes the object.

Can I merge recordings from two different SO-100 arms?

Yes, but calibrate both first and expect a small drop in performance. Servo zero points differ between physical units, so the same joint value means a slightly different pose on each arm.

How large is an episode on disk?

Roughly 5 to 15 MB for a 10 to 20 second episode with two cameras at 30 fps, depending on scene complexity. Budget a few gigabytes for a serious dataset.

Can I record without an internet connection?

Yes. Recording is entirely local. You need connectivity for the initial pairing and for uploading, not for the recording itself.