← reports index

中文版 →

XLeRobot · Robomates · 2026-09-11

Not a faster drink machine.
A bartender that lifts its head to look at you.

The market has solved making the drink. We are solving something else: making the drink worth watching — and in this version the arm's motion is learned, not recorded.

6 / 6right-arm cup grasp, 2026-09-11
first round after re-recording, training cup
15 / 20left-arm cup grasp, 2026-09-09
best configuration across 28 live runs
0products that put an expressive body
and awareness of the customer together
Sources: 05-training/trials/trials-20260911-152009.json · STATUS.md (generated by gen_status.py) · the third figure is broken down vendor by vendor on slide 2. All numbers are live hardware runs, reproducible from the repository.
01 · The gap

Their AI is in recommendation, not in motion

Makr Shakr 240 drinks/hour, Cecilia.ai $45,000, Yanu in a sealed pod: optimised for throughput and consistency, and they hit it. The installation is built around the machine — glasses in a jig, bottles on a rail, motion along a fixed path.

Motion layer · pre-programmed

“The recipe database contains pre-programmed ratios, sequences, and pour volumes.”

AI layer · recommendation

“machine learning tracks popular combinations, personalizes suggestions, and adjusts pours based on historical data.”

Robots that talk exist; arms that move exist; nothing puts both in one body, and every arm replays a recording. Move the glass 5 cm and the same trajectory misses.

Quotations: sedonatec.com · vendor pages makrshakr.com/toni, cecilia.ai, yanu.ai. "Not marketed" does not prove a capability is absent, only that the vendor does not sell it.
02 · The product

One service is nine stages; gaze appears twice

01 · GAZE ON THE CUSTOMER
Greet: look up, say hello
Waits for a face before it speaks. The arm is still, so this stage demos first.
02
Take the order, confirm it
The only gate to arm motion. A parsed order is a proposal; the arm moves when the person says yes.
03
Right arm: pick cup (SmolVLA)
Head drops to cup-grasp-v0. Torque is kept on exit — it is holding a can.
04
Left arm: pick cup (SmolVLA)
The right arm holds its pose on torque while the left one works.
05
Right arm → place, no release
Scripted. place_pose.right; the gripper does not move.
06
Left arm → place, no release
Scripted. place_pose.left, taught over 10 episodes.
07
Left arm → pour, hold the cup
Scripted, --from-grasp: it never opens the jaw.
08
Right arm → pour and tip
wrist_roll 3.2° → 76.7°. This is the pour.
09 · GAZE BACK ON THE CUSTOMER
Left arm hands it over
Aimed at the measured face bearing, not a fixed pick-up point.
One bus

Only one stage runs at a time; every other button is disabled while it does. The policy process and the scripted stages both take both serial buses.

Torque relay

Between stages the arms are holding something, so every stage keeps torque on exit. Drop torque and the drink goes on the floor.

No "run all" button

Deliberately. A person looks between every stage — that is the point of one manual button per stage. Every live stage is recorded from the head camera.

Stage 03 · pick — the arm reaches, closes on the cup and lifts it. Cut from one uncut 79-second run, shown at 2× speed.
Stage 09 · hand over — it carries the cup out to where the customer is and holds it there until they take it. Same run, same take, 2×. Nobody touched the robot between the order and this frame.
DQ x sharpa robot store, Shanghai
Shanghai, seen by us on 2026-09-12. Left: the store front, "DQ · sharpa · 24h · booking entrance", people waiting outside. Middle: the booking guide at the door — scan, pick a slot, check the booking, redeem in store; "did not get a slot? next week opens Fri/Sat 10:00". Right: us in the store with the finished Blizzard, the robot behind us working the next order, the screen reading "task-planning engine started, entering the Blizzard routine — STEP 01/55".
Field note · Shanghai · 2026-09-12

A robot that makes one thing, booked out weeks ahead

A DQ store with a sharpa humanoid behind glass. It makes one product — the Blizzard. You cannot walk in for it: you book a slot in a mini-programme, and slots for the next week open on Friday and Saturday at 10:00. The place was packed while we were there.

One flavour, 55 scripted steps, no learned motion, no gaze — and it still draws a queue and pays for the floor it stands on. That is the commercial case for the 40 seconds, already proven by someone else. It is also the ceiling of that approach: the show is the same every time, and the machine never looks up. Ours looks at the customer, and its arm motion is learned rather than replayed.

Evidence level: our own photos and video on site, 2026-09-12 — the strip above is the raw material. Signage and screen text are transcribed from those frames. "Packed", "popular" and "profitable" are our impression on the day; no footfall or revenue figures were taken, and the operator publishes none.

A bar has never only sold liquid. People sit at a bar because there is a person, a performance, an exchange. Existing systems optimise speed for places with a queue; we optimise the 40 seconds you are watched — craft bars, events, showrooms.

The nine stages are brain/run_bimanual_sequence.py:STAGES, driven one button at a time from the 8796 sequence panel; stages 1–2 are the brain state machine (GREETING / CONFIRMING in state_machine.py), 3–4 are SmolVLA, 5–9 are scripted. Each stage has its own head-camera recording in replay-20260912/. The two clips above are from one uncut run, 2026-09-12. Joining all nine into one unbroken run is the week-3 promise on slide 11.
03 · The head

The head is the interface

The V14 head, animated: turning, nodding, eye expressions. One LED-ring eye; the wide window below it is the depth camera; round ear pods.
The same head in the other outfit. Hat and bow tie are swappable shells; every fixed part — camera, eye, ear pods, the column keep-out — keeps its numbers, so changing the look never moves the calibration. Printable STLs exist.

Two bartenders on the staff board — one body

Barley
Barley
Head bartender · the warm shift

Warm, quick and a little silly. One or two sentences, already reaching for the glass while talking, and the line while fetching ties their drink to them.

Teases the drink, never the customer. Never says a price.

Cyborg
Cyborg
Bartender on duty · the dry shift

Listens to the small talk — just will not follow you up into the clouds. When the customer turns wistful it pulls the conversation back down to the floor: "that is not a philosophical question."

Dry, practical, paying attention the whole time. The opposite temperature, the same body.

A bartender is a text file here. Swap the file and you have swapped the bartender; the head wears the outfit that goes with it. That is how one machine fits a craft bar and a trade-show stand without rebuilding anything.

Why a head at all

"Looking at the customer" needs a gaze that turns and a face that changes. Gaze is on the person while greeting and handing over, locked while making.

The lock is decided by data

Across 54 demonstrations the two head joints have std 0.0000 — the model has never seen a moving viewpoint. The depth camera rides on the head; move it and the calibration is gone.

Engineering constraints

Pan range 342–3754 is set by the depth-camera cable; the standard view cup-grasp-v0 = pan 2003 / tilt 2617, aimed and confirmed by image before every run.

02-hardware/robot-head/v13-frame-first (STL, print notes) · configs/head_presets.json · brain/check_head_pose.py · personas: 03-software/conversational_ai/roles/barley.md is written; the cyborg default is being rewritten — roles/robot.md still carries the older "automated unit" voice. The eye-socket backplate is missing in the current meshes; read STL-README before printing.
04 · Evidence

We fixed the data, not the code

The right-arm model scored 0/14 on 09-08. Diagnosis: cup-position coverage in the 40 demos was 16× unbalanced (16 episodes in the densest band, 1 in the sparsest); the model had learned tempo, not vision — closure timing correlated with cup position at only r = 0.16–0.26.

0 / 142026-09-08 · dataset 0826, 40 episodes
chunk auto · 60 s
73 ep33 re-recorded on 09-08 per the recording guide, merged
~11 per band, coverage CV 0.84 → 0.37
6 / 62026-09-11 · identical training recipe
chunk 1 · 60 s · 95% CI 54–100%
head-camera frames at gripper closure, right arm
Head-camera frames at the moment of closure, trials 1, 3, 5 and 6 of the 6/6 round on 2026-09-11 — the resolution the policy actually sees (424×240).
Autonomous grasps from the left-arm round of 2026-09-09, tiled 2×2 / 4×4 / 5×5 at 6× speed — the overlay in the clip reads "each tile = one real autonomous grasp". Best configuration that round: 15/20 across 28 live runs. This is left-arm material; the 6/6 above is the right arm.
train_config identical to the previous model in 145 fields; only the dataset changed. Sources: train-right-0826sep8-2026-09-10, recording-guide-2026-09-08, trials-20260911-152009.json. Two void trials (cup not placed; cup out of range) are not in the denominator.
05 · It is really looking

Not a replay: it changes its mind before knocking the cup over

Operator's live note · 2026-09-11, trial 5

"It was about to push the cup away, adjusted before it did, and grasped it. Very smart."

Trial 8

"At first it pushed the cup outward a little, then corrected immediately and lifted it."

Trial 5, the seconds before the grasp. Head camera, 2× speed, cropped to the gripper. The jaw arrives on the cup, nudges it, then backs off and comes in again on a different line.
Trial 8, the same moment. The cup starts outside the jaw, gets pushed outward — and the arm follows it rather than closing on air. Both clips are from the 6/6 round, uncut except for speed and crop.

That is what a closed loop looks like: miss → see → correct. A flawless run proves nothing; a correction proves the policy is reading the image.

Breadth, not one lucky run

49 live runs on record, across two arms. Left arm, 2026-09-09: 28 runs over four different objects, 15/20 at its best configuration. Right arm, 2026-09-11: 6/6 on the cup it was trained on — then, same checkpoint, no retraining, 3/8 and 1/5 on cups and positions it was never trained for, spread over eight bands from −40° to +14°.

Those three numbers stay apart instead of averaging into one flattering figure — the counting rule on slide 8 doing its job. And apart, they say the useful thing: solid on what it knows, degrading rather than vanishing on what it does not, and we can point at the edge. Anyone can show you a robot that works once.

One move on stage

Slide the cup 10 cm in front of the audience and let it find the cup again. The silent question all along is "is this a recording?" — this answers it, and costs nothing.

05-training/trials/cup-positions.json (per-trial cup position and operator notes) · 00-admin/DEMO-STRATEGY.md, first item of the "wow list".
06 · Choosing a cup

How a small model "chooses": put the choice in front of the model

The training set has one cup per frame and one sentence. With two cups on the table it reaches between them (three times on 09-11); adding "yellow" to the instruction perturbs the trajectory but not the target. SmolVLA has 450 M parameters on a 7.4 GB board; teaching it to select by word means re-recording and a night of training, with no precedent that it would learn.

mask-box before and after
Night frame, 2026-09-12. Top: two things the policy should not chase — a pen pot and a cup lying on its side — boxed. Bottom: both replaced by the median colour of a ring around the box, in the policy's input only. What the policy is handed has one cup in it.
What the night run found · 2026-09-12

The rule changed from "paint out the cup of colour X" to "keep one, paint out everything else". A second distractor on the table should not need a config change.

On a 25-frame evaluation set the colour thresholds we had measured in daylight on 09-11 detected 1 of 25. At night the table and the cups both fall to saturation 10–30 and colour stops being a separable feature at all. Rebuilt around the table region plus brightness relative to the table: 15 of 25.

The gripper cannot be excluded by colour either — the cream cup and the orange bracket share one hue band (H 8–30), so excluding orange kills the cup. It is excluded by position: both arms always enter from the bottom corners.

And the "empty table" plate we meant to paste over distractors turned out not to be empty — it had a green cup in it. Pasting it would have inserted a cup that is not there. Median fill instead: no plate, no shape, adapts to the light.

The trade

Selection stays out of the model. Everything on the table except the chosen cup is painted out of the head image and filled with the median colour around it; the policy sees the single-cup scene it was trained on.

Cost

3.3 ms per frame (424×240, CPU), 3% of the control period. Same checkpoint; a new instruction only changes the mask colour.

Why this is a strength

The small model's generalisation is spent on what it is good at — grasping. "Which cup" is a 3 ms classical-vision problem, not worth a night of GPU.

measured25 real head frames, day and night: the 09-11 colour rule detects 1/25, the rebuilt detector 15/25. Two new channels shipped — --mask-keep (keep one cup, paint out the rest) and --mask-box (paint out a rectangle). Runs in the pipeline with per-order switching, 3 ms/frame. Eight exploratory trials on the left-arm model went for the blue cup whichever cup was masked — that model carries its own bias and is not a valid testbed. not measuredselection accuracy — needs a preregistered 5 + 5 on the right-arm model (mask blue → grasp yellow, mask yellow → grasp blue) with the criterion "closure pan on the target side". The A/B on 2026-09-12 does not count: there was no target cup in the grasp area, so both rounds were held=0 by construction and the 2% safety-layer difference is single-trial noise. It needs a target and a distractor on the table, and someone on site to place them.

scripts/cup_mask.py · scripts/cup_mask_eval.py · run_policy_trials.py --mask-keep / --mask-box · maskeval-20260912/README.html (the 25-frame set, the three detector attempts and the A/B, written up the night of 2026-09-12) · cup-colour-mask-2026-09-11.html. Detection is 60%, not 100%: the misses are cups brighter than the table. At night classify() cannot read colour, so --mask-keep falls back to "keep the one nearest the horizontal centre", and picking a cup by colour is unreliable. The table region is calibrated for the cup-grasp-v0 head pose — a new venue means re-measuring it.
07 · Remote

Operated from 7,000 km away — a feature, not an apology

The team is in China, the robot in Finland. Every trial on 2026-09-11 — launch, judging, logging — was run remotely: the panel starts the job, the person on site places the cup and presses confirm, results are archived automatically.

world map
Helsinki
Helsinkithe robot is here
Hangzhou
Hangzhouteam
Taiwan
Taiwanteam

Three sites, one robot. The arm is in Helsinki; the people who launch the runs, judge them and write them up are 7,000 km away in Hangzhou and Taiwan. Nothing on this deck needed anyone to fly.

The loop

Teleoperation → demonstration recording → dataset → cloud training → autonomous execution → human takeover. Every link in it ran on 2026-09-11.

Three channels

VR headset teleop, leader–follower recording (8781), the 8770 panel for trials and control. Tailscale, travels with the robot.

What it means commercially

One remote team can watch several machines; on site you need one person to place cups and hold the e-stop.

robot_server.py (8770) · leader_follower_server.py · vr_teleop.py · 00-admin/ROBOMATES-DEMO-DAY-HANDOVER-2026-09-10.md.
08 · Method

The safety layer, and the rules for counting

Safety
  • Joint-level safety layer with a pitch-compensated floor: frame rejection 96.6% → 0.49%
  • Thermal guard: warn at 50 °C, stop at 60 °C, one servo read per tick
  • Software e-stop, exclusive bus ownership, every frame atomic
Counting
  • Every claim carries an evidence level: measured / not measured
  • Intervals, not point estimates (Clopper–Pearson)
  • k/n per configuration: model, dataset, gripper, chunk, duration, cup position — any difference is another group
  • Preregistration: criterion, count and void rule fixed before the run; anything else is exploratory

Why bother. Not modesty — this is what lets us say the interesting things and be believed. The three numbers on slide 5 are what the discipline produces: 6/6, 3/8, 1/5, kept apart rather than averaged into one figure that would flatter us and tell you nothing.

policy_safety.py · thermal_guard.py · ROBOTIC-WORKING-HANDBOOK.yaml (V-01, V-04) · STATUS.md.
09 · Hardware and cost

It runs on a palm-sized board

$660published bill of materials
for the whole XLeRobot (upstream README)
7.4 GBJetson Orin Nano, CPU and GPU shared
>3 GB free with the policy loaded; all inference local
two ordersof magnitude below the $30k–$100k+
commercial bartender robots

Two arms, a moving head, three cameras, a mobile base. The board cannot hold a 7-billion-parameter model — so we run the 450 M SmolVLA and hand problems like "which cup" to 3 ms of classical vision (slide 6). The constraint forces a smarter design, not a bigger model.

~/XLeRobot/README.md ($660) · free -m measured on the robot, 2026-09-11.
10 · Limits

Honest limits, each with its next step

Cannot do todayEvidenceNext step
Two cups on the table: it reaches between themthree times on 09-11, traces on filepreregistered 5+5 with the mask; or 50 episodes with colour instructions
The left-arm model grasps only the blue cup on the right, whatever it seesconsistent across four conditions plus 8 masked trials on 09-11run colour experiments on the right-arm model; record two-cup data for the left
The right arm half-recognises cups of other coloursblue 1/2, pink 0/1, green can 0/1: reaches the spot, does not closeas above, or the mask to restore the training-cup scene
Selecting a cup by languageA/B with "yellow": target unchangedas above
Pouring is scripted; no liquid on stagepour_cup.py, one hardware run 09-09a POUR state in the state machine; empty cups for the demo
A different table3 cm of table height voids the policyvenue-move procedure written: reproduce shoulder-to-table to ±1 cm
Left shoulder servo overheats50 °C+, 6–7° under-torquereplace, then full recalibration
cup-colour-mask-2026-09-11 · venue-move-2026-09-11 · NOTE-MODELS-RIGHT-ARM-POURING-2026-09-11.
11 · If you select us

Four weeks after selection, this is what we will have

A promise, not a wish list. Every line below carries the condition that decides whether it passed, and every result lands in the public report space with its date and its k/n — including the ones that fail. You will not have to take our word for any of it.

✓ Already done: greet → grasp → hand over in one continuous run, one process, nobody touching the robot, on uncut video.

  1. Week 1 · Technical
    Record the colour-instruction data

    50 episodes, half yellow and half blue, the two positions swapped, trained together with the single-cup set.Done when: the dataset is public and the coverage CV across the five cup-position bands is reported.

  2. Week 2 · Technical
    One preregistered round, whatever it says

    Criterion, trial count and void rule fixed before the run, then judged under the slide-8 rules.Done when: the k/n is published — 6/6 or 3/10, it goes on the same page.

  3. Week 3 · Product
    Drinks that actually have to be made

    Pouring moves inside the pipeline: a POUR state and a pour() effector. Today coke, fanta, sprite and water are four names for one physical skill; this ends that.Done when: at least two drinks of two or more ingredients, poured in order to a recipe, run end to end on video.

  4. Week 4 · Product
    Not once — every time

    Ten consecutive runs of the same configuration with no hand in the loop, and the hand-over direction taken from the measured face bearing rather than a fixed coordinate.Done when: the ten-run k/n is published under the same rules.

  5. Week 4 · Business
    In front of a real crowd

    The 10-step arrival procedure at a new venue, two hours from boxes to a run; one cocktail event or bar week agreed and attended; feedback collected on the night.Done when: the event happened, the feedback is written up and published whatever it says, and a named venue has stated in writing what would put the robot on their floor.

What we are not promising

Not a success rate. The counting rules on slide 8 do not move to flatter us: k/n per configuration, never pooled, void trials named and excluded, evidence level on every claim. If the colour-instruction round comes back 3/10, that is what the report will say, on the same page as the 6/6.

Priority order: demo reliability > legible technology > one clear customer story > visible effort. Everything is published as it happens at suyang99-xlerobot-build-reports.static.hf.space; the repository history is the audit trail.
12 · Close

Existing products treat the customer as someone who collects a drink.
We treat the customer as someone to interact with.

That difference decides every technical choice: why motion is learned rather than recorded, why gaze switches by stage, why cup selection sits in front of the model, why every number carries its source.

Barley, looking at you
Barley, looking at you. One eye, and it turns — that is the whole of the difference above.
XLeRobot · Robomates · 2026-09-11 · every number on this deck is reproducible from the repository. Code and data: github.com/ginagina19992023/Robotic_challenge · reports: suyang99-xlerobot-build-reports.static.hf.space