Downloads · 30 days
34
69% of all-time downloads
arkojit1/pi05_droid_franka_haply_absjointpos
pi05_droid_franka_haply_absjointpos is a robotics model from arkojit1. Use it for the robotics task on the model card, and read the license before you ship it in a product. It is set up for lerobot.
π₀.₅ 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…
Downloads · 30 days
34
69% of all-time downloads
All-time downloads
49
Public
Parameters
4.1B
9.4 GB on disk
Likes
1
Public
Click a slice to open those files.
.safetensors9.4 GB · 100%
How the weights are stored.
BF163.6B · 87%
From the Hugging Face model README
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) |
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.
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.
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.
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.