
LIBERO, SimplerEnv and Meta-World numbers appear in every VLA paper. What each one measures, why two 97 percent scores are not comparable, and what they miss about your arm.
Open almost any vision-language-action paper from the last two years and you meet the same table: four columns labelled Spatial, Object, Goal and Long, one row per model, a number between 70 and 99 in every cell. That is LIBERO. In the NVIDIA Isaac-GR00T examples a second table sits next to it with rows named google_robot_pick_coke_can and widowx_spoon_on_towel. That is SimplerEnv. The two tables look like they belong on the same axis, and neither of them says anything directly about what an SO-100 will do on your desk.
This page walks through what LIBERO, SimplerEnv and Meta-World actually measure, which knobs move a published score without touching the policy at all, and how to check a benchmark claim instead of taking it on faith. Every number below was read out of the paper, the repository or the evaluation script it comes from, and dated, because these benchmarks change while keeping the same name. If you want the shorter version of the model landscape first, the VLA overview covers the models themselves.
What these numbers actually are
- •LIBERO is 130 simulated tasks on a Panda arm inside robosuite, grouped into four suites. The four-suite average is the number most VLA papers headline.
- •The word LIBERO covers at least two different datasets. OpenVLA regenerated the demonstrations at 256x256, dropped no-op actions and failed demos, and rotated the images 180 degrees. Most scores published since late 2024 sit on that version, not the original.
- •Episode budgets differ per suite and per harness: 220 steps for LIBERO-Spatial and 520 for LIBERO-Long in the OpenVLA script, 720 steps in the documented Isaac-GR00T LIBERO command.
- •SimplerEnv answers a different question: does a simulated score rank policies the way a real robot does. Its Visual Matching setup reached Pearson r 0.924 against real Google Robot evaluations; ranking the same checkpoints by validation MSE reached 0.308.
- •Success rates are binomial. An observed 90 percent over 70 rollouts has a 95 percent Clopper-Pearson interval of 80.5 to 95.9 percent.
- •No mainstream benchmark contains a low-cost 5-joint arm. A LIBERO score is not a prediction about your table, your lighting or your gripper.
What a benchmark number is made of
A manipulation success rate is not a measurement the way a mass or an inference latency is. It is the output of a pipeline: a task suite, a demonstration dataset, a training recipe, an evaluation harness, an episode budget, a seed, and a rule for choosing which checkpoint gets evaluated at all. Change any stage and the number moves. Most stages are documented somewhere in a repository. Almost none of them appear in the results table.
| Stage | A real example | What happens if it changes |
|---|---|---|
| Task suite | LIBERO-Spatial, 10 tasks | Suites test different things; a four-suite average hides which one the model is weak at |
| Demonstration data | 50 human demos per task in the original release | Filtered or re-rendered data raises the achievable ceiling for every method |
| Trials per task | 50 in the OpenVLA harness, so 500 per suite | Fewer trials means a wider confidence interval, not a different policy |
| Episode step budget | 220 for Spatial, 520 for Long | A slow but correct policy fails on a short budget and passes on a long one |
| Action chunk execution | replan every 5 steps in the openpi LIBERO harness | Longer open-loop chunks mean less feedback and more drift |
| Seed | 7 in both the OpenVLA and openpi scripts | Changes object placement and rollout order |
| Checkpoint selection | the original paper picks the best-scoring checkpoint | Selecting on the same rollouts you report inflates the reported score |
None of that is dishonest. Two groups can each report LIBERO-Spatial correctly and still be measuring different things. The useful reflex is not distrust, it is reading one layer deeper before you put two numbers in the same row.
LIBERO: the number in almost every VLA paper
LIBERO was published as Benchmarking Knowledge Transfer for Lifelong Robot Learning by Liu, Zhu, Gao, Feng, Liu, Zhu and Stone, first posted 5 June 2023 with a v2 on 14 October 2023. It is built on robosuite and MuJoCo, uses a Panda arm (the repository registers MountedPanda and OnTheGroundPanda), and specifies each task goal as a conjunction of PDDL predicates such as On(A, B). The simulation terminates when every predicate is true, and the reward is sparse: plus one on completion, nothing otherwise. That last detail is why LIBERO is used almost entirely for imitation learning rather than reinforcement learning.
| Suite | Tasks | What is held constant | What varies across tasks |
|---|---|---|---|
| LIBERO-Spatial | 10 | same object set, same goal (bowl onto plate) | which of two identical bowls, given by its spatial relation |
| LIBERO-Object | 10 | same pick-and-place motion | the unique object being moved |
| LIBERO-Goal | 10 | same objects, same fixed layout | the goal predicate, so the required motion |
| LIBERO-90 | 90 | nothing in particular | diverse tasks, intended as a pretraining source |
| LIBERO-Long (libero_10) | 10 | nothing in particular | long-horizon, multi-step tasks |
LIBERO-90 and LIBERO-Long together form LIBERO-100, which is why the paper says four suites and 130 tasks. The original protocol is not what a modern VLA paper runs: the paper trains a small policy for 50 epochs on 50 demonstrations per task, evaluates every 5 epochs over 20 rollouts capped at 600 steps, uses Adam with batch size 32 and a cosine schedule from 1e-4 to 1e-5, repeats everything over seeds 100, 200 and 300, and reports forward transfer (FWT), negative backward transfer (NBT) and area under the success curve (AUC). Modern papers throw away the lifelong-learning framing entirely and report a single per-suite success rate after fine-tuning one model per suite.
import os
from libero.libero import benchmark, get_libero_path
from libero.libero.envs import OffScreenRenderEnv
benchmark_dict = benchmark.get_benchmark_dict()
task_suite = benchmark_dict["libero_10"]() # or libero_spatial / libero_object / libero_goal
task = task_suite.get_task(0)
print(task.language) # the instruction the policy is conditioned on
bddl = os.path.join(get_libero_path("bddl_files"), task.problem_folder, task.bddl_file)
env = OffScreenRenderEnv(
bddl_file_name=bddl,
camera_heights=128, # the default in the LIBERO README example
camera_widths=128,
)
env.seed(0)
env.reset()
# fixed initial states, so every method starts from the same scene
init_states = task_suite.get_task_init_states(0)
env.set_init_state(init_states[0])
obs, reward, done, info = env.step([0.0] * 7) # 7-dim action, last element is the gripperLIBERO-Long, LIBERO-10 and the CLI value libero_10 are the same 10 long-horizon tasks. The training benchmark constants are LIBERO_SPATIAL, LIBERO_OBJECT, LIBERO_GOAL, LIBERO_90 and LIBERO_10. When a table says Long and a script says libero_10, nothing is inconsistent.
The word LIBERO covers at least two different datasets
The OpenVLA paper (arXiv 2406.09246, LIBERO added in the v2 revision of September 2024) did not train on the demonstrations that ship with LIBERO. It regenerated them by replaying every demonstration in the environment. The header comment of regenerate_libero_dataset.py lists exactly what changed.
- Images are saved at 256x256 instead of 128x128.
- Transitions with no-op actions are removed. A no-op is defined as all non-gripper dimensions near zero and the gripper command unchanged from the previous step.
- Unsuccessful demonstrations are dropped entirely.
- In the HDF5 to RLDS conversion the images are rotated 180 degrees, because the environments returned them upside down on that platform.
# regenerate one suite into the "no_noops" form used by most published numbers
python experiments/robot/libero/regenerate_libero_dataset.py \
--libero_task_suite libero_spatial \
--libero_raw_data_dir ./LIBERO/libero/datasets/libero_spatial \
--libero_target_dir ./LIBERO/libero/datasets/libero_spatial_no_noops
# or take the pre-converted RLDS version (about 10 GB for all four suites)
git clone git@hf.co:datasets/openvla/modified_libero_rldsThat regenerated form is now the de facto standard. The openpi LIBERO example points at it, and the Isaac-GR00T LIBERO example downloads IPEC-COMMUNITY/libero_spatial_no_noops_1.0.0_lerobot and friends, which are the same data converted to LeRobot dataset format. So a 2023 number and a 2025 number under the same suite name were produced from different pixels, at different resolution, with a different number of episodes and a different image orientation. The 2025 number is on the easier data, and the OpenVLA README says so plainly: the modification was made to improve the performance of all methods.
Every one of these harnesses applies preprocessing at evaluation time that must match training. OpenVLA's eval flips the image with img[::-1, ::-1] to match the rotated training data, and its README states that --center_crop True is required because fine-tuning used random 90 percent crops. Get either wrong and the policy loads, runs, moves, and scores near zero. There is no error message. If your own policy behaves like that on real hardware, the same class of bug is described on loss falls but the policy does nothing.
The harness moves the score as much as the policy does
Three widely used LIBERO harnesses disagree on almost every evaluation setting. None of them is wrong. They simply produce numbers that should not be compared to the second decimal place.
| Setting | OpenVLA run_libero_eval.py | openpi examples/libero/main.py | Isaac-GR00T LIBERO example |
|---|---|---|---|
| Rollouts per suite | 500 (10 tasks x 50 trials) | 500 (10 tasks x 50 trials) | 200, per the published results table |
| Max steps, Spatial / Object / Goal / Long | 220 / 280 / 300 / 520 | 220 / 280 / 300 / 520 | 720 in the documented Long command |
| Warm-up steps before the policy acts | 10 | 10 | not documented in the example |
| Seed | 7 by default, 3 seeds in the paper | 7 by default | the fine-tune CLI exposes no seed |
| Render resolution | 256 | 256 | LeRobot no_noops datasets |
| Open-loop chunk length | model dependent | replan_steps 5 | --n-action-steps 8 |
| Reported by | arXiv 2406.09246 v2 | examples/libero/README.md | examples/LIBERO/README.md |
The episode budget row is the one that matters most. A VLA that hesitates, retries a grasp and eventually succeeds scores as a failure at 520 steps and a success at 720. The openpi script carries a comment worth quoting for a different reason: the seed appears to affect object positions even when a fixed initial state is set. That is the kind of detail that decides whether a reproduction attempt matches to within a point or misses by five.

| Model and source | Spatial | Object | Goal | Long | Average |
|---|---|---|---|---|---|
| Diffusion Policy from scratch, OpenVLA paper | 78.3 | 92.5 | 68.3 | 50.5 | 72.4 |
| Octo fine-tuned, OpenVLA paper | 78.9 | 85.7 | 84.6 | 51.1 | 75.1 |
| OpenVLA fine-tuned, OpenVLA paper | 84.7 | 88.4 | 79.2 | 53.7 | 76.5 |
| OpenVLA-OFT, LIBERO.md | not broken out there | - | - | - | 97.1 |
| Pi0.5 at 30k steps, openpi README | 98.8 | 98.2 | 98.0 | 92.4 | 96.85 |
| GR00T N1.7, Isaac-GR00T example | 97.65 | 98.45 | 97.5 | 94.35 | 96.99 (mean computed here) |
Two things stand out. First, the field went from 76.5 in the OpenVLA v2 table of September 2024 to roughly 97 by the OpenVLA-OFT release of February 2025, which means LIBERO is close to saturated: the remaining headroom on three of the four suites is one or two percentage points, well inside the noise band you get from 200 to 500 rollouts. Second, the GR00T table reports Spatial as 195/200 (97.65%) in the same cell, and 195 out of 200 is 97.5 percent, not 97.65. It is a small inconsistency in a vendor README, and it is exactly why you check a number at its source before you build a comparison on it. If you want the per-model view rather than the per-benchmark view, the policy comparison page and the head-to-head GR00T N1.7 against Pi0.5 page use the same figures from the same vendor sources.
SimplerEnv: the benchmark that measures the benchmark
Evaluating Real-World Robot Manipulation Policies in Simulation (Li, Hsu, Gu and colleagues, 9 May 2024) starts from a different premise. Its goal is not to be a hard task set. Its goal is to be a simulated evaluation whose ranking of policies agrees with the ranking a real robot would produce. The paper reports a comparison across roughly 1500 evaluation episodes on two embodiments, a Google Robot and a WidowX from the BridgeData setup.
The authors name two gaps and attack them separately. The control gap is closed by offline system identification against real trajectories. The visual gap is closed by Visual Matching: green-screening real backgrounds behind the simulated scene and baking real textures onto the assets. An alternative, Variant Aggregation, instead randomises backgrounds, lighting, distractors and table textures and averages across the variants. The runtime is SAPIEN with the CPU-based ManiSkill2; the Bridge environments were also ported to ManiSkill3, which the SimplerEnv repository reports as 10 to 15 times faster. If you are choosing a simulator to build in rather than reading someone else's score, Isaac Lab is the other end of that decision.
| Ranking protocol | MMRV, lower is better | Pearson r, higher is better |
|---|---|---|
| Validation MSE on held-out episodes | 0.375 | 0.308 |
| SIMPLER with Variant Aggregation | 0.143 | 0.778 |
| SIMPLER with Visual Matching | 0.056 | 0.924 |
Those are the averages from Table I of the paper, over three tasks (Pick Coke Can, Move Near, Drawer) and six open-source checkpoints: three RT-1 checkpoints, RT-1-X, RT-2-X and Octo-Base. MMRV is Mean Maximum Rank Violation, a metric the paper introduces because Pearson correlation alone rewards a linear fit and can be dragged around by noise when two policies perform almost identically in the real world. MMRV asks a narrower question: when the simulated ranking disagrees with the real ranking, how large was the real-world gap it got backwards.
The most transferable result in that table has nothing to do with simulation. Ranking six real checkpoints by validation MSE on held-out episodes produced an average Pearson correlation of 0.308 against real success rates. Action-space regression error is a weak proxy for whether a robot finishes the task. That is the same reason a falling training loss on your own run tells you almost nothing, and why checkpoint choice on a real arm still comes down to driving the arm.
SimplerEnv also shows why averages are dangerous. The Isaac-GR00T SimplerEnv example publishes per-task results for GR00T N1.6 and N1.7 on the Bridge suite. The average rose from 56.6 to 62.3 percent. Inside that average, widowx_stack_cube went from 5 to 48 percent and widowx_open_drawer from 95 to 100, while widowx_put_eggplant_in_basket fell from 89 to 53 and widowx_put_eggplant_in_sink fell from 33 to 2. If your task looks like the eggplant, the headline improvement is a regression.
- Reproducible: fixed initial states, fixed seeds, no operator fatigue and no gradual wear on a physical arm.
- Cheap enough to run hundreds of rollouts, which is the only way to get a usable confidence interval.
- Controlled ablations: SimplerEnv can vary background, lighting and distractors one at a time, which no real lab does consistently.
- Comparable across labs, if and only if everyone pins the same suite, dataset version, harness and step budget.
- Embodiment is fixed and is not yours. LIBERO is a Panda, SimplerEnv is a Google Robot or a WidowX, Meta-World is a Sawyer.
- Saturation. Once several models sit above 96 percent on three of four suites, the benchmark stops separating them.
- Optimisation pressure. A benchmark that everyone tunes against slowly stops measuring generalisation and starts measuring familiarity.
- Contact-rich physics, cable drag, servo backlash and camera exposure changes are the failure modes on a real desk, and simulation models none of them well.
Meta-World, and what six years does to a benchmark
Meta-World (Yu, Quillen, He and colleagues, first posted 24 October 2019, v2 on 14 June 2021) is older and aimed at multi-task and meta reinforcement learning rather than imitation. It is 50 simulated manipulation tasks on a Sawyer arm, with a deliberately small action space: Box(-1.0, 1.0, (4,), float32), three Cartesian end-effector displacements and one gripper command. The benchmark splits are MT1, MT10 and MT50 for multi-task learning and ML1, ML10 and ML45 for meta learning, where ML10 gives 10 training tasks and 5 held-out test tasks and ML45 gives 45 and 5.
# pip install metaworld (Farama build, Python 3.10 to 3.13, Gymnasium API)
import gymnasium as gym
import metaworld
env = gym.make("Meta-World/MT1", env_name="reach-v3")
observation, info = env.reset()
for _ in range(500):
action = env.action_space.sample()
observation, reward, terminated, truncated, info = env.step(action)
env.close()That version suffix is the whole story. In May 2025 a group including several of the original authors published Meta-World+: An Improved, Standardized, RL Benchmark, whose abstract states that since Meta-World's introduction there have been numerous undocumented changes which inhibit a fair comparison of algorithms. A benchmark that existed for six years drifted far enough that the community needed a paper to work out which published numbers were comparable to which.
This is not unique to Meta-World. The CALVIN repository changelog records a major bug on 16 September 2022: wrong language annotations and a wrong scene_info.npy in the ABC and ABCD datasets, with a further scene_info.npy fix for the D dataset on 24 February 2023. Results published before and after those dates are not on the same benchmark. Always record the benchmark version, the dataset checksum and the commit hash next to any success rate you report, including your own.
How many trials before a number means anything
A success rate over N rollouts is a binomial proportion, and binomial proportions from small N are much less precise than they look. An NVIDIA developer article published on 11 July 2026 works the arithmetic with the exact Clopper-Pearson interval and states plainly that most published benchmarks do not run enough rollouts to reach statistical significance when comparing two policies.
| Observed success rate | Rollouts | 95 percent Clopper-Pearson interval | Interval width |
|---|---|---|---|
| 90 percent | 70 | 80.5 to 95.9 percent | 15.4 points |
| 90 percent | 1030 | 88.0 to 91.8 percent | about 2 points either side |
Narrowing that interval from 15.4 points wide to about 4 points wide costs roughly 15 times more rollouts. Put that next to the LIBERO harnesses: 500 rollouts per suite is respectable, 200 is thinner, and a real-robot evaluation of 20 trials, which is what most hardware papers can afford, carries an interval wide enough to swallow the difference between two models entirely. Snyder and colleagues make the same point from the other direction in Is Your Imitation Learning Policy Better than Mine? (14 March 2025): policy comparison is fundamentally constrained by feasible sample sizes on the order of 10 or 50, and their sequential stopping rule cuts the required trials by up to 32 percent rather than pretending the problem away.
What none of it tells you about your own arm
| Benchmark | Embodiment | Action space | Observations |
|---|---|---|---|
| LIBERO | Panda in robosuite / MuJoCo | 7-dim delta pose plus gripper | agentview_image and robot0_eye_in_hand_image, 128 px by default, 256 px in the regenerated data |
| SimplerEnv | Google Robot and WidowX in SAPIEN | end-effector control at 3 Hz (Google Robot) and 5 Hz (Bridge) | third-person camera, green-screened for Visual Matching |
| Meta-World | Sawyer in MuJoCo | Box(-1, 1, (4,)): dx, dy, dz, gripper | state vector or rendered pixels |
| CALVIN | Franka in PyBullet | continuous control at 30 Hz | static camera 200x200, gripper camera 84x84 |
| Your SO-100 | 5 joints plus a gripper, Feetech STS3215 servos | joint positions | whatever cameras you mounted |
The gap is not subtle. LIBERO's Panda has a wrist that can reach a pose from many directions; an SO-100 has five joints, so whole classes of approach angle simply do not exist for it. Read the degrees of freedom entry once and the difference stops being abstract. A model that scores 98 percent on LIBERO-Object has demonstrated that a 3 B parameter network can fit a fixed simulated pick-and-place; it has not demonstrated that it will find your particular cube under your particular lamp with your particular gripper.

For deployment the deciding numbers are different ones. On this platform ACT runs an action step in 20 ms and GR00T N1.7 in 152 ms, while Pi0.5 needs 485 ms. Minimum useful dataset size is 30 recorded episodes for SmolVLA and 50 for the others. Neither of those appears in any LIBERO table, and both will decide whether your task works long before model quality does.
Two ways to get an evaluation number you trust
Reproducing a published LIBERO number is genuinely doable on one GPU, and doing it once is the fastest way to stop over-reading benchmark tables. The OpenVLA-OFT repository README states that its LIBERO evaluation needs a single GPU with roughly 16 GB of VRAM.
- 1Install LIBERO
Python 3.8.13 and a pinned CUDA 11.3 torch build, per the repository README. Deviating from these pins is the most common source of MuJoCo rendering failures.
bashconda create -n libero python=3.8.13 conda activate libero git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git cd LIBERO pip install -r requirements.txt pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 \ --extra-index-url https://download.pytorch.org/whl/cu113 pip install -e . - 2Get the right dataset version
Decide explicitly whether you want the original release or the regenerated no-op-filtered version, and write down which one. Almost every recent published number uses the second.
bash# original release (the script's own default links may expire, so take the HF mirror) python benchmark_scripts/download_libero_datasets.py --datasets libero_spatial --use-huggingface # the version most 2025 and 2026 papers train on git clone git@hf.co:datasets/openvla/modified_libero_rlds - 3Run the published evaluation, unmodified
Run the vendor's own script against the vendor's own checkpoint first. If you cannot reproduce their number with their code, your later comparison means nothing.
bashpython experiments/robot/libero/run_libero_eval.py \ --model_family openvla \ --pretrained_checkpoint openvla/openvla-7b-finetuned-libero-spatial \ --task_suite_name libero_spatial \ --center_crop True - 4Record the settings that moved the number
Suite, dataset variant, rollouts per task, the per-suite step cap, the seed, and the exact package versions. The OpenVLA README pins Python 3.10.13, PyTorch 2.2.0, transformers 4.40.1 and flash-attn 2.5.5 on an A100, and warns that a different GPU can shift results because of nondeterminism in large models.
bashpython - <<'EOF' import json, subprocess, torch, transformers print(json.dumps({ "torch": torch.__version__, "transformers": transformers.__version__, "cuda": torch.version.cuda, "gpu": torch.cuda.get_device_name(0), "commit": subprocess.check_output(["git","rev-parse","HEAD"]).decode().strip(), }, indent=2)) EOF
500 rollouts per suite with a multi-billion parameter VLA in the loop is hours of GPU time per suite, not minutes, and that is before any fine-tuning. Reproducing all four suites for one model is a weekend, not an afternoon.
Being direct about the limits first: this platform does not run LIBERO, SimplerEnv or Meta-World, and it cannot re-verify a vendor's simulated score for you. Nothing here replaces the work in the other tab. What it does is remove the two steps that make benchmark numbers hard to use in practice, namely finding the source for a claim, and getting from a claim to a policy running on your own hardware.
- Arena collects 85 VLA models with 332 benchmark results, and every single value links back to the paper or model card it came from. It is a citation index, not an independent re-evaluation, and that distinction is the point: it lets you get to the primary source in one click instead of ten minutes of searching.
- Policies lists the five trainable models with the numbers that actually decide a deployment: parameters, GPU tier, per-step latency and minimum episode count.
- Training takes a dataset and a model and rents a spot GPU sized to the model, so an experiment costs about 4 to 12 USD on the A100 and H100 tier and about 1 to 3 USD on the 24 GB tier.
- The dataset directory and the desktop client cover the other half: recording your own episodes in LeRobot format so you can measure on your own task instead of someone else's.
| Policy | Params | Step latency | GPU tier | Minimum episodes |
|---|---|---|---|---|
| GR00T N1.7 | about 3 B, about 40 M trained during fine-tuning | 152 ms | A100 80 GB or H100 80 GB | 50 |
| GR00T N1.5 | about 3 B | 165 ms | A100 80 GB or H100 80 GB | 50 |
| Pi0.5 | about 3 B | 485 ms | A100 80 GB or H100 80 GB | 50 |
| SmolVLA | about 450 M | 245 ms | RTX 4090 or any 24 GB card | 30 |
| ACT | about 80 M | 20 ms | RTX 4090 or any 24 GB card | 50 |
GR00T's fine-tuning entry point, the tyro CLI in gr00t/experiment/launch_finetune.py, exposes no seed argument, so GR00T runs on this platform are not bit-for-bit reproducible. lerobot's trainers default to seed 1000. If you are comparing two of your own runs, note which trainer you used before you attribute a difference to a hyperparameter.
Checking a benchmark claim in ten minutes
- 1Pin the suite and the trial count
Find the exact suite name and how many rollouts per task produced the figure. If the source does not say, treat the number as an anecdote rather than a measurement.
- 2Find out which dataset version it was trained on
Search the repository for the string that gives it away. A hit on no_noops means the regenerated 256 pixel data, not the original release.
bashgit clone --depth 1 https://github.com/NVIDIA/Isaac-GR00T grep -rn "no_noops\|modified_libero\|libero_spatial" Isaac-GR00T/examples | head - 3Find the episode budget
The step cap is usually a hard-coded ladder in the evaluation script rather than a documented flag.
bashgrep -n "max_steps\|max-episode-steps\|num_trials_per_task\|replan_steps" \ experiments/robot/libero/run_libero_eval.py examples/libero/main.py - 4Put a confidence interval on it
Clopper-Pearson takes four lines. Do this before you claim one model beats another by two points.
pythonfrom scipy.stats import beta def clopper_pearson(k, n, alpha=0.05): lo = beta.ppf(alpha / 2, k, n - k + 1) if k > 0 else 0.0 hi = beta.ppf(1 - alpha / 2, k + 1, n - k) if k < n else 1.0 return lo, hi for k, n in [(63, 70), (927, 1030), (195, 200), (424, 500)]: lo, hi = clopper_pearson(k, n) print(f"{k}/{n} = {k/n:6.1%} 95% CI [{lo:.1%}, {hi:.1%}]") - 5Ask whether the embodiment resembles yours
A Panda score transfers to your SO-100 as a rough prior on model family, nothing more. If the model has no matching embodiment tag for your arm at all, the benchmark number is not the constraint you will hit first.

It is the boring one: 20 to 50 rollouts of your own task, on your own arm, with the scene reset the same way every time, scored by a rule you wrote down before you started. Log the seed, the checkpoint step and the confidence interval. That protocol beats any published simulated score as a predictor of your Tuesday. The run your first policy walkthrough sets up the loop, and policy only works in one setup covers the first thing it usually reveals.
Where robot evaluation is heading
The field knows this. RoboArena (Atreya, Pertsch and colleagues, 22 June 2025, revised 29 November 2025) skips standardised task sets entirely: evaluators at seven academic institutions run double-blind pairwise comparisons of policies on their own DROID setups and on tasks of their own choosing, and the preferences are aggregated into a ranking. The reported scale is over 600 pairwise real-robot evaluation episodes across seven generalist policies. It is a different bet from LIBERO: give up on controlling the environment, and buy back validity by evaluating in many uncontrolled ones.
Until something like that becomes standard, treat LIBERO and SimplerEnv as what they are. They are useful screens for excluding a model family, they are reproducible in a way real hardware is not, and they are close to saturated at the top. They are not a forecast of your success rate. That number you have to measure yourself, on your table, with the episodes you recorded, and with enough rollouts that the interval is narrower than the difference you care about.
85 models, 332 benchmark results, every value sourced
The arena collects the published LIBERO, SimplerEnv and real-robot numbers for 85 vision-language-action models, with each figure linked back to the paper or model card it came from. Sort it, compare two models side by side, and click straight through to the primary source.
Open the arenaWhich benchmark should I look at when picking a VLA for a real arm?▾
Look at the real-robot numbers first if the vendor published any, then at SimplerEnv, then at LIBERO. SimplerEnv was explicitly designed so that its ranking correlates with real evaluations, reaching Pearson r 0.924 with the Visual Matching setup against real Google Robot results, whereas LIBERO makes no such claim. In practice the decision is usually made by inference latency and minimum dataset size rather than by any benchmark score, which is why the policy comparison page leads with those.
Why do two papers report different LIBERO numbers for the same model?▾
Most often because they trained on different data under the same name. The OpenVLA regeneration renders at 256x256 instead of 128x128, removes no-op actions, removes failed demonstrations and rotates the images 180 degrees. Beyond that, rollouts per suite differ (500 in the OpenVLA and openpi harnesses, 200 in the published Isaac-GR00T table), the per-suite step cap differs, and the number of open-loop action steps executed per inference differs.
Is LIBERO saturated?▾
On three of the four suites, close to it. OpenVLA fine-tuned reported a 76.5 percent four-suite average in 2024; OpenVLA-OFT documents 97.1 percent, openpi documents 96.85 percent for Pi0.5 at 30k steps, and the Isaac-GR00T example reports per-suite figures averaging about 97 percent. Differences of one or two points at that level are inside the binomial noise of 200 to 500 rollouts. LIBERO-Long, at 92 to 94 percent, still has some separating power.
Can I run LIBERO or SimplerEnv on AY-Robots?▾
No. This platform trains policies on your own recorded LeRobot datasets and runs them on real SO-100 class hardware; it does not host the simulated benchmark suites. The arena collects published benchmark results from 85 models with links to their sources, but it reports what vendors published rather than re-running the evaluations.
How many rollouts do I need for my own evaluation?▾
It depends on the difference you want to detect. With an exact Clopper-Pearson interval, an observed 90 percent over 70 rollouts spans 80.5 to 95.9 percent, while 1030 rollouts narrows it to 88.0 to 91.8 percent. If you want to tell a 90 percent policy from an 85 percent policy, tens of trials will not do it. If you only want to tell a working policy from a broken one, 20 will.
What is MMRV and why not just use correlation?▾
MMRV is Mean Maximum Rank Violation, introduced in the SimplerEnv paper. Pearson correlation measures linear agreement, so it can be penalised by a perfectly ordered but nonlinear relationship, and it can be dragged around by noise when two policies perform almost identically in the real world. MMRV instead measures whether the simulated evaluation gets the ordering wrong, weighted by how large the real-world gap was that it inverted. Both are reported together in the paper.
Sources
- LIBERO: Benchmarking Knowledge Transfer for Lifelong Robot Learning
- Lifelong-Robot-Learning/LIBERO repository
- Evaluating Real-World Robot Manipulation Policies in Simulation (SIMPLER)
- Meta-World: A Benchmark and Evaluation for Multi-Task and Meta Reinforcement Learning
- Meta-World+: An Improved, Standardized, RL Benchmark
- Farama-Foundation/Metaworld repository
- OpenVLA: An Open-Source Vision-Language-Action Model
- regenerate_libero_dataset.py, the LIBERO no-op filtering script
- OpenVLA-OFT LIBERO documentation
- openpi LIBERO example and Pi0.5 results
- Isaac-GR00T LIBERO fine-tuning and evaluation example
- Isaac-GR00T SimplerEnv results for GR00T N1.6 and N1.7
- How to Evaluate General-Purpose Robot Policies for Real-World Deployment (NVIDIA, 11 July 2026)
- Is Your Imitation Learning Policy Better than Mine? Policy Comparison with Near-Optimal Stopping
- RoboArena: Distributed Real-World Evaluation of Generalist Robot Policies
Sources
- LIBERO: Benchmarking Knowledge Transfer for Lifelong Robot Learning
- Lifelong-Robot-Learning/LIBERO repository
- Evaluating Real-World Robot Manipulation Policies in Simulation (SIMPLER)
- Meta-World: A Benchmark and Evaluation for Multi-Task and Meta Reinforcement Learning
- Meta-World+: An Improved, Standardized, RL Benchmark
- Farama-Foundation/Metaworld repository
- OpenVLA: An Open-Source Vision-Language-Action Model
- regenerate_libero_dataset.py, the LIBERO no-op filtering script
- OpenVLA-OFT LIBERO documentation
- openpi LIBERO example and Pi0.5 results
- Isaac-GR00T LIBERO fine-tuning and evaluation example
- Isaac-GR00T SimplerEnv results for GR00T N1.6 and N1.7
- How to Evaluate General-Purpose Robot Policies for Real-World Deployment (NVIDIA, 11 July 2026)
- Is Your Imitation Learning Policy Better than Mine? Policy Comparison with Near-Optimal Stopping
- RoboArena: Distributed Real-World Evaluation of Generalist Robot Policies
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started