MIME-VER-130 — Actuation-Chain Field Equivalence (Far-Field Limit)#

Date: 2026-04-30 Producer under test: Motor + PermanentMagnetNode chain Reference producer: mime.nodes.actuation.external_magnetic_field.ExternalMagneticFieldNode Algorithm IDs: MIME-NODE-100, MIME-NODE-101, MIME-NODE-001 Benchmark type: Mode 1 (Wrapping equivalence) Test file: tests/verification/test_actuation_chain_equivalence.py::test_ver130_field_equivalence_far_field Acceptance: $|B_{\text{new}} - B_{\text{legacy}}| / |B_{\text{legacy}}| < 0.02$ over a full rotation period


Goal#

Demonstrate that the new Motor + PermanentMagnetNode chain reproduces the rotating uniform field of the legacy ExternalMagneticFieldNode in the configuration where the legacy uniform-field assumption is physically valid: a rotating dipole far from the workspace, with the rotation axis perpendicular to the line from magnet to UMR.

This benchmark establishes that the new chain is a strict generalisation of the legacy node — anyone currently using the legacy node can switch to the new chain in this regime without a quantitative trust gap.

Configuration#

Parameter

Value

Standoff $z$

0.05 m (50 mm; ≈ 50× magnet length)

Field amplitude $B_0$

1.2 mT (matches dejongh nominal)

Frequency $f$

10 Hz

Magnet geometry

$R = 1$ mm, $L = 2$ mm; cylindrical

Field model

point_dipole

Dipole moment $

m

Earth field

0 (apples-to-apples comparison)

Timestep $\Delta t$

$10^{-4}$ s

Samples

100 over one full period (100 ms)

Procedure#

  1. Build a standalone ExternalMagneticFieldNode driven at the matched $f$ and $B_0$.

  2. Build a MotorNode in velocity-mode at $\omega = 2\pi f$ and a PermanentMagnetNode with the matched dipole moment, parented at $(0, 0, z)$ with axis $+\hat z$ and dipole along the rotor-frame $+\hat x$.

  3. Step both at the same $\Delta t$; sample the field at the UMR (origin) 100 times per period.

  4. Compute (a) per-sample magnitude error and (b) per-sample direction angle between the two field vectors.

Result#

PASS.

  • The relative magnitude error stays below 2% over the full period — the residual is dipole-vs-uniform field anisotropy and the small motor startup transient at $t=0^+$.

  • The direction agreement is within 5° of phase — the new chain’s motor needs ~one rotation period to fully lock into velocity-mode steady-state under the default PI gains. Tuning the gains (specifically velocity_kp) tightens this further; defaults are sufficient for the 2 % acceptance.

Scope and Limitations#

  • Far-field configuration only: point_dipole is faithful at $z \gg R_{\text{magnet}}$. Closer in, the bench needs the current_loop or coulombian_poles model — see MIME-VER-110 / MIME-VER-111.

  • Validates the producer side. Whether downstream physics (UMR magnetic response, rigid body, drag) reproduce the legacy result is the subject of MIME-VER-131.

Reproducibility#

  • JAX precision: x64.

  • Run: JAX_PLATFORMS=cpu .venv/bin/python -m pytest tests/verification/test_actuation_chain_equivalence.py::test_ver130_field_equivalence_far_field -x -q.