IKEA three-task, 46-dim state β€” best at pick table leg without arm velocity

GR00T N1.7 fine-tuned on carroll511/IKEA_table_assembly β€” a Unitree G1 with Dex1 grippers assembling a children's table from a fixed standing position.

g1_dex1_ikea_relarm_3view_aug_b64_v2 / checkpoint-20000.

Why this checkpoint

Of every model trained here without arm joint velocities, this one has the lowest wrist error on pick table leg over the window deployment actually executes:

model state tasks pick EE 1-8 (mm)
this one 46 3 8.99
..._alltask_s @30000 46 5 9.20
..._alltask_u @30000 46 5 9.21
..._alltask_m16 @26000 46 5 9.33

All four are scored on the same 180 windows, so the numbers line up. The three-task model wins because it is not paying for the two tasks the five-task models also carry: adding turn the tabletop square and flip table costs the original tasks about 12% on insert, and pick pays a smaller share of the same bill.

A 46-dim model is 15-20% behind its 60-dim counterpart. Arm joint velocity has replicated five times now; if the deployment can supply left_arm_vel/right_arm_vel, use a 60-dim model instead. This one exists for the case where it cannot.

What it does and does not do

Three instructions only:

  1. pick table leg
  2. insert table leg to table base
  3. rotate leg to tighten

No turn the tabletop square, no flip table. Feeding it either string is undefined β€” it was never trained on them.

Setup

init nvidia/GR00T-N1.7-3B (backbone frozen: tune_llm=False, tune_visual=False)
modality config examples/unitree_g1_dex1_ikea/g1_dex1_ikea_relarm_3view_aug_config.py
state 46 β€” legs(12), waist(3), left_arm(7), right_arm(7), left_gripper, right_gripper, base_gravity(3), left_eef(6), right_eef(6)
action 16 β€” left_arm(7, RELATIVE), right_arm(7, RELATIVE), left_gripper, right_gripper (ABSOLUTE)
horizon 40 @ 30 Hz
cameras cam_left_high, cam_left_wrist, cam_right_wrist
training effective batch 64, 20,000 steps (cosine, warmup 5%), 2x A100 DDP

Open-loop accuracy

Held-out _v2_val split, stride 10, 4 denoising steps, fixed per-window seed.

task n arm MAE 1-8 (deg) wrist error 1-8 (mm) gripper MAE
insert table leg to table base 182 1.374 13.43 0.1685
pick table leg 180 1.226 8.99 0.2075
rotate leg to tighten 335 1.602 12.40 0.2768
all 697 1.445 11.78 0.2306

Read the 1-8 step figures: async deployment executes about 8 steps after latency compensation, so late chunk steps never run. eval_loss does not track action quality on this task β€” it rises while open-loop accuracy improves, so checkpoints are selected by this scan and never by the loss.

Scored on the v2 val split. Not comparable to v1-era numbers β€” the split differs, so the absolute values differ (v1 baseline EE8 10.66 mm against v2's 11.86 mm for the same recipe). Compare only within this split.

Caveats

  • Open-loop only; closed-loop behaviour on hardware unverified for this checkpoint.
  • Arms are RELATIVE, grippers ABSOLUTE; get_action() returns unnormalized absolute values.
  • The waist is not commanded; recordings are from a fixed stance (waist pitch bimodal at ~2.6/10.4 deg β€” set the robot near 10.5 deg, the majority mode).
  • Trained on 178 episodes / 79,205 frames. A later recording roughly doubles the insert data; models trained on that are separate.
Downloads last month
10
Safetensors
Model size
3B params
Tensor type
F32
Β·
Video Preview
loading

Model tree for URL-RFM/gr00t-n1.7-g1-dex1-ikea-3task-46d-30hz-h40

Finetuned
(296)
this model