Class MSACRobustKnownFrameGyroscopeCalibrator

java.lang.Object
com.irurueta.navigation.inertial.calibration.gyroscope.RobustKnownFrameGyroscopeCalibrator
com.irurueta.navigation.inertial.calibration.gyroscope.MSACRobustKnownFrameGyroscopeCalibrator
All Implemented Interfaces:
GyroscopeCalibrator, GyroscopeNonLinearCalibrator, OrderedStandardDeviationFrameBodyKinematicsGyroscopeCalibrator, QualityScoredGyroscopeCalibrator, UnknownBiasGyroscopeCalibrator, UnknownBiasNonLinearGyroscopeCalibrator, GyroscopeBiasUncertaintySource, GyroscopeCalibrationSource

public class MSACRobustKnownFrameGyroscopeCalibrator extends RobustKnownFrameGyroscopeCalibrator
Robustly estimates gyroscope biases, cross couplings and scaling factors along with G-dependent cross biases introduced on the gyroscope by the specific forces sensed by the accelerometer using a MSAC algorithm to discard outliers.

To use this calibrator at least 7 measurements at different known frames must be provided. In other words, accelerometer and gyroscope (i.e. body kinematics) samples must be obtained at 7 different positions, orientations and velocities (although typically velocities are always zero).

Measured gyroscope angular rates is assumed to follow the model shown below:

     Ωmeas = bg + (I + Mg) * Ωtrue + Gg * ftrue + w
 
Where: - Ωmeas is the measured gyroscope angular rates. This is a 3x1 vector. - bg is the gyroscope bias. Ideally, on a perfect gyroscope, this should be a 3x1 zero vector. - I is the 3x3 identity matrix. - Mg is the 3x3 matrix containing cross-couplings and scaling factors. Ideally, on a perfect gyroscope, this should be a 3x3 zero matrix. - Ωtrue is ground-truth gyroscope angular rates. - Gg is the G-dependent cross biases introduced by the specific forces sensed by the accelerometer. Ideally, on a perfect gyroscope, this should be a 3x3 zero matrix. - ftrue is ground-truth specific force. This is a 3x1 vector. - w is measurement noise. This is a 3x1 vector.
  • Field Details

    • DEFAULT_THRESHOLD

      public static final double DEFAULT_THRESHOLD
      Constant defining default threshold to determine whether samples are inliers or not.
      See Also:
    • MIN_THRESHOLD

      public static final double MIN_THRESHOLD
      Minimum value that can be set as threshold. Threshold must be strictly greater than 0.0.
      See Also:
    • threshold

      private double threshold
      Threshold to determine whether samples are inliers or not when testing possible estimation solutions.
  • Constructor Details

    • MSACRobustKnownFrameGyroscopeCalibrator

      public MSACRobustKnownFrameGyroscopeCalibrator()
      Constructor.
    • MSACRobustKnownFrameGyroscopeCalibrator

      public MSACRobustKnownFrameGyroscopeCalibrator(RobustKnownFrameGyroscopeCalibratorListener listener)
      Constructor.
      Parameters:
      listener - listener to be notified of events such as when estimation starts, ends or its progress significantly changes.
    • MSACRobustKnownFrameGyroscopeCalibrator

      public MSACRobustKnownFrameGyroscopeCalibrator(List<StandardDeviationFrameBodyKinematics> measurements)
      Constructor.
      Parameters:
      measurements - list of body kinematics measurements with standard deviations taken at different frames (positions, orientations and velocities).
    • MSACRobustKnownFrameGyroscopeCalibrator

      public MSACRobustKnownFrameGyroscopeCalibrator(List<StandardDeviationFrameBodyKinematics> measurements, RobustKnownFrameGyroscopeCalibratorListener listener)
      Constructor.
      Parameters:
      measurements - list of body kinematics measurements with standard deviations taken at different frames (positions, orientations and velocities).
      listener - listener to be notified of events such as when estimation starts, ends or its progress significantly changes.
    • MSACRobustKnownFrameGyroscopeCalibrator

      public MSACRobustKnownFrameGyroscopeCalibrator(boolean commonAxisUsed)
      Constructor.
      Parameters:
      commonAxisUsed - indicates whether z-axis is assumed to be common for accelerometer and gyroscope.
    • MSACRobustKnownFrameGyroscopeCalibrator

      public MSACRobustKnownFrameGyroscopeCalibrator(boolean commonAxisUsed, RobustKnownFrameGyroscopeCalibratorListener listener)
      Constructor.
      Parameters:
      commonAxisUsed - indicates whether z-axis is assumed to be common for accelerometer and gyroscope.
      listener - listener to handle events raised by this calibrator.
    • MSACRobustKnownFrameGyroscopeCalibrator

      public MSACRobustKnownFrameGyroscopeCalibrator(List<StandardDeviationFrameBodyKinematics> measurements, boolean commonAxisUsed)
      Constructor.
      Parameters:
      measurements - list of body kinematics measurements with standard deviations taken at different frames (positions, orientations and velocities).
      commonAxisUsed - indicates whether z-axis is assumed to be common for accelerometer and gyroscope.
    • MSACRobustKnownFrameGyroscopeCalibrator

      public MSACRobustKnownFrameGyroscopeCalibrator(List<StandardDeviationFrameBodyKinematics> measurements, boolean commonAxisUsed, RobustKnownFrameGyroscopeCalibratorListener listener)
      Constructor.
      Parameters:
      measurements - list of body kinematics measurements with standard deviations taken at different frames (positions, orientations and velocities).
      commonAxisUsed - indicates whether z-axis is assumed to be common for accelerometer and gyroscope.
      listener - listener to handle events raised by this calibrator.
  • Method Details

    • getThreshold

      public double getThreshold()
      Returns threshold to determine whether samples are inliers or not.
      Returns:
      threshold to determine whether samples are inliers or not.
    • setThreshold

      public void setThreshold(double threshold) throws com.irurueta.navigation.LockedException
      Sets threshold to determine whether samples are inliers or not.
      Parameters:
      threshold - threshold to be set.
      Throws:
      IllegalArgumentException - if provided value is equal or less than zero.
      com.irurueta.navigation.LockedException - if calibrator is currently running.
    • calibrate

      public void calibrate() throws com.irurueta.navigation.LockedException, com.irurueta.navigation.NotReadyException, CalibrationException
      Estimates gyroscope calibration parameters containing bias, scale factors cross-coupling errors and g-dependant cross biases.
      Throws:
      com.irurueta.navigation.LockedException - if calibrator is currently running.
      com.irurueta.navigation.NotReadyException - if calibrator is not ready.
      CalibrationException - if estimation fails for numerical reasons.
    • getMethod

      public com.irurueta.numerical.robust.RobustEstimatorMethod getMethod()
      Returns method being used for robust estimation.
      Specified by:
      getMethod in class RobustKnownFrameGyroscopeCalibrator
      Returns:
      method being used for robust estimation.
    • isQualityScoresRequired

      public boolean isQualityScoresRequired()
      Indicates whether this calibrator requires quality scores for each measurement/sequence or not.
      Returns:
      true if quality scores are required, false otherwise.