pi05_xarm_dishwasher_binmarker_lora
pi0.5 (openpi) LoRA fine-tune for the xArm dishwasher task ("pull the basket outside of the dishwasher and pick up the mug and put it into the basket"),
trained on frames with the binmarker overlay: a fixed-length,
fixed-direction arrow per finger (sensor-frame pad normal), shown iff that
finger is in binary contact. NO force magnitude and NO force direction — the
overlay carries only the per-finger contact bit. Ported from
LIBERO_contact_overlay's binbars style.
Training
| Base | pi05_droid |
| Recipe | LoRA r16/a16 backbone + r32/a32 action expert, attn+ffn |
| Batch / LR | 8 / cosine 1e-4 -> 1e-5, 500 warmup, AdamW, grad-clip 1.0 |
| Data | EdwardoSunny/xarm_dishwasher_binmarker (100 eps, 28096 frames) |
| Early stop | step 5800 |
| Final train loss | 0.0307 |
Variant comparison for this task (identical protocol, only overlay pixels differ): baseline 0.029 / points9_arrow_len0 0.0287 / binmarker 0.0307 / points9_arrow 0.024.
Contact detection (how the threshold was tuned)
Per-finger binary contact from the 3x3x3-axis tactile array:
- Normalization offset = median over known-idle frames (first 10 frames of each episode, post-homing, gripper open). The naive whole-dataset median is contact-polluted on tasks that spend most frames in contact (charger: 60% closed frames made idle read as a fake magnitude of ~1.2).
- Metric = max over the 9 cells of the normalized cell-vector L2 norm ("max-cell"). The cell-sum alternative cannot separate charger idle noise (p99.5 = 0.45) from real light holds (0.5 on tube/dishwasher's weaker finger). Max-cell: idle p99.5 <= 0.24 on every task, real contacts >= ~0.3.
- Hysteresis + debounce (Schmitt trigger): ON after 2 consecutive frames
= 0.25, OFF after 3 consecutive frames < 0.18, state reset at episode boundaries. Light-but-real holds (dips to 0.23) stay latched; single-frame noise spikes never trigger.
Validated on all 400 episodes (zero idle false positives in every post-homing window) and visually verified on 5 episodes per task (timelines + frame montages at approach / contact onset / mid-hold / post-release), plus a final spot check on the converted LeRobot frames: no arrows during approach, arrows at contact onset, latched through holds, cleared within <=3 frames of release, and honest negatives (gripper closed around nothing draws nothing).
Contents
params/— merged weights (orbax), self-contained for inferenceassets/local/xarm_dishwasher_binmarker/norm_stats.json- Config name:
pi05_xarm_dishwasher_binmarker_lora
Deployment note
At inference, reproduce the SAME overlay on live frames: run the tuned contact
detector (max-cell metric, ON>=0.25 / OFF<0.18, 2-on/3-off debounce, idle-window
offset) and draw the fixed-direction marker (FIXED_DIRECTION, arrow_length_scale=0.12,
thickness 8, dot 22) — see tactile-data-collection/scripts/render_binmarker.py
at commit c64c562 or later (earlier revisions used the measured force direction).