Aether · UWB + IMU positioning mesh · reality check

Can 4 phones survey themselves indoors?

An honest, physics-first read on the ask. Short version: the field trouble is not a code defect — it is the predictable signature of an over-stacked target, and the decisive lever is provisioning, not more software.

Scope feasibility & mission Basis code · roadmap · 2 field captures · UWB-RTLS literature Verdict re-scope + provision

The thesis, as one number

anchors → spare constraints 0 4 undetectable 1 5 detectable 3 6 6 7 10 8

Spare inter-anchor constraints = C(n,2) − (3n−6). At 4 anchors it is exactly 0 — a biased or body-blocked link is mathematically undetectable. Every reliability property the project wants begins at 5.

Bottom line, up front

A cooperative, self-solving indoor UWB+IMU mesh is sound and buildable. The reliable version is a static mesh of ≥5–6 geometrically- and vertically-diverse anchors, with NLOS mitigation, solved-and-locked over time, a ranging schedule for clients, interior coverage, and decimetre expectations. What the physics does not support is the maximalist reading of today's ask — survey-free · sub-centimetre · phone-only · 4-anchor · widely-spaced · indoor · exterior clients · live human traffic — all at once.

01 The system as it stands

What we are actually judging, from the code, the roadmap, capture4, and the layout video.

4 anchors, one the root — physically 3 on tripods at ~1.2–1.45 m plus one low in a red cup at ~0.89 m, in a ~2.3 m × 3.7 m footprint inside a small furnished living room. Phone-class UWB (Galaxy-class anchors; Pixel observer), not dedicated RTLS hardware. Survey-free: the frame is solved purely from inter-anchor ranges — for 4 anchors that is 6 ranges = 6 DOF, an exactly-rigid graph with zero redundancy. In the field, A3's cross-room links read +0.57 / +0.75 m long (a stable NLOS bias where the links physically cross furniture), devices disagreed on the shape, the mesh didn't reliably lock, and one link went dark. Production intent adds wider spacing and several clients wandering interior and exterior through human line-of-sight blockage.

02 The physics that decides it

Four UWB-positioning invariants — not Aether-specific, each externally sourced — govern every answer below.

A fifth fact governs scale, not accuracy: two-way ranging scales poorly with many tags unless coordinated by a TDMA schedule (or moved to TDoA).

03 Straight answers

The questions as asked, answered without hedging.

Can a 4-anchor phone mesh solve reliably and withstand clients + humans crossing LoS?

No — not reliablyIt can be solved in a clean moment and held (worth doing), but with zero redundancy any single blocked/biased link has nothing to out-vote it, and indoors a body may be sitting on one at any instant. There is no built-in error detection by construction.

Can software solve it — developed, COTS, or a mix?

Mitigate, not overcomeOn a zero-redundancy graph, no estimator — robust least-squares, RANSAC, a neural NLOS classifier, factor graphs, anything COTS — can detect a lone biased edge; the residual is identically zero. That is an information limit. Software wins only with the right geometry, or by using time (average a static mesh) or extra sensors (IMU/observer).

Is success guaranteed by adding hardware (more anchors)?

Highest-leverage leverNear-sufficient — with caveats. 4→5 flips redundancy 0→1 (a biased edge becomes detectable); 6–8 gives graceful degradation and LoS diversity against blockage. But added anchors must bring geometric + height diversity, and many radios need a schedule. Boxes placed badly don't help.

Is it the shape of the constellation?

SecondarilyThe set is near-coplanar (weak vertical + mirror ambiguity) and its small hull dooms exterior clients to runaway GDOP. But shape is downstream of the deeper issues — redundancy = 0 and uncorrected NLOS. Fix those and the shape problem largely dissolves.

Could they be spaced further apart and still range/solve?

Inverted indoorsFarther links mean lower SNR and more obstructions per link — indoors with phones, wider spacing makes reliability worse, not better. Wide spacing is an open-LoS / better-antenna property. Denser, well-placed anchors win.

Is the indoor setting the cause?

Primarily, yesMultipath, NLOS, and human-body blockage are the dominant error sources; the same 4 phones outdoors in clear LoS would solve far more reliably. “Indoor” is the difficulty multiplier; “4 anchors” and “no survey” remove the margin that would absorb it.

04 Fundamental limits — hard vs soft

HARD a physics/geometry/information wall no code crosses on this hardware. SOFT addressable in software or protocol. The two problems the project spent most on — agreement and accuracy — both sit on top of L1, which is hard.

#LimitationKindCapsLever
L14 anchors = 0 redundancy — a biased/blocked edge is undetectableHARDreliability of the anchor solve≥5–6 anchors
L2Near-coplanar — weak vertical, mirror ambiguityHARDvertical accuracy, lock stability≥3 distinct heights
L3Exterior clients outside the anchor hullHARDexterior accuracyanchors around coverage
L4Indoor NLOS / human blockage — time-varying bias & dropoutsSOFT·ishinstantaneous accuracyNLOS reject · average+lock · redundancy
L5Phone-class radios — short range, coarse AoA, thin CIR, session capsHARD·ishrange, AoA, client capacitydedicated anchors; phones as clients
L6Many clients over TWR — channel capacitySOFTsimultaneous clients / rateTDMA schedule or TDoA
L7Survey-free — no external scale referenceCHOICEimmunity to a wrong-scale edgeone known baseline, or redundancy

05 What actually moves the needle

Ranked by leverage. The numbering is the priority order — do them roughly in sequence.

  1. Provision ≥5–6 anchors with geometric + height diversity. The biggest lever. Five flips redundancy to 1; six gives graceful degradation and LoS diversity. Place them convex around the coverage area at ≥3 heights — and this activates the #63/#69 software that is inert on 4.

  2. Turn NLOS mitigation from stub to real (#62 → classifier). Capture first-path/RSSI (started) and reject or down-weight blocked links — the standard technique. Accept that phone radios cap how good it gets.

  3. Solve-once-and-lock the static mesh; average over time. Anchors don't move: solve in a clean window, lock, re-solve only on a persistent change. Turns transient human blockage from a solve-killer into a non-event.

  4. Add a ranging schedule (TDMA) — or move clients to TDoA. Uncoordinated TWR hits a capacity wall for several clients (and is a prime suspect for the dark link). This is how COTS RTLS reaches many tags.

  5. Keep the over-determination software (#63/#69). No change — it earns its keep once step 1 lands.

  6. Set exterior-client expectations honestly. Outside the hull, multilateration can't be accurate. Ring the exterior with its own anchors, or declare it “presence, not precision.”

  7. Consider a hardware-tier split. Dedicated UWB anchors for fixed infrastructure (real antennas, CIR, range); phones as clients only — what every serious indoor RTLS does.

06 Re-scope the acceptance criteria into tiers

Today's criteria conflate asks that conflict: wide spacing vs indoor NLOS; exterior clients vs a clustered hull; survey-free sub-cm vs a biased edge; phone-only vs range + NLOS rejection. Split the definition of done.

Tier A · now

Locked interior mesh

Static 4–6-anchor mesh, interior clients, solved-and-locked, decimetre, NLOS-mitigated, low client count. Essentially the convergence gate with a realistic tolerance and a 5th anchor. A real, demonstrable product.

Tier B · provision

Multi-client + resilient

Several clients, blockage-resilient, via 6–8 anchors + a ranging schedule. Needs the provisioning and scheduling levers (steps 1 & 4).

Tier C · renegotiate

The maximalist ask

Survey-free sub-cm and exterior clients and phone-only and wide spacing. Pick one or two to relax — all four together isn't supported by the physics on this hardware.

07 Revised constraints — courses of action, updated

A later framing fixes four constraints and relaxes the rest. Freeing anchor count and survey dissolves the hard limits above (L1/L2/L3/L7) and activates the #63/#69 over-determination code that was inert on 4 anchors — the geometry problem becomes a provisioning problem, and provisioning is now allowed.

Binding human trafficrapid clients low-latency cmcommercial devices only
Relaxed anchor countsurvey spacingexterior

The new binding tension

Centimetre + rapid motion + consumer-only collide. Consumer per-range ≈ 8–12 cm; a dense surveyed field lands position at ≈5–10 cm — single-digit cm, not sub-cm. A moving tag can't average ranges down; true ≤1 cm needs carrier-phase, which phone APIs don't expose; and consumer clocks can't sync to the sub-ns TDoA needs (1 ns ≈ 30 cm), so ranging stays two-way. Human traffic is now beaten by anchor density + NLOS rejection + IMU coasting.

CoA A · recommended

Dense surveyed lattice + TWR + IMU

8–16 surveyed, height-diverse consumer anchors (≥6–8 in LoS everywhere) · robust redundant multilateration (#63/#69, now active) · NLOS rejection (#62) · ES-EKF IMU fusion (predict 100–200 Hz → low latency + smooth fast motion) · TDMA scheduling. ≈5–10 cm, low-latency, traffic-robust — built on the existing stack.

CoA B · bonus

Client AoA / PDoA refinement

Where a client exposes direction (iPhone U1/U2; some Samsung), fuse the angle for a tighter fix. Real but coarse and device-specific — a refinement on A, not a foundation.

CoA C · the fork

Relax one constraint for true ≤1 cm

Sub-cm on fast movers isn't reachable consumer-only. Relax exactly one: (i) a dedicated commercial UWB anchor tier (CIR + carrier-phase + sync → TDoA RTLS; phones stay clients), or (ii) cm → few-cm and take A's ≈5–10 cm. A product decision.

Recommendation. Build CoA A now (consumer-only optimum, mostly wiring the existing engine), instrument the achieved σ, and let that number drive the CoA C decision — the walk-capture in progress measures exactly it. Net-new engine work: a TDMA ranging scheduler, dense-anchor auto-survey / calibration, an IMU-forward low-latency output, and live NLOS rejection (mandatory at cm budget).

08 Relaxing sub-cm — the triggers survive

Sub-cm is relaxed to CoA-A's ≈5–10 cm on one condition: the geometric-predicate triggers stay accurate and low-latency. They do — because of one reframe.

The reframe

Predicate reliability ≠ position accuracy. Evaluate a predicate against the position and its covariance (the EKF already emits per-axis σ), and coarser position costs granularity — the smallest resolvable zone / object / gap, not reliability. Margins are spatial, so latency is untouched — crossings can even fire predictively off the fused velocity. The only real cost: at σ ≈ 5–10 cm, features closer than ~0.5 m can't be cleanly separated.

Forward-compatible by design

Make every margin σ-driven and reintroducing sub-cm is automatic: feed lower-variance measurements (better radios, a dedicated-anchor tier, or carrier-phase) → the covariance drops → every predicate margin shrinks on its own and the triggers sharpen, with no predicate change. So better tech is a recalibration (anchor positions + delays) at most; a new modality (carrier-phase / TDoA) enters as one added EKF factor; the predicate logic never moves. Design mandate: never hardcode a spatial tolerance — derive it from the live covariance. The accuracy tier becomes a dial, not a rebuild.

09 Below the floor — huddle-scale predicates (<1 m)

Real predicates put entities <1 m apart (a huddle is ~0.3–0.5 m) — below §08's ~0.5 m granularity floor, so it needs better than 5–10 cm. Does more hardware get there?

More anchors ≠ sub-cm

Range error is random (averages ~1/√(N·M)) ⊕ systematic (antenna delay, multipath, NLOS bias, timestamp quantization — persistent, not zero-mean). ToF resolution is set by bandwidth (UWB 0.5–1 GHz → ~15–30 cm raw, few-cm refined), not anchor count. So anchors asymptote at the systematic floor (~2–5 cm) and never reach sub-cm — and in a huddle the bodies NLOS the anchor links, degrading it further. Crossing the floor needs a different measurement modality, not more boxes.

The unlock — relative, not absolute. The huddle is a tell-them-apart question, and relative accuracy is cheaper: direct peer-to-peer ranging measures a separation with no anchors, and common-mode anchor error cancels between co-located devices. Match need to rung:

ResolveNeeds errorReachable by
~1.0 m~0.50 mCoA A (5–10 cm) — already fine
~0.5 m loose huddle~0.25 mCoA A + dense anchors
~0.3 m huddle~0.15 mCoA D — P2P relative ~5–10 cm
~0.1 m~0.05 mCoA E / G — carrier-phase / optical
~0.02 m sub-cm~0.01 mCoA E / F — carrier-phase, RTLS

Layer them — accuracy becomes per-zone

Because the engine is σ-driven, these aren't rival tiers — each is a measurement factor you add. Default to A + H + D (all consumer-safe; resolves the huddle, keeps identities); add E or G only in the zones that truly need <5 cm; reserve F for guaranteed-mm fixed installs. You never need one global tier — a huddle zone runs P2P + optical while the rest runs anchor-only, and every predicate consumes whatever covariance its region delivers.

10 Interlacing meshes for sub-cm — consumer-only

Constraint restored to consumer devices only. Can layering multiple meshes over a shared band reach sub-cm? Yes — but not by stacking UWB.

Stacking UWB doesn't cross the floor

More UWB — spatial, frequency-diverse, or differential (RTK-style) — all shares the same ToF/bandwidth/multipath floor, so it clusters at low-cm (~2–3 cm), never sub-cm on a mover. Consumer APIs give a distance per channel, not raw phase, so you can average channels but not coherently synthesize bandwidth; and UWB multipath decorrelates within ~one wavelength (~4 cm), so a differential reference can't cancel the rover's local multipath. Same physics floor, N times.

The crossing needs a different-physics layer — and one is pure consumer: acoustic. Sound is ~10⁶× slower than RF, so the sub-ns timing that's brutal for UWB is trivial for sound: a 48 kHz mic samples every ~7 mm, cross-correlated to cm — sub-cm at short range. Speaker + mic are on every phone; ultrasonic (18–24 kHz) keeps it inaudible. Its weaknesses (short range, noise, bodies) are exactly UWB's strengths — which is why you layer them.

UWBabsolute frame · identity · coverage · cm range + peer-to-peer
ACOUSTICshort-range cm–sub-cm relative in the huddle (ultrasonic chirp ToF)
IMUdynamics · low latency · coasting through dropouts
OPTICALoptional — camera photogrammetry, mm relative (light / LoS / privacy)

Why it fits Aether

The shared band already exists — BroadcastBand + the Raft fabric is the cross-mesh sync + measurement-exchange channel the question posits. The ES-EKF becomes a σ-weighted joint factor graph ingesting heterogeneous edges (UWB range, P2P, acoustic, IMU, optical). Accuracy is then per-edge and per-zone: a huddle lights its acoustic layer for sub-cm relative; open areas run UWB-only. You beat the UWB floor not by stacking UWB, but by interlacing a slower-wave mesh over the same band.

11 Reliable mesh solving — the dependable precursor to aiming

Accept cm (not sub-cm) accuracy for now and make the mesh solve reliably first — because accurate client aiming can't sit on a frame that isn't dependable. Can 4 anchors do it, at what cost, and what do more anchors measurably buy?

4 anchors: reliable only if you trade away four freedoms

With zero spare constraints (masthead), a 4-mesh can't detect its own bad edge — so to be dependable it must surrender survey-free operation (pin the frame to the survey), arbitrary placement (non-coplanar, clean LoS on all 6 edges), continuous re-solve (solve-once-and-lock), and self-healing (manual re-commission if bumped). It reliably solves a static, surveyed, locked, lightly-trafficked mesh — not a survey-free, mobile, trafficked, self-healing one.

What more anchors buy · (1) survives human traffic

50% — coin-flip anchors → P(≥4 clean LoS) 24% 4 drops ¾ 53% 5 74% 6 ◄ recommended 87% 7 94% 8

Each anchor independently body-blockable at p=0.7; a good 3-D fix needs ≥4 clean anchors. Going 4 → 6 takes a mesh from dying when a person walks through it (24%) to solving 3 of 4 moments (74%). This is the resilience metric that matters under real traffic.

What more anchors buy · (2) accuracy — but only down to the floor

anchors → position σ (cm) systematic floor ~4 cm — anchors can't cross ~12 ~8 6.7 6.0 5.6 4 5 6 7 8

Illustrative σ ≈ floor + A/(N−3). More anchors shrink the geometric/GDOP error and asymptote at the ToF systematic floor — real gains, but never sub-cm. The takeaway divides cleanly: add anchors for reliability & traffic-resilience (charts above), not to change the accuracy class (that needs §09–§10's different-physics layers).

Courses of action for a dependable solve — the R-series, ordered from zero-hardware-today to the robust target:

Recommendation — lock now, provision to six for traffic

NOW (0 hardware): R1 + R4 — pin to survey, solve-once-and-lock, add the NLOS/σ gate → today's mesh is dependable for a static, light-traffic solve, enough to start validating aiming against a frame that won't move under you. NEAR-TERM: R2 drops the tape-measure (validated by the walk capture). TARGET: R3 — provision to 6 anchors, the honest precursor to reliable aiming under real traffic: 4 can be made reliable only by giving up mobility, blockage-tolerance and self-healing — 6 buys all three back for the price of two devices. Keep R4's lock-and-gate as the invariant.

The mission, honestly

The premise is right and the software built so far is largely correct and necessary — it is simply operating under a geometry that gives it nothing to work with. Spend the next effort on anchors, placement, NLOS signal, and a scheduler, tier the acceptance criteria, and the achievable version is close at hand. The walk-capture in progress will quantify exactly how much of the 4-anchor gap the observer lever can close — which tells us whether a 5th anchor is optional or mandatory for the target tier.

Sources

Full analysis + citations: design/MISSION_AND_FEASIBILITY.md · basis: MOFE engine, roadmap, capture4 NDJSON, aether_mesh_survey.mp4