CAUTION: This page documents a 3-bus architecture (Bus 1 = left arm, Bus 2 = right arm, Bus 3 = neck + wheel base). Some older references describe a shared/2-bus layout — for this build, follow this page.

1. Build Overview

This guide walks you through building the platform with 2× SO-101 follower arms, a neck/head assembly, an omni-wheel base on an IKEA RÅSKOG cart, and an NVIDIA Jetson compute node mounted near the neck/base region.

The 3-Bus Separation

We use three independent motor buses to simplify wiring and isolate faults during motor debugging.

BusSubsystem
Bus 1Left arm
Bus 2Right arm
Bus 3Neck and wheel base

Recommended Build Order

  1. Print all parts
  2. Assemble both SO-101 arms
  3. Install wrist camera mounts and grippers
  4. Assemble cart and wheel base
  5. Assemble neck / top base / head
  6. Configure motors (before final assembly)
  7. Mount Jetson and route wiring
  8. Final mechanical assembly and cable management
  9. Software bring-up and bus verification

2. 3D-Printed Parts

About 90% of the structural components are 3D-printed. Download the combined 3MF and apply the Pro print settings below.

On the GitHub page that opens, click the “Raw file” button (top-right of the file viewer) to download the .3mf.

You will need: two SO-101 follower arms, the neck/head assembly, the omni-wheel base, and a wrist-camera mount per arm. Print the soft finray gripper fingers in TPU95A.

TIP: Pre-dry PLA at ~45°C for 8 hours in humid environments. Wet filament causes stringing, weak layer adhesion, and poor thread/fit quality on structural parts.

3. Print Settings

Start from your baseline PrusaSlicer profile (or a standard PLA profile), then change only the settings below. Parts were validated on a consumer printer (e.g. Bambu A1) in PLA; PETG and CF variants are optional strength upgrades.

General Print Notes

NOTE: The wheel-base connector may need Z scaling only to balance the load across the omni-wheels and cart wheels. Do not uniformly scale the part.
ARM TIP: Print two follower arms for the dual-arm build — leader arms are only needed for leader-follower teleop. Batch the wrist-camera mount and your preferred gripper variant with the arm prints.

4. Assembly

Overall Assembly

Watch the overall assembly guide for a complete walkthrough of the build process.

A) Cart

Assemble the IKEA RÅSKOG cart first to establish the rolling structure.

B) Arms (Joints 1–5)

Assemble both SO-101 follower arms (step-by-step build video). Crucial wrist/gripper order:

  1. Before attaching the gripper to joint 5, install the wrist-camera attachment to the gripper
  2. Install the gripper claw/fingers
  3. Use the follower gripper approach on both arms

This order avoids reopening the wrist stack later.

C) Neck (Top Base & Head)

Assemble the Top Base and Head. The head follows the same motor style and is derived from early SO-101 link patterns. The hollow neck doubles as a cable channel.

Watch the neck assembly (overall assembly video, 0:00–18:51).

D) Wheels & Wheel Base

Assemble the wheels and wheel base.

Watch the wheel assembly (overall assembly video, 18:52–32:30).

E) Integrating Components onto the Cart

Bring the arms, neck, and wheel base together on the cart for the full platform.

Watch the full integration onto the cart (overall assembly video, 32:35–39:52).

5. Motor Configuration & IDs

Configure motors before final cable management and hard mounting. Many servos ship with default ID 1, so each ID must be unique per bus and the baudrate must match the board and motors.

A) Arm Motors (SO-101)

Identify each serial port, then configure the motors one at a time — set each ID and the baudrate, and repeat for both follower arms.

B) Neck & Wheel Motors (Bus 3)

Assign each ID one at a time with the repo's set_motor_id.py tool. On Linux you may need serial permissions (sudo chmod 666 /dev/ttyACM0).

ID Planning

BusRecommended IDsMapping Notes
Bus 1 (Left Arm)1–6SO-101 follower mapping
Bus 2 (Right Arm)1–6Valid due to bus separation
Bus 3 (Neck & Wheels)7–117–8 Neck, 9–11 Wheels
Identify Motor Ports
# Identify active serial ports
$ lerobot-find-port

# Assign a unique ID to one connected motor (repeat per motor)
$ python set_motor_id.py --port /dev/ttyACM0 --id 7 --model sts3215

# Grant serial permissions on Linux
$ sudo chmod 666 /dev/ttyACM0
TIP: Physically label every motor and both ends of every cable after configuration — L-1L-6, R-1R-6, B-7B-11.

6. NVIDIA Jetson Placement

Mount the Jetson at the base of the neck or in the center storage shell area, depending on your printed configuration.

7. Wiring (3-Bus)

Wire the three buses as below.

A) Motor Wiring

Leave service slack near each joint (especially wrist/gripper), avoid tight bends near connectors, keep motion cables away from pinch points, and label both ends of every extension.

B) Power Wiring

C) Camera Wiring

8. Final Assembly

Complete final assembly, substituting the Jetson where older instructions reference a Raspberry Pi.

CAUTION: Do not push the fully assembled robot like a normal cart — lift it (~12 kg) to relocate to protect the motor gears.

Final Checklist

Mechanical & Power

  • Jetson mounted securely
  • Battery secured and upright
  • No cable pinch points
  • Full arm range without cable snagging
  • Wheel base rotates freely

Electrical & Sensing

  • All 3 buses configured and tested independently
  • Motor IDs verified
  • Motor directions verified
  • Both wrist cameras detected
  • Head camera detected

9. Hardware Calibration & Validation

Run these checks before full-stack teleoperation or training. Test one bus at a time.

A) Bus & Joint Control Sanity Check

Ping/read all motors per bus, then confirm joints respond to keyboard input.

Test Joint Movements
$ python 0_so100_keyboard_joint_control.py

B) Mechanical IK Calibration

Verify the gripper reaches the expected location. Check for loose servo horns or bent brackets if accuracy is low — accuracy depends on mechanical assembly quality.

Verify IK Accuracy
$ python provided_examples/1_so100_keyboard_ee_control.py

C) Motion & Camera Bring-up

Hardware validated? Move on to software configuration.

Next Step: Software Setup ↗