ConvolutedLadybug.comLeRobot Experiments

Assembly · Post 1 of 6

Assembling the SO-101 and wiring it up

Leader and follower builds, a circuit diagram, and how every motor, board and camera connects.

This post covers how we built the two arms and how everything is connected. We followed the official LeRobot SO-101 assembly guide, and this page adds our own wiring diagram and notes.

The completed SO-101 build: a black leader arm with a handle in the foreground and a red follower arm with a gripper behind it
Our completed build. The black arm in front is the leader, with its handle. The red arm behind it is the follower, with its gripper. The white, black and red servo cables are the 3-pin bus.

Assembly links

Parts and motors

The 3D-printed black parts of the arm laid out in rows, and below them six STS3215 servo motors, each in front of its numbered box
Everything before assembly. The top rows are the black 3D-printed parts (the base, motor holders, shoulder and arm links, and wrist pieces). A small circuit board in an anti-static bag is on the left. The bottom row is the six Feetech STS3215 servos, each in front of its box, which we numbered 1 to 6 by hand.

Numbering the servo boxes is worth doing. Once a motor is out of its box, the six look almost identical, and each joint needs a particular motor and a particular ID. The printed label on each box lists the torque and speed at 6.0 V and 7.4 V, and the servos are marked 7.4 V. The boxes show different torque figures, which fits the different gear ratios in the table below. Set each motor's ID while it is still on the bench (see the setup post).

Two arms, one design

Both arms have six joints and use six Feetech STS3215 servos. The follower has a gripper and every motor has a 1/345 gearbox, so it can hold its pose and carry a load. The leader has a handle with a trigger instead of a gripper, and uses three different gear ratios so it can support its own weight and still be moved by hand with little force.

JointMotor IDFollower gearingLeader gearing
Shoulder pan (base)11/3451/191
Shoulder lift21/3451/345
Elbow flex31/3451/191
Wrist flex41/3451/147
Wrist roll51/3451/147
Gripper (trigger on the leader)61/3451/147

Assembly, step by step

  1. Print and clean the parts. Print from the SO-ARM100 files and remove all support material with a small screwdriver. Lay everything out as in the photo above and check nothing is missing.
  2. Set every motor's ID first. Do this before mounting the motors. New servos all have ID 1, so each one is connected alone to the adapter and given its own ID (see the setup post). The IDs are written to the motor's memory, so this is done once.
  3. Fit one 3-pin cable to each motor as you place it. It is much harder to plug in once the arm is closed up.
  4. Build from the base upward, one joint at a time. Every joint follows the same pattern: fit the horns (a M3×6 screw in the top horn, none in the bottom one), slide the motor into its holder, secure it with four M2×6 screws, then attach the next link with M3×6 screws.
    • Joint 1 (motor 1): motor into the base, then the motor holder and the shoulder.
    • Joint 2 (motor 2): motor in from the top, then the upper arm.
    • Joint 3 (motor 3): motor, then the forearm.
    • Joint 4 (motor 4): motor holder, then the motor.
    • Joint 5 (motor 5): motor into the wrist holder, then the wrist onto motor 4.
    • Gripper (motor 6): on the follower, the moving jaw and claw. On the leader, the leader holder, handle and trigger.
  5. Chain the cables and mount the adapter on the base, as described below.
  6. Find the ports and calibrate both arms.

Circuit diagram

The whole system is a computer, two identical servo adapters (one per arm), two power supplies, twelve servos, and two cameras.

SO-101 circuit and connection diagram A computer connects by USB to a leader bus servo adapter and a follower bus servo adapter, and to two USB cameras. Each adapter has its own DC power supply and feeds a daisy chain of six servo motors over a 3-pin cable. Computer Linux LeRobot DC power supply leader power Bus servo adapter leader /dev/ttyACM0 USB LEADER ARM · 6 × STS3215 servos, 3-pin daisy chain ID 1 pan ID 2 lift ID 3 elbow ID 4 w.flex ID 5 w.roll ID 6 grip DC power supply follower power Bus servo adapter follower /dev/ttyACM1 USB FOLLOWER ARM · 6 × STS3215 servos, 3-pin daisy chain ID 1 pan ID 2 lift ID 3 elbow ID 4 w.flex ID 5 w.roll ID 6 grip Top camera /dev/video2 Wrist camera /dev/video4 USB KEY USB cable (data) DC power for the servos, through the adapter 3-pin TTL bus: GND, VCC, signal (half duplex)

How it is connected

1. Servo bus: adapter to motors

Each arm is a single daisy chain. A short 3-pin cable runs from the adapter to the motor with ID 1 (shoulder pan). From there each motor is plugged into the next one, in order, up to the gripper motor with ID 6. The three wires of each cable are ground, servo power and a single signal line. All six motors share that one signal line, which is half-duplex serial. The adapter sends a message addressed to an ID and only the motor with that ID answers. This is why every motor must have a unique ID and all of them must use the same baudrate. Because the power wire runs along the same chain, the adapter feeds all six motors.

2. Power

Each arm has its own DC power supply, plugged into its adapter. The servos draw much more current than a USB port can supply, so the arms are never powered from the computer. A motor chain cannot be powered from USB alone.

Check the voltage for your motors. The STS3215 servo is sold in different voltage versions. The boxes and labels on our servos give ratings at 6.0 V and 7.4 V (the 7.4 V version), so a 12 V supply must not be connected to them. Do not guess: read the voltage and current requirement for your exact servos, and see the SO-ARM100 bill of materials before you plug in any supply.

3. USB: computer to adapters

Each adapter connects to the computer by its own USB cable and appears as a serial port. On our computer the leader is /dev/ttyACM0 and the follower is /dev/ttyACM1. Use lerobot-find-port to check which is which, because the numbers depend on which cable was plugged in first. If you use a Waveshare adapter, set both of its jumpers to channel B (USB).

4. USB: computer to cameras

The two cameras connect straight to the computer and show up as video devices: the top camera as /dev/video2 and the wrist camera as /dev/video4.

Connection summary

FromToLinkCarries
ComputerLeader adapterUSB (/dev/ttyACM0)Commands and joint readings
ComputerFollower adapterUSB (/dev/ttyACM1)Commands and joint readings
Power supply (leader)Leader adapterDC power inputServo power
Power supply (follower)Follower adapterDC power inputServo power
Each adapterMotor ID 1, then 1→2→…→63-pin cablePower, ground, half-duplex data
ComputerTop cameraUSB (/dev/video2)640×480 video at 30 fps
ComputerWrist cameraUSB (/dev/video4)640×480 video at 15 fps

Common pitfalls

  • Loose cables during ID setup. If the power lead drops out while you handle the board, the motor stops answering and the script fails. Check the cabling before pressing Enter.
  • More than one motor on the bus while setting IDs. Two motors with ID 1 answer at once and corrupt each other's replies. Connect only one motor at a time.
  • A broken chain. If one motor is unplugged, every motor after it in the chain disappears. When the arm reports missing motors, check the cable just before the first missing ID.
  • Swapped arms. It is easy to confuse which port is the leader and which the follower. Label the two USB cables.

Once assembled and wired, continue to setting up and calibrating the arms. To see what we did with the finished arms, go to the experiments.