Two-Arm Table Setter

Two simulated SO-101 robot arms set a dinner table from a plain-language command. They see with a camera, understand with a vision-language model, hand items to each other, and fix their own mistakes — all on an ordinary Intel laptop with OpenVINO. Measured end to end on an Intel Core Ultra 7 155H, across its CPU, Arc iGPU and AI Boost NPU. Built for the AI Infra Summit Hackathon, Intel online track.

10 random tables (harder settings: positions, sizes, colours), the command read by Qwen3-VL each time, a result card per table checked against simulator truth; then a recovery demo and the OpenVINO benchmark. Played at 2× speed.

30/30random tables set correctly
29/30harder tables: ±4 cm starts, sizes ±5–10%, colours
95%trained ACT policy, mug placed within 1.5 cm on unseen tables
2.9×faster policy with OpenVINO on the Core Ultra CPU, task success unchanged
0.90 mswhole policy on the AI Boost NPU (FP32); 10/10 mugs placed at FP16

How it works

1

Observe

An overhead colour + depth camera finds every object — 0.5 mm average error.

2

Understand

Qwen3-VL-4B (INT4, OpenVINO) reads the command and the picture: "the red thing" is the mug.

3

Plan

Which arm, a hand-off for cutlery, a set-down swap for round items, what goes first.

4

Act

Two SO-101 arms; a LeRobot ACT policy, trained on a laptop CPU, handles the mug.

5

Look again

After every item, anything knocked out of place is put back first.

Why it matters

Service robots in homes, hospitals, hotels and restaurants need instructions anyone can give, two-handed handling, and the ability to check their own work. This runs on an ordinary Intel laptop, and its skills are taught from demonstrations the robot records itself — no hand-collected data.

Intel optimisation, measured on a Core Ultra

Intel Core Ultra 7 155H — CPU, Arc iGPU, AI Boost NPU — Windows 11, OpenVINO 2026.3.1. Raw logs: bench/core_ultra/. Full table: bench/RESULTS.md

ACT policyCPUArc iGPUNPUMug placed (10 tables)
PyTorch FP322.07 ms––9/10
OpenVINO FP320.83 ms1.49 ms0.90 ms9/10
OpenVINO FP160.81 ms1.52 ms1.06 ms10/10 on iGPU and NPU
OpenVINO INT8 (NNCF)0.72 ms1.42 ms1.10 ms9/10
OpenVINO INT8 weights0.74 ms1.93 ms1.04 ms10/10
Qwen3-VL-4B INT4CPUArc iGPUNPUCorrect
320 px picture3.0 s1.1 swon't compile5/5
480 px picture (used)3.6 s1.3 swon't compile5/5
960 px picture10.9 s2.8 swon't compile5/5

An honest negative result: OpenVINO 2026.3's NPU compiler aborts on this model's vision tower, so the language model detects an NPU request and falls back to the iGPU. The ACT policy runs on the NPU without trouble.

Run it yourself

Every scene is seeded; every number here comes from one command. python brain/run.py --seed 3 "set the table"

Honest limits: the NPU runs the policy but cannot compile the vision-language model (OpenVINO 2026.3); most skills are scripted, one is a trained policy; the drawer and pouring from the example task are not included. MIT licence.