RoboCasa#
RoboCasa 是面向厨房场景的长时序操作仿真环境。
在 RPent 中由 RLDX-1 VLA 策略驱动,默认通过 HTTP RPC 提供服务
(与 LIBERO 一致),也支持 pickle-framed socket 传输。详见
robots/robocasa/vla_server.py 与 robots/robocasa/robot_spec.py
中的传输选择逻辑。
备注
当前 task/global 协议为 robots/robocasa/eval/target50_v2.json,
target50.json 保留旧 v1 协议。
340 个 cell 均使用普通的单任务 rpent --robot robocasa 命令。
运行流程#
RoboCasa365 使用 PandaOmron 移动机械臂与冻结的 RLDX-1 策略。 接入层与 planner 无关,API planner、Claude Code 和 Codex 使用相同的 RoboCasa 工具接口。后端配置参见 Agentic Planner;凭据由用户在仓库外提供。
rpent CLI -> task-memory sync -> environment and VLA servers
-> planner toolkit -> final environment state.success
未指定外部 endpoint 时,RPent 为每次运行启动环境服务器和 VLA 服务器。
Planner 根据实时任务语言和观测选择 primitive,RLDX-1 执行操作技能。
评测成功只取环境自身 _check_success() 暴露的 state.success。
公开协议使用普通单-cell 命令,不包含批量启动器;Harness VLA 的总体说明参见
Harness VLA。
安装#
RLDX-1 要求 Python 3.10。请创建独立环境,并通过 .[robocasa]
安装完整的 RoboCasa365 运行栈:
uv venv --python 3.10
source .venv/bin/activate
先使用 PyTorch 官方安装选择器
根据本机 GPU、驱动和 Python 版本选择匹配的 CUDA 版 PyTorch 与 torchvision。
在此环境执行所选命令,可将 pip 换为 uv pip。RLDX 依赖要求 Torch >= 2.7、
torchvision >= 0.22;两者必须互相兼容,不能分别任意选版本。然后安装 RPent:
uv pip install -e ".[robocasa]" \
--constraint robots/robocasa/eval/target50-constraints.txt
uv pip check
RoboCasa 专用 constraints 文件固定经 Target50 复现验证的兼容性敏感包版本,
同时不会收窄 RPent 中 LIBERO 或 RoboTwin 的共享依赖。robocasa extra 跟随
RoboCasa、RLDX 和 Robosuite 仓库维护中的 rpent 分支,普通运行与 Target50
使用同一安装方式。Manifest 记录分支,不冻结源码 commit。RoboCasa 的
rpent 分支声明的发行包名为 rpent-robocasa365;不要同时安装提供相同
import 包的 rlinf-robocasa365。无需再次安装固定 SHA 的源码。
分支可能更新,因此每次评测都应记录实际解析的 Git commit 和安装版本:
uv pip freeze > installed-requirements.txt
将此环境记录与实验产物一起保存;稍后再次安装同一分支并不保证源码相同。
下文的 checkpoint 和 backbone 支持文件仍使用固定 HF snapshot;
task/global memory 跟随所选分支。
constraints 不固定 Torch、torchvision 或 CUDA backend,安装时
保留已安装且兼容的版本组合;依赖冲突必须先解决再运行。Manifest 的
reference_accelerator 仅记录此前使用的 Torch 2.7.0 / torchvision 0.22.0 /
CUDA 12.6,属于来源记录而非安装要求。请随结果记录实际版本,并执行下方组件
自检;不预先假定其他组合的数值结果完全相同。软件源镜像属于用户自行选择的
网络配置,不是评测协议的一部分。
备注
flash-attn 是可选的,未安装时 RLDX-1 使用 PyTorch SDPA。若要安装,请按 FlashAttention 官方说明 选择与本机 Python、Torch、CUDA 和 GPU 匹配的构建;本文不指定机器专用 wheel。
安装后处理
将厨房 assets(约 10 GB)下载到 site-packages 之外,重装不会丢。
Target50 不使用 RoboCasa dataset 或 teleop macros,因此跳过可选的 private
macros 配置:
robocasa-download-assets --assets-path ~/.robocasa/assets --no-macros -y
命令结束时会打印需要导出的环境变量,把它加到启动 rpent 的 shell 里:
export ROBOCASA_ASSETS_PATH=~/.robocasa/assets
外置根目录需要同时包含六类下载资源,以及发行包内的 scene、arena 和 fixture
静态文件。修正后的安装器会补齐静态文件,不覆盖内容不同的已有文件。
--skip-existing 会检查成功下载的文件清单,不再把非空目录当作完整安装。
请保留官方 attribution 文件,并在实验开始前完成中断的下载。
资源以原子方式发布,中断复制不会留下半写入的正式文件。若旧安装器已经留下 内容冲突的资源,可在原命令中显式增加覆盖权限进行修复:
robocasa-download-assets --assets-path ~/.robocasa/assets --no-macros --overwrite -y
--overwrite 优先于 --skip-existing,仅替换本次安装范围内的资源文件,
不删除无关文件或整个目录;未指定时,内容不同的已有文件仍受保护。
默认原子不覆盖发布要求目标文件系统支持硬链接。强制终止遗留的临时文件不会
阻止重试。
新资源集合主要需要 ZIP 与一份解压数据的空间,staging 发布时不再复制 payload;
替换已有安装时还需为旧资源占用预留空间。--skip-existing 会跳过已完成集合的
下载和内容比较,随包静态文件单独检查。
移动相机
robocasa extra 会安装 RLinf/robosuite 的 rpent 分支,该分支
包含 Omron 底盘固定的 navview 相机,其组合后的 MuJoCo 相机名为
mobilebase0_navview。导航 RGB-D 与 world map 渲染会在首次请求时验证该
相机,并在缺失时明确报错。无需手工修改
site-packages 中的 XML。Target50 同样使用此维护分支;请按上文随环境
信息记录实际解析的 revision。
RLDX-1 checkpoint
下面运行命令的 --vla-model-path 期望一个本地 RLDX-1-FT-RC365
checkpoint 路径(RoboCasa365 微调版)。从 HuggingFace 下载:
hf download RLWRLD/RLDX-1-FT-RC365 \
--revision 587e9ecdcc5e7184fcc17f58713908edff5af041 \
--local-dir ./checkpoints/rldx-1-ft-rc365
下载慢的话用 HF 镜像:
HF_ENDPOINT=https://hf-mirror.com hf download RLWRLD/RLDX-1-FT-RC365 \
--revision 587e9ecdcc5e7184fcc17f58713908edff5af041 \
--local-dir ./checkpoints/rldx-1-ft-rc365
RLDX-1 backbone 支持文件
FT checkpoint 虽包含权重,仍引用 RLWRLD/RLDX-1-VLM 的架构、processor
和 tokenizer。Target50 将此第四类资源固定到
4b9f870d1287e0d38d7eb1445e6d8c60afe66dd7,共 15 个非权重文件,约
16.4 MB(包括模型文档和图片)。下载到启动 RPent 时使用的同一缓存:
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 指向空缓存。RoboCasa VLA worker 在普通运行和 Target50
中均自动使用上述支持文件 revision,单独启动的 RPent VLA 服务也相同;无需额外
revision 参数或手工修改缓存 ref。该固定值仅作用于 backbone 元数据,不改变
--vla-model-path 选择的微调权重。
模型和 assets 的许可证独立于 RPent 代码许可证。
任务与 Global Memory
--memory-profile hf``(默认值)下,CLI 与 Dashboard 均从
`RLinf/RPent-memory 数据集
<https://huggingface.co/datasets/RLinf/RPent-memory/tree/main/robocasa>`_
当前的 ``main 分支同步 robocasa/**,不锁定数据 commit。目录结构为:
memory/robocasa/
├── task_only/
│ ├── <Task>_s0.json
│ ├── <Task>_s0_recipe.jsonl
│ └── <Task>.md # 可选
└── global/
└── GLOBAL_MEMORY.md
默认 --memory-policy task-global 选择当前任务已有的 JSON、recipe、
Markdown,以及 global/GLOBAL_MEMORY.md。首次机器人动作前,planner 必须
通过 RPent 的 read_text_file 工具完整读取全部选中文件。提示词与文件工具
使用相同的文件选择;RPent 文件工具拒绝读取其他任务的 memory。这是工具层限制,
不是操作系统级隔离。
用 --memory-policy task-only 进行对照时,任务文件不变,提示词和文件工具
同时关闭 global。JSON/JSONL 均缺失时,任务继续使用实时观测和启用的 global;
只有其中一个存在则报错。缺少可选 Markdown 会记录日志。task-global 模式要求
global 文件存在。文件按任务名和目录直接发现,无需额外索引。
实时 task_language、RGB-D、任务进展和工具返回优先于 memory。
只有可见前提成立时才应用 global 策略。有接触、持有物体、fixture 进展或计数器
上升时保持 VLA 连续调用;连续两次无接触且无可见进展后,重新定位并有限调整姿态。
每次 VLA 调用都使用完整、逐字的实时任务语言。历史 vla_act 仅描述策略,
执行使用当前工具,不回放历史坐标。仍然不允许 reset。
使用本地 memory 时,下载到新目录后选择 local profile。使用新目录也可避免旧 下载目录残留已从远端删除的文件:
hf download RLinf/RPent-memory --repo-type dataset \
--include 'robocasa/**' --local-dir ./target50-memory
rpent --robot robocasa \
--task-name OpenDrawer --split target --seed 1 \
--vla-model-path /path/to/rldx \
--planner codex --model gpt-5.5 --reasoning-effort xhigh \
--memory-profile local --memory-dir ./target50-memory/robocasa \
--memory-policy task-global
使用维护中的复现 memory 分支时,在下载命令中加上
--revision reproduce/memory。它选择可更新的分支,不锁定数据版本。
切换分支请使用新目录。两个分支的 RoboCasa 均采用上述 task/global 结构;
后续更新对应的任务或 global 文件即可,无需修改代码。
自定义 memory 来源#
使用相同 robocasa/ 结构的其他 HF 数据集时,启动 RPent 前设置
RPENT_MEMORY_HF_REPO=<owner>/<dataset>,并使用
--memory-profile hf。这里接受数据集仓库 ID,不是浏览器页面 URL。
使用自定义子目录或维护分支时,下载对应子树到新目录后选择 local profile:
hf download <owner>/<dataset> --repo-type dataset \
--include '<subpath>/**' --local-dir ./custom-memory
# 在 RPent 运行命令中加上:
# --memory-profile local --memory-dir ./custom-memory/<subpath>
所选目录应包含 task_only/,task-global 模式还要求
global/GLOBAL_MEMORY.md。选择分支时,在 HF 下载命令中加上
--revision <branch>。无需交付包或迁移脚本。
Harness VLA Target50 复现协议#
当前 robots/robocasa/eval/target50_v2.json 协议
(robocasa-harness-vla-v2)使用 task/global memory,不锁定数据版本。
它保留 target 的 task/seed 矩阵、cell 时限、no-reset 规则、环境成功判据和
40/999/8 的 RLDX 参数。协议 ID 标识结果格式和评测规则,供校验器区分 v1 与 v2,
不是 memory 数据版本选择参数。
结果记录 memory 模式、选中及缺失的文件、完整读取记录。 校验器拒绝混合模式、读取不完整或跨任务读取的结果。同一组对照实验期间应保持 memory 内容一致,下载文件和验证证据保存在本地。
旧 target50.json v1 清单及已发布的 task-only 成绩继续保留。
新版 task-only 使用 v2,属于新对照,不代表复现旧语料基线。
校验旧结果时传入 --manifest robots/robocasa/eval/target50.json。
源码依赖跟随清单记录的 rpent 分支。
Split |
任务数 |
每任务 seed |
Cell 时限 |
Cells |
|---|---|---|---|---|
Atomic |
18 |
1--10 |
1800 秒 |
180 |
Composite-Seen |
16 |
1--5 |
3600 秒 |
80 |
Composite-Unseen |
16 |
1--5 |
3600 秒 |
80 |
总计 |
50 |
340 |
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 上游。
运行一个任务#
HTTP RPC endpoint 的主机名为 127.0.0.1 或 localhost 时一律直连,无论
worker 由 RPent 启动还是由用户指定。其他主机名与 IP 均遵循标准代理环境。Codex
只在其子进程环境中为本地 MCP 应用相同的两个主机名例外。如果 Hugging Face、
远程 planner 或其他远程服务需要 HTTP_PROXY 或 HTTPS_PROXY,请保持原有
代理;默认运行不要求 shell 统一配置 NO_PROXY。
如果用户指定的本地服务使用其他主机名或 IP 且应当直连,请将该准确值加入用户
已有的 NO_PROXY 与 no_proxy 配置。
RoboCasa 的 CLI 参数由 robots/robocasa/__init__ 注册,可通过
rpent --robot robocasa --help 查看:
rpent --robot robocasa \
--task-name OpenDrawer \
--split target \
--seed 1 \
--vla-model-path /path/to/rldx \
--planner claude_code \
--model claude-opus-4-8
RoboCasa 不绑定具体 planner;RPent 支持的任意 planner 都可用于该机器人。 配置方式参见 Agentic Planner。
正式 Target50 先按上文下载固定资源,再为 manifest 中每个 cell 调用一次普通
命令。Codex 参考 profile 为 gpt-5.5、xhigh、max_turns=100;
RoboCasa 运行时本身仍与 planner 解耦。场景身份直接使用普通 --seed 参数,
不要设置 RLDX_RESET_SEED。普通 RoboCasa 使用 max_chunks=70,只有
Target50 将其覆盖为 40。运行前固定 Target50 的 RLDX 执行参数:
export RLDX_MAX_CHUNKS=40
export RLDX_SETTLE_PATIENCE=999
export RLDX_ACTION_STEPS_PER_CHUNK=8
unset RLDX_RESET_SEED
第一个 OpenDrawer Atomic cell 示例:
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
Composite-Seen 与 Composite-Unseen 使用 --planner-timeout-s 3600。执行顺序为
Atomic、Composite-Seen、Composite-Unseen。成功只认最终环境记录中的
state.success=true,planner 的 finish(status=...) 不是评测标签。有效任务
失败与 planner timeout 不重跑;只有没有产生有效环境结果的基础设施失败允许重跑。
每条完成的命令都会原子写入 <output-dir>/result.json,成功值只来自最终环境
state.success。文件记录有效协议参数,但不保存 provider 错误原文或凭据。全部
cell 按 <results-root>/<manifest-split>/<Task>_s<seed>/result.json 落盘后,
用下面命令校验固定分母并输出任务加权指标:
python -m robots.robocasa.eval.validate_target50 ./runs/target50
单独进行 task-only 对照时,运行命令和校验器均传入
--memory-policy task-only,并使用独立结果目录。
备注
使用 --env-endpoint / --vla-endpoint 指向已运行的服务器
([protocol://]host:port);不指定时,RPent 会就地启动 env 和 VLA
子进程,日志分别写到 <output_dir>/env_server.log 和
<output_dir>/vla_server.log。
历史 task-only 结果#
已发布的 v1 task-only Codex 评测覆盖 340 个 cell,任务加权成功率为 57.00%。 这是历史汇总数据,不代表当前 task-global 模式的成绩。 完整历史表格 链接到对应代码 commit;该记录不包含逐 seed 轨迹或失败分类。
环境冒烟测试#
安装 RoboCasa 及其 assets 后,可显式启用环境冒烟测试,检查仿真器安装与接口。 测试不需要 planner 凭据或 VLA checkpoint:
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,另加一项移动相机测试。任务测试检查构造/reset、12D action、
操作相机、导航 RGB-D/world map、成功判定及关闭流程;相机测试检查底盘执行
八步动作后的相机位姿与画面变化。这些真实仿真测试需要可用的 GPU/EGL 环境,
与离线 CPU CI 分开运行;跳过不能计作通过。
常见错误#
先执行 环境冒烟测试。四类资源下载完成后,
使用现有 RoboCasa E2E 组件测试检查 VLA worker 启动、HTTP RPC 和首次推理。
按需安装 .[test],选择一张可用 GPU,并使用新的输出目录:
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
这些检查不会启动 planner 或生成 benchmark 成绩,默认 skip 不能当作通过。 离线变量仅作用于该自检命令;普通 HF memory 同步仍需要网络。保持远程 planner 的代理配置不变。 轻量协议测试仍检查全部 50 个任务和固定的 340-cell 分母,全量评测单独执行。
下载慢时可使用
UV_HTTP_TIMEOUT=600,并将缓存和临时目录放在空间足够的 文件系统上。重新执行固定 revision 的 HF 下载命令;不能只看 shard 文件大小 判断完整性,不要禁用 TLS 校验。只读 assets 报错需要安装修正后的 RoboCasa 依赖,不要开放资源目录写权限; 转换后的 XML 应写入临时目录。
RLDX 离线缓存缺失时检查上述支持文件和缓存变量。
NO_ALBUMENTATIONS_UPDATE=1只关闭导入时的更新检查,不改变图像处理; 保持现有 image geometry fallback 参数。通过 GPU 运算和 EGL render 验证所选 Torch/CUDA 构建,不能只看驱动显示 版本;应使用与本机兼容的构建。
共享只读环境应将
NUMBA_CACHE_DIR设置到当前用户可写目录,不要修改包的 代码权限。导航 RGB-D 或 world map 渲染报告缺少
mobilebase0_navview时,应重新 安装.[robocasa]以刷新RLinf/robosuite的rpent分支;不要手工 修改已安装的 XML。read_text_file报告缺少当前任务结果时,请检查memory/robocasa/task_only/目录或所选本地目录。RPent 不会读取其他任务的 memory 作为替代。 Markdown 为可选文件;Atomic 任务没有发布<Task>.md。环境与 VLA 启动错误会分别记录在
<output_dir>/env_server.log和<output_dir>/vla_server.log;运行级错误也可检查<output_dir>/run.log。只有准确的
127.0.0.1与localhost主机名会自动绕过 HTTP 代理。其他 主机名与 IP 均遵循标准代理环境;只有该服务应当直连时,才需要把准确主机名 加入NO_PROXY与no_proxy配置。
Toolkit 与 LIBERO 的差异#
RoboCasa toolkit 提供的工具 形式 与 LIBERO 相同(一次原语调用、
一次状态查看、一次 finish),但有两处 RoboCasa 特有的差异:
Env 侧的辅助方法。 抓取检测与动作组装需要运行中的仿真 env, 所以 它们是 env_server 的 RPC。Agent 侧的 skill 因此同时持有 两个 client: env client 做 render/step, model client 做 RLDX-1 推理。 理由参见 添加新机器人。
观测形状。 RLDX-1 看到的是 3 路相机的视频张量
(1, T, H, W, 3), 按历史T堆叠, 加上state.*与annotation.*字段。session id 不在观测里——它由 RPC 框架自动 管理:RpcClient生成rpc_+ uuid hex 的私有 session id,wait_for_ready在连接时注册到服务端; 服务端跟踪每个 session 的空闲时间, 后台 sweep 线程定期回收超时 (默认 3600 秒) 的 session, 进程退出时客户端通过 atexit 发送session.close。业务代码 (rldx_skill/vla_client) 从不直接看到 session id, 服务端 把它注入到predict/reset_session中, 按客户端隔离 RLDX memory/RTC 策略状态。