The SO-100 robot arm: hardware, servos and what runs on it

This is the hardware page for the SO-100: the parts, the bus, the voltage, and the four policies that have a written training guide for this arm. The learning path lives elsewhere and this page points at it rather than repeating it.

TheRobotStudio and LeRobot · Last updated 2026-08-09

Maker
TheRobotStudio and LeRobot
Actuators
5 joints plus gripper, 6 actuators
Each one is a dimension in the action vector
Servos
Feetech STS3215 bus servos
Supply voltage
7.4 V
A 12 V supply destroys these servos in seconds
Parts cost
roughly 110 to 150 euro per arm in parts
Platform support
Fully supported
Covered end to end by the guides on this site
Also written as
SO-ARM100, SO100
Dataset format
LeRobot v2.0 or v2.1
What every model here reads. ACT, SmolVLA and Pi0.5 also take v3.0, GR00T does not.
Short answer

The SO-100 is an open hardware arm with five joints plus a gripper, six actuators in total, designed by TheRobotStudio together with the LeRobot project. It runs on Feetech STS3215 bus servos at 7.4 V and a set of parts costs roughly 110 to 150 euro. It is the reference arm of this platform, which means every trainer, guide and fix page here is proven on an SO-100 first.

What the SO-100 is

The SO-100 is a five joint arm with a gripper, six actuators in total, designed by TheRobotStudio together with the LeRobot project and published as open hardware. The structure is printed, the electronics are six bus servos on a single chain, and parts run roughly 110 to 150 euro. That price is the reason the design exists: it puts a manipulator that can record real demonstration data on a desk next to a laptop.

What the money does not buy is precision. There is no force or torque sensing, the gearing has backlash you can feel by hand, and the pose the arm returns to drifts as the servos warm up. None of that is a defect to engineer around. Learning from demonstrations tolerates all three, which is why this class of hardware and this method arrived together.

On this platform the SO-100 is the reference machine. Features are validated against one before they are claimed to work anywhere else, and /live is a real SO-100 anyone can drive from a browser with no account. If you want to know how the joint limits and the gripper behave before ordering parts, that is the cheapest test available.

This page is the hardware. The course is elsewhere.

Assembly, pairing and calibration are covered step by step in /learn/so-100-getting-started. Recording technique lives in /so-100/data-collection, the dataset layout in /so-100/lerobot, and the method itself in /so-100/imitation-learning. What follows here is parts, wiring and model support.

Specifications

ItemSO-100
DesignerTheRobotStudio and LeRobot
Also writtenSO-ARM100, SO100
Kinematics5 joints plus gripper, 6 actuators
ServosFeetech STS3215 bus servos
Servo supply7.4 V
Parts costroughly 110 to 150 euro per arm
Platform supportFull, this is the reference arm
Dataset formatLeRobot v2.0

The cost covers the arm only. Cameras, the supply and the host machine sit outside it, and so does the second arm you need to teleoperate with a leader, an arrangement explained in /glossary/leader-follower. Five joints plus a gripper also fixes the width of every action the policy will emit, which /glossary/degrees-of-freedom puts in context.

One bus, six ids, and the number that ends arms

The six STS3215 servos are not wired individually. They are daisy chained on a single half duplex serial line, each holding a numeric id, and the whole chain reaches the host as one serial port. That is what makes the arm cheap, and it is why a fault looks strange the first time: a bad connector at the third joint takes out that joint and everything past it.

So the device list is the first thing to read when something is wrong, not the last. If no port appears, the problem is the cable, the driver or the port name, and /fix/arm-not-detected works through those in order. If the port is there but a servo stays silent, the chain is broken at a locatable point and /fix/servo-not-responding bisects it. Cameras have their own version in /fix/camera-not-detected.

Feetech STS3215 servos run at 7.4 V

A 12 V supply destroys them in seconds and none of that damage is recoverable. This matters more than it sounds, because many hobby robot guides specify 12 V for hardware that genuinely wants it, and because a 12 V barrel jack fits a 7.4 V arm perfectly well. Read the label on the supply against the arm in front of you every single time.

The commands you will actually type

bash
curl -fsSL https://www.ay-robots.com/install.sh | sh
ay-robots version

# The code comes from /dashboard/client/robots/new, which issues one as it loads
ay-robots pair 4QD2-8HRM-1XV6
ay-robots status

# Six servos and every camera the backend can see, with serial ports
ay-robots devices

# Once per physical arm, before the first recording
ay-robots calibrate

# Back to the neutral pose whenever the scene needs a reset
ay-robots home
The desktop client from /download runs the same backend, so pick whichever fits your habits.

Everything the arm does locally is in that list plus record, run and stop. Training is deliberately absent: it happens on a rented cloud GPU and starts in the web dashboard under Training, or through the start_training tool on the MCP server. Reaching for a training subcommand is the most common wrong turn here, because older material elsewhere documents one that never existed.

From the carton to the first movement

  1. 1
    Sort the kit and check the supply

    Count the servos and find the power supply before you pick up a screwdriver. If the label does not say 7.4 V, stop there and get one that does. The full build with photographs is in /learn/so-100-getting-started.

  2. 2
    Write the servo ids before assembly

    Each servo needs its id set while you can still reach the connector. Afterwards this becomes a disassembly job, and the bus addresses servos by id rather than by position.

  3. 3
    Install the client

    One command gives you the CLI and the desktop client with the driver inside both. There is no Python environment to build.

    bash
    curl -fsSL https://www.ay-robots.com/install.sh | sh
  4. 4
    Pair the machine

    Add a robot inside one of your environments in the dashboard and follow the link to pair a real robot, or go straight to /dashboard/client/robots/new. That screen issues the one-time code by itself, and if the client is already running on the machine you are browsing from it redeems the code for you. Typing it is the route for a client on another host. Either way the code is exchanged once for a permanent credential, and the status command confirms both halves, the backend and the pairing.

    bash
    ay-robots pair 4QD2-8HRM-1XV6
    ay-robots status
  5. 5
    Read the device list

    One arm on one serial port, six servos answering, plus your cameras. That tells you the chain is electrically sound before you bolt anything else on.

    bash
    ay-robots devices
  6. 6
    Calibrate, then home

    Guide the joints to the neutral pose, press Enter to store the zero, then send the arm home. That commanded movement proves the build. /glossary/calibration explains why every later number depends on the zero.

    bash
    ay-robots calibrate
    ay-robots home

What the platform trains and runs on an SO-100

All five supported policies train on SO-100 data and four have a guide written for this arm. The choice is mostly what you are willing to spend per run and how fast you want an answer about your dataset.

PolicyGuideGPU tierEpisodes to startInference per step
SmolVLA/train/smolvla-on-so-100RTX 4090 or any 24 GB card30about 245 ms
ACT/train/act-on-so-100RTX 4090 or any 24 GB card50about 20 ms
GR00T N1.7/train/groot-n1-7-on-so-100A100 80 GB or H100 80 GB50about 152 ms
Pi0.5/train/pi0-5-on-so-100A100 80 GB or H100 80 GB50about 485 ms

Full defaults sit on /policies/smolvla, /policies/act, /policies/groot-n1-7 and /policies/pi0-5. GR00T N1.5 at /policies/groot-n1-5 still trains, but it exists to reproduce runs that started before N1.7 rather than to begin new work.

The route from an empty desk to a running policy is the same whichever model you pick: record while teleoperating, discard the episodes that went badly, upload, start a run in the dashboard, then hand the checkpoint back to the arm.

bash
# Records episodes. You drive the arm from the client or the web cockpit while this runs.
ay-robots record --task "pick up the red cube and place it in the bowl" --episodes 30 --cameras wrist,top

# Enter ends an episode, Ctrl-C discards the one in progress rather than saving half of it
ay-robots datasets list --local
ay-robots datasets upload cube-to-bowl --name cube-to-bowl-v1

# Training has no CLI command. Start it under Training in the dashboard,
# or through the start_training tool on the MCP server.

# When the checkpoint exists, bring it back to the arm
ay-robots run --model smolvla --checkpoint s3://runs/cube-to-bowl-v1/step-20000 --task "pick up the red cube and place it in the bowl"
ay-robots stop
Without --checkpoint the run command drives the base model, which is a useful smoke test before your own policy exists.

How it differs from the SO-101, the Koch v1.1 and LeKiwi

Four arms are supported and they are not four grades of one product. Two are the same machine a revision apart, one belongs to a different servo ecosystem, and one is an arm bolted to something that drives.

  • SO-101: the direct successor with a revised wrist. Same servos, same 7.4 V, same software path, roughly 130 to 170 euro in parts.
  • Koch v1.1: Dynamixel XL330 and XL430 servos on 5 V and 12 V rails instead of one Feetech chain. Different driver, different wiring, roughly 250 to 350 euro. Everything past the serial port is unchanged.
  • LeKiwi: an SO-100 arm on a three wheel holonomic base, roughly 400 to 500 euro. Wheel velocities join the action vector, so its datasets and its checkpoints do not interchange with a fixed arm.

Frequently asked questions

How much does an SO-100 cost to build?

Roughly 110 to 150 euro for the parts of one arm. Cameras, the 7.4 V supply and the host machine come on top, and teleoperating with a leader means building two arms.

Can I use a 12 V supply if I keep the current low?

No. The STS3215 servos are 7.4 V parts and 12 V destroys them within seconds. No current limit makes it survivable.

Do I need a Python environment or a local LeRobot install?

No. The client and the CLI ship the driver, so one install command gives you the device list, calibration, recording, upload and policy execution. Training never runs on your machine.

Is the SO-100 obsolete now that the SO-101 exists?

Not on this platform. Both are fully supported, run the same servos at the same voltage, and every training guide for one has a counterpart for the other.

Which policy should I train first on it?

SmolVLA. It becomes useful at around 30 episodes rather than 50 and trains on a 24 GB card rather than an 80 GB one, so a first run costs about 1 to 3 USD. /train/smolvla-on-so-100 is the walkthrough.

Was this page helpful?

Drive a real arm before you build one

The arm on /live is a real SO-100. Whenever it is online, anyone can drive it from the browser without a signup - the closest look at this class of hardware you can get without owning any.