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.