--- 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 | ![EXOKERN skill v0 benchmark summary](https://huggingface.co/EXOKERN/skill-forge-peginsert-v0/resolve/main/figures/benchmark_summary.png) *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. ![Architecture](https://huggingface.co/EXOKERN/skill-forge-peginsert-v0/resolve/main/architecture.png) | 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)