# MIME-VER-132 — Misalignment-Induced Field Tilt at the UMR **Date**: 2026-04-30 **Producer under test**: `mime.nodes.actuation.permanent_magnet.PermanentMagnetNode` **Algorithm ID**: `MIME-NODE-101` **Benchmark type**: Mode 2 (Analytical) **Test file**: `tests/verification/test_actuation_chain_equivalence.py::test_ver132_misalignment_field_tilt` **Acceptance**: field-tilt angle at the UMR position grows strictly monotonically with the magnet's lateral offset over a 0–6 mm sweep; on-axis tilt < 1° --- ## Goal Verify the *upstream cause* of the misalignment-induced step-out reduction described in the approved plan (`/home/nick/.claude/plans/hi-familiarize-yourself-with-giggly-toucan.md`). The user's stated phenomenon: > Slight misalignment with the actuator (i.e. not directly above) causes > the UMR propulsion vector to be slightly non-parallel with the vessel. > This effect increases as the offset increases. This benchmark isolates the **field-side cause** — the dipole field at the UMR location tilts off the vessel-perpendicular plane as the magnet moves laterally. Downstream, that tilt drives the UMR axis to follow it (via $T = m \times B$), which produces the wobble and the lateral wall pressure that ultimately reduces step-out. A *direct* benchmark of step-out reduction requires a calibrated `ContactFrictionNode`, which is **out of scope for this plan** (per plan §"Out of Scope"). The plan therefore declares MIME-VER-132's quantitative tolerance on UMR-axis tilt deferred until that calibration lands; here we assert the upstream cause's monotonicity, which is a falsifiable claim about the dipole field formula. ## Configuration | Parameter | Value | |---|---| | Magnet standoff $z$ | 0.05 m | | Magnet rotation rate | 10 Hz about $+\hat z$ | | Magnet geometry | $R = 1$ mm, $L = 2$ mm | | Field model | `point_dipole` | | Lateral offsets swept | 0, 1, 2, 4, 6 mm (in $+\hat x$) | | Target | UMR at origin | | $\Delta t$ | $10^{-4}$ s | ## Procedure For each offset: 1. Spin the motor up to its commanded $\omega = 2\pi \cdot 10$ Hz at the standoff with the lateral offset applied to its parent pose. 2. Sample the magnet's instantaneous $B$-field at the UMR (origin) over one full rotation period. 3. Take a sample after spin-up and compute the tilt angle of $B$ off the xy plane: $\arcsin(|B_z| / |B|)$. Assert: - The list of tilt angles is *strictly monotonically increasing* with offset. - The on-axis (offset = 0) tilt is below 1°. ## Result **PASS** when both checks hold. The on-axis tilt is small (not exactly zero because the motor is in a brief PI-startup transient when the snapshot is taken, and the dipole formula evaluated at one instant is not exactly co-planar with the xy plane unless the dipole vector is also in the xy plane at that instant). ## Scope and Limitations - This benchmark validates the **field-side** chain only (i.e., the output of `PermanentMagnetNode`). Whether the UMR's axis tilts as predicted by $T = m \times B$ requires a coupled simulation, which is the subject of follow-on work once `ContactFrictionNode` is calibrated. - The dipole-only formula is valid here because the standoff is in the far-field regime ($z \approx 50 R_{\text{magnet}}$). At smaller standoffs the bench would need to switch to `current_loop` or `coulombian_poles`. ## Reproducibility - JAX precision: x64. - Run: `JAX_PLATFORMS=cpu .venv/bin/python -m pytest tests/verification/test_actuation_chain_equivalence.py::test_ver132_misalignment_field_tilt -x -q`.