RoboCasa365#
RoboCasa365 的厨房场景、物体与任务。图片来源:RoboCasa365 项目。#
使用 RPent 在 RoboCasa365 中运行厨房操作任务,并复现 Target50 实验。当前集成使用 PandaOmron 移动机械臂和 RLDX-1 动作模型,CLI 名称为 robocasa。
概览#
先确认所需模型、任务与运行环境,再按后续步骤安装并运行。
RLDX-1
api、claude_code、codex
Target50 厨房任务
Linux、NVIDIA GPU;Python 3.10;CUDA 与 EGL。
任务#
Target50 包含以下任务类别,完整任务、seed 和运行限制见本页实验复现部分。
类别 |
任务数 |
内容 |
|---|---|---|
Atomic |
18 |
单项厨房操作。 |
Composite-Seen |
16 |
已见类别的组合任务。 |
Composite-Unseen |
16 |
未见类别的组合任务。 |
观测与动作#
下表区分规划器使用的工具、模型输入及环境的成功判定。
项目 |
说明 |
|---|---|
观测 |
相机图像、深度/世界坐标及底盘、末端、夹爪状态。RLDX-1 接收三路相机的历史帧、状态和任务文字。 |
动作 |
规划器调用 |
奖励与成功判定 |
任务成功以环境 |
任务指令 |
使用当前环境的完整 |
安装与资源准备#
需要 Linux、NVIDIA GPU、可用的 CUDA/EGL,以及 git 和 uv。使用独立的 Python 3.10 环境;已有仓库请先进入该目录,再从第三行开始:
git clone https://github.com/RLinf/RPent.git
cd RPent
uv venv --python 3.10 .venv-robocasa
source .venv-robocasa/bin/activate
先按 PyTorch 安装说明 安装与本机驱动兼容的 CUDA 版 Torch 和 torchvision,可将命令中的 pip 换为 uv pip。RLDX 要求 Torch >= 2.7、torchvision >= 0.22,且两者版本匹配。再安装 RoboCasa:
环境 |
安装命令 |
资源下载 |
|---|---|---|
RoboCasa365 |
|
|
依赖以 pyproject.toml 为准,包含 RoboCasa、RLDX 和 Robosuite 的 rpent 分支源码。不要另装提供同一导入包的 rlinf-robocasa365。
检查依赖后,将约 10 GB 的厨房资源放到 Python 包目录之外,并在启动 RPent 的终端设置资源路径:
uv pip check
robocasa-download-assets --assets-path ~/.robocasa/assets --no-macros -y
export ROBOCASA_ASSETS_PATH=~/.robocasa/assets
Target50 不需要数据集或遥操作配置,使用 --no-macros 即可。资源包含下载集合与随包场景文件;重复下载可加 --skip-existing 检查已有文件。模型文件按下一节准备。
可选依赖与版本记录
flash-attn 可选,未安装时使用 PyTorch SDPA。如需安装,参见 FlashAttention 官方说明。
参考实验使用 Torch 2.7.0、torchvision 0.22.0、CUDA 12.6;实际安装应与本机兼容。源码分支可能更新,复现时保存依赖和代码版本:
uv pip freeze > installed-requirements.txt
git rev-parse HEAD > rpent-revision.txt
VLA 配置#
RLDX-1 需要微调权重和基础模型的支持文件,两项都要下载。模型和资源各自遵循其许可证。
模型权重#
下载针对 RoboCasa365 微调的 RLDX-1-FT-RC365,运行时将 --vla-model-path 指向该目录:
hf download RLWRLD/RLDX-1-FT-RC365 \
--revision 587e9ecdcc5e7184fcc17f58713908edff5af041 \
--local-dir ./checkpoints/rldx-1-ft-rc365
基础模型支持文件#
微调权重还需要 RLWRLD/RLDX-1-VLM 的模型结构、图像处理和分词配置。以下命令只下载支持文件,无需基础模型权重:
export HF_HOME="$PWD/.cache/huggingface"
export HF_HUB_CACHE="$HF_HOME/hub"
hf download RLWRLD/RLDX-1-VLM \
--revision 4b9f870d1287e0d38d7eb1445e6d8c60afe66dd7 \
--include "*.json" "*.txt" "*.jinja" "*.md" "*.png" ".gitattributes" \
--exclude "*.safetensors.index.json"
启动时保留上述缓存变量,避免 TRANSFORMERS_CACHE 指向其他空目录。普通运行、Target50 和单独启动的 RPent VLA 服务都会自动使用此支持文件版本;微调权重仍由 --vla-model-path 指定。支持文件共约 16.4 MB,包含 15 个配置、文档和图片文件。
运行一个任务#
先按 规划器配置 配置模型服务,并用 rpent-check-llm 检查连接。以下命令运行种子为 1 的 OpenDrawer 任务:
rpent --robot robocasa \
--task-name OpenDrawer \
--split target \
--seed 1 \
--vla-model-path ./checkpoints/rldx-1-ft-rc365 \
--planner claude_code \
--model claude-opus-4-8
也可使用 --planner api 或 --planner codex,配置方式见上述规划器指南。
查看结果#
任务是否成功由环境的 _check_success() 判定,其布尔结果记录在 state.success 中。规划器调用 finish 会结束对话,但其中声明的状态不作为评测结果。查看输出目录中的 result.json、transcript_*.json 和 run.log;服务启动问题分别记录在 env_server.log、vla_server.log。
可使用 --dashboard 观察相机和规划器输出,通用操作见 交互使用。
任务记忆#
默认从 HF main 下载记忆,CLI 与 Dashboard 行为一致:向规划器提供当前任务记忆(task-specific)和通用记忆(global)。规划器按需读取,以实时观测和任务指令为准。
memory/robocasa/
├── task-specific/
└── global/
global 文件必须存在。任务记录(JSON)与动作序列(recipe)必须成对存在,也可以同时缺失。任务 Markdown 为可选文件。RPent 文件工具只开放当前任务允许读取的记忆。
需要固定一份本地记忆完成评测时,使用 --memory-profile local --memory-dir <目录>,下载与运行示例见 实验复现(Target50)。文件命名、本地探索产物和自定义来源见下方说明。
记忆文件选择与自定义来源
HF 模式从数据集当前 main 读取 robocasa/,为当前任务提供 <Task>_s0.json、<Task>_s0_recipe.jsonl、可选的 <Task>.md 和 global/GLOBAL_MEMORY.md。评测的 --seed 改变场景,参考记忆仍使用 _s0。
本地评测使用 --memory-profile local --memory-dir <目录>,支持两种任务文件命名:
发布语料:
task-specific/<Task>_s0.json与<Task>_s0_recipe.jsonl。探索产物:
task-specific/<Task>_<split>_s0.json与<Task>_<split>_s0_recipe.jsonl。
JSON 与 recipe 必须成对存在,也可以同时缺失;同时缺失时仍可使用 global 与实时观测。若同一任务的两套文件同时存在,请用不同的 --memory-dir 分开。<Task>.md 为可选文件,缺失时记录日志。
本地评测还开放 global/*.md,以及 YAML frontmatter 同时匹配 suite: robocasa、regime: <split>、task_id: <Task> 的 task-family/*.md。global 层至少需要一份可读文件。
提示词和 RPent 文件工具使用同一份可读文件列表。工具拒绝访问其他任务、其他 split、根索引 MEMORY.md 及 _internal/;限制仅作用于 RPent 工具。CLI 在启动服务前检查记忆;Dashboard 在启动共享 VLA 前检查目录和 global,再于任务环境启动前检查任务文件。任务文件错误不会停掉已有的共享 VLA。
模型按需读取记忆。实时任务语言、RGB-D、任务进展和工具结果优先;有接触、持物或可见进展时继续调用 VLA,连续两次无接触且无进展后再定位并有限调整姿态。每次调用使用完整的实时任务语言;历史 vla_act 仅供理解策略,历史坐标不可回放。
每次运行单独记录文件选择、缺失层和实际读取,即使复用输出目录也会重新开始。零读取或部分读取都可产生有效环境结果;审计文件缺失或损坏单独报告。结果记录所用 profile 和任务族身份,供校验任务边界。
自定义记忆来源
使用相同目录结构的其他 HF 数据集时,设置 RPENT_MEMORY_HF_REPO=<owner>/<dataset> 并使用 --memory-profile hf。该变量接收仓库 ID。
自定义子目录或分支先下载到新目录,再使用 local 模式;选择分支时加上 --revision <branch>:
hf download <owner>/<dataset> --repo-type dataset \
--include '<subpath>/**' --local-dir ./custom-memory
# 在 RPent 运行命令中加上:
# --memory-profile local --memory-dir ./custom-memory/<subpath>
所选目录应包含 task-specific/ 与 global/,并满足上面的文件选择规则。
探索模式#
添加 --explore 后,规划器可复位并重试任务,将经验保存到本地。记忆目录可为空;默认最多 3 个规划会话,每个会话最多尝试 5 次:
rpent --robot robocasa --task-name OpenDrawer --split target --seed 0 \
--vla-model-path /path/to/rldx \
--planner codex --reasoning-effort high --planner-timeout-s 7200 \
--explore --explore-sessions 3 --explore-attempts-per-session 5 \
--memory-dir /path/to/robocasa-memory
保存内容: 探索笔记先写入当前任务的草稿目录(inbox);探索时可读取根索引
MEMORY.md。合并结果: 正常结束且无智能体执行错误时,自动将通过校验的经验写入
task-family/和global/,成功尝试的记录与动作序列写入task-specific/,并更新索引。加--no-auto-merge-memory可关闭自动合并。用于评测: 使用 seed 为 0 的探索产物,通过
--memory-profile local指向同一目录。先确认 global 已发布;评测仅开放当前任务和 split 的记忆。
实验复现(Target50)#
Target50 包含 50 个厨房任务,共运行 340 次。以下使用 Codex、GPT-5.5、xhigh,配合当前任务记忆与 global memory 完成评测。
1. 准备记忆和运行参数#
先完成上文的安装、资源下载和 Codex 登录。将记忆下载到新目录,整轮评测使用同一份内容:
hf download RLinf/RPent-memory --repo-type dataset \
--include 'robocasa/**' --local-dir ./target50-memory
设置动作参数,并清除可能覆盖 --seed 的旧环境变量:
export RLDX_MAX_CHUNKS=40
export RLDX_SETTLE_PATIENCE=999
export RLDX_ACTION_STEPS_PER_CHUNK=8
unset RLDX_RESET_SEED
2. 按任务和 seed 运行#
先运行 OpenDrawer 的 seed 1:
rpent --robot robocasa \
--task-name OpenDrawer --split target --seed 1 \
--vla-model-path ./checkpoints/rldx-1-ft-rc365 --cuda-device 0 \
--planner codex --model gpt-5.5 --reasoning-effort xhigh \
--max-turns 100 --planner-timeout-s 1800 \
--memory-profile local \
--memory-dir ./target50-memory/robocasa \
--output-dir ./runs/target50/atomic/OpenDrawer_s1
接着按下表,为每个任务与 seed 组合各运行一次。任务名见 完整任务列表,清单位于 robots/robocasa/eval/target50.json。
任务组 |
任务数 |
每个任务的 seed 范围 |
单次运行时限 |
运行数 |
|---|---|---|---|---|
Atomic |
18 |
1--10 |
1800 秒 |
180 |
Composite-Seen |
16 |
1--5 |
3600 秒 |
80 |
Composite-Unseen |
16 |
1--5 |
3600 秒 |
80 |
总计 |
50 |
340 |
运行顺序为 Atomic、Composite-Seen、Composite-Unseen。两组组合任务将时限改为 --planner-timeout-s 3600,输出目录分别改为 composite_seen/<Task>_s<seed> 和 composite_unseen/<Task>_s<seed>,统一放在 ./runs/target50/ 下。
评测期间不复位环境。任务失败和规划器超时保留原结果;只有基础设施故障导致未产生有效环境结果时才重试。
3. 检查结果#
每次运行的结果保存在输出目录的 result.json,成功与否以环境的 state.success 为准。运行以下命令汇总检查:
python -m robots.robocasa.eval.validate_target50 ./runs/target50
完整评测应有 340 次运行通过检查:valid_cells=340、expected_cells=340,无校验错误,退出码为 0。只运行部分任务时,程序会列出缺失结果并返回非零退出码。总体成功率对 50 个任务等权计算。
公开成绩见 排行榜。任务列表、评测参数和公开成绩可在下方展开查阅。
完整任务列表
Seen/Unseen 指任务是否出现在预训练数据中;target 厨房场景是独立的保留场景划分,详见 RoboCasa 数据定义。50 个任务分三组:
Atomic (18) —— 开合、搬运等单项操作任务:
CloseBlenderLid、CloseFridge、CloseToasterOvenDoor、CoffeeSetupMug、NavigateKitchen、OpenCabinet、OpenDrawer、OpenStandMixerHead、PickPlaceCounterToCabinet、PickPlaceCounterToStove、PickPlaceDrawerToCounter、PickPlaceSinkToCounter、PickPlaceToasterToCounter、SlideDishwasherRack、TurnOffStove、TurnOnElectricKettle、TurnOnMicrowave、TurnOnSinkFaucet。Composite seen (16) —— 预训练数据中出现过的组合任务:
ScrubCuttingBoard、StackBowlsCabinet、WashLettuce、RinseSinkBasin、PreSoakPan、StirVegetables、LoadDishwasher、SteamInMicrowave、SetUpCuttingStation、GetToastedBread、DeliverStraw、KettleBoiling、PrepareCoffee、StoreLeftoversInBowl、SearingMeat、PackIdenticalLunches。Composite unseen (16) —— 预训练数据中未出现过的组合任务:
ArrangeBreadBasket、ArrangeTea、BreadSelection、CategorizeCondiments、CuttingToolSelection、GarnishPancake、GatherTableware、HeatKebabSandwich、MakeIceLemonade、PanTransfer、PortionHotDogs、RecycleBottlesByType、SeparateFreezerRack、WaffleReheat、WashFruitColander、WeighIngredients。
任选一个传给 --task-name 即可。RoboCasa 完整目录更大,参见 RoboCasa 上游。
动作参数
Target50 的三个参数作用于每次 RLDX 工具调用:
环境变量 |
值 |
含义 |
|---|---|---|
|
40 |
每次调用最多预测的动作块数;普通 RoboCasa 使用 70。 |
|
999 |
末端与夹爪连续多少个动作块几乎不动时,才按静止判定停止。该值超过 40 个动作块的上限。 |
|
8 |
每个预测动作块中执行的动作数。 |
评测协议
当前评测同时使用 task-specific 与 global memory。target50.json 使用 robocasa-harness-vla-v2 协议和 1.1 结果格式,参考配置为 GPT-5.5。软件依赖由 pyproject.toml 管理。自定义任务、seed 或规划器配置时,将当前协议的清单传给校验器:
python -m robots.robocasa.eval.validate_target50 /path/to/results \
--manifest /path/to/manifest.json
比较实验时保留同一份记忆,并在本地记录 HF commit 或文件哈希,以及源码依赖 rpent 分支实际安装的提交。程序不锁定 memory 版本,校验器也不比较各次运行的记忆正文。
Target50 公开成绩
下表成功率以 排行榜 为准。RPent 的三个配置分别为 Codex / GPT-5.5 / xhigh / reasoning、Codex / GPT-6 Astra / low / reasoning,以及 Claude Code / Opus-4.7 / max.reasoning。Harness VLA 参考列采用 论文表 4 中的 GPT-5.5 结果。Overall 对 50 个任务等权计算,不是 340 回合中的成功回合占比。
Split |
RPent / GPT-5.5 |
RPent / GPT-6 Astra |
RPent / Opus-4.7 |
Harness VLA / GPT-5.5 参考值 |
|---|---|---|---|---|
Atomic-Seen |
92.0% |
87.78% |
79.4% |
92.0% |
Composite-Seen |
61.0% |
43.75% |
47.5% |
61.0% |
Composite-Unseen |
13.8% |
42.50% |
15.0% |
13.8% |
总体(任务加权) |
57.1% |
59.20% |
48.6% |
57.1% |
环境自检#
先检查仿真器,再检查 VLA 推理。两项均需可用的 GPU/EGL;跳过的测试不算通过,自检也不产生榜单成绩。
仿真器检查#
安装依赖和厨房资源后运行,无需规划器授权或模型权重:
uv pip install pytest pytest-timeout
RPENT_RUN_ROBOCASA_INTEGRATION=1 \
pytest tests/integration_tests/robots/robocasa/test_target50_runtime_smoke.py -v
预期四项通过:三个任务(OpenDrawer、NavigateKitchen、PickPlaceCounterToCabinet,seed 1)和移动相机检查。
仿真器检查覆盖范围
任务测试检查环境创建与复位、12D 动作、操作相机、导航 RGB-D/world map、成功判定和关闭流程。相机测试检查底盘执行八步后的相机位姿与画面变化。这些测试使用真实仿真器,与离线 CPU 单元测试分开执行。
VLA 推理检查#
完成 VLA 配置 后,选择空闲 GPU 和新的输出目录运行。需要测试依赖时安装 .[test]:
CUDA_VISIBLE_DEVICES=0 \
RLDX_MODEL_PATH="$PWD/checkpoints/rldx-1-ft-rc365" \
RPENT_E2E_OUTPUT_DIR="$PWD/e2e-robocasa" \
HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 NO_ALBUMENTATIONS_UPDATE=1 \
MUJOCO_GL=egl python -m pytest -q \
tests/e2e_tests/robocasa/test_components.py::test_rldx_component --timeout=300
此项检查 VLA 服务启动、RPC 通信和首次推理,不启动规划器。离线变量仅用于这条命令;正常运行时,HF 记忆同步仍需联网。
常见问题#
先查看输出目录中的日志:环境启动看 env_server.log,VLA 启动看 vla_server.log,任务执行看 run.log。
下载与资源#
下载慢或中断: 包下载可设置
UV_HTTP_TIMEOUT=600;模型下载可重试或使用下方镜像。保持 TLS 校验开启,并核对下载完整性,不能只看文件大小。磁盘空间不足: 缓存和临时目录需同时容纳 ZIP 与解压文件;覆盖安装还要容纳原有资源。资源目录应支持硬链接。
资源缺失或冲突: 先重跑资源下载命令,并加
--skip-existing检查。确认要替换已有文件时,再使用下方--overwrite命令。
资源替换与模型下载镜像
资源目录需包含下载集合及随包的 scene、arena、fixture 文件,并保留署名文件。默认保留内容不同的已有文件;确认替换后运行:
robocasa-download-assets --assets-path ~/.robocasa/assets --no-macros --overwrite -y
--overwrite 优先于 --skip-existing,只替换安装范围内的文件。下载中断后可重跑。
模型下载较慢时,可改用镜像,保持相同 revision:
HF_ENDPOINT=https://hf-mirror.com hf download RLWRLD/RLDX-1-FT-RC365 \
--revision 587e9ecdcc5e7184fcc17f58713908edff5af041 \
--local-dir ./checkpoints/rldx-1-ft-rc365
启动与推理#
旧环境缺少 RLDX 接口: 重新安装
.[robocasa],并加--reinstall-package rlinf-rldx。旧 PyPI wheel 即使版本号相同,也可能缺少所需接口。缺少导航相机: 若报错包含
mobilebase0_navview,重新安装.[robocasa]以更新 Robosuite,不要手改 XML。目录权限错误: 使用
.[robocasa]指定的源码依赖,XML 转换应写入临时目录。将NUMBA_CACHE_DIR指向可写目录,无需修改包权限。CUDA/EGL 不可用: 按本机配置选择 Torch/torchvision,再运行 环境自检 验证 GPU 运算和渲染;仅查看驱动版本不足以确认可用。
离线找不到模型文件: 核对 支持文件和缓存路径。
NO_ALBUMENTATIONS_UPDATE=1只关闭更新检查,无需因此修改图像处理或 geometry fallback 参数。RPC 连接受代理影响:
127.0.0.1和localhost自动直连。其他服务若也需直连,将其准确主机名加入NO_PROXY和no_proxy,保留远程规划器的代理设置。
记忆读取#
read_text_file 找不到当前任务记忆时,检查 memory/robocasa/task-specific/ 或所选本地目录,以及任务名是否正确。详见 记忆文件选择规则。Atomic 任务没有发布可选的 <Task>.md;系统不会用其他任务的记忆替代。
实现说明#
开发接入方式见 添加机器人或仿真环境。RoboCasa 专用的观测格式和会话处理见下方。
观测、会话与探索细节
环境工具: toolkit 提供动作、状态读取和
finish。抓取检测与动作组装在环境服务中执行;动作组件通过环境客户端渲染和执行动作,通过模型客户端调用 RLDX-1。模型输入: 三路相机的视频张量为
(1, T, H, W, 3),T是历史帧数;另有state.*和annotation.*字段。会话隔离:
RpcClient在wait_for_ready时注册私有的rpc_+ UUID 十六进制 ID。服务器将其传给predict/reset_session,隔离各客户端的 RLDX 记忆和 RTC 状态。ID 不放入观测,rldx_skill/vla_client无需处理。会话清理: 服务器定期清理空闲会话,默认超时 3600 秒;客户端退出时通过
atexit发送session.close。探索提示词:
robots/robocasa/prompts/explore.py规定移动底盘、task_progress、RLDX 连续执行及失败记录规则。reset使用环境原有复位流程,只导出最后一次复位后成功尝试的动作序列。