Recovering the missing contact modality from vision · feasibility synthesis
Thread: supervised wins the task in-domain; self-supervision wins cross-domain transfer.
Can a model read contact off a video?
Inference is video-only (no proprioception at test time). Force is post-processing — acausal allowed. Frozen V-JEPA encoder throughout.
| dataset | task | cams | force |
|---|---|---|---|
| FMB | peg / board insertion | 2–4 ext | wrist F/T, biased |
| REASSEMBLE | NIST board insert/remove | 4 | clean <1 N |
| RH20T | 147 tasks · 4 robots | 8–11 | base-frame, mixed |
| ours (crisp_ws) | 3 contact tasks | front + wrist | clean, sensor-frame |
≈16.8k rollouts · ~178 h · ~6.4M frames — ≈ 14× Meta's haptic corpus. Public, abundant, mostly unused.
In-lab, clean bias-removed sensor-frame force (NetFT, server-published). Held-out validation set for OOD / cross-lab transfer.
| dataset | sensor rate | stored | frame | contact τ |
|---|---|---|---|---|
| FMB | 10 Hz (observer est.) | 10 Hz | EE | ~10 N |
| REASSEMBLE | ~500 Hz | 10 Hz (LP-filt) | base→EE | 2 N |
| RH20T | 100 Hz | 10 Hz (unfilt) | base / world | per-robot ~1.5–3 N |
| ours | 250 Hz | 10 Hz | sensor→TCP→world | 3.65 N |
All forces resampled to 10 Hz to match the V-JEPA RGB frame rate. After downsampling, the residual walls are label quality (FMB bias) and per-robot τ heterogeneity (RH20T) — not sample rate.
Verdict preview: complementary — supervised owns the in-domain ceiling, SSL owns the transfer gap.
X = video (context), Y = force (target), Z = latent. We keep the frozen V-JEPA video encoder and learn a force / alignment head on top.

| dataset | gate-F1 | raw cos-dir (+lift) | mag MAE (N) |
|---|---|---|---|
| REASSEMBLE | 0.86 | 0.91 (+0.34) | 1.6 |
| FMB | 0.78 | 0.97 (+0.02) | 2.8 |
| RH20T | 0.63 | 0.39 (+0.27) | 5.4 |
| ours · peg-insert | 0.90 | 0.83 (+0.02) | 2.4 |
| ours · ethernet-insert | 0.91 | 0.93 (+0.00) | 2.4 |
| ours · box-flip | 0.91 | 0.97 (+0.08) | 2.4 |
H1 (contact) ✓ across all. H2 (direction) ✓ where force is clean (REASSEMBLE, box-flip). FMB + peg/ethernet direction is near-trivial (axial / biased +Z); magnitude is the residual wall.
Predicted contact gate overlaid on an FMB insertion rollout — the model fires exactly when the peg meets the board.
Train: REASSEMBLE + FMB + RH20T (jointly). Eval: in-dist val + our held-out crisp_ws.
| embedding | RankMe (eff. rank) | verdict |
|---|---|---|
| raw V-JEPA (video) | 396 | full |
| naïve DINO align | 33 | collapsed |
| Stage-1 joint | 9.8 | near 1-D |
| Stage-2 (ours) | 139 | fixed |
| force tower (ours) | 51 | active |
Viewpoint and embodiment — the two things that break supervised OOD — are exactly what the SSL embed discards.
A trainable force tower (RankMe 51, active not collapsed) is pulled onto the frozen video latent. Naïve cosine is offset-blind; centering the common mode + covariance-matching converts a fake alignment into a real one. The force embedding is non-trivial — it carries contact structure beyond hand-crafted force features.
| setting | raw V-JEPA | + force-aligned embed |
|---|---|---|
| in-distribution contact / direction | best | ties (no lift) |
| held-out camera — contact F1 | 0.28 | 0.70 |
| cross-dataset direction · REASS→FMB | 0.41 | 0.87 |
| cross-dataset direction · FMB→REASS | 0.40 | 0.83 |
Augment, don't replace: concat[ raw V-JEPA ‖ force-aligned embed ] → TCN. Zero in-distribution cost; large OOD / cross-domain gains — unseen camera (F1 0.28→0.70) and cross-dataset direction (UDA, 0.40→0.87 both ways).
| question | supervised (trunk + FT) | SSL embedding |
|---|---|---|
| in-dist contact / direction | best | ties raw V-JEPA |
| OOD task (our data, K-shot FT) | 0.87–0.91 F1 | no extra lift |
| unseen camera (zero target) | 0.28 | 0.70 |
| cross-dataset direction (UDA) | negative | restored 0.40→0.85 |
| robot-agnostic intermix | — | yes |
Supervised wins the task; SSL wins cross-domain transfer. The frozen-feature ceiling is the next lever — encoder unfreeze.