| Fact | SO-1005 joints plus gripper, 6 actuators | SO-1015 joints plus gripper, 6 actuators |
|---|---|---|
| Maker | TheRobotStudio and LeRobot | TheRobotStudio and LeRobot |
| Actuators | 5 joints plus gripper, 6 actuators | 5 joints plus gripper, 6 actuators |
| Servos | Feetech STS3215 bus servos | Feetech STS3215 bus servos |
| Supply voltage | 7.4 V | 7.4 V |
| Parts cost | roughly 110 to 150 euro per arm in parts | roughly 130 to 170 euro per arm in parts |
| Platform support | Fully supported | Fully supported |
| Also written as | SO-ARM100, SO100 | SO101 |
| In one line | The reference arm of this platform. Everything here is tested on one first. | Successor to the SO-100 with a revised wrist. Identical software workflow. |
The SO-100 and the SO-101 use the same Feetech STS3215 bus servos at 7.4 V and the same five joints plus gripper, six actuators in total, and both are on the full support level here. The SO-101 is the later revision with a reworked wrist and costs roughly 130 to 170 euro in parts against roughly 110 to 150 for the SO-100. The software workflow is identical, so this is a hardware and price decision, not a platform decision.
The short answer
There is no software fork between these two arms. Same servo family, same bus, same 7.4 V rail, same six actuators, same calibration procedure, same dataset schema, same trainers, same inference path. Every guide here that says SO-100 holds on an SO-101 with the name swapped. What differs is mechanical: the SO-101 is the successor revision with a reworked wrist, at about twenty euro more in parts. Ordering now, that is an easy twenty euro. Already recording on an SO-100, the swap buys nothing a policy can see.
Side by side
| Fact | SO-100 | SO-101 |
|---|---|---|
| Maker | TheRobotStudio and LeRobot | TheRobotStudio and LeRobot |
| Degrees of freedom | 5 joints plus gripper, 6 actuators | 5 joints plus gripper, 6 actuators |
| Servos | Feetech STS3215 bus servos | Feetech STS3215 bus servos |
| Servo voltage | 7.4 V | 7.4 V |
| Parts cost | Roughly 110 to 150 euro per arm | Roughly 130 to 170 euro per arm |
| Support level here | full | full |
| Mechanical difference | The original wrist assembly | Revised wrist, otherwise the same layout |
| Driver path | Feetech bus, the reference configuration | The same Feetech bus, no separate profile |
| Recorded action dimensions | 6 | 6 |
| Dataset format | LeRobot v2.1 | LeRobot v2.1 |
| Also written as | SO-ARM100, SO100 | SO101 |
What the revised wrist changes in practice
The catalog entry is deliberately short: successor to the SO-100 with a revised wrist, identical software workflow. That is the whole delta, and it is worth being precise about what it touches. It touches the mechanical assembly around the last joint before the gripper. It does not touch the actuator count, so the recorded action vector is six wide on both arms and the column order does not shift.
For the person doing the work, the wrist is where an SO-100 build slows down. It is the tightest part of the frame, the horn there carries the most repeated load, and it is the joint you are most likely to re-seat after a policy has driven the gripper into the table. A revision there is not a number you can benchmark, it is fewer minutes lost during assembly and repair. Neither shows up in a training curve, which is why this comparison keeps getting framed as bigger than it is.
Both arms report six actuator positions per frame, in the same order, so a dataset recorded on one has the same shape as a dataset recorded on the other. No trainer here asks which revision produced it.
What stays exactly the same
| Workflow stage | What you run | Different on the SO-101? |
|---|---|---|
| Find the arm | ay-robots devices | No, a serial port with Feetech servos behind it |
| Set the zero point | ay-robots calibrate | No, same procedure, once per physical unit |
| Move to a known pose | ay-robots home | No |
| Record demonstrations | ay-robots record --task "..." | No, same episodes, same --cameras flag |
| Upload the dataset | ay-robots datasets upload <dataset> | No, LeRobot v2.1 either way |
| Train | Training in the dashboard, or the start_training tool on the MCP server | No, the trainer never sees the revision |
| Run the policy | ay-robots run --model <model> | No |
That table is why the SO-101 needed no separate guides. The trainer consumes a LeRobot v2.1 dataset with six action dimensions, camera frames and a task string. Nothing in that description mentions a frame revision.
Calibration does not transfer, and that catches people out
Calibration belongs to one physical arm, not to a model of arm. Two SO-100 units from the same kit still need their own zero point, because the horns were seated at slightly different angles. Going from an SO-100 to an SO-101 is that situation with a different name on it: calibrate the new arm, guide the joints to the neutral pose, press Enter, and both the recorder and the policy runner use that reference.
The same applies to a checkpoint you already trained: it learned a mapping from your images to joint targets inside your old calibration frame. Whether it holds on a second unit is an empirical question, and one run with a hand near the stop settles it.
# On the new arm, before recording anything.
ay-robots devices
ay-robots calibrate
ay-robots home
# Try the checkpoint you already have, hand near the stop.
ay-robots run --model smolvla \
--checkpoint s3://ay-robots-runs/cube-pick-smolvla/step-20000 \
--task "pick up the red cube and put it in the bin"
# If it drifts, stop and record on the arm you will actually deploy on.
ay-robots stop
ay-robots record --task "pick up the red cube and put it in the bin" \
--dataset cube-pick-so101 --episodes 10 --cameras wrist,topBoth arms are on the full support level
Full is not a marketing tier, it describes where a change gets tested. The SO-100 is the reference unit, so a fix lands there first and every hardware symptom documented here was reproduced on one. The SO-101 shares the servo family, the voltage and the driver path, so it inherits that testing.
The other level is compatible, which the Koch v1.1 and the LeKiwi carry: the workflow runs end to end, but the hardware differs from the reference in a way you can name, a different servo bus or extra actuators, so the reasoning in a fix page transfers while the exact output may not. Neither arm on this page is in that position. Whichever way you go here, you stay on the tested path.
Feetech STS3215 servos run at 7.4 V. A 12 V supply destroys the bus in seconds, on an SO-101 exactly as fast as on an SO-100. Read the label before the barrel jack goes in, including on the day you are only swapping one servo.
Build the SO-101 if
- You are ordering parts and have not built anything yet. Twenty euro against the newer mechanical revision is not a close call.
- You expect to take the wrist apart more than once, which is what happens while you are still finding your workspace limits.
- You want the arm on your desk to match the revision current build documentation is written against.
Stay on the SO-100 if
- You already own one. There is no software benefit on the other side of the swap, and a new unit costs you a fresh calibration.
- You are buying a second arm for a leader and follower pair and the first half is an SO-100. A matched pair keeps the teleoperation feel consistent.
- Budget is the binding constraint. Twenty euro put into a second camera is a change the policy can see, and the wrist revision is not.
Where to go next
- /robots/so-100 for the fact sheet: servos, voltage, build notes
- /robots/so-101 for the same on the SO-101
- /train/smolvla-on-so-101 for the cheapest useful first run
- /train/act-on-so-100 when you want the fastest policy at runtime
- /fix/arm-not-detected when the device list comes back empty
- /fix/joint-stops-early when a joint will not reach the calibrated pose
- /glossary/calibration for why the zero point belongs to one physical unit
- /glossary/lerobot-dataset for the format both arms record into
- /live to drive a real SO-100 in the browser before ordering
Frequently asked questions
Can I train on SO-100 episodes and run the policy on an SO-101?▾
The formats match: six action dimensions, LeRobot v2.1, same column order, so the job runs. Whether the policy performs on the second arm depends on how close the two calibrations and camera positions are. Try the checkpoint with a hand on the stop, and record a small top-up dataset on the new arm if it drifts.
Is the SO-101 faster or more precise than the SO-100?▾
Not in any sense this platform measures. Inference latency belongs to the model, not the arm: about 20 ms for ACT, about 152 ms for GR00T N1.7, about 485 ms for Pi0.5, on either arm.
Do I need a different power supply for the SO-101?▾
No. Both arms use Feetech STS3215 servos at 7.4 V. The 12 V supply that came with something else on the bench is the most expensive mistake available here, and it costs the same on both revisions.
Does the desktop client need a setting for which arm I have?▾
No. The client ships the driver, so there is no Python environment to set up and no per-revision profile to select. The device list shows what it can see, the calibration step stores the zero point, and that is the whole setup.
Are the fix pages valid for both?▾
Yes. Both arms are on the full support level, which means the hardware those pages were reproduced on is this servo family at this voltage. /fix/servo-not-responding and /fix/arm-twitches-then-sags apply unchanged.
I want a mobile robot eventually. Should I skip both and build a LeKiwi?▾
No. A LeKiwi is an SO-100 arm on a three-wheel base, so the arm skills carry over, while the base adds action dimensions your demonstrations have to teach. Learn the workflow on a fixed arm first, then read /compare/so-100-vs-lekiwi.
The arm is the smaller half of the decision. Which model you train on the data it records is compared under /compare, and the runnable instructions per model and arm are under /train.