Class LunarGnssOdtsApp

Inheritance Relationships

Base Type

Class Documentation

class LunarGnssOdtsApp : public lupnt::Application

Coordinator application for the lunar-orbiting GNSS ODTS scenario (Example 6), hosted on a physical Spacecraft receiver agent, which owns the truth orbit+clock and whose self-propagated truth the engine reads.

This wraps the (numerics-preserving) free-function ODTS engine. Its scheduled Step runs the entire GNSS Monte-Carlo body once, lazily, in the exact same computation and RNG-draw order as the former LunarGnssODTSSimulation::Run() so the numerics are preserved bit-for-bit:

  1. build the receiver truth trajectory + cislunar GNSS sidelobe link geometry / CN0 (from the precompute cache when available, else in-memory), applying the optional plasma delay table,

  2. run monte_carlo_runs seeds of the UDU EKF (or UDU stochastic-cloning EKF when TDCP is enabled), writing trajectory_mc<N>.csv + summary.csv under output_dir.

The heavy engine (RunLunarGnssODTSMonteCarlo and its helpers) is unchanged; the app only resets the global epoch to 0 (so the engine’s absolute-TDB propagation is not double-counted through GetLupntEpoch()) and drives it. Per-seed LunarGnssODTSSummary series are exposed via GetSummaries(); the full time series live in the CSV outputs.

Public Functions

LunarGnssOdtsApp() = default
explicit LunarGnssOdtsApp(Config &config)

Construct from a YAML application: block (self-driving, hosted path).

explicit LunarGnssOdtsApp(LunarGnssODTSConfig config)

Construct from a LunarGnssODTSConfig struct (struct API / tests).

virtual void Setup() override

Schedule the single per-run Step (APPLICATION priority) on the owning simulation’s event queue. The heavy engine is deferred to that Step.

virtual void Step(Real t) override

Run the whole Monte-Carlo ODTS body once (lazy; subsequent calls are no-ops).

inline virtual void Log(Real) override

Log this application’s current state/diagnostics to the DataLogger.

Base implementation only emits a debug message. Called once after Setup() and thereafter from Agent::Log(t) (which forwards to application_->Log(time) each time the owning agent logs). Derived classes (e.g. LanderNavApp::Log) override this to additionally log their Filter’s state/covariance and any error metrics.

Parameters:

t – Current simulation time [s, since simulation epoch]

void Precompute()

Build the receiver truth trajectory + link geometry cache without running the EKF, writing links_file. Optional; the EKF Step computes links in-memory when no valid cache exists.

inline const LunarGnssODTSConfig &GetConfig() const
inline const std::vector<LunarGnssODTSSummary> &GetSummaries() const