跳转至

Meta-World

Meta-World 是一个开源仿真基准测试,用于连续控制机器人操作中的多任务和元强化学习。它使用日常物体和通用桌面 Sawyer 机械臂捆绑了 50 个不同的操作任务,提供了一个标准化的游乐场来测试算法是否可以学习许多不同的任务并快速泛化到新任务。

MetaWorld MT10 演示

可用任务

Meta-World 提供 50 个任务,按难度组组织。在 LeRobot 中,您可以在单个任务、难度组或完整的 MT50 套件上进行评估:

组别 CLI 名称 任务数 描述
Easy easy 28 具有简单动力学和单步目标的任务
Medium medium 11 需要多步推理的任务
Hard hard 6 具有复杂接触和精确操作的任务
Very Hard very_hard 5 套件中最具挑战性的任务
MT50 (all) 逗号分隔列表 50 所有 50 个任务 — 最具挑战性的多任务设置

您也可以直接传递单个任务名称(例如 assembly-v3dial-turn-v3)。

我们在 HF Hub 上提供了 Meta-World MT50 的 LeRobot 就绪数据集:lerobot/metaworld_mt50。该数据集格式化用于使用所有 50 个任务的 MT50 评估,具有固定的物体/目标位置和 one-hot 任务向量以保持一致性。

安装

按照 LeRobot 安装说明后:

pip install -e ".[metaworld]"

Warning

如果在运行 Meta-World 环境时遇到 AssertionError: ['human', 'rgb_array', 'depth_array'],这是 Meta-World 和您的 Gymnasium 版本之间的不匹配。使用以下命令修复:

pip install "gymnasium==1.1.0"

评估

默认评估(推荐)

在中等难度分割上评估(覆盖范围和计算的良好平衡):

lerobot-eval \
  --policy.path="your-policy-id" \
  --env.type=metaworld \
  --env.task=medium \
  --eval.batch_size=1 \
  --eval.n_episodes=10

单任务评估

在特定任务上评估:

lerobot-eval \
  --policy.path="your-policy-id" \
  --env.type=metaworld \
  --env.task=assembly-v3 \
  --eval.batch_size=1 \
  --eval.n_episodes=10

多任务评估

跨多个任务或难度组评估:

lerobot-eval \
  --policy.path="your-policy-id" \
  --env.type=metaworld \
  --env.task=assembly-v3,dial-turn-v3,handle-press-side-v3 \
  --eval.batch_size=1 \
  --eval.n_episodes=10
  • --env.task 接受显式任务列表(逗号分隔)或难度组(例如 easymediumhardvery_hard)。
  • --eval.batch_size 控制并行运行的环境数量。
  • --eval.n_episodes 设置每个任务运行的回合数。

策略输入和输出

观测:

  • observation.image — 单个相机视图(corner2),480×480 HWC uint8
  • observation.state — 4 维本体感觉状态(末端执行器位置 + 夹爪)

动作:

  • Box(-1, 1, shape=(4,)) 中的连续控制 — 3D 末端执行器增量 + 1D 夹爪

推荐评估回合数

对于可重现的基准测试,使用每个任务 10 个回合。对于完整的 MT50 套件,这给出 500 个总回合。如果您关心泛化,请在完整的 MT50 上运行 — 它故意具有挑战性,比几个狭窄的任务更好地揭示优势/劣势。

训练

示例训练命令

在 Meta-World 任务子集上训练 SmolVLA 策略:

lerobot-train \
  --policy.type=smolvla \
  --policy.repo_id=${HF_USER}/metaworld-test \
  --policy.load_vlm_weights=true \
  --dataset.repo_id=lerobot/metaworld_mt50 \
  --env.type=metaworld \
  --env.task=assembly-v3,dial-turn-v3,handle-press-side-v3 \
  --output_dir=./outputs/ \
  --steps=100000 \
  --batch_size=4 \
  --eval.batch_size=1 \
  --eval.n_episodes=1 \
  --eval_freq=1000

实用技巧

  • 使用 one-hot 任务条件进行多任务训练(MT10/MT50 约定),以便策略具有明确的任务上下文。
  • 在编写后处理或日志记录时检查数据集任务描述和 info["is_success"] 键,以便您的成功指标与基准测试保持一致。
  • 调整 batch_sizestepseval_freq 以匹配您的计算预算。