Advanced Metal Research
Lab note   Robot policy testing 17 October 2026  
AlphaNIST replication

One bit of reward, our robots.

98.0–99.7% on a 20-part board, in simulation.

We re-implemented NVIDIA's AlphaNIST recipe, one RL policy that learns every assembly task on a NIST task board from a binary success signal, on a board small enough to iterate on in an afternoon. Then we checked which of the paper's findings hold up and put the whole thing on Rosie arms with our SendCutSend gripper.

Rosie 1000SCS gripper · learned policy · real time
Robots Rosie 600 · 1000 · 1400 Real kinematics and joint limits
Gripper SendCutSend compact, 0–60 mm 20 mm spacer / 1430 adapter
Training Binary reward, no demos ~$26 of GPU time
Rosie 1400 + 1430 adapter
99.7%

All 20 parts, every kind of start.

Rosie 1000 + 20 mm spacer
98.4%

94% from loose parts on the table.

Dense reward shaping
0.03

Collapsed, as the paper warns.

Shared vs specialists
0.97 vs 0.59

RJ45: one policy for all parts wins.

01 The paperarXiv:2610.13354   NVIDIA · UW

The paper in one paragraph.

AlphaNIST trains one PPO policy across all 20 assembly pairs of NIST Assembly Task Board #1 (pegs, gears, nuts, connectors) with no demonstrations, no task stages and no per-task tuning. The reward is a single bit: the part is within 1 mm of fully assembled, or it isn't.

It reaches 98.2% training success at 64K parallel environments, beats twenty separately trained specialists that used 39× the GPU-hours, and discovers regrasps, pivots and one-sided nut tapping that nobody scripted.

Which states exist?

Reset bank

Cached starts for every part: loose on the table, in hand, near the socket, half assembled. No stage label is given to the policy.

Which states get practised?

Beta sampling

Starts the policy solves about half the time are drawn most; nothing is ever starved.

qi ∝ ε + √(pi(1 − pi))

What counts?

Binary reward

1 once the assembly error drops below 1 mm, then the episode ends. A small control cost, nothing that measures progress.

The authors' code isn't out yet, and their setup is Isaac Lab on racks of NVIDIA GPUs. So we rebuilt the recipe from the paper and ran it on something smaller.

02 The environment20 parts   batched PyTorch

A board we can afford.

NIST-lite: the same 20 part families, simplified contact, fast enough to iterate on a laptop.

NIST-lite has 4/8/12/16 mm rods and square pegs, three gears, M4–M16 nuts, USB-A, D-sub, RJ45, a keyed waterproof connector and a BNC twist-lock. Contact is kinematic and rule-based, but the rules keep what makes the real board hard.

The policy sees point clouds of the part and its socket plus its own joint state, never a task id. Before training anything we wrote a privileged scripted controller to prove every part is solvable inside the 6-second episode from every kind of start (100%), and checked that a random policy only succeeds from half-assembled starts: exactly the foothold the reset bank is meant to give.

Six panels: a single policy assembling an M4 nut, D-sub, BNC, gear, 4 mm peg and waterproof connector from loose starts
One network, six different parts, all from loose starts. Follow-camera on the gripper; parts turn green once engaged. The M4 nut is threaded in strokes; the D-sub has to find its keyed orientation first.
03 AblationsModal L40S   16K environments   1,000 iterations

The paper's ablations, on rented GPUs.

Same PPO schedule as the paper (32 steps × 5 epochs × 4 minibatches), evaluated on one frozen set of starts with stochastic actions, again as in the paper.

VariantFinal successFrom loose partsSteps to 50%
Beta sampling + binary reward (AlphaNIST), 16K envs0.9430.9042M
Uniform sampling + binary reward, 16K envs0.9320.8752M
Beta sampling + dense shaping (Eq. 7)0.0290.01peaks at 0.50, collapses
Uniform sampling + dense shaping0.0420.00never
Beta sampling + binary reward, 4K envs0.9940.9813M
Eval success vs PPO iteration for the four reward/sampling variants and the 4K run, plus loose starts and D-sub
Dense shaping falls apart; the binary reward doesn't. The 4K run's late jump (right panel) is the moment it discovers how to seat the D-sub, about 650 iterations in.

Shared policy vs specialists.

Same budget per run: one policy trained on all twenty parts against five policies that each train on one. The specialists for the M4 nut, RJ45 and BNC never solve a single loose-part start; the shared policy solves them almost every time. What the hard parts are missing is grasping, carrying and aligning, and the shared policy learns those on the easy parts.

Bar chart: specialist vs shared policy success for BNC, M4 nut, 4 mm peg, RJ45, 4 mm rod
Positive transfer. Specialists 0.59–0.73 on nut / RJ45 / BNC with 0% from loose parts; the shared policy 0.97–1.00.

The two findings that reproduced cleanly are the least intuitive: shaping hurts, and more variety makes the hard tasks easier.

What didn't reproduce: beta sampling's edge over uniform. It gets to 50% about 20% sooner, then uniform catches up. The paper's gap shows up at 256K environments and 25K iterations; we stopped at 16K × 1K. With ε = 0.05, starts nobody has solved yet get ten times less practice than frontier starts, which slows the hardest family early on.

04 Emergent behaviourCounted over successful episodes

What the policy figured out.

Nothing in the reward, the observation or the reset bank describes any of these manoeuvres.

  • Threading in strokes3.6 grasps per M4 nut from a loose start: turn until the wrist runs out, let go, wind back, regrasp. Coarser nuts need fewer (2.0 for M16).
  • Regrasp to align1.3–1.7 grasps per D-sub, the same behaviour as the paper's Fig. 8b.
  • Grasping for laterFrom loose starts, every peg and rod is picked up exactly once, high enough to be seated in one go.
  • Pushing homeWhen it starts holding a peg too low, it lets go and pushes the part down with closed fingers.
Filmstrip: M4 nut picked from the table, carried to the bolt, threaded with a release and regrasp mid-way
M4 nut, loose start. Step 72: released mid-thread (0.76 of 1.5 turns). Step 101: regrasped, fully threaded.
05 On our robotsRosie 600 · 1000 · 1400   SendCutSend gripper

Does it survive our hardware?

The arms from rosie-sim-kits, our gripper's CAD and dimensions, and every move through the arm.

The SendCutSend compact gripper: 0–60 mm stroke, 105 mm/s per jaw, 25 mm V-fingers, on the 20 mm ISO spacer for the 600/1000 or the 22.4 mm 1430 adapter for the 1400.

The policy still commands the gripper in board coordinates, but each step the command is tracked with the tool held vertical by damped least squares inside every joint's speed and position limits, and only what the arm achieved reaches the contact rules. Reach, joint speeds and J6's ±180° range are the robot's own; J6 is now the wrist limit that forces the nut regrasps.

The trained policy on a Rosie 1000, real time. 8 mm peg, M12 nut, USB-A and large gear, each from a loose part on the table. The kit's MuJoCo model, the gripper's own CAD meshes on the flange, and a board with all 20 sockets placed where the arm has reach and wrist margin.
Checks before trusting it. Forward kinematics match each kit's published reference poses to 0.0005 mm, the MuJoCo render agrees with the training kinematics exactly, and the scripted controller still solves every part on all three arms with the joints tracking the gripper to 0.01 mm.
Arm + mountSuccessFrom loose partsSteps to 50% / 80%Arm tracking error (eval)
Rosie 600 + 20 mm spacer0.9800.9324M / 45Mmax 0.10 mm
Rosie 1000 + 20 mm spacer0.9840.9426M / 50Mmax 0.19 mm
Rosie 1400 + 22.4 mm 1430 adapter0.9970.9921M / 39Mmax 0.06 mm

4,096 environments × 1,500 iterations each, about half an hour and a dollar per arm. All three learn at least as fast as the free gripper did.

Rosie 1000: M4 nut, D-sub, gear, 8 mm peg, all from loose parts.
Rosie 600: M8 nut, RJ45, BNC.
Rosie 1400: M8 nut, RJ45, BNC.
06 FidelityPaper vs this replication

How faithful is this?

Close on the learning algorithm, loose on the world it learns in. That distinction matters more than any number on this page.

PiecePaperHere
Reset bankCached sim states, all 20 pairs, no stage labelSame families, generated from the rulesSame
Beta samplingε + √(p(1−p)), last L outcomesSame rule; ε and L were our choice (unpublished)Same
Reward1 mm binary + cost on action, joint speed, torque1 mm binary (+ twist for nuts/BNC) + action cost onlyClose
PolicySeparate SimBa actor/critic, point clouds incl. robotSame shape, smaller, no robot cloudClose
PPO schedule32 steps × 5 epochs × 4 minibatches, 25 HzSameSame
PhysicsIsaac Lab contact on real board CADKinematic rules: no forces, friction, tilt, jammingDifferent
Robot & actionsFranka, relative joint targets, impedance controlRosie kinematics, Cartesian deltas, tool kept verticalDifferent
Scale64K–256K envs, 25K iterations, 410 GPU-h4K–16K envs, 1K–1.5K iterations, one seedDifferent
Multi-part episodesUp to 10 pairs, reward only when all doneNot attemptedMissing

The recipe works on a kinematic stand-in driven through our arms' real kinematics, limits and gripper geometry. It is not yet evidence that a Rosie can assemble the physical board.

That needs contact physics with the real part and gripper meshes. The algorithm code would carry over unchanged.

07 LessonsWhat bit us

What bit us.

  1. Write the scripted solver first. It found an off-by-equality grasp bug (fingers closing in 10 mm steps land exactly on a 10 mm part) and showed some connector yaws need a put-down-and-regrasp, before a single GPU-minute was spent.
  2. Checkpoint everything. All nine GPU containers in a sweep were interrupted at once at iteration ~750 and restarted from scratch. Training now saves and resumes every 50 iterations.
  3. One seed hides a lot. The 4K-vs-16K comparison was decided by when one run happened to discover the D-sub, not by scale.
  4. IK near 180° is a trap. Small-angle orientation errors vanish there, and J6 pinned itself at a limit for 2–4% of targets. Re-seeding J6 from the required yaw and solving twice fixed it.
  5. Log the consistency you assume. A per-step "where the env thinks the gripper is vs where the joints put it" metric showed early exploration briefly reaching 8 mm on the 600, even though trained policies stay under 0.2 mm.
08 Cost and next~$26 of L40S time

Cost and what's next.

~$22 for the ablation sweep (a third of it the interrupted attempt) and ~$4 for the three Rosie arms. The CPU runs and all the debugging ran on a laptop.

  • PhysicsReal contact with the part and gripper meshes (MuJoCo on GPU or Isaac Lab), so grasps can slip and nuts can cross-thread.
  • Seeds and scaleThree seeds per variant and a sweep of ε before claiming anything about beta vs uniform.
  • Multi-part boardsSeveral parts per episode, reward only when all are seated, which is where the paper's planning-like behaviour appears.
  • Joint-space actionsRelative joint targets and tool tilt, closer to how the paper drives its Franka.