Class LunarNavConstellation

Inheritance Relationships

Base Type

Class Documentation

class LunarNavConstellation : public lupnt::Agent

A lunar navigation constellation as a SINGLE agent that stands in for N similar navigation satellites, so a scenario need not declare an individual agent per satellite.

It builds N child Spacecraft (each self-propagating its orbit+clock truth) from one config entry, in either of two ways:

  • explicit satellites: — a list of per-satellite {name, initial_state} (or the {name, r0_m, v0_mps} shorthand); every satellite inherits the shared dynamics: (and optional clock:) template, so the force model is written once.

  • Walker walker: — a symmetric Walker constellation (n_planes x sats_per_plane) of a common frozen orbit (a, e, i, omega) in frame, with the RAAN spread evenly over the planes and the mean anomaly evenly within each plane (plus an inter-plane phase).

Consumers (e.g. a surface rover / lander nav app) resolve this agent by name and query GetSatelliteStateAt(j, t) — they no longer propagate the relays themselves.

Public Functions

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

Register each child with the owning simulation and set it up.

virtual void Step(Real t) override

Propagate/log each child satellite’s truth.

virtual Cart6 GetStateAt(Real t) const override

Cartesian state [r; v] of the whole constellation is undefined; returns the first satellite’s state (or a zero state if empty). Prefer GetSatelliteStateAt.

inline int NumSatellites() const

Number of satellites in the constellation.

inline const std::string &SatelliteName(int j) const

Name of satellite j.

inline Cart6 GetSatelliteStateAt(int j, Real t) const

Cartesian truth state [r; v] (Frame::MOON_CI) of satellite j at time t [s].