| --- |
| pretty_name: "EXOKERN Skill v0 - Peg Insertion with Force/Torque" |
| license: cc-by-nc-4.0 |
| pipeline_tag: robotics |
| library_name: pytorch |
| tags: |
| - robotics |
| - diffusion-policy |
| - force-torque |
| - contact-rich |
| - manipulation |
| - insertion |
| - isaac-lab |
| - forge |
| - franka |
| - panda |
| - simulation |
| - imitation-learning |
| - lerobot |
| - physical-ai |
| datasets: |
| - EXOKERN/contactbench-forge-peginsert-v0 |
| metrics: |
| - success_rate |
| - avg_contact_force_n |
| - peak_contact_force_n |
| model-index: |
| - name: EXOKERN Skill v0 - Peg Insertion (full_ft) |
| results: |
| - task: |
| type: robotics |
| name: Peg insertion |
| dataset: |
| name: EXOKERN ContactBench v0 |
| type: EXOKERN/contactbench-forge-peginsert-v0 |
| metrics: |
| - type: success_rate |
| value: 100.0 |
| name: Success Rate (%) |
| - type: avg_contact_force_n |
| value: 3.2 |
| name: Average Contact Force (N) |
| - type: peak_contact_force_n |
| value: 10.5 |
| name: Peak Contact Force (N) |
| --- |
| |
| # EXOKERN Skill v0 - Peg Insertion with Force/Torque |
|
|
| `skill-forge-peginsert-v0` is the clean baseline skill release in the EXOKERN catalog. The repository contains a paired policy comparison on the fixed-condition [EXOKERN ContactBench v0 dataset](https://huggingface.co/datasets/EXOKERN/contactbench-forge-peginsert-v0): |
|
|
| - `full_ft_best_model.pt`: primary checkpoint with 22D observations, including 6-axis force/torque input |
| - `no_ft_best_model.pt`: ablation baseline with the same architecture but without force/torque input |
|
|
| The main value of this release is not just success rate. It is a controlled reference point for measuring how force/torque sensing changes contact quality on a simple assembly task. |
|
|
| ## Quick Facts |
|
|
| | Item | Value | |
| | --- | --- | |
| | Task | Peg insertion in simulation | |
| | Dataset | [EXOKERN/contactbench-forge-peginsert-v0](https://huggingface.co/datasets/EXOKERN/contactbench-forge-peginsert-v0) | |
| | Simulator | NVIDIA Isaac Lab (Isaac Sim 4.5) | |
| | Robot | Franka Emika Panda | |
| | Architecture | TemporalUNet1D diffusion policy | |
| | Parameters | 71.3M | |
| | Observation horizon | 10 frames | |
| | Prediction / execution horizon | 16 / 8 actions | |
| | Primary checkpoint | `full_ft_best_model.pt` | |
| | Included ablation | `no_ft_best_model.pt` | |
|
|
| ## Primary Benchmark |
|
|
| 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 Force (N) | |
| | --- | ---: | ---: | ---: | |
| | `full_ft` | 100.0 | 3.2 +/- 0.5 | 10.5 +/- 0.4 | |
| | `no_ft` | 100.0 | 5.2 +/- 0.1 | 12.1 +/- 0.3 | |
|
|
|  |
|
|
| *Figure: published seed-wise benchmark summary for the fixed-condition baseline release.* |
|
|
| Per-seed average contact force: |
|
|
| | Seed | `full_ft` | `no_ft` | Reduction with F/T | |
| | --- | ---: | ---: | ---: | |
| | 42 | 3.7 N | 5.3 N | 30.4% | |
| | 123 | 3.4 N | 5.0 N | 32.3% | |
| | 7 | 2.5 N | 5.2 N | 52.0% | |
|
|
| Takeaway: on this controlled baseline, force/torque input preserved success while substantially reducing contact force. |
|
|
| ## Architecture |
|
|
| This release uses a 1D Temporal U-Net diffusion policy with FiLM-style conditioning from the observation history and diffusion timestep. |
|
|
|  |
|
|
| | 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` | Best checkpoint without force/torque input | |
| | `inference.py` | Self-contained inference helper and model definition | |
| | `config.yaml` | Training, dataset, and environment configuration | |
| | `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/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", |
| 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 | |
| | Seeds | 42, 123, 7 | |
| | Physics rate | 120 Hz | |
| | Control rate | 15 Hz | |
| | Domain randomization | Disabled in this release | |
|
|
| ## 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_v0_2026, |
| title = {EXOKERN Skill v0: Peg Insertion with Force/Torque}, |
| author = {{EXOKERN}}, |
| year = {2026}, |
| howpublished = {\url{https://huggingface.co/EXOKERN/skill-forge-peginsert-v0}}, |
| 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. |
| - The task is a relatively simple peg insertion setting with fixed conditions. |
| - Results should not be generalized to harder contact tasks without additional evidence. |
| - 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](https://huggingface.co/datasets/EXOKERN/contactbench-forge-peginsert-v0) |
| - Domain-randomized successor: [EXOKERN/skill-forge-peginsert-v0.1.1](https://huggingface.co/EXOKERN/skill-forge-peginsert-v0.1.1) |
| - Evaluation CLI: [github.com/Exokern/exokern_eval](https://github.com/Exokern/exokern_eval) |
| - Organization page: [huggingface.co/EXOKERN](https://huggingface.co/EXOKERN) |
|
|