SO-101 Robot Arm System

A comprehensive system for SO-101 dual-arm robot control, data collection, and model deployment

Status: Active Development

Technologies

Python LeRobot PyTorch OpenCV YAML

SO-101 Robot Arm System

Overview

The SO-101 Robot Arm System is a complete solution for controlling SO-101 dual-arm robots. It provides tools for teleoperation, calibration, data collection, and policy training.

Key Features

1. Unified Configuration System

  • Single camera_config.yaml for all device definitions
  • Scene-driven configuration with string references
  • Support for both inline and referenced configurations

2. Teleoperation

  • Real-time dual-arm control
  • Smooth motion interpolation
  • Error handling and recovery
  • Support for multiple leader-follower pairs

3. Data Collection

  • Scene-based data recording
  • Automatic episode management
  • Video encoding and compression
  • HuggingFace dataset integration

4. Model Deployment

  • Support for ACT, SmolVLA, and other policies
  • Real-time inference
  • Performance optimization
  • Deployment to edge devices

Installation

# Install from PyPI
pip install so101

# Or install from source
git clone https://github.com/1905185430/so101.git
cd so101
pip install -e .

Quick Start

1. Scan for Devices

so101 scan

2. Calibrate Cameras

so101 calibrate

3. Start Teleoperation

so101 teleop --scene pick_and_place

4. Record Data

so101 record --scene pick_and_place --repo-id my-dataset

Architecture

so101/
├── config/              # Configuration files
├── src/so101/           # Main package
│   ├── __init__.py
│   ├── config.py        # Configuration management
│   ├── cli.py           # Command-line interface
│   ├── calibrate.py     # Camera calibration
│   ├── teleop.py        # Teleoperation
│   ├── record.py        # Data recording
│   └── capture.py       # Image capture
├── scripts/             # Utility scripts
├── tests/               # Test suite
└── doc/                 # Documentation

Configuration

The system uses a YAML configuration file (camera_config.yaml):

# Device definitions
arms:
  follower_left:
    serial: "583866886"
    port: "/dev/ttyACM0"
    name: "Follower Left"
  
  leader_left:
    serial: "58DA42319"
    port: "/dev/ttyACM2"
    name: "Leader Left"

# Scene definitions
scenes:
  pick_and_place:
    follower: follower_left
    leader: leader_left
    cameras:
      - index_or_path: "/dev/video0"
        name: "top"
      - index_or_path: "/dev/video2"
        name: "wrist"

Usage Examples

Custom Teleoperation Script

from so101.teleop import TeleoperationSystem
from so101.config import load_config

# Load configuration
config = load_config()

# Create teleoperation system
teleop = TeleoperationSystem(config)

# Start teleoperation
teleop.run(scene="pick_and_place")

Data Recording Script

from so101.record import DataRecorder
from so101.config import load_config

# Load configuration
config = load_config()

# Create recorder
recorder = DataRecorder(config)

# Record dataset
recorder.record(
    scene="pick_and_place",
    repo_id="my-dataset",
    num_episodes=10
)

Troubleshooting

Common Issues

  1. Camera not detected
    # Check available cameras
    so101 scan --cameras
       
    # Verify device permissions
    ls -la /dev/video*
    
  2. Serial communication errors
    # Check serial ports
    so101 scan --arms
       
    # Verify baud rate
    stty -F /dev/ttyACM0 1000000
    
  3. Configuration errors
    # Validate configuration
    so101 check --config camera_config.yaml
    

Contributing

We welcome contributions! Please see our Contributing Guide for details.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • LeRobot Team for the robot learning framework
  • Dian Team for support and testing
  • HuggingFace for dataset hosting and model deployment

For more information, visit the GitHub repository.