ALM-DAT on the collision-fidelity benchmark: headline videos

Two recordings of the six headline cases on the Horde L40 VM. Recording 2 (2026-11-06) is the current code, ankac/alm-dat-main at cfd6e07b5, VBD against ALM-DAT. Recording 1 (2026-11-05) is the first ALM-DAT revision with its ablation columns. Page built 2026-11-06.

Each video shows the same case under several configurations, side by side, 1280x720 per panel, 30 frames per second, real time. A panel whose run stopped early holds its last frame behind a red bar that names the stop time and the reason (nonfinite = a non-finite state was observed). Hold outcomes are the benchmark's own criteria: "lost at t" is the first proven hand-object separation. Jitter is the worst detrended RMS displacement over the complete 0.5 s stationary windows, speed the worst relative RMS speed over those windows. Rigid-soft DAT is off in every ALM-DAT configuration because the ALM-DAT path does not yet run together with it; the "VBD, rigid-soft DAT off" column of recording 1 is the control for that difference.

Recording 2 (2026-11-06): current code, VBD against ALM-DAT

Branch ankac/alm-dat-main at cfd6e07b5: today's main, the #4222 self-contact storage and the ALM-DAT self-contact with the decisions of the design review: D1 (the committed displacement from the detection pose stays inside the sphere of radius 0.5 x 0.85 x (margin + gap)), D3 (two detections per substep, the second at the certified anchor), D16 (the row pushes along the stored division-plane normal) and D15 (the row metric is the pair's support along that normal, inertia in series with the material stiffness; the stiffness floor and the user scale are gone). Default detection gap. Six cases, two columns, twelve runs, all twelve finite.

What changed against recording 1.

Franka grippers, towel r5_franka_towel_contact_v2

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT off

Both runs hold the towel through the lift, the carry and the 60 s hold, and release it at 70 s. In recording 1 the ALM-DAT run lost the towel at the lift (5.50 s). The second detection per substep (D3) doubles the motion budget at the same detection reach, and the D3 towel page showed the same recovery before D15 and D16 were in. Confirmed self-crossings: 1 pair in 12 frames under VBD, 5 pairs in 118 frames under ALM-DAT.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)held1 (12/2100)24.60.370.0031
ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT offheld5 (118/2100)30.00.600.2026

Two H1 hands, towel r7_h1_towel

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT off

Both runs hold the towel to the release. The ALM-DAT run has no confirmed self-crossing in any frame; the VBD run has up to 5 pairs in 58 frames. In recording 1 the ALM-DAT run lost the towel at 6.47 s.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)held5 (58/2222)25.00.390.7983
ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT offheld0 (0/2222)42.60.660.0034

Two H1 hands, native jacket j3_h1_jacket

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT off

Both runs complete the 79.5 s timeline and hold the jacket to the release. In recording 1 the ALM-DAT run lost it at 7.53 s. The jacket mesh crosses itself in every frame under both solvers (884 pairs at most under VBD, 797 under ALM-DAT); that is the mesh, not the contact.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)held884 (2385/2385)21.20.350.55201
ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT offheld797 (2385/2385)43.20.700.1889

Franka grippers, shopping bag with two blocks m3_franka_tote_2

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT off

VBD loses the bag: it slides out of the grippers from about 6 s and the first proven separation is at 20.07 s. ALM-DAT holds it to the release at 67.5 s. In recording 1 every ALM-DAT run with the metric floor went non-finite within 3 s; this code has no floor, the metric is the pair's support (D15). Support penetration 2.95 mm under VBD, 0.05 mm under ALM-DAT.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)lost at 20.07 s33 (1523/2025)58.61.222.9531
ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT offheld4 (259/2025)85.51.770.0524

Franka grippers, gusset bag with four payloads m3_franka_gusset_4

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT off

VBD loses the bag at 31.10 s. ALM-DAT holds it through the transport and the hold. At the release (about 65 s) the grippers open, but the bag stays hanging from one finger of the right gripper by a handle strap to the end of the run at 67.5 s; it does not drop (the tote drops). The benchmark has no release criterion, so this shows only in the video. In recording 1 the ALM-DAT run went non-finite at 4.4 s with the floor and completed only in the no-floor variant. Confirmed self-crossings: 101 pairs in 1745 frames under VBD, 4 pairs in 74 frames under ALM-DAT.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)lost at 31.10 s101 (1745/2025)95.41.473.0029
ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT offheld4 (74/2025)52.81.060.0324

Cloth stack, 10 layers s1_cloth_10_10substeps

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT off

Both runs complete with zero confirmed self-crossings, but only the VBD stack comes to rest. Under ALM-DAT the layers keep rippling and crumpling to the end of the run: every 0.5 s window from 2 s to 7 s has a detrended jitter of 42 to 130 mm and a worst relative speed of 1.0 to 2.0 m/s, against 2 to 22 mm and 0.1 to 0.6 m/s under VBD. In recording 1, with the metric floor at K, the ALM-DAT stack rested at 3 to 6 mm. This is one run; which of D3, D15 and D16 is responsible is not established. The 14 mm support penetration is the first impact on the ground at 0.13 s with rigid-soft DAT off.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)completed0 (0/210)22.50.564.001
ALM-DAT at cfd6e07b5 (D1, D3, D15, D16), rigid-soft DAT offcompleted0 (0/210)129.51.9714.281

Recording 1 (2026-11-05): first ALM-DAT revision and its ablations

Branch ankac/alm-dat-fable-review at 986b7c921 with the uncommitted ALM-DAT changes of that day (friction, damping, smooth compliant-to-hard transition, end-point motion budget). Every ALM-DAT panel uses the distance budget rule with one self-contact detection per substep, and the metric floor rho >= K of that revision.

What these videos show

Self-contact record demand, default reach versus 3 mm gap

The wider gap buys speed by widening the detection reach, and the record count grows with it. Peak records per case over the run:

CaseRecords at 3 mm reach (vt / ee)Records at 5 mm reach (vt / ee)Ratio
Franka towel1,695 / 5,86823,921 / 112,36014 / 19
H1 towel4,440 / 14,37851,966 / 238,70612 / 17
Allegro towel2,958 / 13,41016,988 / 92,4645.7 / 6.9
T-shirt30,858 / 136,28074,098 / 323,7962.4 / 2.4
Dress30,860 / 132,34064,599 / 301,2102.1 / 2.3
Jacket101,529 / 598,712351,484 / 1,940,8143.5 / 3.2

Franka grippers, towel r5_franka_towel_contact_v2

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT, distance rule, one detection per substep | ALM-DAT, distance rule, detection gap 3 mm | VBD, rigid-soft DAT off (control)

The two grippers pinch the towel, lift it, carry it and release it. The lift peaks at 0.49 m/s. The one-detection budget of the ALM-DAT path caps the committed motion at 0.38 m/s for this recipe (0.5 x 0.85 x 3 mm per 1/300 s), so the towel slips out at the lift and lands on the table edge. The 3 mm detection gap raises the cap to 0.64 m/s and the towel is carried like under VBD, at 14 to 19 times the self-contact record demand.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)held1 (2/2100)24.60.390.0041
ALM-DAT, distance rule, one detection per substeplost at 5.50 s12 (30/2100)12.20.240.0025
ALM-DAT, distance rule, detection gap 3 mmheld6 (6/2100)31.30.640.4324
VBD, rigid-soft DAT off (control)held8 (257/2100)23.60.420.0023

Two H1 hands, towel r7_h1_towel

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT, distance rule, one detection per substep | ALM-DAT, distance rule, detection gap 3 mm | VBD, rigid-soft DAT off (control)

The same pattern with the humanoid hands: the default budget loses the towel at the lift, the wider gap holds it.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)lost at 42.83 s207 (885/2222)25.30.453.0049
ALM-DAT, distance rule, one detection per substeplost at 6.47 s21 (1404/2222)17.90.250.0029
ALM-DAT, distance rule, detection gap 3 mmheld2 (164/2222)37.50.640.0029
VBD, rigid-soft DAT off (control)held0 (0/2222)25.50.400.0028

Two H1 hands, native jacket j3_h1_jacket

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT, distance rule, one detection per substep | ALM-DAT, distance rule, detection gap 3 mm | VBD, rigid-soft DAT off (control)

The jacket mesh crosses itself under every solver, VBD included (the campaign counted the same intersecting pairs in every frame). The ALM-DAT run with the 3 mm gap goes non-finite early: the panel freezes and the red bar names the stop time.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)held948 (2385/2385)19.60.440.40120
ALM-DAT, distance rule, one detection per substeplost at 7.53 s1074 (2385/2385)3.50.110.8091
ALM-DAT, distance rule, detection gap 3 mmnonfinite at 5.5 s841 (166/166)n/an/a8.237
VBD, rigid-soft DAT off (control)held945 (2385/2385)19.80.330.4684

Franka grippers, shopping bag with two blocks m3_franka_tote_2

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT, distance rule, one detection per substep | ALM-DAT, distance rule, detection gap 3 mm | ALM-DAT, distance rule, no metric floor | VBD, rigid-soft DAT off (control)

Light payload tetrahedra (0.09 g per vertex) meet the ALM metric floor rho >= K: the multipliers overshoot and the run goes non-finite within the first seconds, with or without the wider gap. Without the floor the run completes and the bag is held. The VBD default loses the bag.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)lost at 17.30 s8 (111/2025)116.81.752.0329
ALM-DAT, distance rule, one detection per substepnonfinite at 3.2 s0 (0/95)n/an/a0.091
ALM-DAT, distance rule, detection gap 3 mmnonfinite at 3.2 s0 (0/96)n/an/a0.181
ALM-DAT, distance rule, no metric floorheld3 (59/2025)16.51.281.6424
VBD, rigid-soft DAT off (control)held0 (0/2025)66.71.110.1222

Franka grippers, gusset bag with four payloads m3_franka_gusset_4

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT, distance rule, one detection per substep | ALM-DAT, distance rule, detection gap 3 mm | ALM-DAT, distance rule, no metric floor | VBD, rigid-soft DAT off (control)

The same mechanism as the tote: the floor breaks the run, the no-floor variant completes.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)lost at 20.73 s2 (1355/2025)98.41.381.8429
ALM-DAT, distance rule, one detection per substepnonfinite at 4.4 s0 (0/133)n/an/a0.182
ALM-DAT, distance rule, detection gap 3 mmnonfinite at 3.0 s0 (0/90)n/an/a0.311
ALM-DAT, distance rule, no metric floorheld0 (0/2025)8.71.270.0922
VBD, rigid-soft DAT off (control)held0 (0/2025)80.71.474.2122

Cloth stack, 10 layers s1_cloth_10_10substeps

Panels, left to right: VBD, benchmark default (rigid-soft DAT on) | ALM-DAT, distance rule, one detection per substep | VBD, rigid-soft DAT off (control)

Ten cloth layers dropped onto each other. Both complete; the ALM-DAT stack rests quieter and the confirmed self-crossing count stays at zero. Recording 2 below does not repeat this result: with the metric floor removed the stack does not come to rest.

ConfigurationOutcomeSelf-crossings, max pairs (frames with / frames)Jitter, worst 0.5 s window [mm]Relative speed, worst window [m/s]Support penetration [mm]Wall time [min]
VBD, benchmark default (rigid-soft DAT on)completed0 (0/210)10.30.294.001
ALM-DAT, distance rule, one detection per substepcompleted0 (0/210)6.00.2332.331
VBD, rigid-soft DAT off (control)completed0 (0/210)7.00.1718.111

Provenance