RobotEd

SO-101 build guide

Build the SO-101

A complete assembly, motor setup, and calibration path for the open-source leader and follower robot arms.

Black SO-101 follower arm beside a white SO-101 leader arm

Before you start

Parts and printed components

Use the upstream bill of materials and printing guidance to source the hardware. If you are not printing your own parts, RobotEd offers the complete kit and the printed-parts pack.

Software

Install LeRobot before configuring the arms. The Feetech extra is required for the serial bus motor tools used below.

pip install -e ".[feetech]"

Motor plan

The follower uses six STS3215 motors. The leader uses its specified motor gearing so it can support itself while remaining easy to move by hand. Keep the motors labelled by axis during assembly.

Leader-arm axisMotorGear ratio
Base / shoulder pan11 / 191
Shoulder lift21 / 345
Elbow flex31 / 191
Wrist flex41 / 147
Wrist roll51 / 147
Gripper61 / 147

Prepare the printed parts

Remove support material cleanly before fitting hardware. A small screwdriver can help lift support away from tight recesses. Before enclosing each motor, connect its 3-pin cable so the final daisy chain can be routed cleanly.

Assembly

Build the arm, joint by joint

Work through the mechanical sequence in order. The videos are the visual reference for orientation and fastener placement; pause after each stage to make sure the joint moves freely.

1

Install joint 1

  • Seat motor 1 in the base and secure it with four M2×6 screws.
  • Fit the first motor holder, then install the two horns and secure the upper horn with its M3×6 screw.
  • Mount the shoulder structure and its holder, checking that the cable path remains clear.
2

Install joint 2

  • Lower motor 2 into the shoulder from above and secure it with four M2×6 screws.
  • Install both horns, then fasten the upper horn.
  • Attach the upper arm using four M3×6 screws on each side.
3

Install joint 3

  • Install motor 3 with four M2×6 screws.
  • Fit its horns and secure one with the horn screw.
  • Attach the forearm with four M3×6 screws on both sides.
4

Install joint 4

  • Slide the fourth motor holder into position.
  • Insert motor 4 and secure it with four M2×6 screws.
  • Install its horns and tighten the horn screw before continuing.
5

Install joint 5

  • Fit motor 5 into the wrist holder and secure the front mounting screws.
  • Install the wrist horn and its horn screw.
  • Connect the wrist assembly to joint 4 with four M3×6 screws on each side.

Fit the end effector

Follower: gripper

  1. Fasten the gripper to the wrist motor horn.
  2. Install the gripper motor with its side mounting screws.
  3. Fit the horns, then attach the gripper claw.

Leader: handle

  1. Mount the leader holder to the wrist.
  2. Attach the handle to motor 5.
  3. Install the trigger motor, horn, and follower trigger.

Configuration

Identify the USB ports

Connect each MotorBus to your computer and power it. Run the port finder, follow its disconnect prompt, and write down which device path belongs to the leader and which belongs to the follower.

lerobot-find-port

macOS

Your ports normally look like /dev/tty.usbmodem…. The tool identifies the relevant device after you unplug the requested bus.

Linux

Ports commonly appear as /dev/ttyACM0 and /dev/ttyACM1. You may need permission before the tools can access them.

sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1

Assign IDs and baud rates

Every motor on a bus needs its own ID and all devices must use the same baud rate. Configure one motor at a time: connect only the motor requested by the script, never a daisy-chained group. These settings are retained by the motor, but reused motors may need to be set up again.

Follower arm

lerobot-setup-motors \
+  --robot.type=so101_follower \
+  --robot.port=/dev/tty.usbmodem…

Leader arm

lerobot-setup-motors \
+  --teleop.type=so101_leader \
+  --teleop.port=/dev/tty.usbmodem…

Calibrate both arms

Calibration lets the leader and follower report matching positions for the same physical pose. Start with each joint centred in its safe range; when prompted, move each joint through its full range smoothly and without forcing it.

Follower

lerobot-calibrate \
+  --robot.type=so101_follower \
+  --robot.port=/dev/tty.usbmodem… \
+  --robot.id=my_follower_arm

Leader

lerobot-calibrate \
+  --teleop.type=so101_leader \
+  --teleop.port=/dev/tty.usbmodem… \
+  --teleop.id=my_leader_arm

Need a component?

Keep building with RobotEd

The original SO-101 design files remain open source. RobotEd provides physical parts, preparation, and support for builders who want a faster path from files to a working arm.