Overview
The SO-101 features:- 6 degrees of freedom (5 arm joints + gripper)
- Feetech STS3215 servo motors
- USB serial communication
- Position control mode
- Optional camera integration
- Affordable hardware components
Hardware Specifications
Motors
The SO-101 uses the following motor configuration:| Motor Name | ID | Model | Normalization Mode |
|---|---|---|---|
| shoulder_pan | 1 | STS3215 | Degrees or Range[-100,100] |
| shoulder_lift | 2 | STS3215 | Degrees or Range[-100,100] |
| elbow_flex | 3 | STS3215 | Degrees or Range[-100,100] |
| wrist_flex | 4 | STS3215 | Degrees or Range[-100,100] |
| wrist_roll | 5 | STS3215 | Degrees or Range[-100,100] |
| gripper | 6 | STS3215 | Range[0,100] |
By default, SO-101 uses degree normalization (
use_degrees=True) for backward compatibility with existing datasets and policies.Installation
Hardware Setup
- Connect the SO-101 arm to your computer via USB
- Identify the serial port (usually
/dev/ttyUSB0on Linux or/dev/tty.usbserial-*on macOS) - Ensure you have proper permissions to access the serial port:
Software Requirements
The SO-101 robot is included in the LeRobot installation:Configuration
Basic Configuration
Create a configuration for your SO-101:Configuration Parameters
Serial port to connect to the arm (e.g.,
/dev/ttyUSB0)Robot identifier for calibration file management
Whether to disable motor torque when disconnecting
Limit the magnitude of relative position changes for safety. Can be a single value for all motors or a dictionary mapping motor names to individual limits.
Dictionary of camera configurations
Use degree normalization instead of range[-100, 100]. Set to
True for backward compatibility with existing datasets.Directory to store calibration files (defaults to
~/.cache/lerobot/calibration/robots/so_follower)Usage
Basic Connection
Calibration
The SO-101 requires calibration before first use:Calibration data is saved per robot ID. If you have multiple SO-101 arms, use different IDs for each.
Observation Format
Theget_observation() method returns a dictionary:
Action Format
Actions follow the same structure as observations:Safety Features
Maximum Relative Target
Limit how much motors can move in a single action:PID Tuning
The SO-101 configures motors with conservative PID values to prevent shakiness:- P Coefficient: 16 (default is 32)
- I Coefficient: 0
- D Coefficient: 32
- Max Torque Limit: 500 (50% to prevent burnout)
- Protection Current: 250 (50% to prevent burnout)
- Overload Torque: 25 (25% when overloaded)
robot.configure() at /home/daytona/workspace/source/src/lerobot/robots/so_follower/so_follower.py:155.
Motor Setup
If you need to assign motor IDs (for a new arm or replacement motors):Teleoperation
The SO-101 is commonly used in leader-follower setups:Troubleshooting
Port Permission Denied
Robot Not Responding
- Check cable connections
- Verify the correct port is specified
- Try reconnecting the USB cable
- Check motor power supply
Calibration Issues
Motor Shaking
If motors are shaking or oscillating, the PID values may need adjustment. See the source code at /home/daytona/workspace/source/src/lerobot/robots/so_follower/so_follower.py:155 for the configuration method.Related Documentation
SO-100
Compact version of the SO series
Recording Data
Record demonstrations with SO-101
Teleoperation
Set up leader-follower control
Feetech Motors
Motor bus API reference