DiscoDemo
Collection
Generators, datasets and pi0.5 policies of DiscoDemo. Page: davian-robotics.github.io/DiscoDemo · Code: github.com/DAVIAN-Robotics/DiscoDemo • 29 items • Updated
How to use DAVIAN-Robotics/pi05_droid_jointpos with LeRobot:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
OpenPI's pi05_droid_jointpos (Ï€0.5 fine-tuned on DROID with a joint-position action space), converted to the
lerobot PI05Policy (PyTorch) format.
gs://openpi-assets-simeval/pi05_droid_jointpos (JAX/orbax), the official OpenPI release.openpi/examples/convert_jax_model_to_pytorch.py (JAX → PyTorch), then assembled with the lerobot
config and processors.BananaInBowlTask, 8-env server-client evaluation → 7/8
(on par with the openpi JAX baseline with the same weights, 6/8).| file | contents |
|---|---|
config.json |
PI05Config — max_state_dim=8, chunk_size=15, dtype=bfloat16, STATE/ACTION QUANTILES |
model.safetensors |
812 keys (Gemma embed_tokens is tied to lm_head) |
policy_preprocessor.json (+ *_normalizer_processor.safetensors) |
rename → batch → DROID quantile normalize → state discretize + tokenize → device |
policy_postprocessor.json (+ *_unnormalizer_processor.safetensors) |
DROID quantile unnormalize |
from lerobot.policies.pi05.modeling_pi05 import PI05Policy
from lerobot.policies.factory import make_pre_post_processors
repo = "DAVIAN-Robotics/pi05_droid_jointpos"
policy = PI05Policy.from_pretrained(repo).eval()
preprocessor, postprocessor = make_pre_post_processors(policy.config, pretrained_path=repo)
This checkpoint is self-contained only for the lerobot-native stages (normalize / tokenize / model / unnormalize).
The DROID-specific input/output conversion is OpenPI's droid_policy logic, which lerobot does not include, so
an external adapter is required:
observation.state = concat(joint_position[7], gripper_position[1]) (raw; the processor normalizes it).
Provide only two images, observation.images.base_0_rgb (exterior) and observation.images.left_wrist_0_rgb
(wrist); the model pads the third camera with -1 automatically. ([0, 1] float, CHW.)AbsoluteActions, mask = 7 × True + 1 × False), then use only action[:, :8] (7 joints + 1 gripper).sft/scripts/pi05_lerobot_server/ (droid_glue.py, policy.py) in the
DiscoDemo code repository.max_state_dim=8: pi05 discretizes the normalized state into 256 bins and puts it into the prompt. DROID's
actual state is 8-dimensional (7 joints + 1 gripper), so only 8 values must be included to match openpi. With
the default pi05 value (32), the 24 extra tokens contaminate the conditioning and degrade performance (in
particular, early gripper closing). This repo sets max_state_dim=8 explicitly in both config.json and
policy_preprocessor.json (prepare-state step), so standard loading works correctly. (lerobot's default save
does not serialize this value for the prepare step, so it was added manually; set it the same way if you build
your own.)RLinf/RLinf-Pi05-Polaris-droid_jointpos: the parameter key structure and norm_stats
are the same, but those are different, RL-fine-tuned weights. This repo is a conversion of the official OpenPI
pi05_droid_jointpos.The weights are derived from OpenPI's (Physical Intelligence) pi05_droid_jointpos. Use is subject to the license
of the upstream openpi project.