🧪 新教程持续更新中 · 从机械臂到传感器,跟着教程从零搭建
跳到主要内容

第八步:模型推理——命令行说明 ​

版本说明(重要,请先读) ​

从 LeRobot 0.6.0 开始,训练好的模型要用 lerobot-rollout 来部署。原来的 lerobot-record --policy.path=... 写法,在 0.5.2 版本就已经被移除了。

本教程第一步是用 git clone 安装 LeRobot 的,拿到的是当前最新版本,所以请使用下面 lerobot-rollout 的命令行。如果坚持用 lerobot-record,程序会直接报错,并提示你改用 lerobot-rollout。

两个命令的分工是这样的:

  • lerobot-record:只负责采集示教数据(第六步用的就是它),它现在会拒绝 eval_ 开头的数据集名
  • lerobot-rollout:负责部署训练好的模型,用 --strategy.type 选择工作方式

rollout 命令行参数 ​

参数说明
--strategy.type工作方式。base 只跑模型、不录数据,用于现场看效果;episodic 按 episode 录制并带 reset 阶段,行为接近旧版的 lerobot-record
--policy.path模型路径,指向训练输出里的 checkpoints/last/pretrained_model
--task任务描述,配合 --strategy.type=base 使用
--duration运行秒数,0 表示不限时
--interactive需要中途接管时加上它,可在终端用 /stop、/reset 等命令控制
--display_data是否启动 rerun.io 可视化界面
--policy.device计算设备,比如 cuda、cpu

相机参数必须和采集时一致 ​

下面所有命令里的 --robot.cameras 用的都是 1280×720@30,这是和示教采集数据集统一过的值。部署时必须沿用采集时的分辨率、fps 和宽高比:分辨率会写进数据集元数据并参与校验,不一致会直接报错;即便侥幸通过,视野不同也会让模型"看到的世界"和你示教时不一样,效果会明显变差。

关于可视化 ​

--display_data=true 会启动 rerun.io 的可视化界面,同时在 /Users/<你的用户名>/.cache/huggingface/lerobot/rollout_lerobot_my_dataset_a/images/observation.images.front/episode-000000 目录下保存每一帧的图片,比较占空间,正式使用时可以设成 --display_data=false。

以抓橘子任务为例 ​

  • 现场评估(带实时可视化)
Shell
lerobot-rollout  \
  --strategy.type=base \
  --robot.type=so101_follower \
  --robot.port=/dev/tty.usbmodem5AAF2193061 \
  --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 1280, height: 720, fps: 30, fourcc: "MJPG"}}" \
  --robot.id=my_follower_arm \
  --policy.path=/Users/<你的用户名>/Downloads/7-lerobot/checkpoints/last/pretrained_model \
  --task="Grab Oranges" \
  --duration=60 \
  --display_data=true
  • 现场评估(不带实时可视化)
Shell
lerobot-rollout  \
  --strategy.type=base \
  --robot.type=so101_follower \
  --robot.port=/dev/tty.usbmodem5AAF2193061 \
  --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 1280, height: 720, fps: 30, fourcc: "MJPG"}}" \
  --robot.id=my_follower_arm \
  --policy.path=/Users/<你的用户名>/Downloads/7-lerobot/checkpoints/last/pretrained_model \
  --task="Grab Oranges" \
  --duration=60 \
  --display_data=false
  • 推理 HuggingFace 模型 Repo 上的模型
Shell
lerobot-rollout  \
  --strategy.type=base \
  --robot.type=so101_follower \
  --robot.port=/dev/tty.usbmodem5AAF2193061 \
  --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 1280, height: 720, fps: 30, fourcc: "MJPG"}}" \
  --robot.id=my_follower_arm \
  --policy.path=<你的用户名>/lerobot_my_model_a \
  --task="Grab Oranges" \
  --duration=60 \
  --display_data=true

运行后会下载模型

image.png

  • 评估并录制数据(--strategy.type=episodic)

想边跑边把过程录成数据集,就把 base 换成 episodic。这个模式下不写 --task,改用 --dataset.single_task,并且必须给出 --dataset.repo_id:

Shell
lerobot-rollout  \
  --strategy.type=episodic \
  --robot.type=so101_follower \
  --robot.port=/dev/tty.usbmodem5AAF2193061 \
  --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 1280, height: 720, fps: 30, fourcc: "MJPG"}}" \
  --robot.id=my_follower_arm \
  --policy.path=/Users/<你的用户名>/Downloads/7-lerobot/checkpoints/last/pretrained_model \
  --dataset.repo_id=<你的用户名>/rollout_lerobot_my_dataset_a \
  --dataset.num_episodes=10 \
  --dataset.single_task="Grab Oranges" \
  --display_data=false