9.4 lerobot-infer 模型推理(实机)
模型推理(lerobot-record + policy.path)
LeRobot 的模型推理通过 lerobot-record 加载训练好的权重实现,核心是加上 --policy.path 参数。
⚠️
lerobot-infer不是官方命令,推理请用lerobot-record --policy.path=...。
基础推理命令
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=R12252801 \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=R07252801 \
--robot.disable_torque_on_disconnect=true \
--robot.cameras="{'wrist': {'type': 'opencv', 'index_or_path': 0, 'width': 640, 'height': 360, 'fps': 30}}" \
--display_data=true \
--dataset.single_task="Put lego brick into the transparent box" \
--policy.path=outputs/pretrained_model \
--policy.device=cuda \
--dataset.repo_id=${HF_USER}/eval_so101 \
--dataset.push_to_hub=false
推理核心参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--policy.path |
str | 必填 | 训练好的模型路径,必须是 name/pretrained_model 两级目录 |
--policy.device |
str | None | 推理设备:cuda / cpu / mps |
--policy.use_amp |
bool | False | 启用自动混合精度(节省显存) |
--robot.* |
— | 同 teleoperate | 机器人配置(type / port / id / cameras 等) |
--dataset.repo_id |
str | None | 推理时录制的新数据集名称,不能与训练数据集同名 |
--dataset.single_task |
str | "" | 任务描述,与训练时保持一致 |
--dataset.push_to_hub |
bool | True | 是否上传推理数据到 Hub;建议设为 false |
--fps |
float | 30 | 控制循环帧率 |
动作平滑
推理时可使用指数移动平均平滑动作输出,减少抖动:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--policy.temporal_ensemble_coeff |
float | None | 时序集成系数(ACT 专属),值越大平滑越强 |
--no-amp |
flag | False | 禁用 AMP(如果推理不稳定可尝试关闭) |
推理前检查清单
- 重新检查标定:确认 Follower 和 Leader 的标定参数正确
- 确认安全空间:机械臂运动范围内不要有障碍物
- 检查模型路径:确认
policy.path指向正确的训练输出目录 - 动作异常时:立即按
Ctrl+C停止,排查问题
常见推理问题
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 机械臂抖动 | D_Coefficient 过大或供电不足 | 调整 so101_follower.py 中 set_so100_robot_preset() 的 D_Coefficient 改小(如 0),检查电源 7.4V≥2A |
| 动作偏移 | 标定不准确或相机不一致 | 重新标定,检查相机视角/光照是否与训练时一致 |
| 推理无法启动 | 模型路径错误或文件不完整 | 确认 pretrained_model 目录存在,检查路径格式为两级目录 |
| 动作幅度过大 | 缺少安全限制 | 添加 --robot.max_relative_target 限制单步最大位移 |
v0.5.2 用户可使用
lerobot-rollout(策略部署引擎)获得更灵活的推理控制,详见对应版本的 CLI 参数章节。