Scenario kind pagesEdit on GitHubSource: docs/kinds/by-kind/mars-pnt.md

mars-pnt (scenario kind)

Scenario kind of the engine v0.38.0, family Constellations, coverage and geometry. Advisory: analysis output from a research and engineering tool, not type-approved navigation equipment and not a safety-of-life service. Every label here is the engine's or the verification matrix's; a kind is MODELLED unless the matrix says otherwise (how a label is earned: the README's Evidence section).

What it does#

Deep-space Mars PNT: a simulated MARCONI relay constellation (areostationary + inclined relays broadcasting one-way + relaying two-way to a deep-space station) navigates a reference user (transfer | lmo | surface) through the joint one-way/two-way radiometric fusion estimator. Reports per-epoch geometry/visibility, achieved RMS vs truth, and the formal covariance (1σ / 3σ position) — an honest simulated FoM, NOT a certified protection level.

One run of scenarios/mars-pnt-lmo.toml summarises as: mars-pnt 5aad87fcc94a | lmo user, uso clock | 5 relays (mean 3.1 in view) | converged pos RMS 0.25 m, formal 1σ 0.31 m (3σ 0.93 m — covariance FoM, not a certified PL) | clock-freq σ 3.71e-13 | cov-PD true

Inputs#

From the schema (kshana kinds --json):

  • Required fields: none
  • Optional fields: user, clock_class, step_s, duration_s, nmax, range_sigma_m, doppler_sigma_mps, dynamic_tightness, two_way_period_s, seed

The example scenarios/mars-pnt-lmo.toml sets, among others:

Field Value Unit
clock_class uso text
doppler_sigma_mps 1.0000e-4 m/s
duration_s 7200 s
dynamic_tightness 0.1 not stated
kind mars-pnt text
nmax 4 not stated
range_sigma_m 1 m
seed 331514052 not stated
step_s 60 s
two_way_period_s 1800 s
user lmo text

Run it#

kshana scenarios/mars-pnt-lmo.toml

3 bundled scenarios use this kind; the others are in scenarios/.

What it gives#

The scalar results of that run, with the units the engine states:

Result Value Unit
areostationary_radius_m 2.0428e7 m
clock_class uso text
fom.converged_pos_3sigma_m 0.927387 m
fom.converged_pos_rms_m 0.245604 m
fom.converged_pos_sigma_m 0.309129 m
fom.covariance_pd_throughout true flag
fom.epochs 120 count
fom.final_clock_freq_sigma 3.7072e-13 1
fom.initial_pos_error_m 2692.582404 m
fom.mean_relays_in_view 3.066667 count
The chart the engine writes for scenarios/mars-pnt-lmo.toml, kind mars-pnt

Evidence#

MODELLED: the verification matrix rows that name this kind.

  • MODELLED The body-pnt kind: an orbiter or a surface lander around a body chosen by name navigates with one-way pseudoranges from a Walker navigation constellation around the body (two-body orbits with the body's J2 secular drift, an unknown user c

The rows the run itself exercised, with the oracle the matrix gives each (the public sources are named there):

  • VALIDATED Recover an epoch state [r,v] from ground-station ranges via a Gauss–Newton batch differential corrector and a sequential filter, over a two-body+J2 force model. Oracle (ExternalDataset): Orekit 12.2 (CS GROUP, Apache-2.0) BatchLSEstimator (Levenberg–Marquardt) + KalmanEstimator (EKF) — an independent third-party estimation library on a matched force model; recovered epoch state + post-fit residual RMS agree to <1e-3 m noiseless and <3 m at a 5 m noise floor
  • MODELLED 3-state (phase/freq/drift) van-Loan Kalman clock, Joseph-stabilised. Oracle (ReferenceImpl): filterpy 1.4.5 KalmanFilter (R. Labbe, MIT), with F via scipy.linalg.expm and Q via the Van-Loan 1978 block-matrix — an independent reference implementation reproducing kshana's full filter trajectory. Cross-implementation consistency: the clock physics / Allan calibration are not externally validated, so this stays MODELLED. 0.30 external comparison, a finding (stays MODELLED): on IGS final 30 s clocks of 11 GPS Blo
  • MODELLED Deterministic, scenario-hashed, SBOM + cross-platform golden gates. Oracle (ExternalDataset): SBOM conformance to the official CycloneDX 1.5 JSON Schema (+ valid SPDX identifiers) — an external published standard, zero validation errors over the full dependency graph; the FoM-determinism / byte-reproducibility part remains a pinned self-consistency check, so the row stays MODELLED

Limitations#

What the run's own report says is not modelled or not validated:

  • Onboard clock state estimation is MODELLED, not validated: checked against a separate implementation in this same codebase — independent of the unit under test, but not externally authoritative. (verification matrix (docs/MODELLED-RATIONALE.md))
  • Reproducibility & software assurance is MODELLED, not validated: a sub-claim is externally checked, but the whole capability composes modelled pieces, so the capability stays Modelled. (verification matrix (docs/MODELLED-RATIONALE.md))

See also#