Skip to content

Add a GNSS outage duration setting - #11

Merged
JaidenAGrimminck merged 2 commits into
mainfrom
gnss-outage-duration
Oct 16, 2026
Merged

JaidenAGrimminck merged 2 commits into
mainfrom
gnss-outage-duration

Conversation

@clmazzac

Copy link
Copy Markdown
Member

Problem

faults.outageProbability starts a GNSS outage with that chance on each fix. Once it starts, inOutage stays true to the end of the run. With a 0.01 probability at 10 Hz, an outage starts after about 10 s, and the fix does not return during a 600 s run.

That allows no test of how a filter recovers after GNSS returns. docs/autonomy-platform-gap-analysis.md lists outage recovery as a localization metric to add.

The scenario sensor-state action can disable GNSS for a set time, but that makes the sensor go silent. A real receiver that loses lock publishes STATUS_NO_FIX instead.

Change

New optional setting calibration.faults.outageDurationSec:

  • A positive value ends each outage that many seconds after it starts. After it ends, outageProbability can start a new outage.
  • A missing or zero value keeps the current behavior: the outage lasts to the end of the run. Existing runs do not change. The random number draws are in the same order, so seeded runs reproduce exactly.

The setting is not added to normalization, so normalized manifests and their hashes do not change. The Config page shows it under the GNSS advanced fields as "Outage duration (s, 0 = rest of run)". docs/run-manifests.md lists it in the GNSS row.

Tests

  • New test in tests/localization-sensors.test.js: a 0.5 s outage at 10 Hz gives five no-fix samples and then valid fixes. With the setting missing or 0, the outage continues for all 20 samples. The timed case fails without this change.
  • npm test on a clean checkout: 1965 pass, 6 skipped, 1 fail. The failure is Python decodes retained RGB, depth, and CameraInfo SFLog messages, which also fails on main.

Question for review

Was the permanent outage intended? If so, this keeps it as the default. If not, the default could become a finite duration in a later change.

🤖 Generated with Claude Code

clmazzac and others added 2 commits October 15, 2026 18:28
An outage started by faults.outageProbability lasted to the end of the
run. That allowed no test of filter recovery after GNSS returns.

faults.outageDurationSec ends each outage after that many seconds. After
it ends, the outage probability applies again. A missing or zero value
keeps the old behavior, so existing runs do not change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR #8 adds a test at the same place in the file. Moving this one up lets
the two PRs merge in either order.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@JaidenAGrimminck JaidenAGrimminck left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

might change this to an adjustable interval within the scenario or something; still figuring that out but seems good for now.

@JaidenAGrimminck
JaidenAGrimminck merged commit fee752a into main Oct 16, 2026
7 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants