You need to agree to share your contact information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Log in or Sign Up to review the conditions and access this model content.

EXOKERN Skill v0 β€” Peg Insertion with Force/Torque

The first publicly available contact-rich manipulation skill trained with calibrated 6-axis force/torque data.

Part of the EXOKERN Skill Catalog β€” The Data Engine for Physical AI.

Dataset License


Overview

This model is a Diffusion Policy trained for precision peg insertion in simulation (NVIDIA Isaac Lab / FORGE). It demonstrates that force/torque (F/T) sensing data consistently reduces contact forces during assembly tasks.

Two model variants are provided:

  • full_ft β€” Trained with joint states + 6-axis force/torque feedback (22-dim observation)
  • no_ft β€” Trained with joint states only (16-dim observation)

Key Results

F/T Ablation (3 Seeds Γ— 100 Episodes)

Condition Success Rate Avg Force (N) Peak Force (N)
full_ft (with F/T) 100.0% 3.2 Β± 0.5 10.5 Β± 0.4
no_ft (without F/T) 100.0% 5.2 Β± 0.1 12.1 Β± 0.3
Force Reduction β€” 38.2% 13.2%
Per-seed breakdown
Seed full_ft Force no_ft Force Reduction
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%

F/T-aware policies produce 38% less contact force at identical success rates.

Cross-Architecture Comparison

This skill was also benchmarked against simpler architectures on the same dataset:

Architecture full_ft Force no_ft Force F/T Reduction Parameters
V1 (MLP, single-frame) 0.1 N 6.4 N 98.4% 534K
V2 (Temporal CNN, 10-frame) 3.0 N 4.7 N 36% 273K
Diffusion Policy (this model) 3.2 N 5.2 N 38.2% 71.3M

The F/T advantage is consistent and robust across all architectures and seeds.


Architecture

1D Temporal U-Net with FiLM conditioning (Diffusion Policy, Chi et al. 2023).

Component Details
Observation encoder MLP: obs_horizon Γ— obs_dim β†’ 256-dim condition vector
Noise prediction 1D U-Net with 3 encoder/decoder stages, channel mults (1, 2, 4)
Conditioning FiLM (Feature-wise Linear Modulation) via timestep + observation
Noise schedule Cosine schedule (100 training steps)
Sampling DDIM, 16 denoising steps at inference
Action chunking Predict 16 actions, execute 8 (receding horizon)
Parameters 71.3M (full_ft) / 71.3M (no_ft)
EMA Exponential Moving Average, decay=0.995

Observation Space

Component Dimensions Included in
Joint positions 7 both
Joint velocities 7 both
Joint torques 2 both
Force/Torque (wrench) 6 full_ft only
Total per frame 22 / 16
Observation horizon 10 frames both

Action Space

Component Dimensions
Joint position targets 7
Prediction horizon 16 steps
Execution horizon 8 steps

Usage

Quick Start

import torch
from inference import DiffusionPolicyInference

# Load the full_ft model (with force/torque)
policy = DiffusionPolicyInference("full_ft_best_model.pt", device="cuda")

# During rollout:
obs = get_observation()  # (22,) for full_ft, (16,) for no_ft
# Feed observations over time to build the 10-frame window
policy.add_observation(obs)

# When ready to act:
actions = policy.get_actions()  # Returns up to 8 actions
for action in actions:
    env.step(action)

Loading Weights

checkpoint = torch.load("full_ft_best_model.pt", map_location="cuda")
print(f"Condition: {checkpoint['condition']}")
print(f"Val Loss:  {checkpoint['val_loss']:.6f}")
print(f"Obs Dim:   {checkpoint['obs_dim']}")

Training Details

Parameter Value
Dataset EXOKERN/contactbench-forge-peginsert-v0
Episodes 2,221 (330,929 frames)
Train/Val split 85% / 15% (episode-based)
Epochs 300
Batch size 256
Optimizer AdamW (lr=1e-4, weight_decay=1e-4)
LR schedule Cosine annealing (eta_min=1e-6)
Seeds 42, 123, 7
Training time ~3h per run (RTX 4090)
Normalization Min-max to [-1, 1]

Evaluation Environment

Parameter Value
Simulator NVIDIA Isaac Lab (Isaac Sim 4.5)
Environment Isaac-Forge-PegInsert-Direct-v0
Robot Franka Emika Panda (7-DOF)
Control mode Joint position targets
Physics step 120 Hz
Control frequency 15 Hz (decimation=8)
Episodes evaluated 100 per condition
Domain Randomization None (v0)

Files

File Description
full_ft_best_model.pt Best checkpoint β€” trained WITH force/torque
no_ft_best_model.pt Best checkpoint β€” trained WITHOUT force/torque
config.yaml Model hyperparameters and training config
inference.py Standalone inference script with action chunking
results.json Full evaluation results (all seeds)
training_curve_full_ft.png Training loss curves (full_ft)
training_curve_no_ft.png Training loss curves (no_ft)

Limitations

  • Sim-only: Trained and evaluated in simulation. No real-robot validation yet.
  • Fixed environment: No domain randomization. Performance under physical variation is unknown.
  • Single robot: Franka Emika Panda only. Joint-space actions, not task-space.
  • Single task: Peg insertion only.

These are addressed in upcoming versions β€” see EXOKERN Roadmap.


Citation

@misc{exokern2026skill,
  title={EXOKERN Skill v0: Force/Torque-Aware Diffusion Policy for Peg Insertion},
  author={EXOKERN},
  year={2026},
  url={https://huggingface.co/EXOKERN/skill-forge-peginsert-v0},
}

Related

Downloads last month
-
Video Preview
loading

Dataset used to train EXOKERN/skill-forge-peginsert-v0

Paper for EXOKERN/skill-forge-peginsert-v0

Evaluation results

  • Success Rate (%) on contactbench-forge-peginsert-v0
    self-reported
    100.000
  • Force Reduction with F/T (%) on contactbench-forge-peginsert-v0
    self-reported
    38.200