robocurve

Real-World Evaluation on Five Custom Tasks for Kaedim

September 2026

pi0.5, MolmoAct2 and GPT-6-Astra on I2RT YAM bimanual arms. 20 trials per policy per task, for a total of 300 trials, graded by the operator on per-task rubrics.

020406080100Move latte cuppi0.536MolmoAct259GPT-6-Astra66Clear tablepi0.568MolmoAct265GPT-6-Astra79Bottles in binspi0.550MolmoAct248GPT-6-Astra68Stack bowlspi0.558MolmoAct260GPT-6-Astra97Stack blockspi0.520MolmoAct212GPT-6-Astra92mean rubric score, % of maximum

Faint marks: individual trials (n = 20). Bold marks: the mean, with a 95% bootstrap interval. Circles pi0.5, diamonds MolmoAct2, squares GPT-6-Astra. Maximum score by task: latte cup 10, clear table 70, bottles 20, bowls 50, blocks 30.

Results

TaskPolicyMean scoreSuccess95% WilsonPartialFailRig
Move latte cuppi0.53.6 / 102 / 203–30%2 / 2016 / 20rig-6
Move latte cupMolmoAct25.9 / 106 / 2015–52%1 / 2013 / 20rig-1
Move latte cupGPT-6-Astra6.7 / 106 / 2015–52%1 / 2013 / 20rig-6
Clear tablepi0.547.8 / 705 / 2011–47%14 / 201 / 20rig-2
Clear tableMolmoAct245.4 / 705 / 2011–47%12 / 203 / 20rig-2
Clear tableGPT-6-Astra55.1 / 705 / 2011–47%14 / 201 / 20rig-2
Bottles in binspi0.510.1 / 208 / 2022–61%6 / 206 / 20rig-1
Bottles in binsMolmoAct29.5 / 200 / 200–16%11 / 209 / 20rig-1
Bottles in binsGPT-6-Astra13.6 / 2011 / 2034–74%8 / 201 / 20rig-1
Stack bowlspi0.529.2 / 505 / 2011–47%8 / 207 / 20rig-6
Stack bowlsMolmoAct229.8 / 503 / 205–36%10 / 207 / 20rig-6
Stack bowlsGPT-6-Astra48.5 / 5018 / 2070–97%1 / 201 / 20rig-4
Stack blockspi0.56.0 / 300 / 200–16%1 / 2019 / 20rig-1
Stack blocksMolmoAct23.5 / 300 / 200–16%0 / 2020 / 20rig-2
Stack blocksGPT-6-Astra27.5 / 3015 / 2053–89%0 / 205 / 20rig-6

Verdict is the operator's overall call on the run; the interval is a 95% Wilson interval on the success rate. Per-trial scores in the all-runs tables and the results sheet.

Tasks and rubrics

Move latte cup · max score 10

move the steel latte art cup onto the cutting board

OutcomeScore
Latte cup on cutting board, upright10
Latte cup on cutting board, not upright8
Latte cup gripped / moved5
Anything else0

Step limit 3,600 for the VLA policies (120 s at 30 Hz); 900 steps and 40 LLM calls for GPT-6-Astra (90 s at 10 Hz).

Top-camera view of the move latte cup setup at 72 cm
pi0.5 · 72 cm
Top-camera view of the move latte cup setup at 88 cm
MolmoAct2 · 88 cm
Top-camera view of the move latte cup setup at 224×224
GPT-6-Astra · 88 cm · 224×224

Clear table · max score 70

put all items on the table inside the blue bin

ItemMovedLiftedIn box
Rubik's cube51015
Baseball51015
Purple plate101720
Red mug5810
Grapes5810

Sum over items. Zero for any item moved out of the box before the run ends.

Step limit 12,800 for the VLA policies (426 s at 30 Hz); 3,200 steps and 140 LLM calls for GPT-6-Astra (320 s at 10 Hz).

Top-camera view of the clear table setup at 72 cm
pi0.5 · 72 cm
Top-camera view of the clear table setup at 88 cm
MolmoAct2 · 88 cm
Top-camera view of the clear table setup at 224×224
GPT-6-Astra · 88 cm · 224×224

Bottles in bins · max score 20

put 2 glass bottles in the blue bin

OutcomeScore
Bottle in bin, upright10
Bottle in bin, not upright8
Bottle picked up5
Bottle never picked up0

Per bottle, best two bottles counted.

Step limit 6,400 for the VLA policies (213 s at 30 Hz); 1,600 steps and 70 LLM calls for GPT-6-Astra (160 s at 10 Hz).

Top-camera view of the bottles in bins setup at 72 cm
pi0.5 · 72 cm
Top-camera view of the bottles in bins setup at 88 cm
MolmoAct2 · 88 cm
Top-camera view of the bottles in bins setup at 224×224
GPT-6-Astra · 88 cm · 224×224

Stack bowls · max score 50

stack the bowls on the sides on top of the center bowl

OutcomeScore
A bowl lifted (once, per bowl)5
2 bowls overlapping20
2 bowls stacked30
3rd bowl overlapping stack of 240
3 bowls stacked, upright50

Score is how far the robot got by the end of the run.

Step limit 3,600 for the VLA policies (120 s at 30 Hz); 900 steps and 40 LLM calls for GPT-6-Astra (90 s at 10 Hz).

Top-camera view of the stack bowls setup at 72 cm
pi0.5 · 72 cm
Top-camera view of the stack bowls setup at 88 cm
MolmoAct2 · 88 cm
Top-camera view of the stack bowls setup at 224×224
GPT-6-Astra · 88 cm · 224×224

Stack blocks · max score 30

stack the red block on the blue block

OutcomeScore
Arm moves toward red block, attempts pick5
Red block gripped and lifted10
Red block positioned over blue block20
Red block resting on blue block at end30
Blue block resting on red block at end15
None of the above0

Score is how far the robot got by the end of the run.

Step limit 3,600 for the VLA policies (120 s at 30 Hz); 900 steps and 40 LLM calls for GPT-6-Astra (90 s at 10 Hz).

Top-camera view of the stack blocks setup at 72 cm
pi0.5 · 72 cm
Top-camera view of the stack blocks setup at 88 cm
MolmoAct2 · 88 cm
Top-camera view of the stack blocks setup at 224×224
GPT-6-Astra · 88 cm · 224×224

Technical specifications

ArmsI2RT YAM bimanual (two 6-DoF arms, parallel grippers)
CamerasOne fixed top camera (Intel RealSense D435) and one wrist camera per arm (D405), captured at 640×480 and resized to the policy's input size. Top camera at 72 cm for pi0.5, 88 cm for MolmoAct2 and GPT-6-Astra.
VLA policiespi0.5: openpi checkpoint robocurve/pi05-yam-molmoact2, served by serve_pi05_yam.py, 10 denoising steps. MolmoAct2: allenai/MolmoAct2-BimanualYAM, served by examples/yam/host_server_yam.py. Both over the /act HTTP interface, action horizon 30, 30 Hz control, 640×360 images. Step limits are per task, listed with each rubric.
LLM policyGPT-6-Astra: openai/gpt-6-astra through OpenRouter on the agent policy, medium effort, responses wire, 224×224 images with a two-frame horizon. One move per LLM call: the harness plays each move out over many 10 Hz control steps, with arm speed capped at 25%. Call and step budgets are per task, listed with each rubric.
Trials20 per policy per task, objects reset by hand between trials
Harnessinspect-robots 0.58.0
Scoringoperator, from the run and its video, per the rubrics above

The LLM agent runs at a different control rate and image size from the VLA policies, and some tasks used a different rig.

All runs

Each trial folder holds the three camera videos, the top-camera snapshot and the joint trajectory.

Move latte cup

PolicyRunScoreVerdictTrial folder
pi0.515 / 10failopen
pi0.520 / 10failopen
pi0.530 / 10failopen
pi0.545 / 10failopen
pi0.5510 / 10successopen
pi0.565 / 10partialopen
pi0.5710 / 10successopen
pi0.580 / 10failopen
pi0.590 / 10failopen
pi0.5105 / 10failopen
pi0.5110 / 10failopen
pi0.5125 / 10failopen
pi0.5138 / 10partialopen
pi0.5140 / 10failopen
pi0.5150 / 10failopen
pi0.5165 / 10failopen
pi0.5170 / 10failopen
pi0.5185 / 10failopen
pi0.5195 / 10failopen
pi0.5205 / 10failopen
MolmoAct2110 / 10successopen
MolmoAct225 / 10failopen
MolmoAct230 / 10failopen
MolmoAct2410 / 10successopen
MolmoAct255 / 10failopen
MolmoAct265 / 10failopen
MolmoAct275 / 10failopen
MolmoAct2810 / 10successopen
MolmoAct295 / 10failopen
MolmoAct21010 / 10successopen
MolmoAct2115 / 10failopen
MolmoAct2125 / 10failopen
MolmoAct21310 / 10successopen
MolmoAct2140 / 10failopen
MolmoAct21510 / 10successopen
MolmoAct2168 / 10partialopen
MolmoAct2175 / 10failopen
MolmoAct2185 / 10failopen
MolmoAct2195 / 10failopen
MolmoAct2200 / 10failopen
GPT-6-Astra110 / 10successopen
GPT-6-Astra25 / 10failopen
GPT-6-Astra35 / 10failopen
GPT-6-Astra45 / 10failopen
GPT-6-Astra55 / 10failopen
GPT-6-Astra65 / 10failopen
GPT-6-Astra75 / 10failopen
GPT-6-Astra810 / 10successopen
GPT-6-Astra95 / 10failopen
GPT-6-Astra1010 / 10successopen
GPT-6-Astra1110 / 10successopen
GPT-6-Astra125 / 10failopen
GPT-6-Astra138 / 10partialopen
GPT-6-Astra145 / 10failopen
GPT-6-Astra155 / 10failopen
GPT-6-Astra165 / 10failopen
GPT-6-Astra1710 / 10successopen
GPT-6-Astra1810 / 10successopen
GPT-6-Astra195 / 10failopen
GPT-6-Astra205 / 10failopen

Clear table

PolicyRunRubik'sMugGrapesPlateBaseballScoreVerdictTrial folder
pi0.5115101001550 / 70partialopen
pi0.52151010201570 / 70successopen
pi0.530101020040 / 70partialopen
pi0.5415101020055 / 70partialopen
pi0.55151010201570 / 70successopen
pi0.5601080018 / 70partialopen
pi0.57151010201570 / 70successopen
pi0.5801010201555 / 70partialopen
pi0.59150100025 / 70partialopen
pi0.51051010201560 / 70partialopen
pi0.51115101020055 / 70partialopen
pi0.51215101020055 / 70partialopen
pi0.513151010201570 / 70successopen
pi0.514151010201570 / 70successopen
pi0.5151001001535 / 70partialopen
pi0.5160010201545 / 70partialopen
pi0.5171510100035 / 70partialopen
pi0.5180101020040 / 70partialopen
pi0.519008008 / 70failopen
pi0.5200101001030 / 70partialopen
MolmoAct21151010201570 / 70successopen
MolmoAct220101020040 / 70partialopen
MolmoAct23000000 / 70failopen
MolmoAct24151010201570 / 70successopen
MolmoAct25000000 / 70failopen
MolmoAct26151010201570 / 70successopen
MolmoAct2715810171565 / 70partialopen
MolmoAct2815010201560 / 70partialopen
MolmoAct290101020040 / 70partialopen
MolmoAct21015101020055 / 70partialopen
MolmoAct211151010171567 / 70partialopen
MolmoAct212100100020 / 70partialopen
MolmoAct213001001525 / 70partialopen
MolmoAct21451010201560 / 70partialopen
MolmoAct215151010201570 / 70successopen
MolmoAct21615101020055 / 70partialopen
MolmoAct217150100530 / 70partialopen
MolmoAct218151010201570 / 70successopen
MolmoAct219500005 / 70failopen
MolmoAct2201501001035 / 70partialopen
GPT-6-Astra1151010201570 / 70successopen
GPT-6-Astra2151010101560 / 70partialopen
GPT-6-Astra315510201565 / 70partialopen
GPT-6-Astra4155501540 / 70partialopen
GPT-6-Astra515500525 / 70partialopen
GPT-6-Astra6151010201570 / 70successopen
GPT-6-Astra7151010201570 / 70successopen
GPT-6-Astra815510101555 / 70partialopen
GPT-6-Astra915108201568 / 70partialopen
GPT-6-Astra1015510201565 / 70partialopen
GPT-6-Astra11151010201570 / 70successopen
GPT-6-Astra121551010040 / 70partialopen
GPT-6-Astra1351010201560 / 70partialopen
GPT-6-Astra1415510201565 / 70partialopen
GPT-6-Astra155500515 / 70failopen
GPT-6-Astra16151010101560 / 70partialopen
GPT-6-Astra1701010201555 / 70partialopen
GPT-6-Astra18151010101560 / 70partialopen
GPT-6-Astra19151010201570 / 70successopen
GPT-6-Astra20010100020 / 70partialopen

Bottles in bins

PolicyRunB1B2ScoreVerdictTrial folder
pi0.518816 / 20successopen
pi0.52808 / 20partialopen
pi0.53808 / 20partialopen
pi0.54808 / 20partialopen
pi0.55808 / 20partialopen
pi0.568816 / 20successopen
pi0.57000 / 20failopen
pi0.588816 / 20successopen
pi0.598816 / 20successopen
pi0.5108816 / 20successopen
pi0.511505 / 20failopen
pi0.512505 / 20failopen
pi0.513808 / 20partialopen
pi0.5148816 / 20successopen
pi0.515505 / 20failopen
pi0.516808 / 20partialopen
pi0.5175510 / 20failopen
pi0.518000 / 20failopen
pi0.5198816 / 20successopen
pi0.5208816 / 20successopen
MolmoAct215510 / 20failopen
MolmoAct22505 / 20failopen
MolmoAct238816 / 20partialopen
MolmoAct24000 / 20failopen
MolmoAct258513 / 20partialopen
MolmoAct268816 / 20partialopen
MolmoAct27505 / 20failopen
MolmoAct288513 / 20partialopen
MolmoAct298513 / 20partialopen
MolmoAct2108513 / 20partialopen
MolmoAct211808 / 20partialopen
MolmoAct2128816 / 20partialopen
MolmoAct213505 / 20failopen
MolmoAct2148513 / 20partialopen
MolmoAct215505 / 20failopen
MolmoAct2168513 / 20partialopen
MolmoAct217000 / 20failopen
MolmoAct2188816 / 20partialopen
MolmoAct219505 / 20failopen
MolmoAct220505 / 20failopen
GPT-6-Astra110818 / 20successopen
GPT-6-Astra28816 / 20successopen
GPT-6-Astra38816 / 20successopen
GPT-6-Astra410818 / 20successopen
GPT-6-Astra510818 / 20successopen
GPT-6-Astra68816 / 20successopen
GPT-6-Astra7808 / 20partialopen
GPT-6-Astra8101020 / 20successopen
GPT-6-Astra9808 / 20partialopen
GPT-6-Astra10808 / 20partialopen
GPT-6-Astra118816 / 20successopen
GPT-6-Astra12101020 / 20successopen
GPT-6-Astra13808 / 20partialopen
GPT-6-Astra14101020 / 20successopen
GPT-6-Astra15808 / 20partialopen
GPT-6-Astra16000 / 20failopen
GPT-6-Astra1710818 / 20successopen
GPT-6-Astra1810515 / 20partialopen
GPT-6-Astra198513 / 20partialopen
GPT-6-Astra20808 / 20partialopen

Stack bowls

PolicyRunScoreVerdictTrial folder
pi0.5130 / 50partialopen
pi0.5220 / 50failopen
pi0.5330 / 50partialopen
pi0.5420 / 50failopen
pi0.5530 / 50partialopen
pi0.5630 / 50partialopen
pi0.5750 / 50successopen
pi0.5830 / 50partialopen
pi0.5950 / 50successopen
pi0.51030 / 50partialopen
pi0.51130 / 50partialopen
pi0.5125 / 50failopen
pi0.51350 / 50successopen
pi0.51450 / 50successopen
pi0.51510 / 50failopen
pi0.51650 / 50successopen
pi0.51720 / 50failopen
pi0.5185 / 50failopen
pi0.51915 / 50failopen
pi0.52030 / 50partialopen
MolmoAct2120 / 50failopen
MolmoAct225 / 50failopen
MolmoAct2330 / 50partialopen
MolmoAct2440 / 50partialopen
MolmoAct2520 / 50failopen
MolmoAct2630 / 50partialopen
MolmoAct2740 / 50partialopen
MolmoAct2830 / 50partialopen
MolmoAct2950 / 50successopen
MolmoAct21040 / 50partialopen
MolmoAct21140 / 50partialopen
MolmoAct21240 / 50partialopen
MolmoAct21310 / 50failopen
MolmoAct21450 / 50successopen
MolmoAct21510 / 50failopen
MolmoAct21630 / 50partialopen
MolmoAct21750 / 50successopen
MolmoAct21820 / 50failopen
MolmoAct21930 / 50partialopen
MolmoAct22010 / 50failopen
GPT-6-Astra150 / 50successopen
GPT-6-Astra250 / 50successopen
GPT-6-Astra350 / 50successopen
GPT-6-Astra450 / 50successopen
GPT-6-Astra550 / 50successopen
GPT-6-Astra650 / 50successopen
GPT-6-Astra740 / 50partialopen
GPT-6-Astra830 / 50failopen
GPT-6-Astra950 / 50successopen
GPT-6-Astra1050 / 50successopen
GPT-6-Astra1150 / 50successopen
GPT-6-Astra1250 / 50successopen
GPT-6-Astra1350 / 50successopen
GPT-6-Astra1450 / 50successopen
GPT-6-Astra1550 / 50successopen
GPT-6-Astra1650 / 50successopen
GPT-6-Astra1750 / 50successopen
GPT-6-Astra1850 / 50successopen
GPT-6-Astra1950 / 50successopen
GPT-6-Astra2050 / 50successopen

Stack blocks

PolicyRunScoreVerdictTrial folder
pi0.515 / 30failopen
pi0.5210 / 30failopen
pi0.530 / 30failopen
pi0.545 / 30failopen
pi0.555 / 30failopen
pi0.565 / 30failopen
pi0.5710 / 30failopen
pi0.585 / 30failopen
pi0.595 / 30failopen
pi0.5100 / 30failopen
pi0.51110 / 30failopen
pi0.5120 / 30failopen
pi0.5130 / 30failopen
pi0.51420 / 30partialopen
pi0.51510 / 30failopen
pi0.5165 / 30failopen
pi0.5175 / 30failopen
pi0.5185 / 30failopen
pi0.51910 / 30failopen
pi0.5205 / 30failopen
MolmoAct210 / 30failopen
MolmoAct220 / 30failopen
MolmoAct2310 / 30failopen
MolmoAct240 / 30failopen
MolmoAct250 / 30failopen
MolmoAct260 / 30failopen
MolmoAct270 / 30failopen
MolmoAct280 / 30failopen
MolmoAct2910 / 30failopen
MolmoAct2100 / 30failopen
MolmoAct21110 / 30failopen
MolmoAct2120 / 30failopen
MolmoAct21310 / 30failopen
MolmoAct21410 / 30failopen
MolmoAct21510 / 30failopen
MolmoAct2160 / 30failopen
MolmoAct21710 / 30failopen
MolmoAct2180 / 30failopen
MolmoAct2190 / 30failopen
MolmoAct2200 / 30failopen
GPT-6-Astra130 / 30successopen
GPT-6-Astra230 / 30successopen
GPT-6-Astra330 / 30successopen
GPT-6-Astra430 / 30successopen
GPT-6-Astra520 / 30failopen
GPT-6-Astra630 / 30successopen
GPT-6-Astra720 / 30failopen
GPT-6-Astra830 / 30successopen
GPT-6-Astra930 / 30successopen
GPT-6-Astra1020 / 30failopen
GPT-6-Astra1130 / 30successopen
GPT-6-Astra1230 / 30successopen
GPT-6-Astra1330 / 30successopen
GPT-6-Astra1430 / 30successopen
GPT-6-Astra1520 / 30failopen
GPT-6-Astra1630 / 30successopen
GPT-6-Astra1730 / 30successopen
GPT-6-Astra1830 / 30successopen
GPT-6-Astra1920 / 30failopen
GPT-6-Astra2030 / 30successopen

Appendix

Results sheetReal-World Evaluation results — every trial with run id, scores, verdicts and notes
Footage and trajectorieskaedim_tasks — one subfolder per trial, each with the left / top / right camera MP4s, the top-camera snapshot and joint trajectories (actions.jsonl). GPT-6-Astra trials also carry the model's thinking transcript (transcript.md, transcript.json). The MP4s are assembled from the frames captured at each control step, so they show robot motion only: for Astra, which spends most of a trial waiting on the model, the clip is far shorter than the wall-clock run.
Camera calibrationkaedim_tasks / camera calibration — rs-enumerate-devices -c output per rig

Camera tilt angle

Side-on view of the top camera on its bracket at 72 cm
72 cm (pi0.5)
Side-on view of the top camera on its bracket at 88 cm
88 cm (MolmoAct2, GPT-6-Astra)

Side-on view of the top camera on its bracket: 72 cm for pi0.5, 88 cm for MolmoAct2 and GPT-6-Astra.