Class MSACRobustKnownHardIronAndFrameMagnetometerCalibrator

java.lang.Object
com.irurueta.navigation.inertial.calibration.magnetometer.RobustKnownHardIronAndFrameMagnetometerCalibrator
com.irurueta.navigation.inertial.calibration.magnetometer.MSACRobustKnownHardIronAndFrameMagnetometerCalibrator
All Implemented Interfaces:
KnownHardIronMagnetometerCalibrator, MagnetometerCalibrator, MagnetometerNonLinearCalibrator, OrderedStandardDeviationFrameBodyMagneticFluxDensityMagnetometerCalibrator, QualityScoredMagnetometerCalibrator

public class MSACRobustKnownHardIronAndFrameMagnetometerCalibrator extends RobustKnownHardIronAndFrameMagnetometerCalibrator
Robustly estimates magnetometer soft-iron cross couplings and scaling factors using MSAC algorithm.

To use this calibrator at least 4 measurements at different known frames must be provided. In other words, magnetometer samples must be obtained at 4 different positions or orientations. Notice that frame velocities are ignored by this calibrator.

Measured magnetic flux density is assumed to follow the model shown below:

     mBmeas = bm + (I + Mm) * mBtrue + w
 
Where: - mBmeas is the measured magnetic flux density. This is a 3x1 vector. - bm is magnetometer hard-iron bias. Ideally, on a perfect magnetometer, this should be a 3x1 zero vector. - I is the 3x3 identity matrix. - Mm is the 3x3 soft-iron matrix containing cross-couplings and scaling factors. Ideally, on a perfect magnetometer, this should be a 3x3 zero matrix. - mBtrue is ground-truth magnetic flux density. 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

    • MSACRobustKnownHardIronAndFrameMagnetometerCalibrator

      public MSACRobustKnownHardIronAndFrameMagnetometerCalibrator()
      Constructor.
    • MSACRobustKnownHardIronAndFrameMagnetometerCalibrator

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

      public MSACRobustKnownHardIronAndFrameMagnetometerCalibrator(List<StandardDeviationFrameBodyMagneticFluxDensity> measurements)
      Constructor.
      Parameters:
      measurements - list of body magnetic flux density measurements with standard deviations taken at different frames (positions and orientations).
    • MSACRobustKnownHardIronAndFrameMagnetometerCalibrator

      public MSACRobustKnownHardIronAndFrameMagnetometerCalibrator(List<StandardDeviationFrameBodyMagneticFluxDensity> measurements, RobustKnownHardIronAndFrameMagnetometerCalibratorListener listener)
      Constructor.
      Parameters:
      measurements - list of body magnetic flux density measurements with standard deviations taken at different frames (positions and orientations).
      listener - listener to handle events raised by this calibrator.
    • MSACRobustKnownHardIronAndFrameMagnetometerCalibrator

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

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

      public MSACRobustKnownHardIronAndFrameMagnetometerCalibrator(List<StandardDeviationFrameBodyMagneticFluxDensity> measurements, boolean commonAxisUsed)
      Constructor.
      Parameters:
      measurements - list of body magnetic flux density measurements with standard deviations taken at different frames (positions and orientations).
      commonAxisUsed - indicates whether z-axis is assumed to be common for the accelerometer, gyroscope and magnetometer.
    • MSACRobustKnownHardIronAndFrameMagnetometerCalibrator

      public MSACRobustKnownHardIronAndFrameMagnetometerCalibrator(List<StandardDeviationFrameBodyMagneticFluxDensity> measurements, boolean commonAxisUsed, RobustKnownHardIronAndFrameMagnetometerCalibratorListener listener)
      Constructor.
      Parameters:
      measurements - list of body magnetic flux density measurements with standard deviations taken at different frames (positions and orientations).
      commonAxisUsed - indicates whether z-axis is assumed to be common for the accelerometer, gyroscope and magnetometer.
      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 magnetometer calibration parameters containing soft-iron scale factors and cross-coupling errors.
      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 RobustKnownHardIronAndFrameMagnetometerCalibrator
      Returns:
      method being used for robust estimation.
    • isQualityScoresRequired

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