Class GroundOdtsApp

Inheritance Relationships

Base Type

Class Documentation

class GroundOdtsApp : public lupnt::Application

Centralized ground-segment ODTS filter, hosted on a SurfaceStationManager.

A single EKF estimating every satellite’s joint orbit + clock 8-state from IslStationObss pushed by the StationBeaconSensors on the physical surface-station agents — no inter-satellite links. As onboard software it never synthesizes measurements from truth: it only consumes what the station sensors deliver and runs a predict/update cycle with its own (filter) dynamics. (Truth is read once, at setup, to seed the a-priori guess — the analog of an uploaded a-priori ephemeris, as in the ground-station example.) Range-only ground tracking is weakly observable, so it uses a larger process noise and normalized-residual outlier rejection.

Public Functions

GroundOdtsApp() = default
explicit GroundOdtsApp(Config &config)
virtual void Setup() override

Initialize the application and schedule its periodic Step() calls.

Base implementation: if GetFrequency() > 0, schedules Step(t) on the owning agent’s Simulation at Event::Priority::APPLICATION, starting at t=0 with period 1/GetFrequency() seconds; otherwise logs a warning that no frequency is set. Derived classes (e.g. LanderNavApp::Setup, SurfaceStationApp::Setup) override this to additionally initialize their Filter’s time/state/covariance and dynamics/process noise callbacks before (optionally) calling the base behavior.

virtual void Step(Real t) override

Run one simulation step of this application’s mission logic at time t.

Pure virtual: derived classes implement the actual filter predict/update cycle here (e.g. LanderNavApp::Step computes a control input and logs state; the LNSS application’s Step would run the GNSS measurement-update). Invoked periodically by the Simulation event scheduled in Setup(), at the application’s configured frequency.

Parameters:

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

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]

int SatIndex(const std::string &sat_name) const

Resolve a satellite name to its filter-state block index (for the sensors).

inline int EpochIndex(double t) const

Uniform-grid epoch index for time t [s].

inline void AddMeasurement(const IslStationObs &m)

A station sensor pushes one observation into the current epoch’s buffer.

inline const std::vector<std::string> &SatelliteNames() const
inline const VecXd &TimeGrid() const
inline const MatXd &EstCentral() const
inline const std::vector<MatXd> &CovCentralFull() const

Public Static Attributes

static int kSub = 8

Protected Functions

void Initialize()
void RecordEpoch(int k)

Protected Attributes

int seed_ = 42
double dt_s_ = 60.0
double duration_s_ = 21600.0
int moon_gravity_degree_filter_ = 8
int moon_gravity_order_filter_ = 8
bool include_earth_ = true
bool include_sun_ = true
bool use_relativity_ = true
double integration_step_s_ = 60.0
double pseudorange_sigma_m_ = 1.0
bool include_station_doppler_ = true
double station_doppler_sigma_mps_ = 1.0e-3
double process_accel_sigma_mps2_ = 1.0e-6
double outlier_threshold_ = 3.0
double initial_position_sigma_m_ = 200.0
double initial_velocity_sigma_mps_ = 0.1
double initial_clock_bias_sigma_s_ = 1.0e-6
double initial_clock_drift_sigma_sps_ = 1.0e-9
std::vector<std::string> sat_names_
std::vector<std::string> station_names_
bool initialized_ = false
Real epoch0_ = 0.0
int n_sat_ = 0
int n_state_ = 0
std::vector<Spacecraft*> sats_
std::map<std::string, int> sat_index_
std::vector<IslStationObs> inbox_
Ptr<EKF> ekf_
std::mt19937 rng_
VecXd t_grid_
MatXd est_central_
std::vector<MatXd> cov_central_full_