Program Listing for File lunar_gnss_combined_measurement.h¶
↰ Return to documentation for file (measurements/lunar_gnss_combined_measurement.h)
#pragma once
#include <utility>
#include <vector>
#include "lupnt/core/definitions.h"
#include "lupnt/measurements/gnss_measurement.h"
#include "lupnt/measurements/measurement.h"
#include "lupnt/measurements/measurement_utils.h"
namespace lupnt {
class LunarGnssCombinedMeasurement : public MeasurementClone<LunarGnssCombinedMeasurement> {
public:
struct TdcpPair {
GnssChannel current;
GnssChannel previous;
};
struct Config {
std::vector<GnssChannel> channels;
GnssMeasurementOptions current_options;
GnssMeasurementOptions carrier_options;
std::vector<TdcpPair> tdcp_pairs;
bool use_tdcp = false;
double tdcp_sigma_m = 0.0;
double filter_tdcp_noise_inflation_m = 0.0;
};
LunarGnssCombinedMeasurement() = default;
explicit LunarGnssCombinedMeasurement(Config config) : config_(std::move(config)) {}
const Config& GetConfig() const { return config_; }
void SetConfig(const Config& config) { config_ = config; }
MeasData Compute(const State& x, MatXd* H = nullptr) const override;
// ---- Reusable model helpers (shared with truth-data generation) ----------------------
static VecXd ComputeMeasurementVector(const State& x, const std::vector<GnssChannel>& channels,
const GnssMeasurementOptions& options,
MatXd* H = nullptr);
static MatXd MeasurementCovariance(const std::vector<GnssChannel>& channels,
const GnssMeasurementOptions& options);
static std::vector<TdcpPair> MakeTdcpPairs(const std::vector<GnssChannel>& current,
const std::vector<GnssChannel>& previous);
static VecXd ComputeTdcpVector(const State& current_state, const State& previous_state,
const std::vector<TdcpPair>& pairs,
const GnssMeasurementOptions& options, MatXd* H = nullptr);
static MatXd TdcpCovariance(const std::vector<TdcpPair>& pairs, double tdcp_sigma_m,
double filter_tdcp_inflation_m);
private:
static Real CarrierRangeMeters(const State& x, const GnssChannel& channel,
const GnssMeasurementOptions& options, MatXd* H = nullptr);
Config config_;
};
} // namespace lupnt