Class LMedSRobustMixedPositionEstimator3D

java.lang.Object
com.irurueta.navigation.indoor.position.RobustPositionEstimator<com.irurueta.geometry.Point3D,Reading<? extends RadioSource>,RobustMixedPositionEstimatorListener<com.irurueta.geometry.Point3D>>
com.irurueta.navigation.indoor.position.RobustMixedPositionEstimator<com.irurueta.geometry.Point3D>
com.irurueta.navigation.indoor.position.RobustMixedPositionEstimator3D
com.irurueta.navigation.indoor.position.LMedSRobustMixedPositionEstimator3D

public class LMedSRobustMixedPositionEstimator3D extends RobustMixedPositionEstimator3D
Robustly estimates 3D position using located radio sources and their readings at unknown locations and using LMedS algorithm to discard outliers. This kind of estimator can be used to robustly determine the 3D position of a given device by getting readings at an unknown location of different radio sources whose 3D locations are known.
  • Constructor Details

    • LMedSRobustMixedPositionEstimator3D

      public LMedSRobustMixedPositionEstimator3D()
      Constructor.
    • LMedSRobustMixedPositionEstimator3D

      public LMedSRobustMixedPositionEstimator3D(List<? extends RadioSourceLocated<com.irurueta.geometry.Point3D>> sources)
      Constructor.
      Parameters:
      sources - located radio sources used for lateration.
      Throws:
      IllegalArgumentException - if provided sources is null or the number of provided sources is less than the required minimum.
    • LMedSRobustMixedPositionEstimator3D

      public LMedSRobustMixedPositionEstimator3D(Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint)
      Constructor.
      Parameters:
      fingerprint - fingerprint containing readings at an unknown location for provided located radio sources.
      Throws:
      IllegalArgumentException - if provided fingerprint is null.
    • LMedSRobustMixedPositionEstimator3D

      public LMedSRobustMixedPositionEstimator3D(List<? extends RadioSourceLocated<com.irurueta.geometry.Point3D>> sources, Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint)
      Constructor.
      Parameters:
      sources - located radio sources used for lateration.
      fingerprint - fingerprint containing readings at an unknown location for provided located radio sources.
      Throws:
      IllegalArgumentException - if either provided sources or fingerprint is null or the number of provided sources is less than the required minimum.
    • LMedSRobustMixedPositionEstimator3D

      public LMedSRobustMixedPositionEstimator3D(RobustMixedPositionEstimatorListener<com.irurueta.geometry.Point3D> listener)
      Constructor.
      Parameters:
      listener - listener in charge of handling events.
    • LMedSRobustMixedPositionEstimator3D

      public LMedSRobustMixedPositionEstimator3D(List<? extends RadioSourceLocated<com.irurueta.geometry.Point3D>> sources, RobustMixedPositionEstimatorListener<com.irurueta.geometry.Point3D> listener)
      Constructor.
      Parameters:
      sources - located radio sources used for lateration.
      listener - listener in charge of handling events.
      Throws:
      IllegalArgumentException - if provided sources is null or the number of provided sources is less than the required minimum.
    • LMedSRobustMixedPositionEstimator3D

      public LMedSRobustMixedPositionEstimator3D(Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint, RobustMixedPositionEstimatorListener<com.irurueta.geometry.Point3D> listener)
      Constructor.
      Parameters:
      fingerprint - fingerprint containing readings at an unknown location for provided location radio sources.
      listener - listener in charge of handling events.
      Throws:
      IllegalArgumentException - if provided fingerprint is null.
    • LMedSRobustMixedPositionEstimator3D

      public LMedSRobustMixedPositionEstimator3D(List<? extends RadioSourceLocated<com.irurueta.geometry.Point3D>> sources, Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint, RobustMixedPositionEstimatorListener<com.irurueta.geometry.Point3D> listener)
      Constructor.
      Parameters:
      sources - located radio sources used for lateration.
      fingerprint - fingerprint containing readings at an unknown location for provided located radio sources.
      listener - listener in charge of handling events.
      Throws:
      IllegalArgumentException - if either provided sources or fingerprint is null or the number of provided sources is less than the required minimum.
  • Method Details

    • getStopThreshold

      public double getStopThreshold()
      Returns threshold to be used to keep the algorithm iterating in case that best estimated threshold using median of residuals is not small enough. Once a solution is found that generates a threshold below this value, the algorithm will stop. The stop threshold can be used to prevent the LMedS algorithm to iterate too many times in cases where samples have a very similar accuracy. For instance, in cases where proportion of outliers is very small (close to 0%), and samples are very accurate (i.e. 1e-6), the algorithm would iterate for a long time trying to find the best solution when indeed there is no need to do that if a reasonable threshold has already been reached. Because of this behaviour the stop threshold can be set to a value much lower than the one typically used in RANSAC, and yet the algorithm could still produce even smaller thresholds in estimated results.
      Returns:
      stop threshold to stop the algorithm prematurely when a certain accuracy has been reached.
    • setStopThreshold

      public void setStopThreshold(double stopThreshold) throws com.irurueta.navigation.LockedException
      Sets threshold to be used to keep the algorithm iterating in case that best estimated threshold using median of residuals is not small enough. Once a solution is found that generates a threshold below this value, the algorithm will stop. The stop threshold can be used to prevent the LMedS algorithm to iterate too many times in cases where samples have a very similar accuracy. For instance, in cases where proportion of outliers is very small (close to 0%), and samples are very accurate (i.e. 1e-6), the algorithm would iterate for a long time trying to find the best solution when indeed there is no need to do that if a reasonable threshold has already been reached. Because of this behaviour the stop threshold can be set to a value much lower than the one typically used in RANSAC, and yet the algorithm could still produce even smaller thresholds in estimated results.
      Parameters:
      stopThreshold - stop threshold to stop the algorithm prematurely when a certain accuracy has been reached.
      Throws:
      IllegalArgumentException - if provided value is zero or negative.
      com.irurueta.navigation.LockedException - if this solver is locked.
    • getMethod

      public com.irurueta.numerical.robust.RobustEstimatorMethod getMethod()
      Returns method being used for robust estimation.
      Specified by:
      getMethod in class RobustPositionEstimator<com.irurueta.geometry.Point3D,Reading<? extends RadioSource>,RobustMixedPositionEstimatorListener<com.irurueta.geometry.Point3D>>
      Returns:
      method being used for robust estimation.
    • init

      private void init()
      Initializes robust lateration solver.