LeRobot入门教程 12:LeRobot 真机部署
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.type | base | 部署策略。base 是「模型直接出动作」;还有 DAgger 之类的变体用于在线纠错 |
--policy.path | lerobot/pi0_base | 基础权重。真机场景通常换成你自己微调过的权重 |
--inference.type | rtc | Real-Time Chunking,见下 |
--inference.rtc.execution_horizon | 10 | 一次预测的 chunk 里,真正执行多少步(RTC 默认值也是 10) |
--robot.type | so100_follower | 机器人型号,SO-100 是常见的低成本开源臂 |
--robot.port | /dev/ttyACM0 | 串口设备名。插多个设备时可能是 ttyACM1,用 ls /dev/ttyACM* 确认 |
--task | pick up cube | 自然语言指令,直接喂给 VLA |
--duration | 60 | 跑 60 秒后自动停 |
3. RTC:解决推理延迟的标准做法
LeRobot 的 policies/rtc 模块就是 Real-Time Chunking(实时分块) 的实现。问题背景是这样的:
- VLA 一次预测未来若干步动作(比如 50 步),这叫一个 chunk;
- 但模型前向要花时间,等它算完,机械臂已经该执行第 5 步了;
- 如果直接丢掉旧的 chunk 从头算,动作会不连续;如果傻等,机械臂会卡住。
RTC 的做法是:保留上一段 chunk 还没执行完的部分,把它作为「前缀」约束新 chunk 的生成,让新预测和旧动作平滑接上。execution_horizon 就是「一次预测里承诺执行多少步」,设小了更跟手但重规划频繁,设大了更平滑但反应迟钝。
4. 真机安全清单
真机和仿真最大的区别是代价。第一次上真机之前:
- 先把机械臂架空(不接触桌面物体),用
--duration=10跑一次,只看动作方向对不对; - 确认急停可达:断开电源、或者
Ctrl + C中断; - 限制速度:先小
duration、低幅度,再逐步放开; --task要具体("pick up the red cube" 比 "do something" 强),VLA 对指令措辞敏感;- 相机位置、分辨率要和训练数据一致,差一点成功率就掉。