Junction 2026 · Aaltonomous Humanoid

A humanoid that listens, then sorts.

Väiski is a Unitree G1 with two Dex3 hands. Type an instruction in plain English and it sorts cubes, cylinders and prisms into the right bins on its own. It runs fully offline at 30 Hz, and if it isn't sure, it doesn't guess.

Head camera view of the G1 robot hands above coloured objects and three bins
put the blue ones in the middle bin
head RGB-D · 640×4803 bins detected5 objects · 2 blue → center30 Hz · safety ✓
01 — Results

From the baseline to a reliable sorter.

Every change sat behind a flag that was off by default. We A/B-tested each one on 20–30 seeded episodes in parallel cloud Isaac Sim before adopting it.

75/82

objects sorted in the latest sim A/B (baseline: 52)

0

wrong-bin placements and 0 safety clips

96.8%

instruction resolver, blind held-out expected value

150pts

open-vocabulary test with the brain on (14 without it)

02 — How it works

Five layers. Deterministic where it counts.

One Docker image serves the policy over a websocket. Inputs: the head RGB-D camera, two wrist cameras, joint states and the instruction text. Outputs: 28 joint targets, 30 times a second.

L1

Language

A grammar-based resolver maps the instruction to {colour / shape → bin} in 0.75 ms. When it's unsure, it abstains instead of guessing.

pure python
L2

Brain

A local Qwen3-VL-8B picks exactly one tool call (pick_place, skip or find) under a GBNF grammar. It can only decide where the resolver has no opinion.

0.15–0.3 s · offline
L3

Perception

HSV colour segmentation, depth back-projected into the pelvis frame, cube/cylinder/prism classification and bin detection, with online camera-pitch self-calibration each episode.

classical CV
L4

Planner

Chooses the next object and a grasp posture by shape: approach, close, lift, carry, release. After a miss it retries with a different grasp.

shape-aware
L5

Control + Safety

IK with joint-limit clamps and velocity limits. Every plan gets a safety dry-run first, and the command loop never waits for the brain.

30 Hz loop
03 — What the robot can do

Understands what you mean. Knows what it doesn't know.

🗣️

Plain-English instructions

“Red to the left, the rest to the right.” “Put cylinders in the centre.” It follows colour, shape, British spellings, paraphrases and leftover-bin phrasing.

🎯

Open-vocabulary grounding

The brain's find() tool locates objects from spatial, ordinal and relational phrases. On real robot frames: 96.5 % hit rate with 0 false positives.

✋

Shape-specific grasps

Pinch grasps for cubes, a dedicated posture for cylinders and yaw-aligned grasps for prisms, plus a guard for inserting through the shape-hole lid.

🧩

Novel objects

A ball, marker, box or toy pan gets a generic grasp whose width limit comes from the URDF. A pan is picked by its handle, never the disc. Unknown objects become obstacles.

04 — Try the resolver

Instruction in, plan out.

Head camera
head_camera
Right wrist camera
right_wrist_camera
05 — Principles

Built for the real robot, not just the leaderboard.

+2 / −1 / 0

Abstain over guess

A correct sort scores +2, a wrong bin −1 and an object left on the table 0. So it acts only when p > ⅓.

flag = off

Byte-identical by default

Every feature sits behind a flag. With the flags off, behaviour is identical to the version we already validated.

no internet

Fully offline

Finals hardware is an x86 PC with an RTX 5090 over ethernet. Everything runs locally, the 8B VLM included.