开源机器人学习框架
近年来,随着机器人学习研究的快速发展,涌现了大量高质量的开源框架。本文梳理主流的机器人学习框架、操作基准测试平台及其适用场景。
框架生态关系
graph TD
subgraph 环境["仿真环境"]
RS[robosuite<br/>MuJoCo 操作任务]
MS[ManiSkill<br/>SAPIEN 操作任务]
GR[Gymnasium-Robotics<br/>标准环境]
end
subgraph 算法["算法 & 基准"]
RM[robomimic<br/>模仿学习基准]
LR[LeRobot<br/>统一训练框架]
end
subgraph 真机["真机部署"]
HW[开源硬件<br/>Koch / SO-100 / ALOHA]
end
RS --> RM
RS --> LR
MS --> LR
GR --> LR
RM --> LR
LR --> HW
style 环境 fill:#e3f2fd
style 算法 fill:#e8f5e9
style 真机 fill:#fff3e0
框架总览
| 框架 |
维护方 |
核心功能 |
仿真后端 |
支持算法 |
许可证 |
| LeRobot |
HuggingFace |
端到端机器人学习 |
多种 |
ACT, DP, TDMPC |
Apache 2.0 |
| robomimic |
Stanford/UT Austin |
模仿学习基准 |
robosuite |
BC, BC-RNN, HBC, IRIS, Diffusion |
MIT |
| robosuite |
Stanford |
操作任务仿真 |
MuJoCo |
— (环境框架) |
MIT |
| ManiSkill |
UC San Diego |
操作基准 |
SAPIEN |
— (环境框架) |
Apache 2.0 |
| Gymnasium-Robotics |
Farama |
标准化环境 |
MuJoCo |
— (环境框架) |
MIT |
| OctoRobot/Octo |
UC Berkeley |
通用机器人策略 |
多种 |
Octo Transformer |
MIT |
| droid |
TRI/多校 |
大规模数据收集 |
真机 |
— (数据框架) |
MIT |
LeRobot (HuggingFace)
LeRobot 是 HuggingFace 推出的统一机器人学习框架,目标是让机器人学习像 NLP/CV 一样易用。
核心设计
| 特性 |
说明 |
| 统一数据格式 |
LeRobot Dataset Format,兼容 HuggingFace Hub |
| 多算法支持 |
ACT, Diffusion Policy, TDMPC, VQ-BeT |
| 真机支持 |
支持 Koch v1.1, SO-100, ALOHA 等开源机械臂 |
| 录制工具 |
内置遥操作录制、数据可视化 |
| 预训练模型 |
HuggingFace Hub 上共享预训练权重 |
支持的算法
| 算法 |
类型 |
核心思想 |
论文 |
| ACT |
模仿学习 |
CVAE + Transformer,chunk action |
Zhao et al., 2023 |
| Diffusion Policy |
模仿学习 |
扩散模型生成动作序列 |
Chi et al., 2023 |
| TDMPC |
模型基础 RL |
Temporal Difference + MPC |
Hansen et al., 2022 |
| VQ-BeT |
模仿学习 |
VQ-VAE 离散化动作 + Transformer |
Lee et al., 2024 |
使用示例
# 安装
# pip install lerobot
# 训练 ACT 策略
from lerobot.scripts.train import train
train(
dataset_repo_id="lerobot/aloha_sim_insertion_human",
policy="act",
env="aloha",
training_steps=100000,
batch_size=8,
lr=1e-5,
)
# 评估
from lerobot.scripts.eval import eval_policy
eval_policy(
pretrained_policy_name_or_path="lerobot/act_aloha_sim_insertion_human",
env="aloha",
n_episodes=50,
)
数据收集 (真机)
# 使用 Koch v1.1 机械臂遥操作录制数据
python lerobot/scripts/control_robot.py record \
--robot-path lerobot/configs/robot/koch.yaml \
--fps 30 \
--repo-id user/my_dataset \
--num-episodes 50
# 数据可视化
python lerobot/scripts/visualize_dataset.py \
--repo-id user/my_dataset
数据格式
LeRobot 定义了标准化的数据格式,存储于 HuggingFace Dataset:
dataset/
├── meta/
│ ├── info.json # 数据集元信息
│ ├── episodes.jsonl # 每个 episode 的信息
│ └── tasks.jsonl # 任务描述
├── data/
│ ├── chunk-000/
│ │ └── episode_000000.parquet # 状态 + 动作
│ └── ...
└── videos/
├── chunk-000/
│ ├── observation.images.top/
│ │ └── episode_000000.mp4
│ └── ...
└── ...
robomimic
robomimic 是 Stanford 和 UT Austin 联合开发的模仿学习基准框架,提供了系统化的算法对比。
核心特点
| 特性 |
说明 |
| 数据集 |
提供多质量级别(proficient, multi-human, machine-generated)演示数据 |
| 算法丰富 |
BC, BC-RNN, HBC, IRIS, Diffusion Policy |
| 标准化评估 |
统一的评估指标和协议 |
| 仿真后端 |
robosuite (MuJoCo) |
支持的算法
| 算法 |
类别 |
核心方法 |
| BC |
行为克隆 |
直接监督学习 |
| BC-RNN |
行为克隆 |
LSTM 处理时序依赖 |
| HBC |
层级模仿 |
子目标 + 低级策略 |
| IRIS |
层级模仿 |
子目标发现 + 规划 |
| Diffusion Policy |
生成式模仿 |
扩散去噪生成动作 |
使用示例
import robomimic
import robomimic.utils.train_utils as TrainUtils
# 加载配置
config = robomimic.utils.config_utils.get_config(algo_name="bc")
config.train.data = "path/to/dataset.hdf5"
config.train.output_dir = "trained_models/bc_lift"
config.train.num_epochs = 200
# 训练
TrainUtils.run_training(config)
关键发现 (论文)
robomimic 论文中的重要结论:
- 数据质量 > 数据数量:少量专家数据优于大量非专家数据
- 历史信息关键:BC-RNN 在多模态数据上远优于 BC
- Diffusion Policy 综合最优:在大多数任务上表现最好
- 人类数据更难学习:相比机器生成的数据,人类遥操作数据分布更复杂
更多模仿学习相关内容请参阅 模仿学习。
robosuite
robosuite 是基于 MuJoCo 的机器人操作仿真基准,提供标准化任务和机器人模型。
内置任务
| 任务 |
描述 |
难度 |
| Lift |
抬起方块 |
简单 |
| Stack |
堆叠方块 |
中等 |
| NutAssembly |
螺母装配 |
中等 |
| PickPlace |
抓取放置 |
中等 |
| Door |
开门 |
中等 |
| Wipe |
擦桌子 |
难 |
| TwoArmHandover |
双臂递物 |
难 |
内置机器人
| 机器人 |
自由度 |
类型 |
| Panda |
7 |
单臂 |
| Sawyer |
7 |
单臂 |
| UR5e |
6 |
单臂 |
| IIWA |
7 |
单臂 |
| Jaco |
7 |
单臂 |
| Baxter |
7+7 |
双臂 |
import robosuite as suite
env = suite.make(
env_name="Lift",
robots="Panda",
has_renderer=True,
has_offscreen_renderer=True,
use_camera_obs=True,
camera_names=["frontview", "agentview"],
)
obs = env.reset()
for _ in range(1000):
action = env.action_space.sample()
obs, reward, done, info = env.step(action)
ManiSkill
ManiSkill 基于 SAPIEN 仿真器,专注于可泛化的操作任务基准。
特色
| 特性 |
说明 |
| 铰接物体 |
基于 PartNet-Mobility 数据集,包含大量铰接物体(门、抽屉等) |
| GPU 并行 |
SAPIEN GPU 后端支持并行仿真 |
| 视觉+点云 |
提供 RGB-D + 点云观测 |
| 泛化评测 |
训练/测试不同物体实例 |
| ManiSkill3 |
最新版本,大幅提升并行性能 |
ManiSkill3 环境
| 类别 |
任务示例 |
| 桌面操作 |
PickCube, StackCube, PegInsertionSide |
| 铰接物体 |
OpenCabinetDrawer, OpenCabinetDoor, TurnFaucet |
| 装配 |
AssemblingKits, PlugCharger |
| 软体 |
PourWater, FillCup |
| 移动操作 |
OpenDoor (移动底盘) |
import gymnasium as gym
import mani_skill.envs
env = gym.make(
"PickCube-v1",
obs_mode="rgbd", # "state", "rgbd", "pointcloud"
control_mode="pd_ee_delta_pose",
render_mode="human",
num_envs=4096, # GPU 并行
)
Gymnasium-Robotics
Farama Foundation 维护的标准化机器人环境集合,继承自 OpenAI Gym。
环境列表
| 环境组 |
仿真后端 |
任务类型 |
| Fetch |
MuJoCo |
Reach, Push, Slide, Pick&Place |
| Shadow Hand |
MuJoCo |
灵巧手操作(旋转方块等) |
| Maze |
MuJoCo |
迷宫导航 |
| Adroit |
MuJoCo |
灵巧手(开门、翻笔等) |
特点
- HER 兼容:所有环境支持 Hindsight Experience Replay
- Goal-conditioned:观测包含
observation, achieved_goal, desired_goal
- 标准接口:Gymnasium API,与 Stable-Baselines3 等无缝集成
import gymnasium as gym
env = gym.make("FetchPickAndPlace-v3", render_mode="human")
obs, info = env.reset()
# obs["observation"]: 机器人状态
# obs["achieved_goal"]: 物体当前位置
# obs["desired_goal"]: 目标位置
框架选择指南
| 需求 |
推荐框架 |
理由 |
| 端到端训练 + 真机部署 |
LeRobot |
统一数据/训练/部署流程 |
| 模仿学习算法对比 |
robomimic |
标准化基准 + 多算法 |
| 操作任务仿真开发 |
robosuite |
任务丰富 + MuJoCo 稳定 |
| 可泛化操作研究 |
ManiSkill |
铰接物体 + GPU 并行 |
| 标准 RL 基准 |
Gymnasium-Robotics |
标准接口 + 社区大 |
| 大规模策略预训练 |
Octo / OpenVLA |
多数据集预训练 |
| 低成本真机入门 |
LeRobot + Koch/SO-100 |
成本低 + 社区活跃 |
相关链接