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 更擅长表示这种多模态动作分布。