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 |
|
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#
Build a standalone
ExternalMagneticFieldNodedriven at the matched $f$ and $B_0$.Build a
MotorNodein velocity-mode at $\omega = 2\pi f$ and aPermanentMagnetNodewith the matched dipole moment, parented at $(0, 0, z)$ with axis $+\hat z$ and dipole along the rotor-frame $+\hat x$.Step both at the same $\Delta t$; sample the field at the UMR (origin) 100 times per period.
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_dipoleis faithful at $z \gg R_{\text{magnet}}$. Closer in, the bench needs thecurrent_looporcoulombian_polesmodel — seeMIME-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.