Files
lerobot_learn/docs/cli_reference.md
T

6.2 KiB
Raw Blame History

SO-101 CLI 参考(LeRobot 0.6.1)

通用命令模板;本机实际已验证的任务流程见 ACT 抓放指南,执行状态见 进度追踪。 当前遥操、采集和 ACT 基线训练在 3080;3090 是后续训练机。电机设置/校准会写硬件或校准数据,先按装配文档确认接线。

0. 环境与变量

source ~/robot/.venv-lerobot-0.6.1/bin/activate
# 使用 Hub 时先登录;本地 rsync 路线不要求登录。
# hf auth login
export ROBOT_DATA="$HOME/robot/data/so101_pickplace_v1"
export DATASET_ID="YOUR_HF_USER/so101_pickplace_v1"
export PORT_F="/dev/serial/by-id/REPLACE_FOLLOWER"
export PORT_L="/dev/serial/by-id/REPLACE_LEADER"
export TASK="put the red brick in a bowl"
export CAMERAS='{front:{type:opencv,index_or_path:0,width:640,height:480,fps:30}}'

将账号、端口和相机索引替换为实测值;训练机同样设置数据路径和 ID。优先稳定设备路径,备份实际校准目录。所有阶段使用同一个 robot/teleop ID、相机字段和任务文本。上面的单相机配置只是起点。

1. 探测、设置电机与校准

lerobot-find-port
lerobot-find-cameras
# 新电机逐个连接,根据交互提示设置 ID/波特率;不要一次接满总线。
lerobot-setup-motors --robot.type=so101_follower --robot.port="$PORT_F"
lerobot-setup-motors --teleop.type=so101_leader --teleop.port="$PORT_L"
lerobot-calibrate --robot.type=so101_follower --robot.port="$PORT_F" --robot.id=my_follower
lerobot-calibrate --teleop.type=so101_leader --teleop.port="$PORT_L" --teleop.id=my_leader

校准位置以实际输出及 --robot.calibration_dir / --teleop.calibration_dir 配置为准,不假设存于当前目录。更换电机、校准或机构后记录新版本,先遥操验证。

2. 遥操

lerobot-teleoperate \
  --robot.type=so101_follower --robot.port="$PORT_F" --robot.id=my_follower \
  --robot.cameras="$CAMERAS" \
  --teleop.type=so101_leader --teleop.port="$PORT_L" --teleop.id=my_leader

先清空工作区,低速验证限位与停止手段,再采数。数据采集中的控制键以当前 CLI 提示为准,不沿用旧版“空格开始、回车保存”的说法。

首次小幅运动

从臂完成校准后,可先让腕部旋转关节移动 3 度并回到起点:

source env/activate_lerobot.sh
python robots/test_follower_motion.py --robot-id=zihao_follower_arm

脚本要求本地校准文件存在且串口可读写;测试幅度最大允许 5 度。默认测试 wrist_roll,运行前需要输入 MOVE。脚本直接使用电机总线,只使能所选关节,并在使能前将目标寄存器设为当前位置;其余关节保持无扭矩。机械臂应放在有支撑的姿态,退出时会释放所选关节的扭矩。

3. 采集(3080)

lerobot-record \
  --robot.type=so101_follower --robot.port="$PORT_F" --robot.id=my_follower \
  --robot.cameras="$CAMERAS" \
  --teleop.type=so101_leader --teleop.port="$PORT_L" --teleop.id=my_leader \
  --dataset.repo_id="$DATASET_ID" --dataset.root="$ROBOT_DATA" \
  --dataset.single_task="$TASK" --dataset.num_episodes=50 \
  --dataset.push_to_hub=false

先用少量 episode 验证保存、解码和时序,再完整采集。正式采集使用新数据目录,续录前核对当前版本的 resume 流程,勿覆盖旧实验。停止录制后将整个数据目录经 rsync 同步至 3090;保留 meta、视频和数据文件的相对结构。Hub 上传是可选独立步骤,不自动走镜像上传。

4. 训练(3090)

以下 batch/步数是起步配置,不承诺最终成功率或训练耗时。输出目录每个实验独立,不复用已存在的目录。

# ACT:固定任务基线。
lerobot-train \
  --policy.type=act --policy.device=cuda --policy.push_to_hub=false \
  --dataset.repo_id="$DATASET_ID" --dataset.root="$ROBOT_DATA" \
  --batch_size=8 --steps=20000 --seed=42 \
  --output_dir="$HOME/robot/outputs/act_pickplace_v1" \
  --job_name=act_pickplace_v1 --wandb.enable=false

# SmolVLA:显式加载预训练基座,然后微调。
lerobot-train \
  --policy.path=lerobot/smolvla_base --policy.device=cuda --policy.push_to_hub=false \
  --dataset.repo_id="$DATASET_ID" --dataset.root="$ROBOT_DATA" \
  --batch_size=4 --steps=20000 --seed=42 \
  --output_dir="$HOME/robot/outputs/smolvla_pickplace_v1" \
  --job_name=smolvla_pickplace_v1 --wandb.enable=false

先做短训练与保存/重载验证,再跑正式训练。显存不足调顶层 --batch_size;更改步数时一并检查学习率调度。记录实际冻结模块、图像数量/尺寸、精度、峰值显存和步耗时。默认微调不应写作“全参数解冻”。ACT 的视觉骨干也可能需要首次下载权重。

lerobot/smolvla_base 首次会访问 Hub;正式复现实验应记录 revision 并保存完整本地快照,后续将 --policy.path 指向该快照。不要只保存模型权重而遗漏处理器、统计量或配置。

5. 真机执行(3080)

将训练输出中完整的 pretrained_model 目录(含配置和处理器)复制到本机;以实际输出目录为准。

export MODEL_DIR="$HOME/robot/models/act_pickplace_v1/pretrained_model"
lerobot-rollout \
  --strategy.type=base \
  --robot.type=so101_follower --robot.port="$PORT_F" --robot.id=my_follower \
  --robot.cameras="$CAMERAS" \
  --task="$TASK" --policy.path="$MODEL_DIR" --policy.device=cuda

使用训练时的相机/动作契约和当前机器人校准。先单次低风险试运行,再按 评测协议 测 20 次。lerobot-eval 不作为这里的真机命令替代;同步 rollout 达标后再评估 Async/RTC。

6. 双臂与移动

P2 先检查 v0.6.1 的 BiSOFollower 配置,不从零移植双臂驱动。P3 复用 LeKiwi host/client,P4 核对官方 PolicyServer/RobotClient 与组合 robot 兼容性,再添加适配、状态机和本机故障处理。此处暂不编写未验证的整机 CLI。

参考:v0.6.1 模仿学习流程、v0.6.1 SmolVLA 与 rollout、SO-101 电机设置。