57template<
typename StateKeyType>
74 template<
typename Scalar,
int Size>
81 for (
const auto& key : F.
rowKeys())
83 if (
const auto* biasKey = std::get_if<Keys::RecvClkBias>(&key))
88 F(*biasKey, driftKey) = 1;
89 G(*biasKey, *biasKey) = 1;
90 G(driftKey, driftKey) = 1;
105 template<
typename Scalar,
int Size>
114 for (
const auto& key : Phi.
rowKeys())
116 if (
const auto* bias = std::get_if<Keys::RecvClkBias>(&key))
121 std::vector<StateKeyType> keys = { *bias, drift };
125 F.template block<2>(keys, keys),
126 G.template block<2>(keys, keys),
127 W.template block<2>(keys, keys),
129 Phi.template block<2>(keys, keys) = PhiMot;
130 Q.template block<2>(keys, keys) = QMot;
140 Phi(*bias, *bias) = 1;
155 std::vector<StateKeyType> keys = {
177 bool ShowGui(
float itemWidth,
float unitWidth,
const char*
id)
179 bool changed =
false;
190 0.0, 0.0,
"%.2e", ImGuiInputTextFlags_CharsScientific))
211 0.0, 0.0,
"%.2e", ImGuiInputTextFlags_CharsScientific))
234 double dt2 = std::pow(dt, 2);
235 double dt3 = dt2 * dt;
243 Q(drift, bias) = Q(bias, drift);
308struct hash<NAV::Keys::RecvClkBias>
314 return std::hash<NAV::SatelliteSystem>()(recvClkErr.
satSys);
319struct hash<NAV::Keys::RecvClkDrift>
325 return std::hash<NAV::SatelliteSystem>()(recvClkDrift.
satSys);
331#ifndef DOXYGEN_IGNORE
335struct fmt::formatter<NAV::Keys::RecvClkBias> : fmt::formatter<std::string>
341 template<
typename FormatContext>
342 auto format(
const NAV::Keys::RecvClkBias& recvClkBias, FormatContext& ctx)
const
344 return fmt::formatter<std::string>::format(fmt::format(
"RecvClkBias({})", recvClkBias.
satSys), ctx);
350struct fmt::formatter<NAV::Keys::RecvClkDrift> : fmt::formatter<std::string>
356 template<
typename FormatContext>
357 auto format(
const NAV::Keys::RecvClkDrift& recvClkDrift, FormatContext& ctx)
const
359 return fmt::formatter<std::string>::format(fmt::format(
"RecvClkDrift({})", recvClkDrift.
satSys), ctx);
#define INS_ASSERT_USER_ERROR(_EXP, _MSG)
Assert function with message.
Definition Assert.h:21
nlohmann::json json
json namespace
Definition FlowManager.hpp:21
double convertUnit(const double &value, Units::PositionUncertaintyUnits unit)
Converts the value depending on the unit provided.
Units used by the system model parameters.
CovarianceClkPhaseDriftUnits
Possible Units for the Standard deviation of the clock phase drift.
Definition Units.hpp:49
@ m2_s
[ m^2 / s ]
Definition Units.hpp:50
@ m_sqrts
[ m / √(s) ]
Definition Units.hpp:51
CovarianceClkFrequencyDriftUnits
Possible Units for the Standard deviation of the clock frequency drift.
Definition Units.hpp:57
@ m2_s3
[ m^2 / s^3 ]
Definition Units.hpp:58
@ m_sqrts3
[ m / √(s^3) ]
Definition Units.hpp:59
Text Help Marker (?) with Tooltip.
void HelpMarker(const char *desc, const char *symbol="(?)")
Text Help Marker, e.g. '(?)', with Tooltip.
#define LOG_DEBUG
Debug information. Should not be called on functions which receive observations (spamming)
Definition Logger.hpp:67
Generalized Kalman Filter class.
Derived::PlainObject transitionMatrix_Phi_Taylor(const Eigen::MatrixBase< Derived > &F, double tau_s, size_t order)
Calculates the state transition matrix 𝚽 limited to specified order in 𝐅𝜏ₛ
Definition KalmanFilter.hpp:195
std::ostream & operator<<(std::ostream &os, const NAV::Keys::RecvClkBias &obj)
Stream insertion operator overload.
SystemModelCalcAlgorithm
Algorithms to calculate the system model with.
Definition SystemModel.hpp:23
@ VanLoan
Van-Loan.
Definition SystemModel.hpp:24
Van Loan Method loan1978.
std::pair< typename DerivedF::PlainObject, typename DerivedF::PlainObject > calcPhiAndQWithVanLoanMethod(const Eigen::MatrixBase< DerivedF > &F, const Eigen::MatrixBase< DerivedG > &G, const Eigen::MatrixBase< DerivedW > &W, double dt)
Numerical Method to calculate the State transition matrix 𝚽 and System/Process noise covariance matri...
Definition VanLoan.hpp:65
Static sized KeyedMatrix.
Definition KeyedMatrix.hpp:1921
Receiver Clock System Model.
Definition ReceiverClockModel.hpp:59
friend void from_json(const json &j, ReceiverClockModel &data)
Converts the provided json object into the data object.
Definition ReceiverClockModel.hpp:280
Units::CovarianceClkFrequencyDriftUnits _gui_covarianceClkFrequencyDriftUnit
Gui selection for the Unit of the input covarianceClkFrequencyDrift parameter.
Definition ReceiverClockModel.hpp:257
friend void to_json(json &j, const ReceiverClockModel &data)
Converts the provided data into a json object.
Definition ReceiverClockModel.hpp:267
double _gui_covarianceClkPhaseDrift
GUI selection for the Standard deviation of the clock phase drift.
Definition ReceiverClockModel.hpp:251
void updatePhiAndQ(KeyedMatrix< Scalar, StateKeyType, StateKeyType, Size, Size > &Phi, KeyedMatrix< Scalar, StateKeyType, StateKeyType, Size, Size > &Q, const KeyedMatrix< Scalar, StateKeyType, StateKeyType, Size, Size > &F, const KeyedMatrix< Scalar, StateKeyType, StateKeyType, Size, Size > &G, const KeyedMatrix< Scalar, StateKeyType, StateKeyType, Size, Size > &W, double dt, SystemModelCalcAlgorithm algorithm) const
Updates the provided Phi and Q matrix.
Definition ReceiverClockModel.hpp:106
std::pair< KeyedMatrix2d< StateKeyType >, KeyedMatrix2d< StateKeyType > > calcPhiAndQ(double dt, SatelliteSystem satSys, SystemModelCalcAlgorithm algorithm)
Calculates the state transition matrix (𝚽) and the process noise covariance matrix (𝐐)
Definition ReceiverClockModel.hpp:153
void initialize(KeyedMatrix< Scalar, StateKeyType, StateKeyType, Size, Size > &F, KeyedMatrix< Scalar, StateKeyType, StateKeyType, Size, Size > &G, KeyedMatrix< Scalar, StateKeyType, StateKeyType, Size, Size > &W)
Initializes the receiver clock model.
Definition ReceiverClockModel.hpp:75
double _covarianceClkPhaseDrift
Covariance of the clock phase drift [m²/s].
Definition ReceiverClockModel.hpp:254
double _covarianceClkFrequencyDrift
Covariance of the clock frequency drift [m²/s³].
Definition ReceiverClockModel.hpp:262
Units::CovarianceClkPhaseDriftUnits _gui_covarianceClkPhaseDriftUnit
Gui selection for the Unit of the input covarianceClkPhaseDrift parameter.
Definition ReceiverClockModel.hpp:249
double _gui_covarianceClkFrequencyDrift
GUI selection for the Standard deviation of the clock frequency drift.
Definition ReceiverClockModel.hpp:259
void initialize()
Initializes the receiver clock model.
Definition ReceiverClockModel.hpp:62
KeyedMatrix< double, StateKeyType, StateKeyType, 2, 2 > calcProcessNoiseMatrixTaylor(double dt, const SatelliteSystem &satSys, const std::vector< StateKeyType > &keys) const
Calculates the process noise covariance matrix with Taylor first order.
Definition ReceiverClockModel.hpp:232
bool ShowGui(float itemWidth, float unitWidth, const char *id)
Shows a GUI.
Definition ReceiverClockModel.hpp:177
bool hasRow(const RowKeyType &key) const
Checks if the matrix has the key.
Definition KeyedMatrix.hpp:84
const std::vector< RowKeyType > & rowKeys() const
Returns the row keys.
Definition KeyedMatrix.hpp:80
Receiver clock error [m].
Definition ReceiverClockModel.hpp:37
SatelliteSystem satSys
Satellite system.
Definition ReceiverClockModel.hpp:42
bool operator==(const RecvClkBias &rhs) const
Equal comparison operator.
Definition ReceiverClockModel.hpp:40
Receiver clock drift [m/s].
Definition ReceiverClockModel.hpp:46
SatelliteSystem satSys
Satellite system.
Definition ReceiverClockModel.hpp:51
bool operator==(const RecvClkDrift &rhs) const
Equal comparison operator.
Definition ReceiverClockModel.hpp:49
Satellite System type.
Definition SatelliteSystem.hpp:44
size_t operator()(const NAV::Keys::RecvClkBias &recvClkErr) const
Hash function.
Definition ReceiverClockModel.hpp:312
size_t operator()(const NAV::Keys::RecvClkDrift &recvClkDrift) const
Hash function.
Definition ReceiverClockModel.hpp:323
Matrix which can be accessed by keys.
KeyedMatrix< double, RowKeyType, ColKeyType, 2, 2 > KeyedMatrix2d
Static 2x2 squared size KeyedMatrix with double types.
Definition KeyedMatrix.hpp:2318
static const internal::all_t all
Used to request all rows or columns in KeyedMatrices.
Definition KeyedMatrix.hpp:1457