Zetta-Embodiment README

The project's README from github.com/air-embodied-brain/Zetta-Embodiment. As one markdown file: README.md.

Zetta

Papers with Code: SOTA on RoboCasa365 Atomic-Seen

Zetta Overview

Zetta is an efficient closed-loop embodied harness for self-evolving physical intelligence. It evolves code-based runtime critics and recovery skills online while keeping the base policy frozen, achieving state-of-the-art success on LIBERO-Pro (90.8%) and RoboCasa (93.6%) with an 11.1x inference speedup.

TODO

Evolution Protocol

50 development rollouts (never use seeds 1..20)
  -> Failure Cluster
  -> Stage 1 causal Diagnose
  -> Stage 2 Critic-Recovery Candidates
  -> Shadow Replay
  -> paired Same-seed Gate
  -> Held-out seeds 1..20
  -> Reject and return to Stage 2, or Promote and complete

Runtime role boundaries:

Repository Layout

Path Purpose
zetta/evolution/ Immutable manifests, queues, clustering, stages, gates, promotion, and supervision
rollout_runtime/ The Rollout Runtime: Gateway, EnvWorker/RolloutWorker groups, and backends for LIBERO/RoboCasa/ManiSkill/RoboTwin/Genie Sim
robots/libero/, robots/robocasa/, robots/robotwin/ Env clients, Role1/Critic/Recovery, tools, and rendering contracts
scripts/evolution/ Campaign preparation, workers, capacity probes, and plots
scripts/deployment/ Service start/stop, VLA env install, and Docker build helpers
tests/ Unit/contract tests; the minimal set requires no simulator or model

A campaign root normally contains:

manifest.json             frozen task, schedule, runtime, and gate contract
preregistration.json      seed and evaluation commitments
task-contract.json        authoritative language goal, when supplied
tool-catalog.json         exact tool schemas available to candidates
state.json                current lifecycle phase
episodes/                 canonical rollout and paired-gate records
failure-clusters/         Cluster inputs, visual indices, and outputs
diagnoses/                Stage 1 inputs, outputs, and audit trail
proposals/                Stage 2 candidate attempts
shadow-replay/            offline trigger and false-positive evidence
gates/                    same-seed, regression, and held-out decisions
promoted/                 verified candidate bundle and hashes

Videos, model weights, simulator assets, API credentials, and host runtime files remain outside Git.

Installation

Python 3.10 through 3.12 is supported. The minimal test environment (no simulator/model required):

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[test]"

Genie Sim / Isaac Sim environment

The native geniesim Runtime backend supports the RoboColiseum g2op_if_pick_block_color task with Isaac Sim 5.1 and an isolated Python 3.11 simulator process. Use prepare_geniesim.py to prepare pinned dependencies and task assets, then run smoke_geniesim.py to validate reset, joint control, RGB observations, official scoring, and shutdown. This single-task environment integration does not include a VLA or evolution campaign.

VLA runtime environment (LIBERO-Pro or RoboCasa)

scripts/deployment/install_vla_env.sh builds a venv for one of two tracks; the tracks cannot share a venv state (incompatible robosuite versions). See the VLA runtime setup guide for the full installation notes, compatibility fixes, and known limitations.

LIBERO-Pro + Pi0.5

export REPO_ROOT=/abs/path/to/Zetta-Embodiment
export VENV_ROOT=/abs/path/to/venvs/vla-env
bash scripts/deployment/install_vla_env.sh --track libero-pro

install_vla_env.sh downloads the LIBERO-Pro scene/object assets automatically. To fetch or refresh them manually:

"$VENV_ROOT/bin/liberopro-download-assets" --skip-existing

RoboCasa + GR00T (needs a source checkout with robocasa/, robosuite/, Isaac-GR00T/)

export REPO_ROOT=/abs/path/to/Zetta-Embodiment
export VENV_ROOT=/abs/path/to/venvs/vla-env
export ROBOCASA_SRC_ROOT=/abs/path/to/robocasa-source-checkout
bash scripts/deployment/install_vla_env.sh --track robocasa

RoboCasa also needs its kitchen assets (~10GB); see the RoboCasa installation guide for details:

python -m robocasa.scripts.setup_macros              # set up system variables
python -m robocasa.scripts.download_kitchen_assets   # downloads ~10GB of kitchen assets

RoboTwin 2.0 + Pi0.5

RoboTwin is SAPIEN-based and cannot share a venv with either track above. Use the upstream RLinf image rather than building one:

git clone https://github.com/RoboTwin-Platform/RoboTwin.git -b RLinf_support
# then download ~15GB of assets into its assets/ directory

docker run --rm --gpus all --shm-size 32g \
  -e NVIDIA_DISABLE_REQUIRE=1 \
  -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics \
  -e LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/local/cuda/lib64 \
  --device /dev/dri \
  -v "$ROBOTWIN_ROOT":/workspace/RoboTwin \
  -v "$REPO_ROOT":/workspace/Zetta \
  --entrypoint /bin/bash rlinf/rlinf:agentic-rlinf0.4-robotwin

The image ships three venvs under /opt/venv/; this repository uses openpi. The three environment variables let a CUDA 12.8 image run on a 12.4 driver: NVIDIA_DISABLE_REQUIRE skips the image's cuda>=12.8 label check, NVIDIA_DRIVER_CAPABILITIES drops the display capability that needs a /dev/nvidia-modeset a headless host does not have, and LD_LIBRARY_PATH puts the host driver's libcuda ahead of the image's forward-compatibility libraries -- CUDA forward compatibility is datacenter-only and fails on GeForce with Error 804. assets_path must point at the RoboTwin repository root, not its assets/ subdirectory.

Prebuilt Docker images, built from scripts/deployment/Dockerfile.vla-env, are available for both tracks so you can skip the manual venv build:

Runtime Rollout System

Campaigns drive rollouts through the Rollout Runtime rather than talking to a per-task VLA/env server directly. Start it once per host, then point campaign preparation at it:

CUDA_VISIBLE_DEVICES=0 MUJOCO_GL=egl \
python -m rollout_runtime.cli serve \
  --config <preset-name-or-yaml-path> \
  --host 127.0.0.1 \
  --port 18730 \
  --launch ray

--launch ray is required for real hardware runs: it puts the EnvWorker (simulator) and RolloutWorker (model inference) groups into separate processes. --launch local (the default) keeps them in one process and is only for local/CI smoke tests. Presets live under rollout_runtime/config/presets/; copy and edit one for machine-specific GPU/checkpoint paths rather than committing a new preset with real paths.

Preparing and Running a Campaign

LIBERO, RoboCasa and RoboTwin all use the same two-step flow: prepare_*_campaign.py freezes a manifest.json/tool-catalog.json against a running runtime, then run_campaign.py drives the campaign state machine to completion.

RoboTwin differs in two ways that its manifest records explicitly. Its seeds come from RoboTwin's curated per-task success-seed list rather than a dense integer range -- the environment picks its scene from the seed outright, so a held-out block drawn from unsolvable scenes would not be a gate -- and its evidence is chunk-granular rather than per-step, because it is the only final_only family.

The RoboTwin campaign loop runs end to end on hardware: rollouts, Cluster, Diagnose, Stage 2, and the paired same-seed gate, over five candidate rounds to a complete campaign.

# 1. Start the runtime (see above), then prepare the campaign against it.
python scripts/evolution/prepare_libero_campaign.py \
  --output-root runs/libero-goal-s-task3/g0000 \
  --campaign-id libero-goal-s-task3-g0000 \
  --repository-root "$PWD" \
  --runtime-python .venv/bin/python \
  --code-commit "$(git rev-parse HEAD)" \
  --suite libero_goal_swap \
  --task-id 3 \
  --task libero_goal_swap/task3 \
  --task-language "Open the top layer of the drawer and put the bowl inside" \
  --master-seed 2026081103 \
  --rollout-count 50 \
  --fixed-heldout-seeds 1-20 \
  --heldout-mode test \
  --runtime-url http://127.0.0.1:18730 \
  --runtime-policy-id <policy-id>

# 2. Run it: this starts the worker, ingests episodes, and drives
#    Cluster -> Diagnose -> Stage2 -> Shadow Replay -> Same-seed -> Held-out.
python scripts/evolution/run_campaign.py \
  --manifest runs/libero-goal-s-task3/g0000/manifest.json \
  --root runs/libero-goal-s-task3/g0000 \
  --queue-root runs/libero-goal-s-task3/queue \
  --tool-catalog runs/libero-goal-s-task3/g0000/tool-catalog.json \
  --workers libero-worker-0 \
  --model gpt-5.6-sol \
  --max-generations 1

--worker-command (optional, must be the final flag) overrides how each worker process is launched, substituting {queue_root}/{host} into a custom command template; omit it to use the default zetta.evolution.cli worker invocation.

--runtime-url/--runtime-policy-id replace the legacy --vla-endpoint/--environment-gpus flags; RoboCasa campaigns always go through the runtime (there is no direct-connect path). ROLLOUT_COUNT=50, HELDOUT_COUNT=20, and the official horizons are the formal-run defaults; a quick infrastructure check may use 1/1/1 with a positive CAMPAIGN_MAX_STEPS, but that is not a benchmark result. Each preparation script's --help output is the authoritative option list.

To inspect a campaign read-only:

python -m zetta.evolution.cli status --root runs/libero-goal-s-task3/g0000 \
  --queue-root runs/libero-goal-s-task3/queue

Tests

# Contract suite, no simulator/model required:
python -m pytest -q tests/test_evolution_protocol.py tests/test_evolution_core.py tests/test_libero_eval_horizon.py

# Everything currently available:
python -m pytest -q

Optional-backend tests require the corresponding dependencies; hardware/service smoke tests live under scripts/deployment/ and are not part of the minimal unit suite.

Security and Reproducibility

Acknowledgements

We acknowledge RLinf for its prior work. See Third-Party Notices for details.

Citation

If you find Zetta useful in your research, please cite our paper:

@misc{ding2026zettazetaefficientclosedloop,
      title={Zetta $\zeta$: An Efficient Closed-Loop Embodied Harness for Self-Evolving Physical Intelligence}, 
      author={Xin Ding and Liang Mi and Mingzhe Huang and Zixuan Wang and Chao Zhang and Zixu Hao and Fu Chen and Xiangyu Li and Yikai Zheng and Yaoyu Guo and Weijun Wang and Kun Li and Hao Wu and Yunxin Liu and Ting Cao},
      year={2026},
      eprint={2608.16590},
      archivePrefix={arXiv},
      primaryClass={cs.RO},
      url={https://arxiv.org/abs/2608.16590}, 
}

Zetta-Embodiment (air-embodied-brain/Zetta-Embodiment)

Searching Database…

这是什么?Zetta 是一个闭环具身 harness,在保持基础机器人策略冻结的同时,在线演化基于代码的运行时批评器和恢复技能,在 LIBERO-Pro 上达到 90.8% 的成功率、在 RoboCasa 上达到 93.6%,并获得 11.1 倍的推理加速。
这是开箱即用的机器人控制器,还是研究框架?它是一个研究框架/harness,封装现有的 VLA 策略(Pi0.5、GR00T)和模拟器(LIBERO、RoboCasa、RoboTwin、Genie Sim),负责编排 rollout、诊断和恢复,而不是一个独立的控制器。
怎么让它跑起来?安装 Python 3.10-3.12,运行 scripts/deployment/installvlaenv.sh,为 LIBERO-Pro+Pi0.5 或 RoboCasa+GR00T 赛道构建专用 venv,在每台主机上启动一次 Rollout Runtime,然后用 preparecampaign.py 准备一次战役,再运行 runcampaign.py。
需要模拟器和特定的 GPU 配置吗?需要:每条赛道都要求各自的模拟器栈(LIBERO-Pro、RoboCasa/robosuite/Isaac-GR00T、基于 SAPIEN 的 RoboTwin,或 Genie Sim 所用的 Isaac Sim 5.1),外加一块 NVIDIA GPU;也有预构建的 Docker 镜像,可以省去手动构建 venv。
安装上有什么需要留意的坑吗?CUDA 12.8 Docker 镜像在较旧的 12.4 驱动上运行需要覆盖三个环境变量;而且 CUDA 前向兼容只在数据中心 GPU 上有效——在 GeForce 上会报 Error 804。
Evolution Protocol 是什么?战役会对失败轨迹进行聚类,由 Diagnose 阶段解释一个因果性失败,Candidate 编写者提出一个冻结的 Critic-Recovery 组合,Role1 权限方在 Recovery 执行者实施有界修复之前决定接受或拒绝——基础策略本身从不更新。
Zetta 支持哪些模拟器和环境?LIBERO 和 LIBERO-Pro、RoboCasa、RoboTwin 2.0,以及 NVIDIA 的 Genie Sim/Isaac Sim,ManiSkill 和 BEHAVIOR 支持计划以大约每周一次的节奏推出。
为什么冻结基础策略而不重新训练?冻结基础 VLA 策略可以避免重新训练的风险和灾难性遗忘;改进改由叠加在其上、在线演化的基于代码的批评器和恢复技能来实现。
RLinf 和这个项目有什么关系?Zetta 致谢了 RLinf 的前期工作,并在 RoboTwin + Pi0.5 赛道上复用其 RLinf 镜像和 openpi 配置,而不需要你单独构建一个镜像。
Size
4.4 MB
Stars
1.3K
Updated
CommitOct 04
Age
2mo
Commits · 90 Days