LeRobot入门教程 12:LeRobot 真机部署

目录:00_LeRobot入门教程_目录.md

1. 仿真和真机差在哪

仿真真机
数据来源MuJoCo 渲染真实相机(USB / RealSense)
动作执行env.step() 立即生效通过串口/CAN 发给电机,有延迟
风险撞坏了重启就好会撞坏东西、会伤人
关键难点无推理延迟:模型算一步的时间可能比控制周期还长

真机上最容易翻车的就是最后一条。策略一次预测一串动作(action chunk),如果算得慢,机械臂执行到一半就没新指令了,表现为「一顿一顿」。

2. 部署命令

lerobot-rollout \
    --strategy.type=base --policy.path=lerobot/pi0_base \
    --inference.type=rtc --inference.rtc.execution_horizon=10 \
    --robot.type=so100_follower --robot.port=/dev/ttyACM0 \
    --task="pick up cube" --duration=60

逐参数:

参数本例取值说明
--strategy.typebase部署策略。base 是「模型直接出动作」;还有 DAgger 之类的变体用于在线纠错
--policy.pathlerobot/pi0_base基础权重。真机场景通常换成你自己微调过的权重
--inference.typertcReal-Time Chunking,见下
--inference.rtc.execution_horizon10一次预测的 chunk 里,真正执行多少步(RTC 默认值也是 10)
--robot.typeso100_follower机器人型号,SO-100 是常见的低成本开源臂
--robot.port/dev/ttyACM0串口设备名。插多个设备时可能是 ttyACM1,用 ls /dev/ttyACM* 确认
--taskpick up cube自然语言指令,直接喂给 VLA
--duration60跑 60 秒后自动停

3. RTC:解决推理延迟的标准做法

LeRobot 的 policies/rtc 模块就是 Real-Time Chunking(实时分块) 的实现。问题背景是这样的:

  1. VLA 一次预测未来若干步动作(比如 50 步),这叫一个 chunk;
  2. 但模型前向要花时间,等它算完,机械臂已经该执行第 5 步了;
  3. 如果直接丢掉旧的 chunk 从头算,动作会不连续;如果傻等,机械臂会卡住。

RTC 的做法是:保留上一段 chunk 还没执行完的部分,把它作为「前缀」约束新 chunk 的生成,让新预测和旧动作平滑接上。execution_horizon 就是「一次预测里承诺执行多少步」,设小了更跟手但重规划频繁,设大了更平滑但反应迟钝。

4. 真机安全清单

真机和仿真最大的区别是代价。第一次上真机之前:

  • 先把机械臂架空(不接触桌面物体),用 --duration=10 跑一次,只看动作方向对不对;
  • 确认急停可达:断开电源、或者 Ctrl + C 中断;
  • 限制速度:先小 duration、低幅度,再逐步放开;
  • --task 要具体("pick up the red cube" 比 "do something" 强),VLA 对指令措辞敏感;
  • 相机位置、分辨率要和训练数据一致,差一点成功率就掉。