SO-101 Bench: Accessible Spatial Manipulation
Organizations: Independent
Abstract
Low-cost arms such as the SO-101 have become the most common entry point to robot learning, yet no released policy performs spatially constrained, language-conditioned tasks on them out of the box, and existing SO-101 benchmarks run only on physical hardware with simple tasks and few held-out objects. We introduce SO-101 Bench, a simulated benchmark for language-conditioned spatial manipulation built on an Isaac Lab digital twin of a real SO-101 setup. It has four tasks scored as five families, 138 objects in seen, unseen-instance and unseen-class splits, 916 evaluation episodes with subsets for held-out appearances, rotate-to-fit planning and occlusion memory, and 3,629 simulated demonstrations on which every learned policy is fine-tuned under an equal compute budget. The twin ranks policies as the real robot does: five policies trained without real data, four VLAs and an LLM agent, keep their exact ranking when the same weights run on the physical arm in an unseen environment with unseen objects (Spearman rho = 1.00, MMRV = 0.000), although simulation overestimates success. Across nine VLAs and world-action models, the best learned policies score near 61%, with spatial placement, unseen object classes and rotate-to-fit planning remaining open. An LLM agent that writes code and hands grasping to a learned policy scores 83.2%, and an ablation shows that this lead comes from the choice of harness and the choice of language model.
Figures & tables
Appendix figures & tables27 assets
Supplementary material from the paper’s appendix.
Appendix
| Sim | Real | (pp) [95% CI] | Agree | MCC | ||
| 1-object bin | 368 | 73% (268/368) | 86% (316/368) | 81% | ||
| 4-object bin | 56 | 18% (10/56) | 46% (26/56) | 64% | ||
| Next to | 178 | 25% (45/178) | 48% (85/178) | 49% | ||
| Between | 187 | 21% (40/187) | 37% (69/187) | 60% | ||
| Move | 117 | 39% (46/117) | 48% (56/117) | 57% | ||
| Seen | 397 | 59% (236/397) | 71% (281/397) | 67% |
| Real | Sim | ||||||||
| Sem. | Grasp | Place | Sem. | Grasp | Place | TVD | |||
| All | 256 | 21% | 24% | 55% | 286 | 24% | 35% | 41% | 0.13 |
| Seen | 97 | 9% | 22% | 69% | 106 | 15% | 23% | 62% | 0.07 |
| Unseen obj. / seen class | 102 | 24% | 20% | 57% | 125 | 21% | 41% | 38% | 0.21 |
| Unseen class | 57 | 37% | 37% | 26% | 55 | 49% | 44% | 7% | 0.19 |
| Episodes where both domains failed: 144; same type in 47%, Cohen’s | |||||||||
| Task | Seen | Unseen object, seen class | Unseen class |
| 1-object bin | 90% (144/160) / 97% (155/160) | 82% (92/112) / 96% (107/112) | 33% (32/96) / 56% (54/96) |
| 4-object bin | 39% (9/23) / 65% (15/23) | 5% (1/21) / 52% (11/21) | 0% (0/12) / 0% (0/12) |
| Next to | 34% (26/77) / 57% (44/77) | 21% (14/68) / 46% (31/68) | 15% (5/33) / 30% (10/33) |
| Between | 34% (29/85) / 45% (38/85) | 11% (8/76) / 38% (29/76) | 12% (3/26) / 8% (2/26) |
| Move | 54% (28/52) / 56% (29/52) | 41% (16/39) / 44% (17/39) | 8% (2/26) / 38% (10/26) |
| Policy | Median (s) | P95 (s) | |
| GPT-6.1 Sol + PyRUA-Lean + Galaxea 0.5 | 45 | 196.6 | 391.8 |
| Galaxea 0.5 | 45 | 37.5 | 116.5 |
| GR00T N1.7 | 45 | 37.9 | 95.8 |
| 45 | 59.1 | 153.3 | |
| MolmoAct2-SO101 | 45 | 56.0 | 138.0 |
| Policy | Simulation | Real robot | (pp) | Agreement |
| GPT-6.1 Sol (PyRUA) + Galaxea 0.5 | 84% (38/45) | 64% (29/45) | 76% (34/45) | |
| Galaxea 0.5 | 67% (30/45) | 53% (24/45) | 64% (29/45) | |
| GR00T N1.7 | 56% (25/45) | 24% (11/45) | 56% (25/45) | |
| 49% (22/45) | 18% (8/45) | 64% (29/45) | ||
| MolmoAct2-SO101 | 24% (11/45) | 16% (7/45) | 91% (41/45) | |
| Pearson [95% CI] | Spearman | MMRV [95% CI] |
| GPT-6.1 Sol | Galaxea 0.5 | GR00T N1.7 | MolmoAct2-SO101 | ||
| 1-object bin | 9 / 7 | 8 / 7 | 9 / 3 | 7 / 3 | 5 / 5 |
| 4-object bin | 7 / 4 | 7 / 5 | 3 / 0 | 5 / 2 | 0 / 0 |
| Next to | 8 / 8 | 4 / 2 | 6 / 2 | 3 / 1 | 4 / 1 |
| Between | 7 / 5 | 5 / 6 | 3 / 2 | 1 / 1 | 0 / 0 |
| Move | 7 / 5 | 6 / 4 | 4 / 4 | 6 / 1 | 2 / 1 |
| Seen | 15 / 12 | 14 / 11 | 10 / 5 | 12 / 5 | 5 / 3 |
| Policy | GPU | Steps | Queries | Median (ms) | P95 (ms) |
| GR00T N1.7 | RTX 3090 | – / 16 | NR | NR | NR |
| RTX A5000 | 30 / 15 | 44,334 | 337.0 | 376.9 | |
| Galaxea 0.5 | RTX A5000 | 27 / 15 | 33,422 | 791.8 | 933.8 |
| MolmoAct2-SO101 | RTX A5000 | 30 / 30 | 26,046 | 696.8 | 741.3 |
| MolmoAct2 base | RTX A5000 | 30 / 30 | 25,661 | 775.3 | 818.6 |
| FLUX 3 Action SO-101 LoRA | A40 | 42 / 32 | 25,080 | 2894.0 | 3129.4 |
| Policy | Type | Score [95% CI] | 1-bin | 4-bin | Next to | Between | Move | S | USC | UUC | 4-bin prog. | |
| =202 | =68 | =216 | =216 | =214 | 316 | 285 | 315 | |||||
| 1 | GPT-6.1 Sol (PyRUA) + Galaxea 0.5 | LLM agent + VLA | 83.2 [80.7, 85.7] | 95 | 87 | 85 | 81 | 69 | 85 | 82 | 80 | 94 |
| 2 | DeepSeek V4.1 Flash-1017 (PyRUA) + Galaxea 0.5 | LLM agent + VLA | 66.8 [63.7, 69.9] | 87 | 71 | 62 | 56 | 60 | 72 | 66 | 60 | 81 |
| 3 | InternW0- | WAM | 61.4 [58.5, 64.1] | 93 | 79 | 42 | 35 | 59 | 76 | 56 | 42 | 91 |
| 4 | Galaxea 0.5 | VLA | 60.8 [57.9, 63.6] | 90 | 81 | 44 | 34 | 56 | 76 | 55 | 40 | 90 |
| 5 | GR00T N1.7 | VLA | 45.8 [42.6, 48.8] | 75 | 35 | 40 | 37 | 43 | 66 | 45 | 30 | 52 |
| 1-object bin | 4-object bin | Next to | Between | Move | |||||||||||
| Policy | S | USC | UUC | S | USC | UUC | S | USC | UUC | S | USC | UUC | S | USC | UUC |
| GPT-6.1 Sol (PyRUA) + Galaxea 0.5 | 99% (66/67) | 92% (59/64) | 93% (66/71) | 96% (23/24) | 77% (17/22) | 86% (19/22) | 85% (64/75) | 91% (61/67) | 80% (59/74) | 84% (63/75) | 82% (55/67) | 77% (57/74) | 72% (54/75) | 65% (42/65) | 69% (51/74) |
| DeepSeek V4.1 Flash-1017 (PyRUA) + Galaxea 0.5 | 97% (65/67) | 88% (56/64) | 76% (54/71) | 88% (21/24) | 77% (17/22) | 45% (10/22) | 67% (50/75) | 64% (43/67) | 54% (40/74) | 60% (45/75) | 49% (33/67) | 57% (42/74) | 61% (46/75) | 60% (39/65) | 59% (44/74) |
| InternW0- | 99% (66/67) | 98% (63/64) | 82% (58/71) | 92% (22/24) | 86% (19/22) | 59% (13/22) | 72% (54/75) | 34% (23/67) | 18% (13/74) | 56% (42/75) | 28% (19/67) | 19% (14/74) | 76% (57/75) | 55% (36/65) | 46% (34/74) |
| Galaxea 0.5 | 97% (65/67) | 92% (59/64) | 82% (58/71) | 92% (22/24) | 86% (19/22) | 64% (14/22) | 71% (53/75) | 40% (27/67) | 19% (14/74) | 63% (47/75) | 27% (18/67) | 12% (9/74) | 72% (54/75) | 54% (35/65) | 42% (31/74) |
| GR00T N1.7 | 94% (63/67) | 77% (49/64) | 55% (39/71) | 67% (16/24) | 23% (5/22) | 14% (3/22) | 61% (46/75) | 43% (29/67) | 16% (12/74) | 56% (42/75) | 25% (17/67) | 27% (20/74) | 57% (43/75) | 42% (27/65) | 30% (22/74) |
| Subsets | Appearance profile | |||||
| Policy | ROBUST | PLAN | MEM | Canonical | Varied | Held-out |
| GPT-6.1 Sol (PyRUA) + Galaxea 0.5 | 82% (146/178) | 75% (36/48) | 80% (41/51) | 82% (307/374) | 83% (303/364) | 82% (146/178) |
| DeepSeek V4.1 Flash-1017 (PyRUA) + Galaxea 0.5 | 62% (111/178) | 35% (17/48) | 55% (28/51) | 66% (248/374) | 68% (246/364) | 62% (111/178) |
| InternW0- | 53% (94/178) | 12% (6/48) | 47% (24/51) | 59% (219/374) | 60% (220/364) | 53% (94/178) |
| Galaxea 0.5 | 57% (102/178) | 15% (7/48) | 31% (16/51) | 57% (214/374) | 57% (209/364) | 57% (102/178) |
| GR00T N1.7 | 48% (85/178) | 17% (8/48) | 43% (22/51) | 49% (184/374) | 45% (164/364) | 48% (85/178) |
| Policy | Checkpoint | Hardware |
| GPT-6.1 Sol (PyRUA) + Galaxea 0.5 | PyRUA-Lean v9.6 + G0.5 step25600 (@957d33b) | RunPod A40, 2 isolated agent workers per pod |
| DeepSeek V4.1 Flash-1017 (PyRUA) + Galaxea 0.5 | PyRUA-Lean v9.6 + G0.5 step25600 (@957d33b) | RunPod A40, 2 isolated agent workers per pod |
| InternW0- | 5hadytru/so101_bench_InternW0-Delta@8316ccc | RunPod A40, 1 worker |
| Galaxea 0.5 | 5hadytru/so101_bench_G0.5_full_fine_tune@957d33b (step25600) | RunPod RTX A5000 secure, 1 worker |
| GR00T N1.7 | 5hadytru/so101_bench_GR00T_N1.7-3B@572a932 (step16000) | workstation RTX 3090, 1 worker |
| ImageWAM | 5hadytru/so101_bench_ImageWAM-FLUX.2-4B_full_fine_tune@0ba49ae | RunPod RTX A5000, 1 worker |
| LLM | Harness | All 60 | Easy 30 | Hard 30 | 1-bin | 4-bin | Next to | Between | Move |
| GPT-6.1 Sol | Direct tool calls | 35% (21/60) | 47% (14/30) | 23% (7/30) | 1/12 | 0/12 | 6/12 | 6/12 | 8/12 |
| PyRUA-Lean | 67% (40/60) | 73% (22/30) | 60% (18/30) | 8/12 | 5/12 | 9/12 | 10/12 | 8/12 | |
| PyRUA-Lean + Galaxea 0.5 | 85% (51/60) | 93% (28/30) | 77% (23/30) | 11/12 | 10/12 | 11/12 | 12/12 | 7/12 | |
| Gemini 4 Argon | Direct tool calls † | 19% (4/21) | 19% (4/21) | – | 0/5 | 0/5 | 0/4 | 0/3 | 4/4 |
| PyRUA-Lean | 65% (39/60) | 70% (21/30) | 60% (18/30) | 8/12 | 2/12 | 9/12 | 12/12 | 8/12 | |
| PyRUA-Lean + Galaxea 0.5 | 77% (46/60) | 87% (26/30) | 67% (20/30) | 9/12 | 9/12 | 9/12 | 10/12 | 9/12 |
| LLM | Effort | Runtime | All 60 | Easy | Hard | 1-bin | 4-bin | Next to | Between | Move | $/episode |
| GPT-6.1 Sol | high | Codex | 85% (51/60) | 93% (28/30) | 77% (23/30) | 11/12 | 10/12 | 11/12 | 12/12 | 7/12 | 0.245 |
| Gemini 4 Argon | medium | OpenAI-compatible chat (Vertex) | 77% (46/60) | 87% (26/30) | 67% (20/30) | 9/12 | 9/12 | 9/12 | 10/12 | 9/12 | 1.237 |
| DeepSeek V4.1 Flash-1017 | high | Codex | 65% (39/60) | 83% (25/30) | 47% (14/30) | 12/12 | 9/12 | 6/12 | 4/12 | 8/12 | 0.023 |
| MiMo v2.6 Pro | high | Codex via Responses Chat bridge | 55% (33/60) | 73% (22/30) | 37% (11/30) | 7/12 | 8/12 | 7/12 | 7/12 | 4/12 | 0.044 |
| Galaxea 0.5 alone | – | – | 53% (32/60) | 93% (28/30) | 13% (4/30) | 9/12 | 7/12 | 5/12 | 5/12 | 6/12 | 0 |
Robotic Manipulation
Robotic manipulation studies how robots perceive, plan, and control physical interactions to grasp, move, assemble, and use objects.
See all 1,685 papers