Ο€β‚€.β‚… (DROID joint-position) β€” absolute joint-position control on franka_haply_joint_delta

Ο€β‚€.β‚… fine-tuned on Haply-teleoperated Franka demonstrations, predicting absolute joint positions, starting from the DROID joint-position checkpoint rather than stock Ο€β‚€.β‚…. Checkpoint taken at the step with the lowest eval loss.

Base checkpoint DAVIAN-Robotics/pi05_droid_jointpos
Dataset Ameyapores/franka_haply_joint_delta β€” 94 episodes / 50,861 frames @ 20 fps, 1 language task
Step 1,000
Eval loss 0.2014 (flow-matching objective, 10 held-out episodes)
Trainable action expert only (--train_expert_only: SigLIP and Gemma-2B frozen, ~300M trainable)

Action space

8-dimensional, from the dataset's action_absolute_joint_position column:

dims meaning
0–6 absolute joint positions (7 DoF), in radians
7 gripper

These are absolute targets, not deltas β€” despite the dataset being named franka_haply_joint_delta, which refers to its default action column. Order is the contract: feeding this model joint deltas, or a Cartesian action space, produces plausible-looking nonsense rather than an error. The source dataset publishes the authoritative axis names as joint_position_0 … joint_position_6, gripper.

Observations are three 224Γ—224 RGB cameras (observation.images.base_0_rgb, observation.images.base_1_rgb, observation.images.left_wrist_0_rgb) plus an 8-dim observation.state. empty_cameras=0 β€” the three cameras exactly fill Ο€β‚€.β‚…'s three image slots, with no masked padding.

chunk_size=15 and n_action_steps=15 follow this base checkpoint's own config.json (stock pi05_base uses 50). At 20 fps that is 0.75 s of predicted motion, executed open-loop in full before re-planning.

How this compares

The same fine-tune from stock lerobot/pi05_base, with everything else matched except the chunk size each checkpoint natively uses, reaches 0.1454 β€” 28% better:

base chunk best eval
lerobot/pi05_base (model) 50/50 0.1454
DAVIAN-Robotics/pi05_droid_jointpos (this model) 15/15 0.2014

The same ordering holds on the joint-delta encoding (0.1977 vs 0.2135) and, more cleanly, on a second dataset where chunk size was pinned identically for both bases β€” there stock Ο€β‚€.β‚… ended 18% ahead. So on these tasks the DROID joint-position pretraining is a net negative, against the intuition that an action-space-matched checkpoint should transfer better.

Use this model for comparison against that baseline; prefer the pi05_base variant above for actual control.

Usage

from lerobot.policies.pi05.modeling_pi05 import PI05Policy

policy = PI05Policy.from_pretrained("arkojit1/pi05_droid_franka_haply_absjointpos")

Requires access to the gated google/paligemma-3b-pt-224 repo β€” the preprocessor loads its tokenizer by id. Accept the license there first and make sure HF_TOKEN is set.

Training

Global batch 256 across 8Γ—MI300X (RCCL DDP, 32 per GPU), learning rate 2.5e-5 with a cosine schedule, bf16 with gradient checkpointing, quantile normalisation of state and action, image augmentation on the train split only. 84 train / 10 eval episodes (the last ten in episode order).

eval_loss is the training objective evaluated on held-out episodes β€” not a success rate. With only 10 held-out episodes it is correspondingly noisy; treat differences of a few percent as unresolved.

Downloads last month
16
Safetensors
Model size
4B params
Tensor type
F32
Β·
BF16
Β·
Video Preview
loading

Model tree for arkojit1/pi05_droid_franka_haply_absjointpos

Finetuned
(5)
this model

Dataset used to train arkojit1/pi05_droid_franka_haply_absjointpos