SO-101 Robot Arm System
A comprehensive system for SO-101 dual-arm robot control, data collection, and model deployment
Technologies
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.yamlfor 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
- Camera not detected
# Check available cameras so101 scan --cameras # Verify device permissions ls -la /dev/video* - Serial communication errors
# Check serial ports so101 scan --arms # Verify baud rate stty -F /dev/ttyACM0 1000000 - 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.