RyanL22/pi05-rby1-wujihand2-realsynth-rt2v6-15k
pi0.5 — RB-Y1 + Wujihand2, real teleop + synthetic (human-video) data, step 15k
LeRobot-native pi05 (v0.6.1) fine-tuned on real teleop v1 (209 ep, 30→20 fps) + synthetic RB-Y1 videos generated from human demonstrations (RoboTryOn-human-2, rt2 v6 eeray-pass, 366 ep, 20 fps): 575 episodes / 152,250 frames, 15 cells (4 real categories + 11 synthetic tasks), shares ∝ sqrt(frames).
Cells: real:ball 51, real:bottle 51, real:box 55, real:doll 52, synth:airfryer 26, synth:ball 47, synth:ballincup 31, synth:bottle 46, synth:bottleovershelf 39, synth:bottlepour 29, synth:box 39, synth:boxconvey 15, synth:coffee_pot 26, synth:doll 37, synth:brush 31.
Checkpoint: step 15,000 of a 30,000-step run (NAVER MLXP, 2x H200, batch 32 x 2 = 64). Intermediate checkpoint for early rollout tests.
54-dim state / action
Same layout as RyanL22/pi05-rby1-wujihand2-teleopv1-baseline-20k: joint_position[10:64] = rightarm0..6 (7) | right hand 20 (thumbcmcflex, thumbcmcabd, thumbmcp, thumbip, indexfingermcpflex, indexfingermcpabd, indexfingerpip, indexfingerdip, middlefingermcpflex, middlefingermcpabd, middlefingerpip, middlefingerdip, ringfingermcpflex, ringfingermcpabd, ringfingerpip, ringfingerdip, pinkymcpflex, pinkymcpabd, pinkypip, pinkydip) | leftarm0..6 (7) | left hand 20. Wheels / torso / head are dropped (constant in the data); hold them at the recording pose at rollout. max_state_dim = max_action_dim = 54, tokenizer max_length = 320 (both already in this repo's config).
Training settings
Inputs
observation.images.base_0_rgb<- left ZED view, 512x288 (real 1280x720 and synthetic 1024x576 both resized)observation.images.left_wrist_0_rgb<- right ZED view, 512x288observation.state— 54 dims;action— 54 dims, absolute joint targets
Tasks (11): move the box to the right, starting with the left hand and finishing with the right hand / move the cup aside, then pick up the ball from table and put it in the white box / open the air fryer with the left hand, pick up the apple from the table with the right hand and put it in the air fryer, then close the air fryer with the left hand / pick up the ball from table and put it in the white box / pick up the bottle from table and put it in the white box / pick up the bottle from table and put it on the shelf at front / pick up the brush with the right hand and wipe away the black dot / pick up the coffee pot from table and put it in the white box / pick up the doll from table and put it in the white box / pick up the small box from table and put it in the white box / pour the coffee from the bottle into the red cup
Initial state (frame 0) — set the robot here before a rollout
The synthetic episodes all start from one pose (per-cell arm means within 0.2 rad of each other; std ≤ 0.17 rad), so use this synthetic common start for every task. Values are rad in the 66-dim robot order; the 54 policy dims are joint_position[10:64]. Wheels/torso/head are the recording constants and are not fed to the policy.
Real teleop episodes start from a different, more extended pose (arm L2 distance 0.63 / 0.68 rad from the synthetic start, right/left; e.g. elbow −2.07 vs −1.85 and wrist ≈ 0 vs −0.46 / +0.36): rightarm `+0.522 -0.020 +0.267 -2.078 -0.005 +0.006 -1.592`, leftarm +0.528 +0.015 -0.268 -2.067 +0.008 +0.001 +1.591, hands ≈ open (all < 0.05). Both starts are in-distribution for the 4 real tasks; for the 7 synthetic-only tasks use the synthetic start. Per-cell means/std: init_state.json in the run notes (~/data/anyh2r/rollout_logs/init_state_rby1_0921/).
Load
from lerobot.policies.pi05.modeling_pi05 import PI05Policy
policy = PI05Policy.from_pretrained("RyanL22/pi05-rby1-wujihand2-realsynth-rt2v6-15k")