File size: 8,806 Bytes
85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 e6178a4 63bf94e 85434f3 1601fe9 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e e6178a4 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 63bf94e 85434f3 e6178a4 63bf94e 85434f3 63bf94e 85434f3 63bf94e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 | ---
pretty_name: "EXOKERN Skill v0.1.1 - Robust Peg Insertion Under Domain Randomization"
license: cc-by-nc-4.0
pipeline_tag: robotics
library_name: pytorch
tags:
- robotics
- diffusion-policy
- force-torque
- contact-rich
- manipulation
- insertion
- domain-randomization
- sim-to-real
- isaac-lab
- franka
- physical-ai
- lerobot
datasets:
- EXOKERN/contactbench-forge-peginsert-v0.1.1
metrics:
- success_rate
- avg_contact_force_n
- peak_contact_force_n
model-index:
- name: EXOKERN Skill v0.1.1 - Peg Insertion (full_ft)
results:
- task:
type: robotics
name: Peg insertion
dataset:
name: EXOKERN ContactBench v0.1.1
type: EXOKERN/contactbench-forge-peginsert-v0.1.1
metrics:
- type: success_rate
value: 100.0
name: Success Rate (%)
- type: avg_contact_force_n
value: 3.67
name: Average Contact Force (N)
- type: peak_contact_force_n
value: 10.64
name: Peak Contact Force (N)
---
# EXOKERN Skill v0.1.1 - Robust Peg Insertion Under Domain Randomization
`skill-forge-peginsert-v0.1.1` is the domain-randomized reference model release in the EXOKERN catalog. It is trained on [EXOKERN ContactBench v0.1.1](https://huggingface.co/datasets/EXOKERN/contactbench-forge-peginsert-v0.1.1) and ships the same paired comparison structure as v0:
- `full_ft_best_model.pt`: primary checkpoint with 22D observations, including force/torque input
- `no_ft_best_model.pt`: ablation checkpoint with the same architecture and 16D state-only observations
This release should be read as a robustness benchmark first. Both policies remain successful under severe domain randomization, and the repo is valuable precisely because it makes the mixed result on force reduction explicit.
## Quick Facts
| Item | Value |
| --- | --- |
| Task | Peg insertion in simulation under domain randomization |
| Dataset | [EXOKERN/contactbench-forge-peginsert-v0.1.1](https://huggingface.co/datasets/EXOKERN/contactbench-forge-peginsert-v0.1.1) |
| Simulator | NVIDIA Isaac Lab (Isaac Sim 4.5) |
| Robot | Franka FR3 |
| Architecture | TemporalUNet1D diffusion policy |
| Parameters | 71.3M |
| Observation horizon | 10 frames |
| Prediction / execution horizon | 16 / 8 actions |
| Seeds evaluated | 42, 123, 7 |
| Total rollouts reported | 600 |
## Benchmark Summary
The Hub metadata for this repo tracks the primary `full_ft` checkpoint. The full repo includes the paired `no_ft` ablation for comparison.
| Checkpoint | Success Rate | Avg Contact Force (N) | Peak Contact Force (N) | Avg Episode Time (s) |
| --- | ---: | ---: | ---: | ---: |
| `full_ft` | 100.0 | 3.67 +/- 0.45 | 10.63 | 25.63 |
| `no_ft` | 100.0 | 3.37 +/- 0.06 | 10.33 | 25.73 |

*Figure: multi-seed benchmark summary built from the published `eval_seed42/123/7.json` artifacts.*
Per-seed results:
| Seed | Condition | Success Rate | Avg Force (N) | Peak Force (N) | Avg Time (s) |
| --- | --- | ---: | ---: | ---: | ---: |
| 42 | `full_ft` | 100.0 | 3.24 | 10.44 | 25.61 |
| 42 | `no_ft` | 100.0 | 3.38 | 10.38 | 25.73 |
| 123 | `full_ft` | 100.0 | 4.12 | 10.57 | 25.74 |
| 123 | `no_ft` | 100.0 | 3.34 | 10.32 | 25.79 |
| 7 | `full_ft` | 100.0 | 3.69 | 10.93 | 25.54 |
| 7 | `no_ft` | 100.0 | 3.37 | 10.31 | 25.68 |
Interpretation:
- This release demonstrates robust task completion under a much harder collection regime than v0.
- On this particular peg-in-hole setup, domain randomization largely closed the force gap between `full_ft` and `no_ft`.
- That does not prove force/torque is unnecessary in general. It shows that this release is best used as a robust benchmark and an honest reference point for harder future tasks.
## What Changed Compared To v0
| Topic | v0 | v0.1.1 |
| --- | --- | --- |
| Dataset regime | Mostly fixed conditions | Multi-layer domain randomization |
| Dataset size | 2,221 episodes / 330,929 frames | 5,000 episodes / 745,000 frames |
| Robot | Franka Emika Panda | Franka FR3 |
| Force reduction takeaway | Clear F/T advantage | Inconclusive on this task |
| Best use | Clean baseline | Robustness benchmark |
## Architecture
This release uses the same 1D Temporal U-Net diffusion policy family as v0.

| Component | Value |
| --- | --- |
| Action dimension | 7 |
| Observation dimensions | 22 (`full_ft`) / 16 (`no_ft`) |
| Diffusion training steps | 100 |
| DDIM inference steps | 16 |
| Base channels | 256 |
| Channel multipliers | (1, 2, 4) |
| Normalization | Min-max to `[-1, 1]` |
## Repository Contents
| File | Description |
| --- | --- |
| `full_ft_best_model.pt` | Best checkpoint with force/torque input |
| `no_ft_best_model.pt` | Ablation checkpoint without force/torque input |
| `inference.py` | Self-contained inference helper and model definition |
| `config.yaml` | Training, dataset, and environment configuration |
| `eval_seed42.json` | Seed 42 evaluation artifact |
| `eval_seed123.json` | Seed 123 evaluation artifact |
| `eval_seed7.json` | Seed 7 evaluation artifact |
| `training_curve_full_ft_seed42.png` | Training curve for `full_ft`, seed 42 |
| `training_curve_full_ft_seed123.png` | Training curve for `full_ft`, seed 123 |
| `training_curve_full_ft_seed7.png` | Training curve for `full_ft`, seed 7 |
| `training_curve_no_ft_seed42.png` | Training curve for `no_ft`, seed 42 |
| `training_curve_no_ft_seed123.png` | Training curve for `no_ft`, seed 123 |
| `training_curve_no_ft_seed7.png` | Training curve for `no_ft`, seed 7 |
## Usage
### Reproduce evaluation with `exokern-eval`
```bash
pip install exokern-eval
wget https://huggingface.co/EXOKERN/skill-forge-peginsert-v0.1.1/resolve/main/full_ft_best_model.pt
exokern-eval \
--policy full_ft_best_model.pt \
--env Isaac-Forge-PegInsert-Direct-v0 \
--episodes 100
```
### Load the repo helper locally
```python
import os
import sys
from huggingface_hub import snapshot_download
repo_dir = snapshot_download(
repo_id="EXOKERN/skill-forge-peginsert-v0.1.1",
allow_patterns=["*.pt", "inference.py"],
)
sys.path.insert(0, repo_dir)
from inference import DiffusionPolicyInference
policy = DiffusionPolicyInference(
os.path.join(repo_dir, "full_ft_best_model.pt"),
device="cpu",
)
policy.add_observation([0.0] * 22)
actions = policy.get_actions()
print(len(actions))
```
## Training And Evaluation Setup
| Item | Value |
| --- | --- |
| Train / val split | 85% / 15% by episode |
| Epochs | 300 |
| Batch size | 256 |
| Optimizer | AdamW, `lr=1e-4`, `weight_decay=1e-4` |
| LR schedule | Cosine annealing to `1e-6` |
| EMA decay | 0.995 |
| Physics rate | 120 Hz |
| Control rate | 15 Hz |
| Domain randomization | Enabled in the training dataset |
## Related Work
- FORGE: [Force-Guided Exploration for Robust Contact-Rich Manipulation under Uncertainty](https://arxiv.org/abs/2408.04587)
- Diffusion Policy: [Visuomotor Policy Learning via Action Diffusion](https://arxiv.org/abs/2303.04137)
- Factory: [Fast Contact for Robotic Assembly](https://arxiv.org/abs/2205.03532)
## Citation
```bibtex
@misc{exokern_skill_peginsert_v011_2026,
title = {EXOKERN Skill v0.1.1: Robust Peg Insertion Under Domain Randomization},
author = {{EXOKERN}},
year = {2026},
howpublished = {\url{https://huggingface.co/EXOKERN/skill-forge-peginsert-v0.1.1}},
note = {Paired full_ft and no_ft diffusion-policy checkpoints}
}
```
## Security Note
The checkpoints in this repo are PyTorch pickles. Load them only in a trusted or isolated environment after reviewing the repository contents.
## Limitations
- Simulation only. This release does not claim real-robot readiness.
- Reported robustness is specific to the peg-in-hole task and the randomization ranges documented in the paired dataset card.
- The ablation result is mixed: use this repo to study robustness, not to overclaim a universal force/torque effect.
- The repo exposes paired checkpoints for research comparison; the intended production-style reference in this repo is `full_ft_best_model.pt`.
## Related Resources
- Dataset: [EXOKERN/contactbench-forge-peginsert-v0.1.1](https://huggingface.co/datasets/EXOKERN/contactbench-forge-peginsert-v0.1.1)
- Baseline predecessor: [EXOKERN/skill-forge-peginsert-v0](https://huggingface.co/EXOKERN/skill-forge-peginsert-v0)
- Evaluation CLI: [github.com/Exokern/exokern_eval](https://github.com/Exokern/exokern_eval)
- Organization page: [huggingface.co/EXOKERN](https://huggingface.co/EXOKERN)
|