LeRobot SO-101 机械臂使用文档
如果你想用原文档的训练方式,也可使用:python lerobot/scripts/train.py ...;版本提示:本文以 LeRobot 官方教程与命令行为准,并兼容你原文档中常见的 python 方式(如 python -m lerobot.*)。如果 OpenCV 摄像头出现异步/编码报错,可尝试降低分辨率/帧率,或给 OpenCV 相机配置加 fourcc(如 MJPG)。推理阶段务必
LeRobot SO-101 机械臂使用文档
适用对象:SO-101 Follower/Leader 双臂用户,或仅 Follower 单臂用户。
适用环境:Ubuntu(推荐 22.04/24.04)或 Windows;本文命令以 Bash 为主,Windows 另给说明。
版本提示:本文以 LeRobot 官方教程与命令行为准,并兼容你原文档中常见的 python 方式(如 python -m lerobot.*)。
1. 快速跑通(最小闭环:能动起来 + 能录一段 + 能回放)
- 连接电源与 USB:Follower/Leader 各自控制板通过 USB 连接到电脑;确认电源电压符合套件要求,先不上力(不要夹手)。
- 准备 Python 环境:创建独立 conda 环境(避免与 ROS2/系统 Python 混用)。
- 安装 LeRobot:从 PyPI 安装,或从 GitHub 克隆后 editable 安装(推荐用于开发/跟随最新文档)。
- 找到串口端口:用 lerobot-find-port(Linux/macOS)或系统设备管理器(Windows)确认 follower/leader 各自对应的端口。
- (仅 DIY)设置舵机 ID:用 lerobot-setup-motors 依次配置每个舵机的 ID(一次只连接一个舵机更安全)。
- 校准:用 lerobot-calibrate 完成 follower/leader 的零位与方向校准。
- 遥操作:用 lerobot-teleoperate 让 leader 控 follower,验证动作一致。
- 录制:用 lerobot-record 录 1–2 个 episode(本地保存即可,先不上传)。
- 回放:用 lerobot-replay 回放刚刚录制的某个 episode,验证可重复性。
提示:如果你只想验证硬件能跑:先跳到第 4、6、7 节(端口→校准→遥操作)。
2. 软件环境准备
2.1 建议的目录结构
- 建议把 LeRobot 工程放在独立目录,例如:~/workspace/lerobot/(Linux)或 D:\workspace\lerobot\(Windows)。
- 数据集默认会存到用户目录缓存路径:~/.cache/huggingface/lerobot/{repo-id}(Linux/macOS)。
2.2 安装 Miniconda(如已安装可跳过)
- 目的:用 conda 隔离 Python 依赖,避免系统包冲突。
- Windows:安装后建议勾选“Add to PATH”或使用 Anaconda Prompt。
2.3 创建 conda 环境(推荐)
- 作用:创建独立 Python 3.10 环境,并安装 ffmpeg(用于视频编码)。
- 为什么是 3.10:LeRobot 教程通常以 3.10 为基线,兼容性更稳。
命令:创建并进入 LeRobot 环境(带注释)
# 创建环境(Linux/macOS/WSL)
conda create -n lerobot python=3.10 ffmpeg -c conda-forge -y
# 激活环境
conda activate lerobot
# 可选:避免每次打开终端自动进入 base
conda config --set auto_activate_base false
3. 安装 LeRobot(两种方式)
3.1 方式 A:从 PyPI 安装(更简单)
- 适合:只想使用 LeRobot,不需要修改源码。
- 关键点:如果使用 Feetech/SO-101 这类串口舵机,通常需要带上相应 extra(例如 feetech)。
命令:PyPI 安装(根据你的版本选择其一)
# 升级 pip(避免老版本解析依赖出错)
python -m pip install -U pip
# 安装 LeRobot(如官方提供 feetech extra,则使用下面写法)
python -m pip install "lerobot[feetech]"
# 若你的版本不提供 extra,也可以先装 lerobot 再按提示补装依赖
python -m pip install lerobot
提示:安装完成后可先运行 lerobot-info(第 3.3 节)确认 CLI 是否可用。
3.2 方式 B:从 GitHub 安装(推荐用于跟随最新教程)
- 适合:需要对源码二次开发/希望与官方教程保持一致。
- editable 安装(-e)的含义:源码改动即时生效,不用反复重装。
命令:从 GitHub 安装(带注释)
# 进入工作目录
cd ~/workspace
# 克隆仓库(网络较慢时可用代理/镜像,但不要改动命令标点)
git clone https://github.com/huggingface/lerobot.git
cd lerobot
# 安装(带 feetech 相关依赖)
python -m pip install -e ".[feetech]"
3.3 验证安装(检查 CLI)
- 目的:确认 lerobot-* 命令已进入 PATH,并可正常运行。
命令:验证 LeRobot 安装
lerobot-info
# 预期:打印版本、可用脚本、支持的机器人/设备等信息(不同版本输出略有差异)
4. 连接机械臂与查找端口(最常见卡点)
4.1 Ubuntu / Linux:查找 follower 与 leader 的端口
- 推荐方法:优先使用 /dev/serial/by-id/,因为它比 /dev/ttyACM0 更稳定(重插不易变化)。
- 也可用 lerobot-find-port 自动扫描并提示可用端口。
命令:Linux 查找串口端口(带注释)
# 方法 1:查看稳定别名(推荐)
ls -l /dev/serial/by-id/
# 方法 2:只看 ACM/USB 设备(快速)
ls /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
# 方法 3:使用 LeRobot 工具自动查找(如果已安装)
lerobot-find-port
4.2 Windows:查找 COM 端口并固定编号
- 打开【设备管理器】→【端口(COM 和 LPT)】查看 SO-101 对应的 COM 号。
- 建议在端口属性里固定 COM 编号(避免重插后变化)。
- 后续命令中的 --robot.port / --teleop.port 直接填写 COMx(如 COM7)。
4.3 串口权限(Linux)
- 现象:报错 Permission denied / 无法打开串口。
- 根因:当前用户没有访问 /dev/ttyACM* 或 /dev/ttyUSB* 的权限。
- 推荐做法:把用户加入 dialout 组,然后重新登录。
- 临时做法:chmod 仅用于快速验证,不建议长期使用。
命令:Linux 串口权限处理(带注释)
# 推荐:加入 dialout 组(需要重新登录或重启后生效)
sudo usermod -a -G dialout $USER
# 重新登录后验证:
groups | grep dialout
# 临时(不推荐长期):只为快速验证硬件
sudo chmod 666 /dev/ttyACM0
注意:长期使用建议用 dialout/udev 方式;chmod 666 会让所有用户可读写该设备,存在安全风险。
5.(仅 DIY)舵机 ID 配置:lerobot-setup-motors
- 什么时候需要:你自行组装/更换过舵机,或舵机 ID 混乱导致关节错位/不动。
- 原则:一次只连接一个舵机进行设置更稳妥;设置完成再连下一个。
- 作用:把每个物理舵机写入唯一 ID,使软件能按关节顺序控制。
命令:设置舵机 ID(示例)
# 示例:设置 follower 机械臂舵机(按官方工具提示交互执行)
lerobot-setup-motors \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0
# 常见做法:按提示依次选择 joint1 ~ joint6(或 joint7/gripper),每次确认成功后再进行下一个。
注意:如果你不确定自己的关节数量/是否有夹爪,请以实际硬件为准;不要强行写入不匹配的关节映射。
6. 校准:lerobot-calibrate(必须做)
- 作用:建立“电机角度—软件关节”的对应关系,写入校准文件;否则遥操作/回放会偏差很大。
- 重要:follower 与 leader 需要分别校准;并且后续 teleoperate/record/replay 要保持同一个 --robot.id 与 --teleop.id(用于关联校准文件)。
命令:分别校准 follower 与 leader(示例)
# 校准 follower(示例,端口按你的实际替换)
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm
# 校准 leader(示例)
lerobot-calibrate \
--robot.type=so101_leader \
--robot.port=/dev/ttyACM1 \
--robot.id=my_leader_arm
提示:如果你的版本没有 lerobot-calibrate,可使用原文档中的 python -m lerobot.calibrate 形式;参数名保持一致即可。
7. 遥操作:lerobot-teleoperate(Leader 控 Follower)
- 目标:验证 leader 的关节动作能正确映射到 follower(方向/零位都正确)。
- teleoperate 会自动检查校准文件:缺失时会提示并进入校准流程。
命令:最小遥操作(无视觉)
lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm
7.1 加入摄像头并可视化(可选)
- 用途:边遥操作边查看摄像头画面与关节状态,便于采集高质量数据。
- 先找摄像头 index:使用 lerobot-find-cameras。
命令:查找摄像头(带注释)
# 查找摄像头(opencv index)
lerobot-find-cameras
命令:遥操作 + 摄像头 + 可视化(示例)
# 遥操作 + 摄像头(示例:单前置摄像头)
lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm \
--display_data=true
注意:如果 OpenCV 摄像头出现异步/编码报错,可尝试降低分辨率/帧率,或给 OpenCV 相机配置加 fourcc(如 MJPG)。
8. 数据采集:lerobot-record(录制数据集)
- 作用:在遥操作过程中记录“观测(相机/关节)—动作(关节指令)”,保存为 LeRobotDataset 格式,可直接用于训练。
- 建议:先录 5–10 个 episode 验证流程,再扩展到 50+。
- 本地保存路径(默认):~/.cache/huggingface/lerobot/{repo-id}
8.1(推荐)先不上传:仅本地录制
- 目的:避免一开始就被 Hugging Face Token/网络等问题阻塞。
- 做法:设置 --dataset.push_to_hub=false。
命令:本地录制 5 个 episode(示例)
HF_USER=$(hf auth whoami | head -n 1) # 可选:如果你已登录 HF
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm \
--display_data=true \
--dataset.repo_id=my_local/so101_pickplace \
--dataset.num_episodes=5 \
--dataset.single_task="Pick and place" \
--dataset.push_to_hub=false
8.2 键盘控制(录制时非常重要)
- →(右方向键):提前结束当前 episode(或 reset 阶段)并进入下一段。
- ←(左方向键):取消当前 episode 并重新录制。
- ESC:立即停止,开始编码视频并写盘(如果启用上传则会随后上传)。
注意:Linux 下如果方向键/ESC 不生效,通常是 $DISPLAY 未设置或 pynput 限制导致;可在桌面环境运行,或设置 DISPLAY。
9. 回放:lerobot-replay(验证可重复性)
- 作用:把数据集中某个 episode 的动作序列重新发送给 robot,用于检查重复性、关节映射、控制稳定性。
- 建议:在开始训练前,至少回放 1–2 次确认硬件一致性。
命令:回放数据集的第 0 个 episode(示例)
lerobot-replay \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--dataset.repo_id=my_local/so101_pickplace \
--dataset.episode=0
10. 训练:lerobot-train(以 ACT 为例)
- 目的:用你录制的数据训练策略网络(policy),让 follower 自主完成任务。
- 最少条件:有数据集(dataset.repo_id),有 GPU(推荐),并选择 policy.type(如 act)。
命令:训练 ACT(示例,先不上传/不使用 W&B)
# 如果你有 NVIDIA GPU:
lerobot-train \
--dataset.repo_id=my_local/so101_pickplace \
--policy.type=act \
--output_dir=outputs/train/act_so101_pickplace \
--job_name=act_so101_pickplace \
--policy.device=cuda \
--wandb.enable=false \
--policy.push_to_hub=false
提示:如果你想用原文档的训练方式,也可使用:python lerobot/scripts/train.py ...;两者本质一致,优先推荐 lerobot-train。
10.1 断点续训(resume)
- 作用:训练中断后从 checkpoints/last 继续。
- 做法:指定 config_path 为上一次训练保存的 train_config.json,并设置 --resume=true。
命令:从 last checkpoint 继续训练(示例)
lerobot-train \
--config_path=outputs/train/act_so101_pickplace/checkpoints/last/pretrained_model/train_config.json \
--resume=true
10.2 远程服务器训练(通用做法,去商业化)
- 适用:本地没有 GPU 或训练速度太慢。
- 你只需要一台:Ubuntu + NVIDIA GPU + CUDA 驱动(或用云/机房/实验室任意 GPU 机)。
- 关键:用 rsync/scp 把 ~/.cache/huggingface/lerobot/{repo-id} 数据集同步到服务器;训练完成后把 outputs/train/ 同步回本地。
命令:远程训练(示例)
# 本地 -> 服务器:同步数据集(示例,替换 user@host 和路径)
rsync -avP ~/.cache/huggingface/lerobot/my_local/so101_pickplace/ user@host:~/lerobot_data/so101_pickplace/
# 服务器上训练(进入你的 conda env 后执行)
lerobot-train \
--dataset.root=~/lerobot_data \
--dataset.repo_id=my_local/so101_pickplace \
--policy.type=act \
--output_dir=outputs/train/act_so101_pickplace \
--job_name=act_so101_pickplace \
--policy.device=cuda \
--wandb.enable=false \
--policy.push_to_hub=false
注意:不同版本的 LeRobot 对 dataset.root 参数支持可能略有差异;若不支持,可直接把数据集放到默认缓存路径或按官方提示调整。
11. 推理与评估(用录制脚本加载 policy)
- 官方推荐:复用 lerobot-record,在命令中增加 --policy.path 来进行推理并录制评估 episode。
- policy.path 可以是:本地 outputs/train/.../checkpoints/last/pretrained_model,或 HF Hub 上的模型仓库名。
命令:加载训练好的 policy 进行推理并录制评估数据(示例)
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
--display_data=false \
--dataset.repo_id=my_local/eval_act_so101_pickplace \
--dataset.num_episodes=10 \
--dataset.single_task="Pick and place" \
--dataset.push_to_hub=false \
--policy.path=outputs/train/act_so101_pickplace/checkpoints/last/pretrained_model
注意:推理阶段务必确保安全:先把速度调低,工作空间清空,避免撞击。必要时先断电测试流程再上电执行。
12. 常见问题排查(按现象定位)
12.1 现象:找不到端口 / 端口号变了
- Linux:优先使用 /dev/serial/by-id/ 的稳定路径;或重新运行 lerobot-find-port。
- Windows:在设备管理器确认 COM 号,并固定端口号;避免 USB 口更换。
12.2 现象:Permission denied / 无法打开串口(Linux)
- 加入 dialout 组并重新登录(推荐)。
- 临时 chmod 仅用于验证,不建议长期使用。
12.3 现象:遥操作方向反了 / 关节错位
- 优先检查是否完成校准(第 6 节)。
- DIY 用户检查舵机 ID 是否按关节顺序写入(第 5 节)。
- 确认使用一致的 --robot.id/--teleop.id,避免读取到错误的校准文件。
12.4 现象:录制时方向键/ESC 无效(Linux)
- 检查是否在图形桌面环境运行;确认 $DISPLAY 已设置。
- 某些远程终端/无头环境下 pynput 受限,需要改用本地桌面或按官方限制处理。
12.5 现象:推理时报 CUDA/CPU 不匹配
- 如果模型在 CUDA 机器上保存,但在无 CUDA 的机器加载,可能需要指定 map_location 或重新导出/使用 CPU 版本。
- 最简单做法:在同一类设备(GPU/CPU)上训练与推理;或确保安装的 torch 与设备匹配。
13. 参考(官方优先)
- LeRobot 官方仓库:https://github.com/huggingface/lerobot
- Imitation Learning on Real-World Robots(含 SO-101 teleoperate/record/replay/train/inference 示例):https://raw.githubusercontent.com/huggingface/lerobot/main/docs/source/il_robots.mdx
- SO-101 机器人教程(包含 lerobot-find-port / lerobot-setup-motors / lerobot-calibrate 等):https://huggingface.co/docs/lerobot/en/so101
- Hugging Face CLI 登录(huggingface-cli login):https://huggingface.co/docs/huggingface_hub/guides/cli
更多推荐



所有评论(0)