In Progress Robotics Hardware SO-101 XLeRobot

Anvil — a dual-arm robot based on XLeRobot

A dual-arm mobile robot I'm building from parts, based on the open-source XLeRobot. I handled the 3D printing, mechanical assembly, motor setup, and teleoperation myself; all four SO-ARM101 arms now teleoperate, and I'm working toward a complete robot that can move.

XLeRobot's target form: a white dual-arm robot on a cart with a camera on top, picking up candy

XLeRobot — the form Anvil is aiming for (image from the web).

Anvil is a dual-arm mobile robot I’m building from individual motors and printed parts, based on the open-source XLeRobot project. 3D printing, mechanical assembly, motor setup, the Linux environment, and teleoperation — I did every stage myself. All four arms are assembled and teleoperating; the next step is making it move.

The build and its problems in about two minutes. The photos and clips are my own (the first image is an XLeRobot target photo from the web, and the second-to-last clip is the official XLeRobot demo, Vector-Wangel/XLeRobot, Apache-2.0); the narration is an AI voice (Gemini TTS).

System design#

The finished Anvil has three parts:

  • Two arms: two SO-ARM101 follower arms, teleoperated by two leader arms. The teleop data can later be used to train autonomous manipulation policies.
  • Mobile base: a LeKiwi three-wheel omnidirectional base so the whole robot can move around indoors.
  • Head camera: vision for recording data and for autonomous manipulation.

The arms currently end in grippers; I plan to swap them for AmazingHand, the dexterous hand I’m also building.

Here is the whole XLeRobot in 3D — click to load it, then drag to rotate:

XLeRobot 3D model, converted for the web from the official ManiSkill simulation files (source: Vector-Wangel/XLeRobot, Apache-2.0).

The first pair: from parts to arms#

I came across XLeRobot in early January and quickly decided to build it: I ordered the SO-ARM101 motor kit and Feetech servos, and printed every structural part on my own 3D printer.

The box for the SO-ARM101 motor kit A stack of small Feetech servo boxes

The SO-ARM101 kit and a stack of Feetech servos.

At one point I printed the older SO-ARM100 parts by mistake, so I reprinted the whole batch as SO-ARM101 — and now I check the version before every print. By late January the first pair of arms was assembled.

A 3D printer bed full of SO-101 arm parts An assembled SO-101 arm in its folded position

Self-printed SO-101 parts, and an assembled arm folded up.

An assembled SO-101 arm, extended The first leader and follower arms sitting on a cardboard box

An arm extended, and the first leader/follower pair at the end of January.

Getting the motors to move#

Next came getting all 12 STS3215 motors to respond. In the spring I reworked the wiring so each motor’s ID could be written individually, set up the OS, SSH, and LeRobot on a Raspberry Pi 5, switched to fixed by-id serial paths, and wrote my own calibration script. In the end every motor had its ID and answered on the bus scan.

In mid-May teleoperation worked for the first time: I moved the leader arm by hand and the follower mirrored it in real time.

Teleoperation in mid-May: the follower tracks the leader in real time. Click a video to enlarge it and scrub the timeline.

A second leader/follower pair: XLeRobot takes shape#

XLeRobot’s two arms are, at heart, two leader/follower pairs: a person moves the leader arm, and the follower arm on the robot mirrors it. At the end of May I added a second SO-ARM101 set, the LeKiwi base kit, and a 16GB Pi. With the first pair behind me, the second went much faster. By the end of June both leader/follower pairs were assembled and calibrated, and the arms went up on the cart — the first rough shape of XLeRobot.

Front view: two arms on the desk and two more on a cart Side view of the leader and follower arms on the desk

June: both leader/follower pairs, front and side.

Debugging, one problem at a time#

With both pairs online, problems showed up together. My approach was to isolate one segment at a time and change one variable at a time:

  • Intermittent bus scans: narrowing things down with scan_port turned up a bent connector pin on one motor and an extension cable that may have been reversed. After fixing both, the bus was stable, and a slow demo with capped motion let me verify movement safely.
  • Input voltage error: a second-hand board and motor set reported voltage errors. A different power supply gave clean scans every time, and I overwrote all the old IDs.
  • Leader arm not found: fixed by checking the 5V supply and connectors. This also pinned down a key spec: the leader arms use 7.4V motors on 5V and must never be connected to 12V, and gear ratios differ by joint.
  • A joint stuck at a fixed value, uneven feel: I recalibrated the elbow, compared how each leader→follower pair tracked, and tuned max_relative_target. Occasional packet errors are handled with retries and staggered motor startup.
Another angle on the four arms on the desk and cart Two arms on the cart's top shelf, cables and power supplies below

Another angle, and the two arms on the cart with power and cables below.

Where it stands#

In September I organized and backed up the full set of 3D model files and added a neck mount, printed from the MakerMods files, to the cart’s top shelf. Next:

  • Assemble the LeKiwi mobile base.
  • Sort out power for the whole robot.
  • Mount both arms on the cart and base so Anvil becomes a dual-arm robot that can move.
Top-down view of the cart's top shelf: two arms and a white 3D-printed neck mount Holding a black omnidirectional wheel

The cart's top shelf with the printed neck mount; on the right, a LeKiwi omni wheel for the base I'm building next.

Where it’s headed#

The XLeRobot team has already shown what this platform can do in a real home: cleaning a bathroom by teleoperation, and fetching a drink from the fridge and filling a cup with ice autonomously with RL. That’s what I want Anvil to be able to do.

Official XLeRobot demo (source: Vector-Wangel/XLeRobot, Apache-2.0).

The improved XLeRobot has also left the lab: it’s in school classrooms and at Physical AI hackathons, where students and participants teleoperate it and record data directly. That’s what I want Anvil to be too — a robot people actually get to use.

The three videos below come from the “See it in action” section of MakerMods’ XLeRobot product page. They show the MakerMods version, not official footage from the original XLeRobot author.

Left: a classroom deployment at Alpha School; right: the Physical AI hackathon at Founders Inc in San Francisco (source: MakerMods XLeRobot product page).

Lab demo: picking up an object and placing it in a storage box (source: MakerMods XLeRobot product page).

Beyond the hardware, XLeRobot has a web simulator you can drive right in the browser (MuJoCo plus 3D Gaussian Splatting scenes). I want to practice tasks and record data in simulation first, then move to the real robot, working toward RL and VLA-based autonomy.

The XLeRobot web simulator: a simulated dual-arm robot in a reconstructed indoor scene

The XLeRobot web simulator (source: XLeRobot).

The assembled MakerMods version is Anvil’s mechanical target: both arms, the neck camera, the base, and the quick-release mounts all integrated on the cart.

The MakerMods XLeRobot: white arms and a neck camera on a cart, picking up candy

The MakerMods XLeRobot (source: MakerMods).

Reference projects#

Vector-Wangel
/
XLeRobot
XLeRobot: Practical Dual-Arm Mobile Home Robot for $660
5.5K
613
Apache-2.0

An open-source household dual-arm mobile robot started by Gaotian (Vector) Wang at Rice University. Two SO-100/SO-101 arms sit on an IKEA cart and a LeKiwi-style omnidirectional base for about $660 in parts. It supports keyboard, gamepad, Joy-Con, and VR teleoperation, and comes with ManiSkill/MuJoCo simulation.

makermods-robotics
/
MakerMods-XLeRobot
all the CAD, .step files for upgraded version of XLeRobot
73
9
MIT

MakerMods’ mechanical improvements to XLeRobot, including a two-piece neck, new arm mounts, independent wheel modules, and quick-release mounts for the USB hub, driver board, and power bank. All of Anvil’s printed parts come from this version.

MakerMods XLeRobot product page
makermods.ai/xlerobot
XLeRobot build guide on tnkr.ai
tnkr.ai/ryans-workspace/xlerobot

The MakerMods product page and the tnkr.ai build guide were the main documents I followed during assembly.