Koch v1.1

Low-cost open-source DIY robot arm designed by Alexander Koch, officially supported by HuggingFace LeRobot

Koch v1.1

Home > Hardware > Arms > Koch


Overview

Koch v1.1 is an improved version of the low-cost open-source robot arm designed by Alexander Koch and refined by HuggingFace engineer Jess Moss. For approximately $250-$480, you can build a Leader-Follower teleoperation system with complete integration with the LeRobot framework.

ItemDetails
Original DesignerAlexander Koch (Co-founder of Tau Robotics)
v1.1 ImprovementsJess Moss (HuggingFace)
LicenseOpen Source (GitHub public)
Type6-DoF low-cost 3D printed robot arm
DoF6 (Shoulder Pan, Shoulder Lift, Elbow, Wrist Flex, Wrist Roll, Gripper)
MotorsDynamixel XL430-W250-T + XL330-M288-T
Parts Cost~$258 (Follower) / ~$183 (Leader) / ~$441 (pair)
Release DateOriginal: Early 2024, v1.1: July 2024

Key Significance

Low-Cost Data Collection Platform for VLA Research

The most important contribution of the Koch robot arm is dramatically lowering the data collection cost for VLA (Vision-Language-Action) research.

  1. Ultra-low-cost Hardware: 1/100 the cost compared to existing research robot arms (Franka $30K+, UR $25K+)
  2. Fully Open Source: CAD files, SolidWorks models, BOM, and control code all publicly available
  3. 3D Printing Based: Manufacturable with standard FDM printers (Prusa, Ender, Bambu)
  4. LeRobot Integration: Perfect compatibility with HuggingFace’s robotics ML framework

Tau Robotics’ Vision

Alexander Koch presented the vision of “millions of robot arms learning in the real world” through Tau Robotics. This low-cost robot arm is the core hardware for that vision, enabling distributed data collection and large-scale imitation learning.

“We are building a general AI for robots. We start by building millions of robot arms that learn in the real world.”

  • Alexander Koch, Tau Robotics

Technical Specifications

Motor Configuration

Follower Arm (Controlled Target)

JointMotorQuantityTorqueFeatures
Shoulder PanXL430-W250-T11.4 N.mHigh torque, base rotation
Shoulder LiftXL430-W250-T11.4 N.mHigh torque, shoulder lift
Elbow FlexXL330-M288-T10.52 N.mLightweight (18g)
Wrist FlexXL330-M288-T10.52 N.mLightweight (18g)
Wrist RollXL330-M288-T10.52 N.mLightweight (18g)
GripperXL330-M288-T10.52 N.mLightweight (18g)

Design Philosophy: XL430 motors are about 2x more powerful than XL330, used for shoulder joints supporting heavy loads. XL330s are ultra-lightweight at 18g to minimize arm end inertia.

Leader Arm (Teleoperation Controller)

JointMotorQuantityFeatures
All jointsXL330-M077-T65V unified, simplified assembly

The Leader arm is configured with a handle and trigger instead of a gripper for intuitive control by human operators.

Dynamixel Motor Details

ModelVoltageStall TorqueWeightPrice
XL430-W250-T11.1V1.4 N.m57.2g~$50 ($27.50 on sale)
XL330-M288-T5.0V0.52 N.m18g~$24
XL330-M077-T5.0V0.34 N.m18g~$24

Bill of Materials (BOM)

Follower Arm (Controlled Target)

PartQuantityPrice (USD)Notes
Dynamixel XL430-W250-T2$100Shoulder joints (high torque)
Dynamixel XL330-M288-T4$96Elbow, wrist, gripper
XL330 Frame & Idler Wheel Set1$104pc set, use 2-3
XL430 Idler Wheel Set1$7
Waveshare Serial Bus Servo Driver1$10USB-C connection
12V to 5V Voltage Reducer1$10Voltage conversion for XL330
12V Power Supply1$12Main power
Table Clamp1$6Mounting
Wires/Connectors-$7Wiring
Total~$2583D printing cost separate

Leader Arm (Teleoperation Controller)

PartQuantityPrice (USD)Notes
Dynamixel XL330-M077-T6$144Unified for all joints
XL330 Frame1$7
XL330 Idler Wheel Set1$10
Waveshare Serial Bus Servo Driver1$10
5V Power Supply1$6Leader uses 5V only
Table Clamp1$6
Total~$1833D printing cost separate

Total System Cost

ConfigurationCostUse Case
Follower only~$258Autonomous control research
Leader + Follower~$441Teleoperation data collection
Dual arm system~$882Bimanual manipulation

Where to Buy

Tip: ROBOTIS official shop frequently offers 10% discount codes.


v1.0 vs v1.1 Comparison

Itemv1.0 (Original)v1.1 (Improved)
DesignerAlexander KochJess Moss (HuggingFace)
Assembly DifficultyMedium (soldering required)Low (no soldering required)
Voltage ConverterManual adjustment neededPre-set DC converter
Screw InterferenceSome presentFixed
Unnecessary MaterialsPresentRemoved
Hole SizesNon-standardStandardized
Plastic ScrewsUsedRemoved (replaced with metal screws)
Leader Board PlatformNoneAdded
CAD FormatSTL onlySTL + SolidWorks (easier community contribution)

Key Improvements in v1.1

  1. No Soldering: DC converter replacement improves accessibility for general users
  2. Standardization: Unified hole sizes and screw specifications reduce assembly errors
  3. SolidWorks Models: Easier community modification and contribution
  4. LeRobot Optimization: ML workflow optimization by HuggingFace engineers

Assembly and Build

3D Printing Requirements

ItemRecommended Specs
MaterialPLA+, ABS, PETG (reasonably strong plastic)
Nozzle0.4mm
Layer Height0.2mm
Infill~30%
SupportGripper only

Recommended Printers: Prusa Mini+, Bambu P1, Creality Ender 3

Assembly Process

  1. 3D Printing: Print all structural parts with STL files
  2. Motor Setup: Set unique IDs (1-6) and 1M baudrate for each motor with Dynamixel Wizard
  3. Voltage Converter Connection: 12V → 5V conversion (for XL330 on Follower)
  4. Serial Bus Connection: Connect motors in daisy chain
  5. Board Mounting: Mount controller board to base
  6. Calibration: Set joint ranges with LeRobot

Power Configuration

ArmVoltageReason
Leader5VAll XL330-M077 motors use 5V
Follower12V + 5VXL430 uses 12V, XL330 uses 5V (with converter)

Warning: Applying 12V to Leader risks motor damage


LeRobot Ecosystem Integration

Installation

There are two ways to install LeRobot:

# Clone repository
git clone https://github.com/huggingface/lerobot.git
cd lerobot

# Create and activate virtual environment
python -m venv .venv
source .venv/bin/activate  # Linux/macOS
# .venv\Scripts\activate   # Windows

# Install with Dynamixel SDK
pip install -e ".[dynamixel]"

Method 2: pip Installation (Simple use)

pip install "lerobot[dynamixel]"

Note: Both methods install CLI commands (lerobot-find-port, lerobot-calibrate, etc.). With source installation, you can also run via python lerobot/scripts/....

Finding Ports

lerobot-find-port

macOS Output Example

Finding all available ports for the MotorBus.
['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
Remove the USB cable from your MotorsBus and press Enter when done.
...
The port of this MotorsBus is /dev/tty.usbmodem575E0032081
  • Leader arm: /dev/tty.usbmodem<SERIAL_A>
  • Follower arm: /dev/tty.usbmodem<SERIAL_B>

Linux Output Example

Finding all available ports for the MotorBus.
['/dev/ttyACM0', '/dev/ttyACM1']
Remove the USB cable from your MotorsBus and press Enter when done.
...
The port of this MotorsBus is /dev/ttyACM1
  • Leader arm: /dev/ttyACM0 or /dev/ttyACM1
  • Follower arm: remaining port

Linux USB Permission Setup

USB device access permissions are required. Using the dialout group is recommended for security:

# Add current user to dialout group
sudo usermod -aG dialout $USER

# Log out and log back in to apply
# Or reboot

Alternative: Add udev rules (permanent, safe)

# Create udev rule file (dialout group based, security recommended)
# For Waveshare board and general USB-serial adapters
cat << 'EOF' | sudo tee /etc/udev/rules.d/99-dynamixel.rules
# Waveshare Serial Bus Servo Driver (CH340/CH341)
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", GROUP="dialout", MODE="0660"
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="5523", GROUP="dialout", MODE="0660"
# FTDI USB-serial adapters
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", GROUP="dialout", MODE="0660"
# CP210x USB-serial adapters
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", GROUP="dialout", MODE="0660"
# Generic CDC ACM devices
SUBSYSTEM=="tty", KERNEL=="ttyACM*", GROUP="dialout", MODE="0660"
EOF

# Reload udev rules
sudo udevadm control --reload-rules
sudo udevadm trigger

Note: The above rules only allow access for users in the dialout group. You must add your user to the dialout group.

Temporary Solution (development/testing only, security caution)

# Warning: world-writable permissions, security risk
# Use only temporarily in development environment

# CDC ACM devices (typically Koch board)
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1

# USB-serial adapters (some environments)
sudo chmod 666 /dev/ttyUSB0
sudo chmod 666 /dev/ttyUSB1

Security Warning: chmod 666 grants read/write permissions to all users. Use dialout group or udev rules in production environments.

Motor Setup

# Follower arm motor ID setup
# macOS example
lerobot-setup-motors \
    --robot.type=koch_follower \
    --robot.port=/dev/tty.usbmodem575E0031751

# Linux example
lerobot-setup-motors \
    --robot.type=koch_follower \
    --robot.port=/dev/ttyACM0

# Leader arm motor ID setup
# macOS example
lerobot-setup-motors \
    --teleop.type=koch_leader \
    --teleop.port=/dev/tty.usbmodem575E0032081

# Linux example
lerobot-setup-motors \
    --teleop.type=koch_leader \
    --teleop.port=/dev/ttyACM1

Calibration

Calibration is essential for neural network transfer between robots. For policies trained on one robot to work on another, they must return the same values at the same physical positions.

# Follower arm calibration
# Replace <PORT> with actual port (e.g., /dev/ttyACM0 or /dev/tty.usbmodem...)
lerobot-calibrate \
    --robot.type=koch_follower \
    --robot.port=<PORT> \
    --robot.id=my_koch_follower

# Leader arm calibration
lerobot-calibrate \
    --teleop.type=koch_leader \
    --teleop.port=<PORT> \
    --teleop.id=my_koch_leader

Teleoperation and Data Collection

Important: In the commands below, replace <FOLLOWER_PORT> and <LEADER_PORT> with actual ports:

  • macOS: /dev/tty.usbmodem...
  • Linux: /dev/ttyACM0, /dev/ttyACM1 or /dev/ttyUSB0, /dev/ttyUSB1

Note: robot.type and teleop.type use koch_follower and koch_leader as in motor setup/calibration above.

With Source Installation (from lerobot directory)

# Teleoperation test (control Follower with Leader)
python lerobot/scripts/control_robot.py teleoperate \
    --robot.type=koch_follower \
    --robot.port=<FOLLOWER_PORT> \
    --teleop.type=koch_leader \
    --teleop.port=<LEADER_PORT> \
    --robot.cameras="{'cam': {'type': 'opencv', 'index': 0}}"

# Record dataset
python lerobot/scripts/control_robot.py record \
    --robot.type=koch_follower \
    --robot.port=<FOLLOWER_PORT> \
    --teleop.type=koch_leader \
    --teleop.port=<LEADER_PORT> \
    --repo-id=your-username/koch-picking-task

# Train policy
python lerobot/scripts/train.py \
    --policy.type=act \
    --dataset.repo_id=your-username/koch-picking-task

With pip Installation (module execution)

# Teleoperation test (control Follower with Leader)
python -m lerobot.scripts.control_robot teleoperate \
    --robot.type=koch_follower \
    --robot.port=<FOLLOWER_PORT> \
    --teleop.type=koch_leader \
    --teleop.port=<LEADER_PORT> \
    --robot.cameras="{'cam': {'type': 'opencv', 'index': 0}}"

# Record dataset
python -m lerobot.scripts.control_robot record \
    --robot.type=koch_follower \
    --robot.port=<FOLLOWER_PORT> \
    --teleop.type=koch_leader \
    --teleop.port=<LEADER_PORT> \
    --repo-id=your-username/koch-picking-task

# Train policy
python -m lerobot.scripts.train \
    --policy.type=act \
    --dataset.repo_id=your-username/koch-picking-task

VLA Research Applications

Imitation Learning Demos

Alexander Koch successfully demonstrated the following tasks with the Koch robot arm:

  1. Simple Picking Task: Object picking learned from camera images and joint states only
  2. Clothes Folding: Clothes folding task with dual arm configuration
  3. Multi-Robot Control: Single neural network controlling multiple robot arms with language conditioning

Supported Policy Architectures

The following policies can be trained with Koch + LeRobot:

PolicyDescription
ACTAction Chunking with Transformers
Diffusion PolicyDiffusion model-based policy
SmolVLA450M lightweight VLA model
TDMPCModel-based RL

Community Data Collection

Koch’s low-cost structure enables distributed community data collection:

  • HuggingFace Hub: 487+ community datasets tagged with lerobot
  • Open X-Embodiment: Can contribute to large-scale robot datasets
  • Tau Robotics: Vision of millions of robots learning in the real world

Troubleshooting

ProblemSolution
Motor not recognizedCheck USB cable, power cable, 3-pin cable
Waveshare board not recognizedEnsure jumper is set to ‘B’ channel (USB)
Motor ID conflictConnect only one motor at a time to set ID
Linux permission errorAdd user to dialout group or set udev rules (see above)
Calibration failedMove each joint slowly through full range of motion
Insufficient torqueCheck power supply, ensure 12V is being supplied properly

Comparison with SO-100/SO-101

ItemKoch v1.1SO-100/SO-101
MotorsDynamixel XL430/XL330Feetech STS3215
Cost~$440 (pair)~$230 (pair)
TorqueHigherMedium
PrecisionHigherMedium
Assembly DifficultyMediumLow
CommunityGrowingActive
LeRobot SupportOfficial supportOfficial support

Selection Guide:

  • Budget priority: Choose SO-100/SO-101
  • Performance priority: Choose Koch v1.1
  • Both: LeRobot compatible, same code works

References

Official Resources

Where to Buy

3D Print Files

Community


See Also