LeRobot SO-100 从零装机 + 采集 50 条轨迹
概念速览
- SO-100 (Starter Arm 100):The Robot Studio 出的开源 6-DoF 机械臂,与 LeRobot 深度集成
- LeRobot:Hugging Face 出品的开源机器人数据采集 + 训练 + 部署框架
- 核心目标:用 ¥2,500 的预算,3 天完成”装机 → 遥操作 → 数据采集 → 训练 → 部署”全链路
SO-100 物料清单
| 物料 | 数量 | 单价 (USD) | 备注 |
|---|---|---|---|
| SO-100 套件 (Follower 臂) | 1 | $250 | 含 6 个总线舵机 + 3D 打印件 |
| SO-100 套件 (Leader 臂) | 1 | $250 | 同上,用于遥操作示教 |
| USB 3.0 Hub (带电源) | 1 | $30 | 舵机电流峰值 3A,需要供电 |
| 摄像头 (Logitech C920 或 realsense) | 1 | $50 | 端到端任务视觉 |
| 桌子 / 螺丝刀 / 扎带 | — | $20 | 装机工具 |
步骤 1:装机 (3 小时)
[Leader 臂] ←─ 舵机总线 ─→ [PC] ←─ USB ─→ [摄像头] │ └─ USB ─→ [Follower 臂]- 打印 3D 件(开源 STL 在 TheRobotStudio/SO-100)
- 装配 Leader + Follower 两台臂,6 自由度
- 把 6 个舵机按 官方教程 编号、焊接
- 装上夹爪 (gripper),用 M3 螺丝固定
- 用 USB 串口板连接两台臂
步骤 2:环境准备 (30 min)
# 1. 创建 conda 环境conda create -y -n lerobot python=3.10conda activate lerobot
# 2. 克隆仓库git clone https://github.com/huggingface/lerobot.gitcd lerobotpip install -e ".[feetech]" # SO-100 用 Feetech 舵机
# 3. 验证舵机连接lerobot-find-port# 输出: /dev/ttyUSB0 (Follower), /dev/ttyUSB1 (Leader)步骤 3:舵机 ID 配置 (15 min)
# 手动设置 Follower 6 个舵机 ID 1-6lerobot-setup-motors \ --robot-path /dev/ttyUSB0 \ --motor-ids 1 2 3 4 5 6 \ --baudrate 1000000
# Leader 同理lerobot-setup-motors \ --robot-path /dev/ttyUSB1 \ --motor-ids 1 2 3 4 5 6 \ --baudrate 1000000步骤 4:校准 (20 min)
# 校准到机械限位(避免撞墙)lerobot-calibrate \ --robot.type=so100_follower \ --robot.port=/dev/ttyUSB0
lerobot-calibrate \ --robot.type=so100_leader \ --robot.port=/dev/ttyUSB1UI 引导把每个关节移动到 4 个限位(左/右/前/后),写入 calibration.json。
步骤 5:遥操作验证 (5 min)
# 启动遥操作lerobot-teleoperate \ --robot.type=so100_follower \ --teleop.type=so100_leader \ --robot.port=/dev/ttyUSB0 \ --teleop.port=/dev/ttyUSB1 \ --display_data=true移动 Leader 臂时 Follower 应该镜像跟随。到这步就完成了硬件闭环。
步骤 6:采集 50 条轨迹 (1 小时)
定义一个简单任务:把红色方块从 A 移到 B。
lerobot-record \ --robot.type=so100_follower \ --teleop.type=so100_leader \ --robot.port=/dev/ttyUSB0 \ --teleop.port=/dev/ttyUSB1 \ --dataset.repo_id=your-hf-username/so100_pick_red \ --dataset.num_episodes=50 \ --dataset.episode_time_s=20 \ --dataset.reset_time_s=5 \ --display_data=true每次操作 20 秒,重置 5 秒,循环 50 次。约 1 小时。
步骤 7:训练 (2-4 小时,GPU)
lerobot-train \ --dataset.repo_id=your-hf-username/so100_pick_red \ --policy.type=act \ --policy.dim_model=512 \ --batch_size=8 \ --training.steps=100000 \ --wandb.enable=true在 RTX 4090 上约 4 小时;在 RTX 3090 约 6 小时。
| 训练目标 | 推荐策略 | 训练量 | 推理速度 |
|---|---|---|---|
| 简单抓放 (1-2 物体) | ACT | 50-100 条 | 50 Hz |
| 多物体分拣 | Diffusion Policy | 200+ 条 | 10 Hz |
| 桌面整理 (长程) | OpenVLA | 1000+ 条 | 3-5 Hz |
| 精细插孔 | HIL-SERL | 50 + 人工在线 | 实时 |
步骤 8:部署 (10 min)
# 加载训练好的策略lerobot-eval \ --robot.type=so100_follower \ --robot.port=/dev/ttyUSB0 \ --policy.path=outputs/train/.../checkpoint-100000 \ --eval.n_episodes=10期望成功率 > 70%(简单抓放任务)。
故障排查
进阶路径
- 🧠 把训练好的策略转 ONNX,部署到 Jetson Orin
- 🤖 双臂改造:买 2 套 SO-100 组成 12-DoF 仿人臂
- 🎮 集成 Mobile ALOHA 的移动底盘
- 🧪 跑 OpenVLA 微调 替换 ACT 策略
📋 复现条件
| 类别 | 必备 | 可选 / 备注 |
|---|---|---|
| 硬件 | SO-100 Leader + Follower 套件 (¥1,800 × 2) · USB 3.0 Hub (带电源) · Logitech C920 摄像头 | RealSense D435i |
| 操作系统 | Ubuntu 22.04 / 24.04 · macOS 14 (M1+) | Windows 11 WSL2 |
| 软件版本 | Python 3.10 · LeRobot 0.3+ · lerobot-common · conda | CUDA 12 (GPU 训练) |
| 网络 | 千兆 USB 3.0 (SO-100 通信) | 云 GPU 走 WAN |
| 账号 | Hugging Face 账号 (上传数据集) | — |
| 时间 | 打印 3D 件 12 h · 装配 3 h · 烧固件 1 h · 校准 30 min · 采 50 条 2 h · 训练 4 h | 调参 +1 天 |
| 难度 | ⭐⭐⭐ 进阶 | 舵机配 ID 易错 |
| 前置知识 | ROS 2 基础 · Python · 串口调试 | LeRobot 框架 |
⛔ 别这么做 (Anti-patterns)
经验证的坑 —— 跳过 = 至少浪费半天,严重的烧板 / 锁机。
| ❌ 错误做法 | 💥 后果 | ⚠️ 风险 | 范围 |
|---|---|---|---|
| 不要在 Ubuntu 22.04 上 apt 装 ROS 2 Iron / Rolling | apt 源是滚动版 = 兼容性没保证。ROS 2 永远装 LTS 版 (Humble / Jazzy)。 | 🟡 | ROS 2 |
不要直接 pip install 全局包做机器人项目 | 系统 Python 升级 = 依赖破。永远用 venv / uv venv / pixi。 | 🟡 | LeRobot / ACT / OpenVLA 训练 |
| 不要把机械臂 / 移动机器人直接接到 12V 铅酸电池 | 反接 / 短路 = 烧控制板。永远先串 5A 保险丝再接。 | 🔴 | SO-100 / Mobile ALOHA / 自制机器人 |
不要在没看 dmesg / lsusb 前插 USB 设备并假设会被识别 | 插上没反应 = 没供电 / 没权限 / 没驱动。先 lsusb -t,再 sudo chmod 666 /dev/ttyUSB0。 | 🟢 | USB 相机 / 串口 / 飞控 |
| 不要让 micro-ROS 节点在没看门狗的情况下跑在真机上 | 死循环 = 整机失控,永远给嵌入式节点加 heartbeat 看门狗。 | 🔴 | micro-ROS / 飞控固件 |
| 不要直接拿 GitHub main 分支跑 Mobile ALOHA / LeRobot 训练 | main = 正在开发,可能 dataset format 改了 = 跑不通。锁 git checkout v0.4.0 标签。 | 🟡 | Mobile ALOHA / LeRobot |
| 不要在 LeRobot 训练时把 4K 视频存进 dataset | 4K 1 小时 ≈ 50GB,30 小时 = 1.5TB IO 瓶颈。先 ffmpeg -vf scale=640:480 降采样。 | 🟢 | LeRobot / ACT 数据采集 |
| 不要用 ROS_DOMAIN_ID=0 跑多机协同 | 0 = 默认域 = 任何人都能收到你的话题。多机实验 = 改 ID (0-232) + Foxy+。 | 🟢 | ROS 2 DDS |
🚨 风险总览 (Risk Matrix)
| 风险等级 | 含义 | 例子 |
|---|---|---|
| 🟢 低 | 改错可回滚 / 几分钟恢复 | pip 全局装包、DHCP IP 写死 |
| 🟡 中 | 需要重新刷机 / 重装 / 1-2 小时恢复 | 装错 ROS 2 版本、没 OTA 升级看版本 |
| 🔴 高 | 不可逆 / 烧板 / 安全风险 | 电池反接、micro-ROS 没看门狗、刷机中途断电 |