Class MSACRobustKnownFrameAccelerometerCalibrator

java.lang.Object
com.irurueta.navigation.inertial.calibration.accelerometer.RobustKnownFrameAccelerometerCalibrator
com.irurueta.navigation.inertial.calibration.accelerometer.MSACRobustKnownFrameAccelerometerCalibrator
All Implemented Interfaces:
AccelerometerCalibrator, AccelerometerNonLinearCalibrator, OrderedStandardDeviationFrameBodyKinematicsAccelerometerCalibrator, QualityScoredAccelerometerCalibrator, UnknownBiasAccelerometerCalibrator, UnknownBiasNonLinearAccelerometerCalibrator, AccelerometerBiasUncertaintySource, AccelerometerCalibrationSource

public class MSACRobustKnownFrameAccelerometerCalibrator extends RobustKnownFrameAccelerometerCalibrator
Robustly estimates accelerometer biases, cross couplings and scaling factors using a MSAC algorithm to discard outliers.

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

Measured specific force is assumed to follow the model shown below:

     fmeas = ba + (I + Ma) * ftrue + w
 
Where: - fmeas is the measured specific force. This is a 3x1 vector. - ba is accelerometer bias. Ideally, on a perfect accelerometer, this should be a 3x1 zero vector. - I is the 3x3 identity matrix. - Ma is the 3x3 matrix containing cross-couplings and scaling factors. Ideally, on a perfect accelerometer, this should be a 3x3 zero matrix. - ftrue is ground-truth specific force. - w is measurement noise.
  • 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

    • MSACRobustKnownFrameAccelerometerCalibrator

      public MSACRobustKnownFrameAccelerometerCalibrator()
      Constructor.
    • MSACRobustKnownFrameAccelerometerCalibrator

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

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

      public MSACRobustKnownFrameAccelerometerCalibrator(List<StandardDeviationFrameBodyKinematics> measurements, RobustKnownFrameAccelerometerCalibratorListener listener)
      Constructor.
      Parameters:
      measurements - list of body kinematics measurements with standard deviations taken at different frames (positions, orientations and velocities).
      listener - listener to handle events raised by this calibrator.
    • MSACRobustKnownFrameAccelerometerCalibrator

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

      public MSACRobustKnownFrameAccelerometerCalibrator(boolean commonAxisUsed, RobustKnownFrameAccelerometerCalibratorListener 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.
    • MSACRobustKnownFrameAccelerometerCalibrator

      public MSACRobustKnownFrameAccelerometerCalibrator(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.
    • MSACRobustKnownFrameAccelerometerCalibrator

      public MSACRobustKnownFrameAccelerometerCalibrator(List<StandardDeviationFrameBodyKinematics> measurements, boolean commonAxisUsed, RobustKnownFrameAccelerometerCalibratorListener 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 accelerometer calibration parameters containing bias, 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 RobustKnownFrameAccelerometerCalibrator
      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.