0.5.1
Loading...
Searching...
No Matches
ErrorModel.hpp
Go to the documentation of this file.
1// This file is part of INSTINCT, the INS Toolkit for Integrated
2// Navigation Concepts and Training by the Institute of Navigation of
3// the University of Stuttgart, Germany.
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9/// @file ErrorModel.hpp
10/// @brief Adds errors (biases and noise) to measurements
11/// @author T. Topp (topp@ins.uni-stuttgart.de)
12/// @date 2021-12-21
13
14#pragma once
15
19
25
27
28#include "util/Eigen.hpp"
29#include <random>
30#include <map>
31
32namespace NAV
33{
34/// Adds errors (biases and noise) to measurements
35class ErrorModel : public Node
36{
37 public:
38 /// @brief Default constructor
39 ErrorModel();
40 /// @brief Destructor
41 ~ErrorModel() override;
42 /// @brief Copy constructor
43 ErrorModel(const ErrorModel&) = delete;
44 /// @brief Move constructor
46 /// @brief Copy assignment operator
47 ErrorModel& operator=(const ErrorModel&) = delete;
48 /// @brief Move assignment operator
50
51 /// @brief String representation of the Class Type
52 [[nodiscard]] static std::string typeStatic();
53
54 /// @brief String representation of the Class Type
55 [[nodiscard]] std::string type() const override;
56
57 /// @brief String representation of the Class Category
58 [[nodiscard]] static std::string category();
59
60 /// @brief ImGui config window which is shown on double click
61 /// @attention Don't forget to set _hasConfig to true in the constructor of the node
62 void guiConfig() override;
63
64 /// @brief Saves the node into a json object
65 [[nodiscard]] json save() const override;
66
67 /// @brief Restores the node from a json object
68 /// @param[in] j Json object with the node state
69 void restore(const json& j) override;
70
71 private:
72 constexpr static size_t OUTPUT_PORT_INDEX_FLOW = 0; ///< @brief Flow
73
74 /// @brief Resets the node. It is guaranteed that the node is initialized when this is called.
75 bool resetNode() override;
76
77 /// @brief Called when a new link was established
78 /// @param[in] startPin Pin where the link starts
79 /// @param[in] endPin Pin where the link ends
80 void afterCreateLink(OutputPin& startPin, InputPin& endPin) override;
81
82 /// @brief Called when a link was deleted
83 /// @param[in] startPin Pin where the link starts
84 /// @param[in] endPin Pin where the link ends
85 void afterDeleteLink(OutputPin& startPin, InputPin& endPin) override;
86
87 /// @brief Callback when receiving data on a port
88 /// @param[in] queue Queue with all the received data messages
89 /// @param[in] pinIdx Index of the pin the data is received on
90 void receiveObs(InputPin::NodeDataQueue& queue, size_t pinIdx);
91
92 /// @brief Callback when receiving an ImuObs
93 /// @param[in] imuObs Copied data to modify and send out again
94 /// @param[in] accelerometerBias_p Accelerometer Bias in platform frame coordinates [m/s^2]
95 /// @param[in] gyroscopeBias_p Gyroscope Bias in platform frame coordinates [rad/s]
96 /// @param[in] accelerometerNoiseStd Accelerometer Noise standard deviation in platform frame coordinates [m/s^2]
97 /// @param[in] gyroscopeNoiseStd Gyroscope Noise standard deviation in platform frame coordinates [rad/s]
98 std::shared_ptr<ImuObs> receiveImuObs(const std::shared_ptr<ImuObs>& imuObs,
99 const Eigen::Vector3d& accelerometerBias_p,
100 const Eigen::Vector3d& gyroscopeBias_p,
101 const Eigen::Vector3d& accelerometerNoiseStd,
102 const Eigen::Vector3d& gyroscopeNoiseStd);
103
104 /// @brief Callback when receiving an ImuObsWDelta
105 /// @param[in] imuObs Copied data to modify and send out again
106 /// @param[in] accelerometerBias_p Accelerometer Bias in platform frame coordinates [m/s^2]
107 /// @param[in] gyroscopeBias_p Gyroscope Bias in platform frame coordinates [rad/s]
108 /// @param[in] accelerometerNoiseStd Accelerometer Noise standard deviation in platform frame coordinates [m/s^2]
109 /// @param[in] gyroscopeNoiseStd Gyroscope Noise standard deviation in platform frame coordinates [rad/s]
110 [[nodiscard]] std::shared_ptr<ImuObsWDelta> receiveImuObsWDelta(const std::shared_ptr<ImuObsWDelta>& imuObs,
111 const Eigen::Vector3d& accelerometerBias_p,
112 const Eigen::Vector3d& gyroscopeBias_p,
113 const Eigen::Vector3d& accelerometerNoiseStd,
114 const Eigen::Vector3d& gyroscopeNoiseStd);
115
116 /// @brief Callback when receiving an PosObs
117 /// @param[in] pos Copied data to modify and send out again
118 [[nodiscard]] std::shared_ptr<Pos> receivePos(const std::shared_ptr<Pos>& pos);
119 /// @brief Callback when receiving an PosVelObs
120 /// @param[in] posVel Copied data to modify and send out again
121 [[nodiscard]] std::shared_ptr<PosVel> receivePosVel(const std::shared_ptr<PosVel>& posVel);
122 /// @brief Callback when receiving an PosVelAttObs
123 /// @param[in] posVelAtt Copied data to modify and send out again
124 [[nodiscard]] std::shared_ptr<PosVelAtt> receivePosVelAtt(const std::shared_ptr<PosVelAtt>& posVelAtt);
125
126 /// @brief Callback when receiving an GnssObs
127 /// @param[in] gnssObs Copied data to modify and send out again
128 [[nodiscard]] std::shared_ptr<GnssObs> receiveGnssObs(const std::shared_ptr<GnssObs>& gnssObs);
129
130 /// Last observation time
132 /// Time interval of the messages [s]
133 double _dt = 0.0;
134
135 // #########################################################################################################################################
136 // ImuObs
137 // #########################################################################################################################################
138 //
139 /// 3D array which allow to accumulate RW noise for accelerometer
140 Eigen::Vector3d _randomWalkAccelerometer = Eigen::Vector3d::Zero();
141
142 /// 3D array which allow to accumulate RW noise for gyro
143 Eigen::Vector3d _randomWalkGyroscope = Eigen::Vector3d::Zero();
144
145 /// 3D array which allow to accumulate IRW veloctiy noise for accelerometer
146 Eigen::Vector3d _integratedRandomWalkAccelerometer_velocity = Eigen::Vector3d::Zero();
147
148 /// 3D array which allow to accumulate IRW for accelerometer
149 Eigen::Vector3d _integratedRandomWalkAccelerometer = Eigen::Vector3d::Zero();
150
151 /// 3D array which allow to accumulate IRW veloctiy noise for gyro
152 Eigen::Vector3d _integratedRandomWalkGyroscope_velocity = Eigen::Vector3d::Zero();
153
154 /// 3D array which allow to accumulate IRW for gyro
155 Eigen::Vector3d _integratedRandomWalkGyroscope = Eigen::Vector3d::Zero();
156
157 // --------------------------------------------------------------- Offset ------------------------------------------------------------------
158
159 /// Selected unit for the accelerometer bias in the GUI
161 /// Bias of the accelerometer in platform coordinates (Unit as selected)
162 Eigen::Vector3d _imuAccelerometerBias_p = Eigen::Vector3d::Zero();
163
164 /// Selected unit for the gyroscope bias in the GUI
166 /// Bias of the gyroscope in platform coordinates (Unit as selected)
167 Eigen::Vector3d _imuGyroscopeBias_p = Eigen::Vector3d::Zero();
168
169 // ---------------------------------------------------------------- Noise ------------------------------------------------------------------
170
171 /// Selected unit for the accelerometer noise in the GUI
173 /// Noise of the accelerometer (Unit as selected)
174 Eigen::Vector3d _imuAccelerometerNoise = Eigen::Vector3d::Zero();
175 /// Random number generator for the accelerometer noise
177
178 /// Selected unit for the gyroscope noise in the GUI
180 /// Noise of the gyroscope (Unit as selected)
181 Eigen::Vector3d _imuGyroscopeNoise = Eigen::Vector3d::Zero();
182 /// Random number generator for the gyroscope noise
184
185 /// Selected unit for the accelerometer RW noise in the GUI
187 /// RW noise of the accelerometer (Unit as selected)
188 Eigen::Vector3d _imuAccelerometerRW = Eigen::Vector3d::Zero();
189 /// Random number generator for the accelerometer RW noise
191
192 /// Selected unit for the accelerometer RW noise in the GUI
194 /// RW noise of the accelerometer (Unit as selected)
195 Eigen::Vector3d _imuGyroscopeRW = Eigen::Vector3d::Zero();
196 /// Random number generator for the accelerometer RW noise
198
199 /// Selected unit for the accelerometer IRW noise in the GUI
201 /// IRW noise of the accelerometer (Unit as selected)
202 Eigen::Vector3d _imuAccelerometerIRW = Eigen::Vector3d::Zero();
203 /// Random number generator for the accelerometer IRW noise
205
206 /// Selected unit for the accelerometer IRW noise in the GUI
208 /// RW noise of the accelerometer (Unit as selected)
209 Eigen::Vector3d _imuGyroscopeIRW = Eigen::Vector3d::Zero();
210 /// Random number generator for the accelerometer RW noise
212
213 // #########################################################################################################################################
214 // PosVelAtt
215 // #########################################################################################################################################
216
217 // --------------------------------------------------------------- Offset ------------------------------------------------------------------
218
219 /// Possible units to specify a position bias with
220 enum class PositionBiasUnits : uint8_t
221 {
222 meter, ///< NED [m m m]
223 };
224 /// Selected unit for the position bias in the GUI
226 /// Bias of the position (Unit as selected)
227 Eigen::Vector3d _positionBias = Eigen::Vector3d::Zero();
228
229 /// Possible units to specify an velocity bias with
230 enum class VelocityBiasUnits : uint8_t
231 {
232 m_s, ///< [m/s]
233 };
234 /// Selected unit for the velocity bias in the GUI
236 /// Bias of the velocity (Unit as selected)
237 Eigen::Vector3d _velocityBias = Eigen::Vector3d::Zero();
238
239 /// Possible units to specify a attitude bias with
240 enum class AttitudeBiasUnits : uint8_t
241 {
242 rad, ///< [rad]
243 deg, ///< [deg]
244 };
245 /// Selected unit for the attitude bias in the GUI
247 /// Bias of the attitude (Unit as selected)
248 Eigen::Vector3d _attitudeBias = Eigen::Vector3d::Zero();
249
250 // ---------------------------------------------------------------- Noise ------------------------------------------------------------------
251
252 /// Possible units to specify a position noise with
253 enum class PositionNoiseUnits : uint8_t
254 {
255 meter, ///< NED [m m m] (Standard deviation)
256 meter2, ///< NED [m^2 m^2 m^2] (Variance)
257 };
258
259 /// Selected unit for the position noise in the GUI
261 /// Noise of the position (Unit as selected)
262 Eigen::Vector3d _positionNoise = Eigen::Vector3d::Zero();
263 /// Random number generator for the position noise
265 /// Possible units to specify an velocity noise with
266 enum class VelocityNoiseUnits : uint8_t
267 {
268 m_s, ///< [m/s] (Standard deviation)
269 m2_s2, ///< [m^2/s^2] (Variance)
270 };
271 /// Selected unit for the velocity noise in the GUI
273 /// Noise of the velocity (Unit as selected)
274 Eigen::Vector3d _velocityNoise = Eigen::Vector3d::Zero();
275 /// Random number generator for the velocity noise
277
278 /// Possible units to specify a attitude noise with
279 enum class AttitudeNoiseUnits : uint8_t
280 {
281 rad, ///< [rad] (Standard deviation)
282 deg, ///< [deg] (Standard deviation)
283 rad2, ///< [rad^2] (Variance)
284 deg2, ///< [deg^2] (Variance)
285 };
286 /// Selected unit for the attitude noise in the GUI
288 /// Noise of the attitude (Unit as selected)
289 Eigen::Vector3d _attitudeNoise = Eigen::Vector3d::Zero();
290 /// Random number generator for the attitude noise
292
293 // #########################################################################################################################################
294 // GnssObs
295 // #########################################################################################################################################
296
297 // ---------------------------------------------------------------- Noise ------------------------------------------------------------------
298
299 /// Possible units to specify a pseudorange noise with
300 enum class PseudorangeNoiseUnits : uint8_t
301 {
302 meter, ///< [m] (Standard deviation)
303 };
304 /// Selected unit for the pseudorange noise in the GUI
306 /// Noise of the pseudorange (Unit as selected)
308 /// Random number generator for the pseudorange noise
310
311 /// Possible units to specify a carrier-phase noise with
312 enum class CarrierPhaseNoiseUnits : uint8_t
313 {
314 meter, ///< [m] (Standard deviation)
315 };
316 /// Selected unit for the carrier-phase noise in the GUI
318 /// Noise of the carrier-phase (Unit as selected)
319 double _gui_carrierPhaseNoise{ 0.003 };
320 /// Random number generator for the carrier-phase noise
322
323 /// Possible units to specify a range-rate noise with
324 enum class DopplerNoiseUnits : uint8_t
325 {
326 m_s, ///< [m/s] (Standard deviation)
327 };
328 /// Selected unit for the range-rate noise in the GUI
330 /// Noise of the range-rate (Unit as selected)
331 double _gui_dopplerNoise{ 0.05 };
332 /// Random number generator for the range-rate noise
334
335 // -------------------------------------------------------------- Ambiguity ----------------------------------------------------------------
336
337 /// Ambiguity limits
338 std::array<int, 2> _gui_ambiguityLimits = { { -20, 20 } };
339 /// Random number generator for the ambiguity
341 /// Ambiguity map
342 std::map<SatSigId, std::vector<std::pair<InsTime, int>>> _ambiguities;
343 /// Cycle-slips set by the user
344 std::map<std::pair<InsTime, SatSigId>, std::pair<int, bool>> _manualCycleSlips;
345
346 InsTime _manualCycleSlipTime; ///< GUI input for new manual cycle-slips
347 gui::widgets::TimeEditFormat _manualCycleSlipTimeEditFormat; ///< GUI input for new manual cycle-slips
348 SatSigId _manualCycleSlipSignal = SatSigId(Code::G1C, 1); ///< GUI input for new manual cycle-slips
349 int _manualCycleSlipAmbiguity{}; ///< GUI input for new manual cycle-slips
350 bool _manualCycleSlipSetLLI = true; ///< GUI input for new manual cycle-slips
351
352 // ------------------------------------------------------------- Cycle-slip ----------------------------------------------------------------
353
354 /// Possible units to specify the cycle-slip rate with
355 enum class CycleSlipFrequencyUnits : uint8_t
356 {
357 per_day, ///< [1/d]
358 per_hour, ///< [1/h]
359 per_minute, ///< [1/m]
360 };
361 /// Selected unit for the cycle-slip frequency in the GUI
363 /// The cycle-slip frequency (Unit as selected)
365 /// Ambiguity limits cycle-slip
367 /// The time frame which is considered for a cycle slip
369
370 /// Possible units to specify the cycle-slip detection probability with
372 {
373 percent, ///< [%]
374 };
375 /// Selected unit for the cycle-slip detection probability in the GUI
377 /// The chance to detect a cycle slip and set the Loss-of-Lock indicator
379
380 /// Random number generator for the cycle-slip
382
383 /// Cycle-slip information
385 {
386 InsTime time; ///< Time of the cycle-slip
387 SatSigId satSigId; ///< Satellite Signal identifier
388 bool LLI; ///< Whether the LLI was set
389 };
390 /// List of produced cycle-slips
391 std::vector<CycleSlipInfo> _cycleSlips;
392
393 /// Frequencies used for calculation (GUI filter)
395 /// Codes used for calculation (GUI filter)
397};
398
399} // namespace NAV
Vector space operations.
nlohmann::json json
json namespace
GNSS Observation messages.
Units used by INS.
Data storage class for one VectorNavImu observation.
Parent Class for all IMU Observations.
Node Class.
Position, Velocity and Attitude Storage Class.
Random Number Generator.
Structs identifying a unique satellite.
Widget to modify time point values.
Enumerate for GNSS Codes.
Definition Code.hpp:89
@ G1C
GPS L1 - C/A-code.
Definition Code.hpp:96
Frequency _filterFreq
Frequencies used for calculation (GUI filter)
std::shared_ptr< PosVel > receivePosVel(const std::shared_ptr< PosVel > &posVel)
Callback when receiving an PosVelObs.
RandomNumberGenerator _imuAccelerometerRng
Random number generator for the accelerometer noise.
VelocityBiasUnits
Possible units to specify an velocity bias with.
SatSigId _manualCycleSlipSignal
GUI input for new manual cycle-slips.
PositionBiasUnits
Possible units to specify a position bias with.
int _gui_cycleSlipRange
Ambiguity limits cycle-slip.
RandomNumberGenerator _carrierPhaseRng
Random number generator for the carrier-phase noise.
Units::ImuAccelerometerUnits _imuAccelerometerBiasUnit
Selected unit for the accelerometer bias in the GUI.
std::shared_ptr< ImuObs > receiveImuObs(const std::shared_ptr< ImuObs > &imuObs, const Eigen::Vector3d &accelerometerBias_p, const Eigen::Vector3d &gyroscopeBias_p, const Eigen::Vector3d &accelerometerNoiseStd, const Eigen::Vector3d &gyroscopeNoiseStd)
Callback when receiving an ImuObs.
VelocityBiasUnits _velocityBiasUnit
Selected unit for the velocity bias in the GUI.
bool _manualCycleSlipSetLLI
GUI input for new manual cycle-slips.
std::array< int, 2 > _gui_ambiguityLimits
Ambiguity limits.
CarrierPhaseNoiseUnits _gui_carrierPhaseNoiseUnit
Selected unit for the carrier-phase noise in the GUI.
RandomNumberGenerator _imuGyroscopeRng
Random number generator for the gyroscope noise.
RandomNumberGenerator _imuAccelerometerIRWRng
Random number generator for the accelerometer IRW noise.
Units::ImuGyroscopeIRWUnits _imuGyroscopeIRWUnit
Selected unit for the accelerometer IRW noise in the GUI.
RandomNumberGenerator _imuGyroscopeRWRng
Random number generator for the accelerometer RW noise.
RandomNumberGenerator _imuAccelerometerRWRng
Random number generator for the accelerometer RW noise.
~ErrorModel() override
Destructor.
PositionNoiseUnits _positionNoiseUnit
Selected unit for the position noise in the GUI.
Eigen::Vector3d _positionNoise
Noise of the position (Unit as selected)
Units::ImuGyroscopeUnits _imuGyroscopeBiasUnit
Selected unit for the gyroscope bias in the GUI.
static std::string typeStatic()
String representation of the Class Type.
Eigen::Vector3d _imuAccelerometerNoise
Noise of the accelerometer (Unit as selected)
static constexpr size_t OUTPUT_PORT_INDEX_FLOW
Flow.
CycleSlipDetectionProbabilityUnits
Possible units to specify the cycle-slip detection probability with.
VelocityNoiseUnits _velocityNoiseUnit
Selected unit for the velocity noise in the GUI.
void restore(const json &j) override
Restores the node from a json object.
void afterDeleteLink(OutputPin &startPin, InputPin &endPin) override
Called when a link was deleted.
Eigen::Vector3d _integratedRandomWalkGyroscope
3D array which allow to accumulate IRW for gyro
Units::ImuAccelerometerNoiseUnits _imuAccelerometerNoiseUnit
Selected unit for the accelerometer noise in the GUI.
CycleSlipFrequencyUnits
Possible units to specify the cycle-slip rate with.
ErrorModel(const ErrorModel &)=delete
Copy constructor.
std::shared_ptr< GnssObs > receiveGnssObs(const std::shared_ptr< GnssObs > &gnssObs)
Callback when receiving an GnssObs.
RandomNumberGenerator _attitudeRng
Random number generator for the attitude noise.
AttitudeBiasUnits _attitudeBiasUnit
Selected unit for the attitude bias in the GUI.
AttitudeNoiseUnits
Possible units to specify a attitude noise with.
@ deg
[deg] (Standard deviation)
json save() const override
Saves the node into a json object.
std::string type() const override
String representation of the Class Type.
RandomNumberGenerator _imuGyroscopeIRWRng
Random number generator for the accelerometer RW noise.
Eigen::Vector3d _velocityBias
Bias of the velocity (Unit as selected)
ErrorModel & operator=(const ErrorModel &)=delete
Copy assignment operator.
InsTime _lastObservationTime
Last observation time.
RandomNumberGenerator _cycleSlipRng
Random number generator for the cycle-slip.
double _gui_cycleSlipDetectionProbability
The chance to detect a cycle slip and set the Loss-of-Lock indicator.
Eigen::Vector3d _integratedRandomWalkGyroscope_velocity
3D array which allow to accumulate IRW veloctiy noise for gyro
CycleSlipDetectionProbabilityUnits _gui_cycleSlipDetectionProbabilityUnit
Selected unit for the cycle-slip detection probability in the GUI.
Eigen::Vector3d _velocityNoise
Noise of the velocity (Unit as selected)
InsTime _manualCycleSlipTime
GUI input for new manual cycle-slips.
std::shared_ptr< Pos > receivePos(const std::shared_ptr< Pos > &pos)
Callback when receiving an PosObs.
CycleSlipFrequencyUnits _gui_cycleSlipFrequencyUnit
Selected unit for the cycle-slip frequency in the GUI.
Eigen::Vector3d _imuAccelerometerRW
RW noise of the accelerometer (Unit as selected)
double _gui_pseudorangeNoise
Noise of the pseudorange (Unit as selected)
double _gui_carrierPhaseNoise
Noise of the carrier-phase (Unit as selected)
double _dt
Time interval of the messages [s].
RandomNumberGenerator _pseudorangeRng
Random number generator for the pseudorange noise.
Eigen::Vector3d _integratedRandomWalkAccelerometer
3D array which allow to accumulate IRW for accelerometer
std::shared_ptr< PosVelAtt > receivePosVelAtt(const std::shared_ptr< PosVelAtt > &posVelAtt)
Callback when receiving an PosVelAttObs.
Units::ImuGyroscopeNoiseUnits _imuGyroscopeRWUnit
Selected unit for the accelerometer RW noise in the GUI.
PositionNoiseUnits
Possible units to specify a position noise with.
@ meter2
NED [m^2 m^2 m^2] (Variance)
@ meter
NED [m m m] (Standard deviation)
DopplerNoiseUnits _gui_dopplerNoiseUnit
Selected unit for the range-rate noise in the GUI.
RandomNumberGenerator _ambiguityRng
Random number generator for the ambiguity.
DopplerNoiseUnits
Possible units to specify a range-rate noise with.
@ m_s
[m/s] (Standard deviation)
Eigen::Vector3d _imuAccelerometerBias_p
Bias of the accelerometer in platform coordinates (Unit as selected)
std::map< std::pair< InsTime, SatSigId >, std::pair< int, bool > > _manualCycleSlips
Cycle-slips set by the user.
RandomNumberGenerator _positionRng
Random number generator for the position noise.
Eigen::Vector3d _imuGyroscopeBias_p
Bias of the gyroscope in platform coordinates (Unit as selected)
Code _filterCode
Codes used for calculation (GUI filter)
double _gui_dopplerNoise
Noise of the range-rate (Unit as selected)
void receiveObs(InputPin::NodeDataQueue &queue, size_t pinIdx)
Callback when receiving data on a port.
Units::ImuAccelerometerNoiseUnits _imuAccelerometerRWUnit
Selected unit for the accelerometer RW noise in the GUI.
Eigen::Vector3d _imuGyroscopeNoise
Noise of the gyroscope (Unit as selected)
static std::string category()
String representation of the Class Category.
Eigen::Vector3d _positionBias
Bias of the position (Unit as selected)
void afterCreateLink(OutputPin &startPin, InputPin &endPin) override
Called when a new link was established.
gui::widgets::TimeEditFormat _manualCycleSlipTimeEditFormat
GUI input for new manual cycle-slips.
PseudorangeNoiseUnits
Possible units to specify a pseudorange noise with.
@ meter
[m] (Standard deviation)
Eigen::Vector3d _imuGyroscopeIRW
RW noise of the accelerometer (Unit as selected)
CarrierPhaseNoiseUnits
Possible units to specify a carrier-phase noise with.
Units::ImuAccelerometerIRWUnits _imuAccelerometerIRWUnit
Selected unit for the accelerometer IRW noise in the GUI.
ErrorModel(ErrorModel &&)=delete
Move constructor.
Eigen::Vector3d _randomWalkGyroscope
3D array which allow to accumulate RW noise for gyro
Eigen::Vector3d _attitudeBias
Bias of the attitude (Unit as selected)
void guiConfig() override
ImGui config window which is shown on double click.
Eigen::Vector3d _imuAccelerometerIRW
IRW noise of the accelerometer (Unit as selected)
PositionBiasUnits _positionBiasUnit
Selected unit for the position bias in the GUI.
Eigen::Vector3d _imuGyroscopeRW
RW noise of the accelerometer (Unit as selected)
AttitudeNoiseUnits _attitudeNoiseUnit
Selected unit for the attitude noise in the GUI.
ErrorModel()
Default constructor.
Eigen::Vector3d _randomWalkAccelerometer
3D array which allow to accumulate RW noise for accelerometer
VelocityNoiseUnits
Possible units to specify an velocity noise with.
@ m_s
[m/s] (Standard deviation)
Eigen::Vector3d _integratedRandomWalkAccelerometer_velocity
3D array which allow to accumulate IRW veloctiy noise for accelerometer
InsTime _cycleSlipWindowStartTime
The time frame which is considered for a cycle slip.
double _gui_cycleSlipFrequency
The cycle-slip frequency (Unit as selected)
std::shared_ptr< ImuObsWDelta > receiveImuObsWDelta(const std::shared_ptr< ImuObsWDelta > &imuObs, const Eigen::Vector3d &accelerometerBias_p, const Eigen::Vector3d &gyroscopeBias_p, const Eigen::Vector3d &accelerometerNoiseStd, const Eigen::Vector3d &gyroscopeNoiseStd)
Callback when receiving an ImuObsWDelta.
RandomNumberGenerator _velocityRng
Random number generator for the velocity noise.
std::vector< CycleSlipInfo > _cycleSlips
List of produced cycle-slips.
RandomNumberGenerator _dopplerRng
Random number generator for the range-rate noise.
Units::ImuGyroscopeNoiseUnits _imuGyroscopeNoiseUnit
Selected unit for the gyroscope noise in the GUI.
ErrorModel & operator=(ErrorModel &&)=delete
Move assignment operator.
Eigen::Vector3d _attitudeNoise
Noise of the attitude (Unit as selected)
std::map< SatSigId, std::vector< std::pair< InsTime, int > > > _ambiguities
Ambiguity map.
AttitudeBiasUnits
Possible units to specify a attitude bias with.
int _manualCycleSlipAmbiguity
GUI input for new manual cycle-slips.
bool resetNode() override
Resets the node. It is guaranteed that the node is initialized when this is called.
PseudorangeNoiseUnits _gui_pseudorangeNoiseUnit
Selected unit for the pseudorange noise in the GUI.
Frequency definition for different satellite systems.
Definition Frequency.hpp:59
Input pins of nodes.
Definition Pin.hpp:491
TsDeque< std::shared_ptr< const NAV::NodeData > > NodeDataQueue
Node data queue type.
Definition Pin.hpp:707
The class is responsible for all time-related tasks.
Definition InsTime.hpp:710
Node(std::string name)
Constructor.
Definition Node.cpp:29
Output pins of nodes.
Definition Pin.hpp:338
Manages a thread which calls a specified function at a specified interval.
ImuGyroscopeUnits
Possible units to specify an gyroscope bias with.
Definition Units.hpp:40
ImuAccelerometerIRWUnits
Possible units to specify an accelerometer IRW.
Definition Units.hpp:66
@ m_s3_sqrts
[m/s^3/sqrt(s)] (Standard deviation)
Definition Units.hpp:67
ImuAccelerometerNoiseUnits
Possible units to specify an accelerometer noise.
Definition Units.hpp:48
@ m_s2_sqrts
[m/s^2/sqrt(s)] (Standard deviation)
Definition Units.hpp:49
ImuGyroscopeIRWUnits
Possible units to specify an gyro RW.
Definition Units.hpp:74
@ rad_s2_sqrts
[rad/s^2/sqrt(s)] (Standard deviation)
Definition Units.hpp:75
ImuGyroscopeNoiseUnits
Possible units to specify an gyro noise.
Definition Units.hpp:56
@ rad_s_sqrts
[rad/s/sqrt(s)] (Standard deviation)
Definition Units.hpp:57
ImuAccelerometerUnits
Possible units to specify an accelerometer with.
Definition Units.hpp:32
@ G01
GPS L1 (1575.42 MHz).
Definition Frequency.hpp:28
const Code Code_Default
Default selection for codes.
Definition Code.hpp:659
Cycle-slip information.
InsTime time
Time of the cycle-slip.
SatSigId satSigId
Satellite Signal identifier.
bool LLI
Whether the LLI was set.
Identifies a satellite signal (satellite frequency and number)
Time Edit format and system.
Definition TimeEdit.hpp:29