Tune position adverts for fast movers shipped

Documents the atlasd 3.0.0 release lineView as Markdown

Range prediction and the terrain weights in routing read the positions other nodes advertise, so every node weighs an edge the same way and routing stays loop-free. How fresh those positions are is set by when a moving node re-advertises. The defaults keep ground nodes calm and make aircraft react within about a second; this guide shows the three settings, when to change them and how to see what they do. The mechanism is described under Position adverts.

What you need: nodes that know their position — live telemetry on the telemetry socket, [interface] position, or PUT /api/position. The settings live in [link_monitor] and apply without a restart.

The defaults

[link_monitor]
position_advert_distance_m        = 25    # moved this far from the last advert: one at once (0 = off)
position_advert_interval_secs     = 10    # moving at all: at least this often (0 = off)
position_advert_min_interval_secs = 1.0   # fewest seconds between two, node-wide
TriggerSends a position advert when
Distancethe node is position_advert_distance_m from the position in its last advert
Periodthe node has a fix, has moved at least 1 m since its last advert, and position_advert_interval_secs have passed
Terraina neighbour path changed terrain state (clear, marginal, shadowed, unknown) and the node has moved since its last advert

A parked or static node sends nothing extra: no movement, no period advert. The 30 s advert refresh and link changes still carry the position as before. The fix is checked every 250 ms.

Why 25 m: it is about a second of fixed-wing flight, under two for a multirotor, and less than one 30 m elevation cell, so a smaller step would not change a terrain profile. A walking dismount advertises every 10 s.

The rate limit and narrow bearers

A position advert is an ordinary routing flood. It marks every link as owing one, and each link carries it when that link is due:

  • A link with its own [[link]] route_advert_interval_secs — a bearer you declared narrow — carries it only when that interval is due, coalesced with the newest fix.
  • Every other link carries position adverts at most once per position_advert_min_interval_secs, node-wide, however fast the node moves. Position adverts are not held to the global [mesh] route_advert_interval_secs spacing of topology changes.

position_advert_min_interval_secs takes 0.1 to 3600; a value longer than the period is warned, because the period trigger would be held to it.

Worked settings

A survey aircraft with a long-range radio
[link_monitor]
position_advert_distance_m = 10       # the others route on a picture within 10 m of the truth

[[link]]
name = "rfd900"
route_advert_interval_secs = 16       # the radio still carries one advert per 16 s
A ground vehicle convoy on a shared narrowband net
[link_monitor]
position_advert_distance_m        = 50
position_advert_interval_secs     = 20
position_advert_min_interval_secs = 5.0
Fixed sites: only the refresh
[link_monitor]
position_advert_distance_m    = 0
position_advert_interval_secs = 0

Seeing it

The snapshot's position_adverts block holds the live settings and the counters:

FieldMeaning
sent, by_distance, by_period, by_terrainPosition adverts sent, and by which trigger
rate_limitedTriggers held by the minimum interval
paced_heldAdverts a paced link was not yet due for
moved_mDistance from the position in the last advert
per link: floods, position_floods, paced_heldWhat each link carried and held

What to expect: a 220 m move reaches the other nodes in 136–210 ms. Moving 60 m every 200 ms, a node sends about one advert a second on an ordinary link and one per pacing interval on a paced one, with rate_limited and paced_held climbing accordingly, and its last fix reaches the others within about a second after it stops. Behind a ridge, with terrain loaded, both ends move the route through a relay about 0.5 s after the move, where the 30 s refresh alone took about 23 s.

Boundaries

  • The rate limit holds on the advertising node's own links. A node that relays an advert re-floods it at once on every link, paced or not, as it does for every advert, so a mover's position adverts cross a relay's narrow bearer at up to the mover's own rate.
  • Receivers project an advertised position rssi_lookahead_secs ahead of now, not from the advert's age, so the distance trigger is plain distance from the last advert: a straight, steady flight still advertises every 25 m.
Esc
↑ ↓ navigateEnter — openEsc — close