taskname evalcfg trainconfig modelname seed gpu
September 15, 2026 Β· View on GitHub
RoboSPA
Can VLA Models Go Beyond Simple Scenes and Short-Horizon Tasks? [EMNLP 2026]π₯π₯
π Project Page Β· π Paper Β· π» Code Β· π€ Dataset Β· β¨ ModelScope
Zhenxuan Fan1, Bo Zhang2, Yutong Lin1, Yuqian Yuan1, Juekai Lin1, Liang Liang1, Zhuoyi Huang3, Wenqiao Zhang1,*, Juncheng Li1,*, Siliang Tang1, Jun Xiao1, Yueting Zhuang1
1 Zhejiang University Β Β 2 University of Electronic Science and Technology of China Β Β 3 South China Normal University
* Corresponding authors
RoboSPA (Robot Spatial-Procedural Assessment) is a large-scale robotic manipulation dataset and benchmark for diagnosing embodied reasoning in Vision-Language-Action (VLA) models. It is built on the RoboTwin 2.0 simulation and data-generation framework (SAPIEN + CuRobo).
RoboSPA focuses on two capability dimensions:
- π Fine-Grained Spatial Reasoning β identify the intended target among visually similar candidates
- π§ Long-Horizon Procedural Planning β complete multi-step procedures under ordering, repetition, and memory constraints
| Item | Scale |
|---|---|
| Task categories | 10 |
| Base tasks | 56 |
| Difficulty levels | 5 (L1βL5) |
| Task variants | 280 |
| Trajectories | 527K |
| Interaction video | 997 hours |
| Timesteps | 108M |
| Embodiments | Aloha-AgileX, ARX-X5, Piper, Franka, UR5 |
π Table of Contents
- π Overview
- π£ News
- π οΈ Installation
- π Quick Start
- βοΈ Task Configurations
- π¦ Data Collection
- π½ Released Dataset
- π€ Other Policy Baselines
- π§© Deploy Your Own Policy
- π Task List
- π Citation
- π¬ Contact
- πΊ Acknowledgement
- π·οΈ License
π Overview
Existing VLA benchmarks mostly score binary task completion in clean, short-horizon settings. RoboSPA instead scales spatial ambiguity and procedural horizon in a controlled way, while keeping task semantics fixed.
Each of the 56 base tasks has five variants (_1 β¦ _5):
- Spatial tasks add more plausible candidates
- Procedural tasks add more subgoals / longer sequences
Beyond Success Rate (SR), RoboSPA reports:
- ONTA (Object-Normalized Target Accuracy) for spatial tasks β chance-corrected target selection
- Progress Score (PS) for procedural tasks β fraction of completed subgoals
The paper evaluates RDT, GO-1, Ο0.5, and X-VLA in a single-task setting on clean-scene Aloha-AgileX data. At L5, every evaluated model stays below 25% overall success.
This repository reuses RoboTwin 2.0's expert-script data pipeline: task environments live in envs/, collection is driven by collect_data.sh, and policy evaluation goes through script/eval_policy.py.
π£ News
- π 2026/09/04 β Paper on arXiv: arXiv:2609.05324
- π 2026/08 β Accepted at EMNLP 2026 (Main Conference)
π οΈ Installation
Please follow the RoboTwin 2.0 installation guide to set up the environment and download assets.
π Quick Start
Train and evaluate Ο0.5 on Pick_Blocks_Size_1 (demo_clean). Put training HDF5 under data/ from the released dataset. Ο0.5 env setup (uv, CuRobo): RoboTwin Ο0.5 guide.
conda activate RoboTwin
cd policy/pi05
mkdir -p processed_data training_data
1. Train
bash process_data_pi05.sh Pick_Blocks_Size_1 demo_clean 50
mkdir -p training_data/demo_clean
cp -r processed_data/Pick_Blocks_Size_1-demo_clean-50 training_data/demo_clean/
bash generate.sh ./training_data/demo_clean/ demo_clean_repo
Set repo_id="demo_clean_repo" on pi05_aloha_full_base in src/openpi/training/config.py, then:
uv run scripts/compute_norm_stats.py --config-name pi05_aloha_full_base
bash finetune.sh pi05_aloha_full_base demo_clean 0
# train_config model_name gpu
Checkpoints: policy/pi05/checkpoints/pi05_aloha_full_base/demo_clean/. Default eval checkpoint_id is 30000 in deploy_policy.yml.
2. Evaluate
bash eval.sh Pick_Blocks_Size_1 demo_clean pi05_aloha_full_base demo_clean 0 0
# task_name eval_cfg train_config model_name seed gpu
100 rollouts, unseen instructions. Results go to eval_result/.
Train clean, test randomized:
bash eval.sh Pick_Blocks_Size_1 demo_randomized pi05_aloha_full_base demo_clean 0 0
βοΈ Task Configurations
YAML files live in task_config/. Create a new one with:
bash task_config/create_task_config.sh my_config
Shipped configs:
| File | Typical use |
|---|---|
demo_clean.yml | Clean table, no clutter / lighting randomization. Paper training & eval setting. |
demo_randomized.yml | Random background, clutter, lighting, table height. Robustness split. |
Important fields (defaults match demo_clean.yml):
| Field | Meaning |
|---|---|
episode_num | Number of successful demos to collect (paper uses 50 per variant). |
embodiment | Robot. Dual-arm: [aloha-agilex]. Two single arms: [piper, franka-panda, 0.6]. |
language_num | Instruction templates instantiated per episode (default 100). |
save_freq | Save every N sim steps. |
collect_data | If false, only search seeds, do not write HDF5. |
use_seed | If true, replay an existing seed.txt instead of searching. |
Supported embodiment names: aloha-agilex, ARX-X5, piper, franka-panda, ur5-wsg.
Camera names are in task_config/_camera_config.yml (D435, L515, and larger variants). Domain-randomization keys match RoboTwin 2.0 configuration docs. Paths in this repo are task_config/ (not env_cfg/task_config/).
Example: collect on Franka instead of Aloha-AgileX:
embodiment: [franka-panda]
π¦ Data Collection
Paper protocol (recommended)
For each task variant you care about:
bash collect_data.sh ${task_name} ${task_config} ${gpu_id}
Examples:
# Spatial L1, clean Aloha-AgileX (default embodiment in demo_clean.yml)
bash collect_data.sh Pick_Blocks_Size_1 demo_clean 0
# Same task, domain-randomized scenes
bash collect_data.sh Pick_Blocks_Size_1 demo_randomized 0
# Procedural L5
bash collect_data.sh Place_Phone_Press_Stapler_5 demo_clean 0
In the paper:
- Expert scripts in
envs/are executed with CuRobo motion planning - Each variant uses 50 successful trajectories
- For each base task, a policy is trained on all five levels (250 demos)
- Instructions: 60 templates per variant (50 train / 10 held-out), instantiated into 100 train / 100 eval utterances
- Clean vs randomized scenes share the same success conditions; randomization only changes visuals and clutter
task_name must match an envs/<task_name>.py class of the same name, e.g. Pick_Blocks_Size_1.
Resume
Collection is resumable. Existing seed.txt and data/episode*.hdf5 are skipped. If a run dies, run the same command again.
Instructions only
Templates already live in description/task_instruction/<task_name>.json. After HDF5 exists, you can regenerate episode-level instructions with:
cd description
bash gen_episode_instructions.sh Pick_Blocks_Size_1 demo_clean 100
cd ..
π½ Released Dataset
Pre-collected trajectories (527K, 5 embodiments, clean + randomized) are released at:
- Hugging Face: https://huggingface.co/datasets/zxfan/RoboSPA
- ModelScope: https://modelscope.cn/datasets/fffffzx/RoboSPA
Use the released dataset if you only need training data. Collect locally when you need a new embodiment, camera, or randomization setting.
π€ Other Policy Baselines
These stacks are inherited from RoboTwin 2.0. Ο0.5 train / eval is in Quick Start. For other policies, follow that folderβs README, then run its eval.sh. Results land in eval_result/.
| Policy | Path | Notes |
|---|---|---|
| RDT | policy/RDT/ | Paper baseline |
| GO-1 | policy/GO1/ | Paper baseline; separate GO-1 conda env |
| Ο0 / Ο0.5 | policy/pi0/, policy/pi05/ | Ο0.5 is a paper baseline; see Quick Start |
| X-VLA | β | Paper baseline; see RMBench X-VLA README |
| OpenVLA-OFT | policy/openvla-oft/ | RLDS conversion required |
| DP / DP3 | policy/DP/, policy/DP3/ | Diffusion policies |
| ACT | policy/ACT/ | Inherited from RoboTwin 2.0 |
| TinyVLA / DexVLA / LLaVA-VLA | policy/TinyVLA/, policy/DexVLA/, policy/LLaVA-VLA/ | Community ports |
X-VLA training and evaluation follow the RMBench X-VLA README. Replace RMBench paths and task names with RoboSPA equivalents (Pick_Blocks_Size_1, etc.).
Paper eval setting: clean scene, Aloha-AgileX, 100 trials per variant, unseen instructions.
Official RoboTwin policy docs: https://robotwin-platform.github.io/doc/usage/index.html. Replace original RoboTwin task names (e.g. beat_block_hammer) with RoboSPA names (e.g. Hit_Blocks_Hammer_Order_1).
π§© Deploy Your Own Policy
Copy policy/Your_Policy/ and implement three files:
deploy_policy.pyβget_model,eval(callTASK_ENV.take_action),reset_modeldeploy_policy.ymlβ checkpoint paths andinstruction_typeeval.shβ CLI overrides passed intoscript/eval_policy.py
Action interfaces:
TASK_ENV.take_action(action, action_type="qpos") # joints + grippers
TASK_ENV.take_action(action, action_type="ee") # xyz + quaternion + gripper
TASK_ENV.take_action(action, action_type="delta_ee")
qpos layout: [left_arm_joints, left_gripper, right_arm_joints, right_gripper].
cd policy/Your_Policy
bash eval.sh Pick_Blocks_Size_1 demo_clean <ckpt_setting> 0 0
More detail: RoboTwin β Deploy Your Policy.
Task List
task_name = {BaseTask}_{level} with level β {1,2,3,4,5}. Example: Pick_Blocks_Size_1, Place_Phone_Press_Stapler_5.
Fine-Grained Spatial Reasoning
| Abbr | Category | Base tasks |
|---|---|---|
| GAC | Geometric Attribute Cognition | Pick_Blocks_Size, Pick_Blocks_Height, Pick_Blocks_Length, Pick_Blocks_Area |
| SDE | Spatial Distance Estimation | Pick_Blocks_Distance, Pick_Mugs_Distance, Pick_Pill_Bottles_Distance, Pick_Mixed_Objects_Distance_A, Pick_Mixed_Objects_Distance_B |
| CPI | Canonical Position Indexing | Pick_Blocks_Canonical, Pick_Cups_Canonical, Pick_Rubik_Cubes_Canonical, Pick_Mixed_Objects_Canonical_A, Pick_Mixed_Objects_Canonical_B |
| RRR | Referential Relational Reasoning | Pick_Cans_Relational, Pick_Soaps_Relational, Pick_Tea_Box_Relational, Pick_Mixed_Objects_Relational_A, Pick_Mixed_Objects_Relational_B |
| CVR | Cross-View Reasoning | Pick_Breads_Multi_View, Pick_Sauce_Can_Multi_View, Pick_Seals_Multi_View, Pick_Mixed_Objects_Multi_View_A, Pick_Mixed_Objects_Multi_View_B |
Long-Horizon Procedural Planning
| Abbr | Category | Base tasks |
|---|---|---|
| RPF | Repetitive Procedure Following | Press_Stapler_Repeat, Lift_Pot_Repeat, Lift_Fan_Repeat, Click_Bell_Repeat |
| OFE | Order-Free Execution | Put_Bottles_Dustbin, Move_Blocks_Apart, Move_Playing_Cards_Away, Place_Bowls_Plates, Separate_Fries_Bread, Rank_Blocks_Height, Rank_Blocks_Color, Rank_Blocks_Size |
| OCE | Order-Constrained Execution | Hit_Blocks_Hammer_Order, Click_Objects_Order, Stamp_Seals_Order, Click_Bell_Clockwise_Order, Stack_Blocks_Color_Order, Stack_Blocks_Size_Order, Stack_Blocks_Length_Order |
| CAC | Composite Action Coordination | Place_Phone_Press_Stapler, Place_Bottle_Cup, Hang_Mug_Stack_Blocks, Place_Object_Scale_Click, Place_Burger_Fries_Click_Bell, Click_Can_Place_Items, Stamp_Seals_Press_Stapler, Click_Bell_Open_Microwave_Place_Object |
| MIP | Memory-Intensive Planning | Observe_Blocks_Move_Memory, Observe_Objects_Click_Memory, Remember_Color_Cover, Remember_Orientation_Restore, Press_Stapler_Memory |
Environment files: envs/<task_name>.py. Instruction templates: description/task_instruction/<task_name>.json. Per-task eval step limits: task_config/_eval_step_limit.yml.
Citation
If you use RoboSPA, please cite:
@inproceedings{robospa2026,
title = {RoboSPA: Can VLA Models Go Beyond Simple Scenes and Short-Horizon Tasks?},
author = {Zhenxuan Fan and Bo Zhang and Yutong Lin and Yuqian Yuan and Juekai Lin
and Liang Liang and Zhuoyi Huang and Wenqiao Zhang and Juncheng Li
and Siliang Tang and Jun Xiao and Yueting Zhuang},
booktitle = {Proceedings of EMNLP},
year = {2026}
}
π¬ Contact
Questions or suggestions: zxfan@zju.edu.cn.
πΊ Acknowledgement
Simulation, expert data collection, embodiment assets, and the policy-eval interface are based on RoboTwin 2.0. Physics and rendering use SAPIEN. Motion planning uses CuRobo.
License
This repository is released under the MIT license. See LICENSE.