Overview
The Koch arm is designed to be affordable and easy to build while maintaining good performance for learning tasks. It supports both the original Koch v1.0 and the updated Koch v1.1 by Jess Moss.Features
- 6 degrees of freedom (5 arm joints + gripper)
- Dynamixel XL430-W250 and XL330-M288 servos
- USB serial communication (U2D2 or similar adapter)
- Extended position control for continuous rotation
- Current-based position control for gripper
- Open-source hardware designs
Versions Supported
- Koch v1.0 - Original design with optional wrist-to-elbow expansion
- Koch v1.1 - Updated design by Jess Moss
Hardware Specifications
Motor Configuration
| Motor Name | ID | Model | Description |
|---|---|---|---|
| shoulder_pan | 1 | XL430-W250 | Base rotation (continuous) |
| shoulder_lift | 2 | XL430-W250 | Shoulder pitch |
| elbow_flex | 3 | XL330-M288 | Elbow joint |
| wrist_flex | 4 | XL330-M288 | Wrist pitch |
| wrist_roll | 5 | XL330-M288 | Wrist rotation (continuous) |
| gripper | 6 | XL330-M288 | Gripper (current-controlled) |
Control Modes
- Arm joints: Extended Position Mode (allows >360° rotation)
- Gripper: Current-Based Position Mode (force-limited for safe grasping)
Installation
Hardware Setup
- Build the Koch arm following one of the open-source designs
- Connect a Dynamixel U2D2 or compatible USB adapter
- Connect the U2D2 to your computer
- Power the servos with appropriate power supply (typically 12V)
Software Installation
Configuration
Basic Configuration
Configuration Parameters
Serial port for the Dynamixel U2D2 adapter (e.g.,
/dev/ttyUSB0 or /dev/tty.usbserial-*)Unique identifier for this robot instance (used for calibration files)
Disable motor torque when disconnecting for safety
Safety limit for maximum position change per action. Can be a single value or per-motor dictionary.
Dictionary of camera configurations for visual observations
Whether to use degree normalization (default is normalized range [-100, 100])
Directory for calibration files (defaults to
~/.cache/lerobot/calibration/robots/koch_follower)Usage
Basic Connection
Calibration
The Koch arm requires calibration before first use:The
shoulder_pan and wrist_roll joints can rotate continuously (full 360°+), so they don’t need range calibration.Observation Format
Action Format
Advanced Features
PID Tuning
The Koch uses custom PID values for the elbow joint to improve tracking:Operating Modes
Different motors use different operating modes: Extended Position Mode (shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll):- Allows unlimited rotation beyond 360°
- Prevents assembly errors from limiting range
- Position tracking with extended range
- Position control with current limiting
- Allows grasping without excessive force
- Acts as compliant trigger for leader arm
- Prevents motor burnout from overload
Safety Limiting
Limit how much the arm can move per action:Teleoperation
Leader-follower setup with two Koch arms:Motor Setup
If building a new Koch or replacing motors, you’ll need to set motor IDs:Troubleshooting
U2D2 Not Detected
Motors Not Responding
- Check power supply (should be ~12V)
- Verify all cables are connected
- Ensure motor IDs are correct
- Try power cycling the motors
Gripper Issues
The gripper uses current-based control, which can be sensitive:Extended Position Mode Errors
If you get position limit errors:- Ensure motors are in Extended Position Mode
- Check that calibration was performed correctly
- Verify motor firmware supports extended position mode
Implementation Reference
Key implementation details from the source code:- Motor bus:
DynamixelMotorsBus(Dynamixel protocol) - Normalization:
MotorNormMode.RANGE_M100_100(default) orDEGREES - Configuration: /home/daytona/workspace/source/src/lerobot/robots/koch_follower/koch_follower.py:154
- Calibration: /home/daytona/workspace/source/src/lerobot/robots/koch_follower/koch_follower.py:111
Related Documentation
Robot Overview
See all supported robots
Dynamixel Motors
Motor bus API reference
Recording Data
Collect training demonstrations
Teleoperation
Leader-follower control