Class GroundStationTrackingApp

Inheritance Relationships

Base Type

Class Documentation

class GroundStationTrackingApp : public lupnt::Application

Ground-station tracking (sensor) application.

Runs on a GroundStation agent and generates that station’s own two-way range and range-rate (Doppler) observations of a target satellite agent. On each scheduled Step it queries the target truth state (through the shared World), evaluates topocentric elevation, and — if the target is above the elevation mask — forms a noisy range/range-rate measurement and pushes it (with the station’s own inertial state) to the GroundStationManagerApp on the manager agent, which runs the centralized orbit-determination filter over all stations.

The station owns its observations (elevation and measurement series, for per-station visibility analysis); the manager owns the estimate.

Public Functions

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

Construct from the application: block of a GroundStation agent. Keys (besides base name/frequency): target (target agent name), manager (manager agent name), elevation_mask_deg, use_range, use_range_rate, range_sigma_m, range_rate_sigma_mps, seed.

Optional signal-path / station-location corrections (all default off, so the observable stays a pure geometric range unless requested): apply_solid_earth_tide, apply_troposphere (+ troposphere_pressure_hpa, troposphere_temperature_k, troposphere_humidity_pct; unset pressure/temperature default to the standard atmosphere at the station height), apply_ionosphere (+ ionosphere_vtec_tecu, signal_frequency_hz), apply_shapiro. When enabled they are added to the truth observable this sensor generates; an estimator that does not model them then sees them as realistic errors. Path delays bias the range only; the solid Earth tide displaces the station position and so affects both range and range-rate.

virtual void Setup() override

Resolve the target agent, this station’s geometry, and the manager app; register with the manager; schedule periodic measurement Steps.

virtual void Step(Real t) override

One measurement epoch: evaluate elevation, and (if visible) form and report a noisy range/range-rate observation to the manager.

virtual void Log(Real t) 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]

inline const std::string &StationName() const
inline const std::vector<double> &ElevationTime() const
inline const std::vector<double> &ElevationDeg() const
inline const std::vector<double> &MeasurementTime() const
inline const std::vector<double> &MeasurementRange() const
inline const std::vector<double> &MeasurementRangeRate() const

Protected Attributes

std::string target_name_
std::string manager_name_
double elevation_mask_deg_ = 10.0
bool use_range_ = true
bool use_range_rate_ = true
double range_sigma_m_ = 10.0
double range_rate_sigma_mps_ = 1.0e-3
int seed_ = 42
bool apply_solid_earth_tide_ = false
bool apply_troposphere_ = false
bool apply_ionosphere_ = false
bool apply_shapiro_ = false
double tropo_pressure_hpa_ = -1.0
double tropo_temperature_k_ = -1.0
double tropo_humidity_pct_ = 50.0
double iono_vtec_tecu_ = 10.0
double signal_frequency_hz_ = 8.4e9
GroundStationManagerApp *manager_ = nullptr
int station_id_ = 0
std::string station_name_
Real epoch0_ = 0.0
Vec3 station_r_ = Vec3::Zero()
Frame station_frame_ = Frame::UNDEFINED
double station_lat_rad_ = 0.0
double station_height_m_ = 0.0
bool corrections_enabled_ = false
std::mt19937 noise_rng_
std::vector<double> elev_t_
std::vector<double> elev_deg_
std::vector<double> meas_t_
std::vector<double> meas_range_
std::vector<double> meas_range_rate_