LeRobot 仿真训练指南:不碰真机,先把策略跑通
【免费下载链接】lerobot🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot
如果你的机械臂每试一次策略都要冒着烧关节的风险,你会先做什么?大概率是先把所有迭代挪进仿真。LeRobot 做的事正是这个:用 PyTorch 把数据集、策略训练和仿真评估串成一条流水线,训练在真实遥操作数据上做,评估直接放进仿真环境,全程不需要让真机去"试错"。
仿真到底替你省了什么
仿真训练解决的核心问题只有一个:让"改参数 → 看效果"这个循环的边际成本降到零。数据在真机上采一次,之后反复调参、换策略、跑评估,全部发生在虚拟世界里,硬件一次都不用碰。
这条链路里,只有 A 需要你站在机器人旁边,其余都在 GPU 上。
开训前先定好环境、策略和数据量
三个决策定了,后面就不会来回返工。
选仿真环境:按迭代速度选
LeRobot 内置了几套开箱即用的环境,配置在src/lerobot/envs/configs.py。我选 PushT 起步,因为它动作空间只有 2 维、CPU 就能跑,一个训练周期几分钟出结果,适合先把流水线跑顺:
| 环境(--env.type) | 动作维度 | 我选它的理由 |
|---|---|---|
| pusht | 2 | 迭代最快,先验证流水线 |
| aloha | 14 | 双臂+视觉,贴近真实操作任务 |
| libero | 7 | 标准基准,方便横向对比 |
选策略:按推理速度和数据量选
三种 IL/RL 策略性格差异明显(策略源码在src/lerobot/policies/下,每个策略一个目录)。我选 ACT,因为单卡几分钟就能训完一轮,推理快,适合边录边训的迭代节奏:
| 策略(--policy.type) | 特点 | 适合场景 |
|---|---|---|
| act | 快、省显存 | 实时控制、快速迭代 |
| diffusion | 稳重,多模态动作分布下更鲁棒 | 动作歧义大的任务 |
| tdmpc | 基于模型、样本效率高 | 数据量小的任务 |
定数据量:覆盖度比数量重要
我的经验值:单一任务 50 个 episode 起步,双臂任务翻一倍。但真正决定成败的是动作分布覆盖——50 个 episode 如果全是同一种初始位姿,模型只学会了一条路。录完先检查再开训,比录到 500 个再发现缺工况要省事得多。
跑通第一个 episode:安装与验证
安装只需要四步,中间一堆依赖(gymnasium、torch、视频编解码)由 pip 自己解析,不用手动操心:
git clone https://gitcode.com/GitHub_Trending/le/lerobot cd lerobot conda create -y -n lerobot python=3.12 && conda activate lerobot # 按顺序装:核心+训练、数据集读写、仿真环境、扩散策略 pip install -e ".[training]" -e ".[pusht]" -e ".[diffusion]"[!IMPORTANT] LeRobot 要求 Python ≥ 3.12,比多数教程里的 3.10 高一截,环境别用旧的。
装完跑一条 import 命令确认环境就绪:python -c "import lerobot, gymnasium; print(lerobot.__version__)"。再确认数据集工具可用——lerobot-dataset-viz能把你录的数据渲染成网页,是后面质检的主力:
lerobot-dataset-viz \ --repo_id=<你的数据集> \ --output_dir ./dataset_vis打开生成的 HTML,检查图像和动作序列是否同步、episode 里有没有明显废动作。
录够 50 个 episode 再开训
这节回答"数据从哪来、录多少"。50 个 episode 是起步线,不够会怎样:模型只能学会数据里出现过的那几条轨迹,换个物体摆放就直接趴下。所以宁可少录几个,也要保证初始条件和物体位置有变化。
真机录制用lerobot-record,遥操设备选 gamepad 或 keyboard(遥操代码在src/lerobot/teleoperators/下,gamepad 支持 pygame 和 hidapi 两种读取方式):
lerobot-record \ --robot.type=<robot_name> \ --teleop.type=gamepad \ --dataset.repo_id=<你的用户名>/my_pick_dataset| 遥操输入 | 功能 | 说明 |
|---|---|---|
| 左摇杆 | 末端位置 | X/Y 平面移动 |
| 右摇杆 | 末端姿态 | 旋转调整 |
| L 扳机 | 夹爪闭合 | 抓取 |
| R 扳机 | 夹爪打开 | 释放 |
| 组合键 | 保存/放弃 episode | 录废的及时丢弃 |
如果你只想先跑通流程,可以直接用官方现成数据集(比如 aloha 任务对应的lerobot/aloha_mobile_cabinet),跳过录制环节。仿真环境本身不产生训练数据——PushT、LIBERO 这类环境的角色是"考场",不是"数据源"。
三种策略,三种性格
这节回答"同一个数据集上,三种策略各是什么脾气"。
ACT 是急性子的快枪手。Transformer 骨干,训练快、推理快,适合先冲一个基线出来:
lerobot-train \ --policy.type=act \ --dataset.repo_id=<你的数据集> \ --batch_size=32 \ --steps=100000Diffusion 是稳重的老法师。基于扩散过程生成动作(可以理解为反复去噪逼近专家动作),对多模态动作分布——同一个画面下专家有时抓左有时抓右——处理得最从容,代价是推理慢一档:
lerobot-train \ --policy.type=diffusion \ --dataset.repo_id=<你的数据集> \ --batch_size=16 \ --steps=100000TDMPC 是小数据量场景的性价比之选。它带了自己的动力学模型(model-based RL),样本效率高,数据只有一两百个 episode 的时候往往压过前两者。
训练调优就三条:如果 loss 出现 NaN,把学习率降一个数量级并确认开了梯度裁剪;如果评估集比训练集差得远,说明过拟合,补录覆盖缺口的数据比调参有效;如果推理跟不上控制频率,缩短 ACT/Diffusion 的动作 chunk 长度。
评估:别只盯成功率
这节指出三个容易漏掉的评估维度。成功率是门槛指标,但只看它会漏掉真问题:
- 完成步数:一个 90 步成功、一个 300 步擦线成功的策略,工程价值完全不同,对比实验要一起记平均步数;
- 动作平滑度:关节抖动大的策略上真机就是磨损,看动作序列的一阶差分就能暴露;
- 失败模式:失败的 episode 视频比数字更有信息量——是够不到、抓空还是放偏,决定了你下一步补什么数据。
评估直接用统一入口,把策略丢进仿真环境跑 N 个 episode:
lerobot-eval \ --policy.path=<你的checkpoint> \ --env.type=libero \ --env.task=libero_object \ --eval.n_episodes=10多策略对比不用写脚本:对每个策略各跑一遍上面的命令,把成功率和平均步数记进一张表,再各抽 3 个失败 episode 看视频,结论基本就出来了。
四道坎:仿真到真机
这节回答"为什么仿真里 90% 的策略上了真机只剩 60%"。四道坎,每道一行"问题 → 解法":
动力学差→ 仿真里的摩擦、惯性是理想值,解法是在采集阶段就制造随机性:遥操作时故意带点抖动、不同物体重复执行,让数据集本身就含动力学噪声。
视觉差→ 仿真渲染没有真机镜头的光照和色差,解法是训练时加图像增强,把颜色、亮度、裁剪随机化:
# 数据加载时叠加的增强管线(最小可用示例) import torch.nn.functional as F def augment(image): # image: [C, H, W] image = F.gaussian_blur(image, kernel_size=3, sigma=0.8) # 模糊,模拟镜头差异 return image * torch.randn_like(image) * 0.05 + 1.0 # 高斯噪声,模拟传感器噪声噪声→ 仿真观测太干净,真机摄像头有压缩和传感器噪声,解法同上,把噪声加在数据侧而不是模型侧。
延迟→ 真机执行链路有几十毫秒延迟,解法是训练数据的时间戳(delta_timestamps)按真机实际帧率标定,别让策略按仿真的 50Hz 规划、按真机的 30Hz 执行。
数据量过百小时之后
数据规模上来后,单机训练先卡在数据 IO 而不是 GPU:把 dataloader 的 worker 数拉高、给视频解码留足内存缓存。仓库已集成 Accelerate,torchrun起多卡做数据并行即可,不用自己写分布式逻辑。如果想在 CI 上做回归,把lerobot-eval跑 10 个 episode 当冒烟测试挂在每次提交上,比全量重训便宜得多。
下一步:把 episode 数补到 100 看成功率天花板;换 PushT 以外的环境验证泛化;指标稳了就排真机部署。做完这一步,你的仿真流水线就跑通了,剩下的事下篇文章再聊。
仓库地址:git clone https://gitcode.com/GitHub_Trending/le/lerobot
【免费下载链接】lerobot🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考