One policy.
Different robots.

I recorded a two-armed handover 82 times by hand, trained a model on it, then ran that same model on a robot with different arms, grippers and reach. No retraining.

82
Demonstrations
3
Robots, one model
0
Retraining steps
4 / 6
Stages transferred
reBot: the robot I recorded on.
ViperX 300s: same model, nothing retrained.

The idea

Don't record motor angles, they only mean something on one machine. Record where the hands were on the table: position, orientation, grip. Twenty numbers that describe the job, not the robot. Any arm that can reach solves its own joint angles.

Result

StagereBotViperX 300s
ReachYesYes
GripYesYes
Carry acrossYesYes
Hands meetYesYes
Second hand closesYesNot yet
Place on trayYesNot yet

What actually broke

Almost none of it was the model. Each one was a hidden disagreement between the two robots.

Gripper faced backwards
Derived its facing from the fingertip position instead of measuring the jaw. Every orientation mirrored by 180°.
Closed wasn't the smaller number
One jaw's joint grows as it closes, the other shrinks. Assuming one sign pinned a hand shut permanently.
Wrist camera 15 mm too close
Same mount, different grip point. Pushed the object out of frame exactly when the second hand needed to see it.
More grip force did nothing
20, 40, 80 and 150 N all gave 7.6 N. The force ceiling was never the limit, the gain was. Raising it: 36.6 N.
Object twisted out, not slid
Gripped 24 mm below the rim of a 115 mm cylinder, so it rotates out. Torsional friction mattered, sliding friction didn't.
One decision per handover
The model plans 2.5 s ahead. The handover window is 2.4 s. And the horizon silently caps at the trained value, so every experiment raising it was a no-op.

Next: ZERO v2

SmolVLA backbone, with the pieces that worked in PRANA v2.

Cholesky-correlated noise
Flow matching from independent per-step noise gives trajectories that are right on average and jittery in practice. Build a temporal covariance over the chunk, take its Cholesky factor, and sample noise through it so nearby timesteps move together. Every sample is a smooth trajectory instead of smooth-on-average. This is what fixed multimodal demos in PRANA v2.
Rolling chunk overlap
Last 10 actions of a chunk seed the first 10 of the next, so plans are conditioned on each other rather than stitched at a seam. Directly targets the handover, where the seam currently lands mid-transfer.
Depth input
Everything that broke was metric: standoff, clearance, where the object sits in the jaw. RGB makes that ambiguous across robots, depth doesn't. The cameras already publish it.

Stack

SmolVLA from LeRobot · MuJoCo · ROS 2 Jazzy ·.