Depends on: Control layer (done) Blocks: Any closed-loop testing, B4/B5 benchmarks
UncertaintyModelABC (proper base class with composability)IdentityUncertainty(perfect sensing/actuation baseline)ActuationUncertainty— frequency jitter, field inhomogeneity, pointing error, thermal driftLocalisationUncertainty— Gaussian position noise, velocity noise, tracking dropouts,tracking_confidencefieldModelUncertainty— fractional noise on state fields (patient variability, fabrication tolerances)ComposedUncertainty— stacks multiple models,model_a + model_bsugar
Depends on: Metadata (done), GeometrySource (done) Blocks: Registry integration, benchmark result attachment
MimeAssetSchemadataclass with all fields from ARCHITECTURE_PLAN.md §8BenchmarkResultdataclassmime_compliantproperty (compliance gate)compliance_report()method- JSON serialisation (Phase 0–3 intermediate format before USD)
from_json()/to_json()round-trip
Depends on: Asset schema Blocks: Nothing directly — but establishes the test infrastructure for B0–B5
BenchmarkSuiteclass that discovers and runs registered benchmarks- B0–B5 as stub functions that raise
NotImplementedErrorwith clear messages about what's needed - Registration mechanism compatible with MADDENING's
@verification_benchmark
Depends on: Nothing (literature research) Blocks: Phase 1 node design (constrains what RigidBodyNode must represent)
- Confirm Rodenborn et al. (2013) as primary dataset
- Document robot parameters, channel geometry, fluid properties
- This is a research task, not a code task
Depends on: MimeNode (done), Phase 0A complete Blocks: 1C, all magnetic actuation scenarios
- Helmholtz coil (uniform field) model
- Rotating permanent magnet (dipole) model
boundary_input_spec: frequency_hz, field_strength_mt, field_direction- These are the
commandable_fieldsthat ControlPolicy targets
Depends on: 1A Blocks: 1C, B1
- Permanent magnet response: T = m x B, F = grad(m . B)
- Reads field_vector from 1A via edge, reads orientation from 1C
- Outputs magnetic_torque, magnetic_force to 1C
Depends on: 1A, 1B Blocks: B0, B1, B2, everything else
- Overdamped dynamics: velocity = R_T^{-1} * F_total, omega = R_R^{-1} * T_total
- Quaternion orientation representation
- Resistance tensor (sphere/prolate ellipsoid analytical, then RFT for helices)
- Additive boundary inputs for forces/torques from multiple sources
- Wall correction factors (Brenner) for confinement
Depends on: GeometrySource (done), 1C Blocks: B0, B2, B4
- Start with analytical Stokes drag (no resolved flow field) — sufficient for B0, B2
- Pulsatile component via Womersley analytical profiles in cylindrical geometry
- Later: IB-LBM for resolved flow
- Bidirectional coupling: receives robot position/velocity, returns drag force/torque
Depends on: 1A, 1B Blocks: B1, B5
- Observer node (not physics)
- Reads orientation from 1B, field rotation from 1A
- Computes phase_error = angle between magnetic moment and external field
- Step-out detection: phase_error > pi/2
Depends on: 1A–1E all complete
- B0: trajectory comparison against Rodenborn et al. experimental data
- B1: step-out frequency vs. regularised Stokeslet reference
- B2: drag force vs. Stokes law at Re < 0.1
Depends on: 1C
- First-order kinetics, Higuchi model, Korsmeyer-Peppas
- Trigger mechanisms (passive, pH, magnetic, acoustic)
Depends on: 1D, 2A, GeometrySource
- Advection-diffusion equation
- Potentially wraps MADDENING's HeatNode (Mode 1)
Depends on: 1B, 1C
- Susceptibility artefact model
- Feeds into UncertaintyModel for realistic position noise
Depends on: 1C
- Cosserat rod / discrete elastic rods for flagellar robots
Depends on: 1C, GeometrySource
- Penalty-based contact, adhesion models
- Near-wall hydrodynamic corrections
Depends on: 2A, 2B
- Non-Newtonian Rheology, Acoustic nodes, etc.
Depends on: 1E, control layer (done)
Depends on: 2C, uncertainty layer
Depends on: 3A, 3B, Neurobotika mesh (external)
Depends on: Asset schema, stable node APIs
Depends on: 4A, MICROBOTICA Phase 0
Depends on: 4B