1. LeRobot 的核心思想
LeRobot 是一个面向机器人学习的工具链,重点不是手写控制逻辑,而是通过示范数据训练机器人策略。
它的核心流程是:
Teleoperation → Record → Dataset → Train → Eval → Deploy
|
阶段 |
作用 |
|
Teleoperation |
人操作机器人完成任务,提供专家示范 |
|
Record |
记录图像、状态、动作和任务信息 |
|
Dataset |
形成可训练的 LeRobotDataset |
|
Train |
训练 policy,让模型学习动作 |
|
Eval |
测试 policy 能否完成任务 |
|
Deploy |
把 policy 部署到真实机器人上执行 |
LeRobot 学的是“看到什么状态,就该做什么动作”。
也就是:observation / state → policy → action
2. Teleoperation:遥操作阶段
Teleoperation,也就是 teleop / 遥操作,是 LeRobot 真实机器人流程的第一步。
它的作用不是训练模型,而是让人先控制机器人动起来,检查整条真实机器人链路是否正常。
以 SO101 为例,teleoperation 的数据流可以理解为:
人手
↓
leader arm / teleop device
↓
读取 leader 当前关节位置
↓
LeRobot teleoperate 程序
↓
映射成 follower 的 action
↓
follower robot / SO101
↓
电机执行
所以,teleoperate 可以理解为:
人通过 teleop device 产生 action,LeRobot 把 action 发给 robot 执行。
它本身通常不重点保存训练数据,而是用于熟悉硬件、检查标定和验证控制链路。
3. Teleoperation 和 Record 的区别
|
阶段 |
人是否控制机器人 |
是否保存数据 |
主要目的 |
|
Teleoperation |
是 |
通常不保存 |
验证硬件、标定、相机、控制链路 |
|
Record |
是 |
保存 |
采集专家示范数据 |
|
Train |
否 |
读取数据 |
训练 policy |
|
Eval / Deploy |
否 |
可选保存结果 |
测试或部署 policy |
Record 的数据流是:
人手
↓
leader arm / teleop device
↓
action ───────────────┐
↓ │
follower robot │
↓ │
robot state ───────────┤
camera image ──────────┤
timestamp ─────────────┤
↓
LeRobotDataset
也就是说,record 把人类遥操作过程变成了可以训练 policy 的 demonstration dataset。
4. LeRobotDataset 的数据结构
LeRobotDataset 是按 episode 组织的模仿学习轨迹数据。
一条 episode 表示一次完整任务示范。每个时间步通常包含:
|
字段 |
含义 |
|
observation.image |
当前视觉画面 |
|
state |
当前机器人或环境状态 |
|
action |
专家示范动作 |
|
next.reward |
执行动作后的奖励 |
|
next.success |
当前任务是否成功 |
|
next.done |
当前 episode 是否结束 |
最重要的是:action 是训练目标。
模型训练时,不是单纯看视频,而是学习:
给定当前 observation 和 state,预测专家 action。
可以这样理解三者关系:
|
名称 |
角色 |
|
LeRobotDataset |
专家示范数据 |
|
lerobot-train |
训练流程入口 |
|
policy |
被训练的模型 |
|
checkpoint |
训练后的模型存档 |
|
lerobot-eval |
加载模型进行测试 |
整体链路:LeRobotDataset → DataLoader → Policy → Loss → Backpropagation → Checkpoint
一条 episode 可以理解成:
episode_000
├── frame_000
│ ├── observation.images.front
│ ├── observation.state
│ ├── action
│ └── timestamp
├── frame_001
│ ├── observation.images.front
│ ├── observation.state
│ ├── action
│ └── timestamp
├── frame_002
│ └── …
5. 已跑通的 PushT 流程与命令
3.1 Dataset 可视化
python src/lerobot/scripts/lerobot_dataset_viz.py \\
–repo-id lerobot/pusht \\
–episode-index 1 \\
–display-compressed-images
|
参数 |
含义 |
|
–repo-id lerobot/pusht |
查看 lerobot/pusht 数据集 |
|
–episode-index 1 |
查看第 1 条 episode |
|
–display-compressed-images |
显示压缩图像 |
这一步用于确认 LeRobotDataset 的结构,能看到 observation、state、action、reward、success、done 等字段。
3.2 ACT 小步数训练
lerobot-train \\
–dataset.repo_id=lerobot/pusht \\
–policy.type=act \\
–output_dir=outputs/train/act_pusht_test \\
–job_name=act_pusht_test \\
–policy.device=cpu \\
–steps=200 \\
–batch_size=4 \\
–wandb.enable=false \\
–policy.push_to_hub=false \\
–save_checkpoint=true \\
–save_freq=100
|
参数 |
含义 |
|
–dataset.repo_id=lerobot/pusht |
指定训练数据集 |
|
–policy.type=act |
使用 ACT policy |
|
–steps=200 |
训练 200 次参数更新 |
|
–batch_size=4 |
每次训练取 4 个样本 |
|
–policy.device=cpu |
使用 CPU 训练 |
|
–output_dir=… |
指定训练结果保存目录 |
|
–save_freq=100 |
每 100 step 保存一次 checkpoint |
steps 表示参数更新次数。一次 step 大致是:
取 batch → policy 预测 action → 计算 loss → 反向传播 → 更新参数
ACT policy 可以理解为根据当前 observation/state 预测一段连续动作,也就是 action chunk。本次日志中 chunk_size=100,说明它会预测长度为 100 的动作序列。
3.3 Eval 测试
lerobot-eval \\
–policy.path=outputs/train/act_pusht_test/checkpoints/000200/pretrained_model \\
–env.type=pusht \\
–eval.n_episodes=3 \\
–eval.batch_size=1 \\
–eval.use_async_envs=false \\
–policy.device=cpu
Eval 和 Train 的区别:
|
阶段 |
是否更新参数 |
作用 |
|
Train |
会更新参数 |
学习专家动作 |
|
Eval |
不更新参数 |
测试 policy 表现 |
6. LeRobot 和 ROS2 项目的关系
ROS2 项目更偏工程规则闭环:
|
ROS2 模块 |
作用 |
|
感知节点 |
输出目标信息 |
|
FSM 状态机 |
决定当前任务状态 |
|
motion 节点 |
根据状态生成控制指令 |
|
driver 节点 |
调用机器人底层接口 |
|
safety / heartbeat |
处理异常和安全停机 |
LeRobot 更偏数据驱动策略闭环:
|
LeRobot 模块 |
作用 |
|
observation |
摄像头图像、机器人状态 |
|
policy |
根据观测生成动作 |
|
action |
控制机器人执行 |
|
dataset |
训练 policy 的数据来源 |
两者不是替代关系,而是互补关系:
ROS2 负责系统工程、安全、通信和 driver;LeRobot policy 可以作为智能动作生成模块。
7. 模仿学习、强化学习和规则控制的区别
机器人策略可以大致分成三类:规则控制、模仿学习、强化学习。
|
方法 |
核心思想 |
数据来源 |
典型形式 |
|
规则控制 |
人手写逻辑 |
工程经验 |
FSM、PID、if-else、行为树 |
|
模仿学习 |
学专家怎么做 |
人类示范数据 |
behavior cloning、ACT、Diffusion Policy |
|
强化学习 |
通过奖励试错 |
环境交互和 reward |
PPO、SAC、DQN |
ROS2 项目更接近规则控制:感知结果 -> FSM 状态切换 -> motion 规则生成 cmd_vel -> driver 执行
LeRobot 更接近模仿学习:observation/state -> policy -> action
模仿学习的重点不是让机器人自己从零探索,而是先让人示范,然后让模型学习:在这个画面和状态下,专家会执行什么动作
所以 LeRobot 里的核心监督信号是:expert action 而不是 reward。
规则控制适合确定流程和安全逻辑,比如 FSM、急停、限速;模仿学习适合复杂操作技能,比如抓取、推动、放置。LeRobot 主要解决的是“动作策略怎么从示范数据里学出来”,而 ROS2 更负责系统调度、安全和真实机器人接口。
8. ACT 的核心理解:Action Chunk
ACT 的全称可以理解为一种面向机器人操作的模仿学习策略。它和普通行为克隆最大的区别是:
普通行为克隆:预测下一步动作 ACT:预测未来一段动作序列
普通行为克隆:image_t + state_t -> action_t
ACT:image_t + state_t -> action_t, action_t+1, …, action_t+k
这一段未来动作序列叫:action chunk
为什么要预测 action chunk? 因为机器人操作不是孤立动作,而是连续过程。例如机械臂抓取任务包含:
靠近物体 -> 调整夹爪 -> 下探 -> 闭合夹爪 -> 抬起
如果每一步都单独预测,动作可能会抖动、不连贯。ACT 预测一段连续动作,可以让动作更平滑,更符合机器人操作任务。
在 LeRobot 里可以这样理解:
observation.image + observation.state
↓
ACT policy
↓
future action chunk
↓
robot/env 执行动作
ACT 的特点是根据当前图像和机器人状态预测未来一段动作 chunk,而不是只预测单步动作。这样更适合机械臂抓取、推动、放置等连续控制任务,因为这些任务本质上需要一段平滑的动作序列。
9. ACT 和 Diffusion Policy 的区别
ACT 和 Diffusion Policy 都属于模仿学习方法,都可以从 demonstration dataset 中学习机器人动作策略。
共同点:都需要专家示范数据 都学习 observation/state -> action 都适合连续控制任务 都可以用于机械臂操作
区别在于动作生成方式不同。
|
方法 |
动作生成方式 |
直观理解 |
|
ACT |
直接预测 action chunk |
看当前状态,直接输出未来动作序列 |
|
Diffusion Policy |
通过扩散去噪生成动作序列 |
先从噪声开始,再一步步生成合理动作 |
ACT 更像:当前观测 -> 直接回归未来动作
Diffusion Policy 更像:当前观测 + 随机噪声 -> 多步去噪 -> 生成动作轨迹
为什么 Diffusion Policy 有用?
机器人任务里经常存在多种合理动作。比如抓同一个物体,可以从左边接近,也可以从右边接近;可以先调整夹爪,也可以先移动末端。Diffusion Policy 更擅长表示这种多模态动作分布。




