Class IslOdtsApp

Inheritance Relationships

Base Type

Class Documentation

class IslOdtsApp : public lupnt::LunaNetSubApp

Onboard inter-satellite-link (+ optional Earth-GNSS) ODTS flight application: a reusable LunaNetSubApp that owns the hub satellite’s Schmidt Extended Kalman Filter (SchmidtEKF, lupnt/numerics/filters/schmidt_ekf.h) and runs one predict/measurement-update cycle per scheduled Step().

The filter estimates the hub’s own 8-state [r, v, clock_bias, clock_drift] and carries each linked satellite’s 8-state as a Schmidt “consider” block (propagated and used in the update, never corrected). Each epoch the driving simulation stages that epoch’s measurement geometry/observations with StageMeasurements, then calls Step(t), which predicts to t, rebuilds the (per-epoch-variable) combined measurement model, and applies the update.

This is the single onboard sensor-fusion point: additional sensors (surface-station pseudoranges, Doppler beacons, star-tracker/IMU, …) are fused simply by extending IslOdtsMeasurementEpoch and the combined measurement model, without changing the hosting LunaNetSatApp or the driving simulation’s schedule. It mirrors the LunarODTSApp pattern used inside LunarGnssODTSSimulation.

Public Functions

inline IslOdtsApp()
explicit IslOdtsApp(IslOdtsAppParams params)
void Configure(Real t0, const VecXd &x0, const MatXd &P0, Ptr<JointOrbitClockDynamics> filter_dynamics)

Seed the onboard filter. Must be called before Setup().

Parameters:
  • t0 – Initial filter epoch [s, TDB].

  • x0 – Initial estimate, [own(8), consider_1(8), ...], size kSubStateSize * n_sat.

  • P0 – Initial covariance, same layout.

  • filter_dynamics – Reduced-order joint orbit-clock dynamics used to propagate the own block and every consider block.

virtual void Setup(LunaNetSatApp &app) override

Build the Schmidt-EKF (time/state/covariance/dynamics/process-noise) from the Configure inputs. The measurement model is (re)installed per epoch in Step.

virtual void Step(Real t) override

Predict to t [s, TDB] and apply the update using the currently-staged measurement epoch (which is then consumed).

virtual void Finish() override
void StageMeasurements(const IslOdtsMeasurementEpoch &meas)

Stage the next epoch’s measurements to be processed on the following Step.

inline State GetEstimate() const

Current onboard estimate [own(8), consider_*(8)...].

inline MatXd GetCovariance() const

Current onboard covariance, same layout.

inline const VecXd &GetPrefitResidual() const

Pre-fit measurement residual cached from the most recent Step ([crosslink range/range-rate..., anchor pseudorange...]).

inline const Ptr<SchmidtEKF> &GetFilter() const

The underlying Schmidt-EKF (for advanced inspection).

Public Static Attributes

static int kSubStateSize = 8

State size of one satellite block: [r(3), v(3), clock_bias, clock_drift].