LeRobot 完整指南:Hugging Face 开源机器人学习框架,从遥操作到 VLA 模型一站搞定
【免费下载链接】lerobot🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot
如果你尝试过机器人学习,大概率被三件事卡住过:每家机器人硬件的控制代码都要重写一遍,各家数据集格式互不兼容导致数据碎片化,而 ACT、Diffusion、π0 这类前沿策略的实现又散落在不同代码库里难以复现。LeRobot是 Hugging Face 推出的开源机器人学习框架,它用一个硬件无关的Robot接口、标准化的 LeRobotDataset 数据集格式和纯 PyTorch 实现的 SOTA 策略模型,把"遥操作采集数据 → 训练策略 → 仿真/真机评估"这条端到端链路统一了起来,让任何人都能贡献并使用共享的数据集与预训练模型。
三分钟跑通 LeRobot:安装与最小示例
LeRobot 可以直接从 PyPI 安装,按功能域划分了可选依赖(extras),装基础包只需一行命令:
pip install lerobot lerobot-info # 验证安装成功如果要用到真机控制或训练功能,按需追加对应的 extras,例如pip install 'lerobot[feetech]'(舵机支持)、pip install 'lerobot[all]'(全量依赖)。也可以从源码安装:
git clone https://gitcode.com/GitHub_Trending/le/lerobot cd lerobot uv sync --locked --extra all # 或用 pip 按 extras 安装装好之后,最小可运行的 Python 示例是加载一个 Hub 上的数据集并读取数据。LeRobotDataset 会自动处理视频解码和帧同步,你不用关心底层 Parquet 和 MP4 的拼接细节:
from lerobot.datasets.lerobot_dataset import LeRobotDataset dataset = LeRobotDataset("lerobot/aloha_mobile_cabinet") print(dataset[0]["action"].shape) # 自动解码视频帧并返回观测/动作而训练一个策略则是一条 CLI 命令的事,官方内置了完整的命令行入口(lerobot-train、lerobot-record、lerobot-eval、lerobot-calibrate等,映射关系见 pyproject.toml 的[project.scripts]):
lerobot-train \ --policy.type=act \ --dataset.repo_id=lerobot/aloha_mobile_cabinet到这里你就摸到了 LeRobot 的完整闭环:数据、策略、控制、评估,全部收敛到一套接口和一组 CLI 上。
核心能力拆解:四个支柱撑起整个框架
1. 硬件抽象层:一套Robot接口控制所有机器人
是什么:LeRobot 提供一个抽象基类Robot(见 src/lerobot/robots/robot.py),子类只需实现connect()、get_observation()、send_action()等几个抽象方法,就获得了统一的控制契约。框架原生支持 SO100/SO101、LeKiwi、Koch、HopeJR、OMX、Reachy2、Unitree G1、OpenARM、reBot B601 等十余种平台,外加手机、键盘、手柄等遥操作设备。
为什么需要:没有这一层,换一台机器人就要重写一遍控制逻辑,数据采集中断、代码无法复用。有了它,训练、可视化、评估的代码在真机和仿真环境间可以无缝对调——仿真环境(envs/)和真机(robots/)遵守同一套观测/动作契约。
怎么用:
from lerobot.robots.myrobot import MyRobot robot = MyRobot(config=...) robot.connect() obs = robot.get_observation() action = model.select_action(obs) robot.send_action(action)舵机通信同样被抽象掉了,motors/目录封装了 Feetech、Dynamixel、Robstride 等主流总线协议,支持批量同步读写关节位置。对于框架未内置的硬件,社区用插件机制扩展:安装任何以lerobot_robot_/lerobot_teleoperator_/lerobot_camera_为前缀的包即可被自动发现,直接从 CLI 的--robot.type中选用。
2. LeRobotDataset:Parquet + MP4 的标准化数据格式
是什么:LeRobot 针对机器人领域"数据碎片化"问题定义的统一数据集格式——视觉观测存为同步的 MP4 视频(或图片),状态/动作数据存为 Parquet 文件,托管在 Hugging Face Hub 上,支持流式加载与可视化。
为什么需要:机器人数据里图像占绝大部分体积,MP4 的有损压缩让存储和下载成本比逐帧 PNG 低一个量级;Parquet 则让每帧的 action/state 可以高效按列查询。
怎么用:除了上面加载数据集的示例,框架还配套了数据集编辑工具,支持按索引或比例切分、增删特征、合并多个数据集、删除整段 episode:
lerobot-edit-dataset # 交互式编辑数据集 lerobot-dataset-viz # 可视化数据集,检查录制质量3. Processor 管道:数据变换的可组合积木
是什么:src/lerobot/processor/实现了一套通用的数据处理管道。每个变换是一个ProcessorStep(如归一化、设备迁移、特征重命名、delta 动作转换),由DataProcessorPipeline串成链式工作流,并支持序列化到 Hub 共享。
为什么需要:数据集里的原始数据、策略期望的输入、机器人能执行的输出,三者格式往往各不相同。用管道把这些差异显式拆成可独立增删的步骤,调参和调试都清晰得多。
怎么用:这一步在训练时基本是自动完成的——策略的 config 里声明了 processor 配置,框架按序执行。想理解或扩展它,直接读 src/lerobot/processor/pipeline.py 和 官方文档 即可。
4. SOTA 策略模型:从模仿学习到 VLA,纯 PyTorch 实现
是什么:src/lerobot/policies/下每个策略一个子目录,全部继承PreTrainedPolicy(nn.Module+ Hub 上传能力),工厂函数factory.py按名字懒加载实例化。
为什么需要:策略实现分散是复现难的根源。LeRobot 把业界主流算法放进同一接口下,配好 processor 就能直接训练和部署。
内置策略矩阵(各策略的详细文档见 docs/source/):
| 类别 | 策略 |
|---|---|
| 模仿学习 | ACT、Diffusion、VQ-BeT、Multitask DiT |
| 强化学习 | HIL-SERL、TDMPC |
| VLA 模型 | π0、π0-Fast、π0.5、GR00T N1.7、SmolVLA、XVLA、EO-1、MolmoAct2、Wall-OSS、EVO1 |
| 世界模型 | VLA-JEPA、LingBot-VA、FastWAM |
| 奖励模型 | SARM、TOPReward、Robometer |
5. 统一评估:仿真基准与真机评测同一入口
lerobot-eval既能在 LIBERO、MetaWorld、RoboCasa 等仿真基准上跑策略,也能挂到真机上执行。环境通过注册表发现,与策略用同一套 draccus 配置体系:
lerobot-eval \ --policy.path=lerobot/pi0_libero_finetuned \ --env.type=libero \ --env.task=libero_object \ --eval.n_episodes=10实战场景:SO-101 机械臂从零到部署
假设你手上有一对 SO-101 机械臂(一根跟随臂 + 一根主臂遥操作),想教它完成"抓取并放到指定位置"的任务。完整命令清单在仓库自带的 AGENT_GUIDE.md 里,核心流程五步:
① 配置舵机与校准(一次性,id是校准文件的主键,后面所有命令要复用同一个):
lerobot-find-port # 找到 USB 端口 lerobot-setup-motors --robot.type=so101_follower --robot.port=<端口> lerobot-calibrate --robot.type=so101_follower --robot.id=my_follower --robot.port=<端口>② 遥操作验证:加--display_data=true实时查看摄像头画面,确认机器臂动作符合直觉。
③ 录制数据集(快捷键:→ 下一条、← 重录、ESC 结束并上传 Hub):
lerobot-record \ --robot.type=so101_follower --robot.port=<端口> --robot.id=my_follower \ --teleop.type=so101_leader --teleop.port=<端口> --teleop.id=my_leader \ --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \ --dataset.repo_id=${HF_USER}/my_task \ --dataset.single_task="pick up the block and place it in the box" \ --dataset.num_episodes=50④ 训练(新手推荐 ACT:训练快、显存友好,笔记本 GPU 就能跑):
lerobot-train \ --dataset.repo_id=${HF_USER}/my_task \ --policy.type=act \ --policy.device=cuda \ --output_dir=outputs/train/act_my_task⑤ 真机评估:把训练好的策略挂回lerobot-record,让模型代替你的主臂执行 10 条 episode,统计成功率并与遥操作基线对比。
这条链路里没有任何一步需要写胶水代码——录制、上传、训练、评估全部由框架托管,你只需要关心任务本身。
深度解析:数据处理器管道如何做到"一次配置,处处生效"
LeRobot 最有工程含量的设计之一是 processor 系统(核心源码)。它要解决的问题是:数据集里的字段、策略期望的输入、机器人总线接受的输出,三者 key 名和数值范围经常对不上。LeRobot 的答案是注册表 + 链式管道两个机制。
第一步,ProcessorStepRegistry让每个变换步骤可以用字符串名注册和还原:
class ProcessorStepRegistry: _registry: dict[str, type] = {} @classmethod def register(cls, name=None): # 类装饰器:把步骤类按名字登记,反序列化时靠它找到类 ...这样管道配置可以直接序列化成一个 JSON/safetensors 存到 Hub——别人下载你的策略时,连数据变换逻辑也一并带过来,训练与部署的预处理保证一致。
第二步,DataProcessorPipeline把多个 step 串成流水线,并对输入/输出做泛型约束(TInput/TOutput),保证类型不匹配的 step 在组装期就暴露,而不是运行期炸掉。框架内置的 step 包括归一化(把原始数据缩放到 [-1, 1])、CPU/GPU 设备迁移、单样本到 batch 的转换、特征重命名、delta 动作转换等,覆盖从"原始传感器数据"到"策略张量"的每一步差异。
这套设计的收益在 VLA 这类多模态模型上体现得最充分:视觉编码器、文本分词器、状态/动作编码器的输出都要经过各自的 processor step 对齐后才能进入 DiT 主干。以架构图为例,冻结参数的视觉语言模型(VLM)提供多模态理解,具身特定模块处理机器人状态和动作序列,DiT Blocks 通过交叉注意力与自注意力生成动作——而这些模态之间的"接线工作",全部由 processor 管道按配置自动完成。想动手调试,docs/source/debug_processor_pipeline.mdx 提供了逐步排查指南。
横向对比:LeRobot 与其他机器人框架
| 维度 | LeRobot | ROS 2 | MoveIt | PyBullet |
|---|---|---|---|---|
| 定位 | 机器人学习端到端框架 | 通用机器人中间件 | 运动规划库 | 物理仿真器 |
| ML 策略内置 | ACT / Diffusion / π0 / GR00T 等十余种 | 无 | 无 | 无 |
| 标准化数据集格式 | LeRobotDataset(Parquet + MP4 + Hub 托管) | 无 | 无 | 无 |
| 预训练模型共享 | 开箱即用,Hub 上拉取即训练 | 无 | 无 | 无 |
| 硬件抽象 | 统一 Robot 接口 + 插件生态 | 驱动层丰富 | 有限 | 无(纯仿真) |
LeRobot 不是要替代 ROS 或 MoveIt,而是站在它们之上补上"学习"这一层:ROS 管通信、MoveIt 管规划、PyBullet 管物理,而策略从数据到模型的训练-评估循环,过去需要自己缝合,现在由 LeRobot 一体化托管。两者甚至可以共存——社区插件里就有 ROS 2 桥接。
最佳实践与避坑清单
以下经验来自仓库官方指南(AGENT_GUIDE.md)和 docs/,都是踩坑换来的:
数据采集
- 好数据胜过巧模型。录制前先不录地练 5~10 遍,形成确定、可重复的操作策略——犹豫不决的示范会教会模型犹豫。
- 前 50 条 episode 用"约束版"任务:单一物体、固定位置、固定相机。先训一版 ACT 看哪里失败,再沿单一轴(位置 → 光照 → 物体 → 操作者)逐步增加多样性。
- 灯光比分辨率重要。漫射、稳定的光照;避免移动阴影。自问一句"只看摄像头画面能否完成这个任务?",不能就说明相机摆放错了。
- 推荐默认值:50 条起步、单条 20~45 秒、30 FPS、双相机(固定前视 + 腕部相机)通常优于单目。
训练与策略选择
- 笔记本/首次训练 →ACT,显存友好、见效快;有 20GB+ 显存且需要语言指令/多任务 → 再上 SmolVLA、π0 系列。
- 训练前先跑一遍
lerobot-dataset-viz或可视化数据集,排查丢帧、模糊、目标不可达等问题。
硬件排障
- SO-100/SO-101 出现 Feetech 通信超时/报错时,先查硬件再看代码:检查舵机红灯 LED——整链常亮说明接线正常;某路熄灭是接线/供电问题;闪烁则代表错误状态,常见原因是关节被强制过限位(过载)或电源电压不匹配。SO-100/101 有 5V/7.4V 和 12V 两种版本,供电不可混用。
- 校准时的
--robot.id是校准文件的主键,后续所有命令务必复用同一个 id,否则读到的是空校准。
性能相关
- 低延迟控制场景可用
src/lerobot/async_inference/的 PolicyServer + RobotClient 做异步推理,把策略推理和机器人控制解耦。 - 大规模训练用
--job.target直接调度到云 GPU,无需本地大卡。
总结:谁适合用 LeRobot,它往哪走
LeRobot 的核心价值可以浓缩成一句话:把机器人学习里最琐碎的三件事——硬件适配、数据格式、策略复现——全部标准化了。
- 高校和研究者:低成本平台(SO-100 系列)+ 端到端工作流,做模仿学习研究不用先修机器人;
- 开发者:统一的
Robot接口和插件机制,接入自有硬件成本很低; - 算法研究者:十余种 SOTA 策略同一接口下对比,processor 管道可序列化共享,预处理完全可复现。
从发展趋势看,框架正在三个方向快速扩张:VLA 模型矩阵持续扩充(π0.5、GR00T N1.7、MolmoAct2 等已入库)、世界模型与奖励模型(VLA-JEPA、SARM、Robometer)补齐了"感知-决策-反馈"闭环、以及多 GPU 分布式训练与异步推理等工程能力的完善。无论是有真机还是纯仿真环境,pip install lerobot之后的那条lerobot-train命令,就是进入这个生态最短的路。
【免费下载链接】lerobot🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考