Skip to content

Position Estimation ​

New in 4.9.3

Position Estimation now lives in Global Settings (it was previously tucked into a per-source Automation tab), and gained a Maximum acceptable accuracy cutoff. On the map, the uncertainty circles are now controlled by the Show Accuracy toggle.

MeshMonitor can estimate a location for nodes that never report GPS, by pooling the geometry already present in your mesh data β€” traceroutes and NeighborInfo β€” into a single best-guess position per node.

How it works ​

Estimation is a global, cross-source batch job. It runs on a schedule (not in realtime) and pools observations from every Meshtastic source, including the embedded MQTT broker and MQTT bridges. MeshCore sources are excluded.

Two kinds of geometric constraint feed the solver:

  • Traceroutes β€” each A β†’ X β†’ B segment anchors the intermediate node X toward its positioned path-neighbors, biased by per-hop SNR.
  • NeighborInfo β€” each direct-RF-range pair anchors the unpositioned side to the positioned side.

The solver computes an SNR- and time-weighted centroid of the anchor observations, plus an uncertainty radius (in km):

  • A node seen from a single anchor can only be placed "within radio range", so it gets a conservative default radius (~5 km).
  • A node seen from multiple converging anchors gets a much smaller radius (weighted RMS distance Γ· √effective-sample-size).

For the full math behind the accuracy circle β€” the SNR/time weighting, the weighted centroid, the effective-sample-size confidence blend, and worked examples β€” see Estimated Accuracy.

Estimates are written to a global table β€” one row per physical node β€” so every source shows the same estimate. A node that later reports a real position is dropped from the estimate set automatically.

Configuring estimation ​

Open Global Settings (the βš™οΈ gear in the dashboard sidebar) β†’ Position Estimation. The controls are global and require settings:write.

ControlWhat it does
EnableTurns the scheduled estimator on/off. On by default.
Calculation frequencyHow often the batch job runs (3 / 6 / 12 / 24 hours). Default 6h.
Lookback windowHow far back observations are pooled (1 / 3 / 7 / 14 / 30 days). Default 7 days.
Maximum acceptable accuracy (km)Estimates whose uncertainty radius is larger than this are discarded instead of stored β€” so low-confidence guesses don't litter the map with huge circles. Default 2. 0 = no limit.
Recalculate nowRuns the job immediately. The last-run summary shows how many nodes were estimated, how many observations were pooled, and how many were discarded by the accuracy cutoff.

Choosing a maximum accuracy ​

The single biggest source of oversized circles is the ~5 km single-anchor default. If your map is cluttered with large dashed circles, set Maximum acceptable accuracy to roughly 2–3 km: nodes that can only be placed "somewhere within radio range" are dropped, while well-triangulated nodes (seen from several directions) are kept. Already-stored estimates that no longer qualify are cleared on the next run.

Stale and single-anchor estimates ​

  • A node seen from one anchor position is always a single-anchor estimate, with the radio-range default radius, however many observations back it. Repeat observations of the same anchor do not count as more anchors.
  • Each run also deletes stored estimates it did not rewrite. A node with no observation left in the lookback window loses its estimate and leaves the map.
  • A single-anchor estimate (about 5 km) leaves the map when Maximum acceptable accuracy is below its radius. The default is 2 km, so with the default most single-anchor pins do not show. Set the cutoff to 0 or to 5 or more to keep them.

Viewing estimates on the map ​

Two independent per-user map toggles live in the Map Features panel (Nodes map / dashboard map):

  • Show Estimated Positions β€” shows the estimated node markers.
  • Show Accuracy β€” shows the uncertainty circle around each estimated node (and the precision-bits accuracy regions for GPS nodes). Turning it off declutters the map while keeping the markers.

When the position in Node Details is estimated, a box explains it:

  • The method in plain words: a single anchor with the radio-range default, partly converged, or converged from N anchors.
  • The uncertainty, the number of observations, the number of unique anchors, and when MeshMonitor computed it.
  • The anchor list: name, ID, kind, SNR, weight and distance from the estimate. It collapses when there are more than 3.

You see only the anchors you may see on the map. If some are hidden, the box says "Showing N of M observations". The box does not show for GPS or overridden positions.

An estimated node's uncertainty circle is drawn only when both toggles are on, so a circle never appears without its marker. The circle radius is the node's computed uncertaintyKm β€” a small circle means a confident, multi-anchor estimate; a large one means the node could only be placed loosely.

Added in 4.14.1 (#4609)

Each estimate now records the anchors behind it β€” the traceroute and neighbor observations that placed the node β€” along with the radius method used (single_anchor, blended, or convergence). This exposes why a node was placed where it was, rather than just the result.

Permissions & API ​

The estimator's status and controls map to the global settings resource:

  • GET /api/settings/position-estimation/status β€” settings:read
  • POST /api/settings/position-estimation/run-now β€” settings:write
  • Settings are saved through POST /api/settings β€” settings:write