Class LansAlmanac

Class Documentation

class LansAlmanac

Coarse “almanac”-style orbit model (Algorithm 2 of Iiyama & Gao, “Ephemeris and LansAlmanac Design for Lunar Navigation Satellites”): each osculating element (a, e, i, node) is a low-order polynomial plus an element-specific Fourier term (orbital mean motion for a, sidereal harmonic for the rest); the mean anomaly is the nominal two-body drift (integrated from the fitted semi-major axis) plus a polynomial/Fourier residual; and the argument of periapsis is replaced by an argument-of-latitude correction u = nu + (polynomial + Fourier), which keeps the reconstruction well-conditioned near periapsis of eccentric orbits. Position/velocity are built directly from (a, e, i, node, u) with velocity by finite differencing. This mirrors the coarse, long-validity almanac broadcast by GNSS constellations (e.g. GPS almanac pages), as distinct from the precise, short-validity LansEphemeris.

Used directly (via the Python bindings) and by EphemerisSimulation (lupnt/simulations/ephemeris/ephemeris_simulation.h) to compare almanac-style vs. ephemeris-style broadcast data-size/accuracy trade-offs.

Public Functions

LansAlmanac() = default
inline explicit LansAlmanac(AlmanacFitOptions options)
VecXd Fit(const VecXd &t_s, const MatXd &rv) const

Fit this almanac model to a sampled trajectory.

Parameters:
  • t_s – Sample epochs [s], strictly increasing.

  • rv – Sampled Cartesian states [N x 6] ([m, m, m, m/s, m/s, m/s]).

Returns:

Fitted parameter vector; see ParamNames() for the layout.

MatXd Eval(const VecXd &t_s, const VecXd &params) const

Evaluate the fitted almanac at a set of epochs.

EphemerisFitErrorStats EvalError(const VecXd &t_s, const MatXd &rv_ref, const VecXd &params) const

Evaluate the fit error of params against a reference trajectory.

int NumParams() const

Number of scalar parameters in the vector returned by Fit.

std::vector<std::string> ParamNames() const

Human-readable name of each parameter (same order as Fit’s output): “t_ref”, “t_fit”, “a_ref”, then per element the polynomial coefficients “a_p0”, “a_p1”, … and Fourier coefficients “a_fc1”, “a_fs1”, … for elements a, e, i, raan (node), M (mean-anomaly residual), and u (argument-of-latitude correction).

inline const AlmanacFitOptions &GetOptions() const