Package com.irurueta.navigation.inertial
Class INSGNSSLooselyCoupledKalmanFilteredEstimator
java.lang.Object
com.irurueta.navigation.inertial.INSGNSSLooselyCoupledKalmanFilteredEstimator
Calculates position, velocity, attitude and IMU biases using a GNSS unweighted
iterated least squares estimator along with an INS loosely coupled Kalman filter
to take into account inertial measurements to smooth results.
This implementation is based on the equations defined in "Principles of GNSS, Inertial, and Multisensor
Integrated Navigation Systems, Second Edition" and on the companion software available at:
https://github.com/ymjdz/MATLAB-Codes/blob/master/Loosely_coupled_INS_GNSS.m
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate BodyKinematics
Contains last provided user kinematics minus currently estimated bias for acceleration and angular rate values.private com.irurueta.navigation.gnss.GNSSEstimation
Current estimation containing user ECEF position, user ECEF velocity, clock offset and clock drift.private com.irurueta.navigation.frames.ECEFFrame
Internally keeps user position, velocity and attitude.private final INSLooselyCoupledKalmanFilteredEstimator
Internal INS estimator to update kinematic measures and propagate estimated state.private BodyKinematics
Last provided user kinematics containing applied specific force and angular rates resolved in body axes.Listener to notify events raised by this instance.private final com.irurueta.navigation.gnss.GNSSLeastSquaresPositionAndVelocityEstimator
Internal estimator to compute least squares solution for GNSS measurements.private Collection<com.irurueta.navigation.gnss.GNSSMeasurement>
GNSS measurements of a collection of satellites.private boolean
Indicates whether this estimator is running or not.private INSLooselyCoupledKalmanState
Current Kalman filter state containing current INS estimation along with Kalman filter covariance error matrix. -
Constructor Summary
ConstructorsConstructorDescriptionConstructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(double epochInterval) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(double epochInterval, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(double epochInterval, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(double epochInterval, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(double epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(double epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(double epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(double epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, double epochInterval) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, double epochInterval, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, double epochInterval, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, double epochInterval, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, double epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, double epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, double epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, double epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, INSLooselyCoupledKalmanInitializerConfig initialConfig) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, INSLooselyCoupledKalmanInitializerConfig initialConfig, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, com.irurueta.units.Time epochInterval) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, com.irurueta.units.Time epochInterval, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, com.irurueta.units.Time epochInterval, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, com.irurueta.units.Time epochInterval, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, com.irurueta.units.Time epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, com.irurueta.units.Time epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, com.irurueta.units.Time epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanConfig config, com.irurueta.units.Time epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanInitializerConfig initialConfig) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(INSLooselyCoupledKalmanInitializerConfig initialConfig, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(com.irurueta.units.Time epochInterval) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(com.irurueta.units.Time epochInterval, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(com.irurueta.units.Time epochInterval, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(com.irurueta.units.Time epochInterval, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(com.irurueta.units.Time epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(com.irurueta.units.Time epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(com.irurueta.units.Time epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, com.irurueta.navigation.frames.CoordinateTransformation c, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor.INSGNSSLooselyCoupledKalmanFilteredEstimator
(com.irurueta.units.Time epochInterval, INSLooselyCoupledKalmanInitializerConfig initialConfig, INSGNSSLooselyCoupledKalmanFilteredEstimatorListener listener) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
correctKinematics
(BodyKinematics kinematics) Corrects provided kinematics by taking into account currently estimated specific force and angular rate biases.Gets INS loosely coupled Kalman configuration parameters (usually obtained through calibration).boolean
Gets INS loosely coupled Kalman configuration parameters (usually obtained through calibration).com.irurueta.navigation.frames.CoordinateTransformation
Gets body-to-ECEF coordinate transformation defining the body attitude.boolean
getCoordinateTransformation
(com.irurueta.navigation.frames.CoordinateTransformation result) Gets body-to-ECEF coordinate transformation defining the body attitude.Gets corrected kinematics which are the last provided user kinematics after removal of the biases estimated by the Kalman filter.boolean
getCorrectedKinematics
(BodyKinematics result) Gets corrected kinematics which are the last provided user kinematics after removal of the biases estimated by the Kalman filter.double
Gets minimum epoch interval expressed in seconds (s) between consecutive propagations or measurements expressed in seconds.com.irurueta.units.Time
Gets minimum epoch interval between consecutive propagations or measurements.void
getEpochIntervalAsTime
(com.irurueta.units.Time result) Gets minimum epoch interval between consecutive propagations or measurements.com.irurueta.navigation.gnss.GNSSEstimation
Gets current estimation containing user ECEF position, user ECEF velocity, clock offset and clock drift.boolean
getEstimation
(com.irurueta.navigation.gnss.GNSSEstimation result) Gets current estimation containing user ECEF position, user ECEF velocity, clock offset and clock drift.Gets initial INS loosely coupled Kalman configuration te set a proper initial covariance matrix during the first Kalman filter propagation.boolean
Gets initial INS loosely coupled Kalman configuration to set a proper initial covariance matrix during the first Kalman filter propagation.Gets last provided user kinematics containing applied specific force and angular rates resolved in body axes.boolean
getKinematics
(BodyKinematics result) Gets last provided user kinematics containing applied specific force and angular rates resolved in body axes.Gets timestamp expressed in seconds since epoch time when Kalman filter state was last propagated.com.irurueta.units.Time
Gets timestamp since epoch time when Kalman filter state was last propagated.boolean
getLastStateTimestampAsTime
(com.irurueta.units.Time result) Gets timestamp since epoch time when Kalman filter state was las propagated.Gets listener to notify events raised by this instance.Collection<com.irurueta.navigation.gnss.GNSSMeasurement>
Gets last updated GNSS measurements of a collection of satellites.getState()
Gets current Kalman filter state containing current user position, velocity, attitude and IMU biases along with Kalman filter covariance error matrix.boolean
getState
(INSLooselyCoupledKalmanState result) Gets current Kalman filter state containing current user position, velocity, attitude and IMU biases along with Kalman filter covariance error matrix.private double
getValueOrZero
(double value) Returns provided value if not infinity and not NaN.private boolean
Initializes current ECEF frame containing user position, velocity and orientation expressed and resolved in ECEF coordinates.private void
Initializes state.boolean
Indicates whether this estimator is ready for state propagations.boolean
Indicates whether this estimator is running or not.static boolean
isUpdateMeasurementsReady
(Collection<com.irurueta.navigation.gnss.GNSSMeasurement> measurements) Indicates whether provided measurements are ready to be used for an update.boolean
propagate
(double timestamp) Propagates Kalman filter state held by this estimator at provided timestamp.boolean
propagate
(com.irurueta.units.Time timestamp) Propagates Kalman filter state held by this estimator at provided timestamp.void
reset()
Resets this estimator.void
Sets INS loosely coupled Kalman configuration parameters (usually obtained through calibration).void
setCoordinateTransformation
(com.irurueta.navigation.frames.CoordinateTransformation c) Sets body-to-ECEF coordinate transformation defining the body attitude.void
setEpochInterval
(double epochInterval) Sets minimum epoch interval expressed in seconds (s) between consecutive propagations or measurements expressed in seconds.void
setEpochInterval
(com.irurueta.units.Time epochInterval) Sets minimum epoch interval between consecutive propagations or measurements.void
setInitialConfig
(INSLooselyCoupledKalmanInitializerConfig initialConfig) Sets initial INS loosely coupled Kalman configuration to set a proper initial covariance matrix during the first Kalman filter propagation.void
Sets listener to notify events raised by this instance.boolean
updateBodyKinematics
(BodyKinematics kinematics, double timestamp) Updates specific force and angular rate applied to the user's body expressed in coordinates resolved along body-frame axes.boolean
updateBodyKinematics
(BodyKinematics kinematics, com.irurueta.units.Time timestamp) Updates specific force and angular rate applied to the user's body expressed in coordinates resolved along body-frame axes.boolean
updateMeasurements
(Collection<com.irurueta.navigation.gnss.GNSSMeasurement> measurements, double timestamp) Updates GNSS measurements of this estimator when new satellite measurements are available.boolean
updateMeasurements
(Collection<com.irurueta.navigation.gnss.GNSSMeasurement> measurements, com.irurueta.units.Time timestamp) Updates GNSS measurements of this estimator when new satellite measurements are available.
-
Field Details
-
lsEstimator
private final com.irurueta.navigation.gnss.GNSSLeastSquaresPositionAndVelocityEstimator lsEstimatorInternal estimator to compute least squares solution for GNSS measurements. -
insEstimator
Internal INS estimator to update kinematic measures and propagate estimated state. -
listener
Listener to notify events raised by this instance. -
measurements
GNSS measurements of a collection of satellites. -
kinematics
Last provided user kinematics containing applied specific force and angular rates resolved in body axes. -
correctedKinematics
Contains last provided user kinematics minus currently estimated bias for acceleration and angular rate values. -
frame
private com.irurueta.navigation.frames.ECEFFrame frameInternally keeps user position, velocity and attitude. -
state
Current Kalman filter state containing current INS estimation along with Kalman filter covariance error matrix. -
estimation
private com.irurueta.navigation.gnss.GNSSEstimation estimationCurrent estimation containing user ECEF position, user ECEF velocity, clock offset and clock drift. -
running
private boolean runningIndicates whether this estimator is running or not.
-
-
Constructor Details
-
INSGNSSLooselyCoupledKalmanFilteredEstimator
public INSGNSSLooselyCoupledKalmanFilteredEstimator()Constructor. -
INSGNSSLooselyCoupledKalmanFilteredEstimator
public INSGNSSLooselyCoupledKalmanFilteredEstimator(double epochInterval) Constructor.- Parameters:
epochInterval
- minimum epoch interval expressed in seconds (s) between consecutive propagations or measurements.- Throws:
IllegalArgumentException
- if provided epoch interval is negative.
-
INSGNSSLooselyCoupledKalmanFilteredEstimator
public INSGNSSLooselyCoupledKalmanFilteredEstimator(com.irurueta.units.Time epochInterval) Constructor.- Parameters:
epochInterval
- minimum epoch interval between consecutive propagations or measurements.- Throws:
IllegalArgumentException
- if provided epoch interval is negative.
-
-
Method Details
-
getListener
Gets listener to notify events raised by this instance.- Returns:
- listener to notify events raised by this instance.
-
getEpochInterval
public double getEpochInterval()Gets minimum epoch interval expressed in seconds (s) between consecutive propagations or measurements expressed in seconds. Attempting to propagate results using Kalman filter or updating measurements when intervals are less than this value, will be ignored.- Returns:
- minimum epoch interval between consecutive propagations or measurements.
-
setEpochInterval
public void setEpochInterval(double epochInterval) throws com.irurueta.navigation.LockedException Sets minimum epoch interval expressed in seconds (s) between consecutive propagations or measurements expressed in seconds. Attempting to propagate results using Kalman filter or updating measurements when intervals are less than this value, will be ignored.- Parameters:
epochInterval
- minimum epoch interval expressed in seconds (s) between consecutive propagations or measurements.- Throws:
com.irurueta.navigation.LockedException
- if this estimator is already running.IllegalArgumentException
- if provided epoch interval is negative.
-
getEpochIntervalAsTime
public void getEpochIntervalAsTime(com.irurueta.units.Time result) Gets minimum epoch interval between consecutive propagations or measurements. Attempting to propagate results using Kalman filter or updating measurements when intervals are less than this value, will be ignored.- Parameters:
result
- instance where minimum epoch interval will be stored.
-
getEpochIntervalAsTime
public com.irurueta.units.Time getEpochIntervalAsTime()Gets minimum epoch interval between consecutive propagations or measurements. Attempting to propagate results using Kalman filter or updating measurements when intervals are less than this value, will be ignored.- Returns:
- minimum epoch interval.
-
setEpochInterval
public void setEpochInterval(com.irurueta.units.Time epochInterval) throws com.irurueta.navigation.LockedException Sets minimum epoch interval between consecutive propagations or measurements. Attempting to propagate results using Kalman filter or updating measurements when intervals are less than this value, will be ignored.- Parameters:
epochInterval
- minimum epoch interval.- Throws:
com.irurueta.navigation.LockedException
- if this estimator is already running.IllegalArgumentException
- if provided epoch interval is negative.
-
getConfig
Gets INS loosely coupled Kalman configuration parameters (usually obtained through calibration).- Returns:
- INS loosely coupled Kalman configuration parameters.
-
getCoordinateTransformation
public com.irurueta.navigation.frames.CoordinateTransformation getCoordinateTransformation()Gets body-to-ECEF coordinate transformation defining the body attitude. This can be used to set the initial body attitude before starting the estimator, or to update body attitude between INS/GNSS measurement updates.- Returns:
- body-to-ECEF coordinate transformation.
-
getInitialConfig
Gets initial INS loosely coupled Kalman configuration te set a proper initial covariance matrix during the first Kalman filter propagation. Once this estimator is initialized, covariance will be updated with new provided GNSS and INS measurements until convergence is reached.- Returns:
- initial INS loosely coupled Kalman configuration.
-
getMeasurements
Gets last updated GNSS measurements of a collection of satellites.- Returns:
- last updated GNSS measurements of a collection of satellites.
-
getKinematics
Gets last provided user kinematics containing applied specific force and angular rates resolved in body axes.- Returns:
- last provided user kinematics.
-
getCorrectedKinematics
Gets corrected kinematics which are the last provided user kinematics after removal of the biases estimated by the Kalman filter.- Returns:
- corrected kinematics.
- See Also:
-
getEstimation
public com.irurueta.navigation.gnss.GNSSEstimation getEstimation()Gets current estimation containing user ECEF position, user ECEF velocity, clock offset and clock drift.- Returns:
- current estimation containing user ECEF position, user ECEF velocity, clock offset and clock drift.
-
getState
Gets current Kalman filter state containing current user position, velocity, attitude and IMU biases along with Kalman filter covariance error matrix.- Returns:
- current Kalman filter state.
-
getLastStateTimestamp
Gets timestamp expressed in seconds since epoch time when Kalman filter state was last propagated.- Returns:
- timestamp expressed in seconds since epoch time when Kalman filter state was last propagated.
-
getLastStateTimestampAsTime
public boolean getLastStateTimestampAsTime(com.irurueta.units.Time result) Gets timestamp since epoch time when Kalman filter state was las propagated.- Parameters:
result
- instance where timestamp since epoch time when Kalman filter state was last propagated will be stored.- Returns:
- true if result instance is updated, false otherwise.
-
getLastStateTimestampAsTime
public com.irurueta.units.Time getLastStateTimestampAsTime()Gets timestamp since epoch time when Kalman filter state was last propagated.- Returns:
- timestamp since epoch time when Kalman filter state was last propagated.
-
isRunning
public boolean isRunning()Indicates whether this estimator is running or not.- Returns:
- true if this estimator is running, false otherwise.
-
isUpdateMeasurementsReady
public static boolean isUpdateMeasurementsReady(Collection<com.irurueta.navigation.gnss.GNSSMeasurement> measurements) Indicates whether provided measurements are ready to be used for an update.- Parameters:
measurements
- measurements to be checked.- Returns:
- true if estimator is ready, false otherwise.
-
updateMeasurements
public boolean updateMeasurements(Collection<com.irurueta.navigation.gnss.GNSSMeasurement> measurements, com.irurueta.units.Time timestamp) throws com.irurueta.navigation.LockedException, com.irurueta.navigation.NotReadyException, INSGNSSException Updates GNSS measurements of this estimator when new satellite measurements are available. Calls to this method will be ignored if interval between provided timestamp and last timestamp when Kalman filter was updated is less than epoch interval.- Parameters:
measurements
- GNSS measurements to be updated.timestamp
- timestamp since epoch time when GNSS measurements were updated.- Returns:
- true if measurements were updated, false otherwise.
- Throws:
com.irurueta.navigation.LockedException
- if this estimator is already running.com.irurueta.navigation.NotReadyException
- if estimator is not ready for measurements updates.INSGNSSException
- if estimation fails due to numerical instabilities.
-
updateMeasurements
public boolean updateMeasurements(Collection<com.irurueta.navigation.gnss.GNSSMeasurement> measurements, double timestamp) throws com.irurueta.navigation.LockedException, com.irurueta.navigation.NotReadyException, INSGNSSException Updates GNSS measurements of this estimator when new satellite measurements are available. Call to this method will be ignored if interval between provided timestamp and last timestamp when Kalman filter was updated is less than epoch interval.- Parameters:
measurements
- GNSS measurements to be updated.timestamp
- timestamp expressed in seconds since epoch time when GNSS measurements were updated.- Returns:
- true if measurements were updated, false otherwise.
- Throws:
com.irurueta.navigation.LockedException
- if this estimator is already running.com.irurueta.navigation.NotReadyException
- if estimator is not ready for measurements updates.INSGNSSException
- if estimation fails due to numerical instabilities.
-
isPropagateReady
public boolean isPropagateReady()Indicates whether this estimator is ready for state propagations.- Returns:
- true if estimator is ready, false otherwise.
-
propagate
public boolean propagate(com.irurueta.units.Time timestamp) throws com.irurueta.navigation.LockedException, INSGNSSException Propagates Kalman filter state held by this estimator at provided timestamp. Call to this method will be ignored if interval between provided timestamp and last timestamp when Kalman filter was updated is less than epoch interval.- Parameters:
timestamp
- timestamp since epoch to propagate state.- Returns:
- true if state was propagated, false otherwise.
- Throws:
com.irurueta.navigation.LockedException
- if this estimator is already running.INSGNSSException
- if estimation fails due to numerical instabilities.
-
propagate
public boolean propagate(double timestamp) throws com.irurueta.navigation.LockedException, INSGNSSException Propagates Kalman filter state held by this estimator at provided timestamp. Call to this method will be ignored if interval between provided timestamp and last timestamp when Kalman filter was updated is less than epoch interval.- Parameters:
timestamp
- timestamp expressed in seconds since epoch to propagate state.- Returns:
- true if state was propagated, false otherwise.
- Throws:
com.irurueta.navigation.LockedException
- if this estimator is already running.INSGNSSException
- if estimation fails due to numerical instabilities.
-
reset
public void reset() throws com.irurueta.navigation.LockedExceptionResets this estimator.- Throws:
com.irurueta.navigation.LockedException
- if this estimator is already running.
-
initFrame
private boolean initFrame()Initializes current ECEF frame containing user position, velocity and orientation expressed and resolved in ECEF coordinates. This method makes no action if an initial frame already exists.- Returns:
- true if frame was initialized, false otherwise.
-
initState
private void initState()Initializes state. -
getValueOrZero
private double getValueOrZero(double value) Returns provided value if not infinity and not NaN.- Parameters:
value
- value to be returned.- Returns:
- value or 0.0.
-