--- license: apache-2.0 base_model: lerobot/pi05_base pipeline_tag: robotics tags: - LeRobot - so101 - pi0.5 - lora --- # pi05_so101_block_stack pi0.5 fine-tuned to stack one 30 mm block on another with an [SO-101](https://github.com/TheRobotStudio/SO-ARM100), in simulation and on the physical arm. Trained by `train/pi05_so101_mix.yaml` in [vla-test](https://github.com/danwahl/vla-test) on [drwahl/so101_block_stack](https://huggingface.co/drwahl/so101_block_stack), with each frame jittered for brightness, contrast, saturation and hue over ranges the size of what separates a rendered frame from one off the arm. LoRA on `lerobot/pi05_base`'s gemma_2b language backbone, with the action expert and the projection heads dense and SigLIP frozen. `adapter/` holds the adapter and the normalization processors; `train/merge.py` folds it into the base weights for a checkpoint that loads without one. ```bash hf download drwahl/pi05_so101_block_stack --local-dir pi05_so101_block_stack uv run python train/merge.py pi05_so101_block_stack/adapter pi05_so101_block_stack/merged # in simulation uv run python sim/scripts/eval.py pi05_so101_block_stack/merged # on the arm uv run python -m hw.rollout pi05_so101_block_stack/merged --indices 0 1 2 ``` Chunks are stitched with [Real-Time Chunking](https://www.physicalintelligence.company/research/real_time_chunking) and read back off a shape-preserving cubic before they are executed, in both programs. It stacks 139 of the 150 held-out sim layouts, averaged over three seeds. On the arm the blocks are placed against a console that blends the planned layout with the live camera, and whether an episode stacked is the operator's call, so there is no hardware number here. The prompt names two of red, green and blue: `stack the red block on the green block`.