Class SequentialRobustMixedPositionEstimator<P extends com.irurueta.geometry.Point<?>>

java.lang.Object
com.irurueta.navigation.indoor.position.SequentialRobustMixedPositionEstimator<P>
Type Parameters:
P - a Point type.
Direct Known Subclasses:
SequentialRobustMixedPositionEstimator2D, SequentialRobustMixedPositionEstimator3D

public abstract class SequentialRobustMixedPositionEstimator<P extends com.irurueta.geometry.Point<?>> extends Object
Base class for robust position estimation, using RSSI readings first to obtain an initial coarse position estimation, and then ranging readings to refine such estimation.

This implementation is like SequentialRobustRangingAndRssiPositionEstimator but allows mixing different kinds of readings (ranging, RSSI or ranging+RSSI).

  • Field Details

    • DEFAULT_RANGING_ROBUST_METHOD

      public static final com.irurueta.numerical.robust.RobustEstimatorMethod DEFAULT_RANGING_ROBUST_METHOD
      Default robust estimator method for robust position estimation using ranging data when no robust method is provided.
    • DEFAULT_RSSI_ROBUST_METHOD

      public static final com.irurueta.numerical.robust.RobustEstimatorMethod DEFAULT_RSSI_ROBUST_METHOD
      Default robust method for coarse robust position estimation using RSSI data when no robust method is provided.
    • DEFAULT_USE_RANGING_RADIO_SOURCE_POSITION_COVARIANCE

      public static final boolean DEFAULT_USE_RANGING_RADIO_SOURCE_POSITION_COVARIANCE
      Indicates that by default located radio source position covariance is taken into account (if available) to determine distance standard deviation for ranging measurements.
      See Also:
    • DEFAULT_USE_RSSI_RADIO_SOURCE_POSITION_COVARIANCE

      public static final boolean DEFAULT_USE_RSSI_RADIO_SOURCE_POSITION_COVARIANCE
      Indicates that by default located radio source position covariance is taken into account (if available) to determine distance standard deviation for RSSI measurements.
      See Also:
    • DEFAULT_EVENLY_DISTRIBUTE_RANGING_READINGS

      public static final boolean DEFAULT_EVENLY_DISTRIBUTE_RANGING_READINGS
      Indicates that by default readings are distributed evenly among radio sources taking into account quality scores of both radio sources and ranging readings.
      See Also:
    • DEFAULT_EVENLY_DISTRIBUTE_RSSI_READINGS

      public static final boolean DEFAULT_EVENLY_DISTRIBUTE_RSSI_READINGS
      Indicates that by default readings are distributed evenly among radio sources taking into account quality scores of both radio sources and RSSI readings.
      See Also:
    • FALLBACK_DISTANCE_STANDARD_DEVIATION

      public static final double FALLBACK_DISTANCE_STANDARD_DEVIATION
      Distance standard deviation assumed for provided distances as a fallback when none can be determined.
      See Also:
    • DEFAULT_PROGRESS_DELTA

      public static final float DEFAULT_PROGRESS_DELTA
      Default amount of progress variation before notifying a change in estimation progress. By default, this is set to 5%.
      See Also:
    • MIN_PROGRESS_DELTA

      public static final float MIN_PROGRESS_DELTA
      Minimum allowed value for progress delta.
      See Also:
    • MAX_PROGRESS_DELTA

      public static final float MAX_PROGRESS_DELTA
      Maximum allowed value for progress delta.
      See Also:
    • DEFAULT_CONFIDENCE

      public static final double DEFAULT_CONFIDENCE
      Constant defining default confidence of the estimated result, which is 99%. This means that with a probability of 99% estimation will be accurate because chosen sub-samples will be inliers.
      See Also:
    • DEFAULT_MAX_ITERATIONS

      public static final int DEFAULT_MAX_ITERATIONS
      Default maximum allowed number of iterations.
      See Also:
    • MIN_CONFIDENCE

      public static final double MIN_CONFIDENCE
      Minimum allowed confidence value.
      See Also:
    • MAX_CONFIDENCE

      public static final double MAX_CONFIDENCE
      Maximum allowed confidence value.
      See Also:
    • MIN_ITERATIONS

      public static final int MIN_ITERATIONS
      Minimum allowed number of iterations.
      See Also:
    • DEFAULT_REFINE_RESULT

      public static final boolean DEFAULT_REFINE_RESULT
      Indicates that result is refined by default using all found inliers.
      See Also:
    • DEFAULT_KEEP_COVARIANCE

      public static final boolean DEFAULT_KEEP_COVARIANCE
      Indicates that covariance is kept by default after refining result.
      See Also:
    • DEFAULT_USE_RANGING_LINEAR_SOLVER

      public static final boolean DEFAULT_USE_RANGING_LINEAR_SOLVER
      Indicates that by default a linear solver is used for preliminary solution estimation using ranging measurements. The result obtained on each preliminary solution might be later refined.
      See Also:
    • DEFAULT_USE_RSSI_LINEAR_SOLVER

      public static final boolean DEFAULT_USE_RSSI_LINEAR_SOLVER
      Indicates that by default a linear solver is used for preliminary solution estimation using RSSI measurements. The result obtained on each preliminary solution might be later refined.
      See Also:
    • DEFAULT_USE_RANGING_HOMOGENEOUS_LINEAR_SOLVER

      public static final boolean DEFAULT_USE_RANGING_HOMOGENEOUS_LINEAR_SOLVER
      Indicates that by default an homogeneous linear solver is used either to estimate preliminary solutions or an initial solution for preliminary solutions that will be later refined on the ranging fine estimation.
      See Also:
    • DEFAULT_USE_RSSI_HOMOGENEOUS_LINEAR_SOLVER

      public static final boolean DEFAULT_USE_RSSI_HOMOGENEOUS_LINEAR_SOLVER
      Indicates that by default an homogeneous linear solver is used either to estimate preliminary solutions or an initial solution for preliminary solutions that will be later refined on the RSSI coarse estimation.
      See Also:
    • DEFAULT_REFINE_RANGING_PRELIMINARY_SOLUTIONS

      public static final boolean DEFAULT_REFINE_RANGING_PRELIMINARY_SOLUTIONS
      Indicates that by default preliminary ranging solutions are refined.
      See Also:
    • DEFAULT_REFINE_RSSI_PRELIMINARY_SOLUTIONS

      public static final boolean DEFAULT_REFINE_RSSI_PRELIMINARY_SOLUTIONS
      Indicates that by default preliminary RSSI solutions are refined.
      See Also:
    • rangingEstimator

      protected RobustRangingPositionEstimator<P extends com.irurueta.geometry.Point<?>> rangingEstimator
      Internal robust estimator for position estimation using ranging readings.
    • rssiEstimator

      protected RobustRssiPositionEstimator<P extends com.irurueta.geometry.Point<?>> rssiEstimator
      Internal robust estimator for coarse position estimation using RSSI readings.
    • rangingRobustMethod

      protected com.irurueta.numerical.robust.RobustEstimatorMethod rangingRobustMethod
      Robust method used for robust position estimation using ranging data.
    • rssiRobustMethod

      protected com.irurueta.numerical.robust.RobustEstimatorMethod rssiRobustMethod
      Robust method used for coarse robust position estimation using RSSI data.
    • rangingPreliminarySubsetSize

      protected int rangingPreliminarySubsetSize
      Size of subsets to be checked during robust estimation.
    • rssiPreliminarySubsetSize

      protected int rssiPreliminarySubsetSize
      Size of subsets to be checked during RSSI robust estimation.
    • rangingThreshold

      protected Double rangingThreshold
      Threshold to determine when samples are inliers or not used during ranging position estimation. If not defined, default threshold will be used.
    • rssiThreshold

      protected Double rssiThreshold
      Threshold to determine when samples are inliers or not used during RSSI position estimation. If not defined, default threshold will be used.
    • useRangingRadioSourcePositionCovariance

      private boolean useRangingRadioSourcePositionCovariance
      Indicates whether located radio source position covariance is taken into account (if available) to determine distance standard deviation for ranging measurements.
    • useRssiRadioSourcePositionCovariance

      private boolean useRssiRadioSourcePositionCovariance
      Indicates whether located radio source position covariance is taken into account (if available) to determine distance standard deviation for RSSI measurements.
    • evenlyDistributeRangingReadings

      private boolean evenlyDistributeRangingReadings
      Indicates whether ranging readings are evenly distributed among radio sources taking into account quality scores of both radio sources and ranging readings.
    • evenlyDistributeRssiReadings

      private boolean evenlyDistributeRssiReadings
      Indicates whether RSSI readings are evenly distributed among radio sources taking into account quality scores of both radio sources and RSSI readings.
    • rssiFallbackDistanceStandardDeviation

      private double rssiFallbackDistanceStandardDeviation
      Distance standard deviation fallback value to use when none can be determined from provided RSSI measurements.
    • rangingFallbackDistanceStandardDeviation

      private double rangingFallbackDistanceStandardDeviation
      Distance standard deviation fallback value to use when none can be determined from provided ranging measurements.
    • progressDelta

      private float progressDelta
      Amount of progress variation before notifying a progress change during estimation.
    • rangingConfidence

      private double rangingConfidence
      Amount of confidence expressed as a value between 0.0 and 1.0 (which is equivalent to 100%) for robust position estimation on ranging data. The amount of confidence indicates the probability that the estimated result is correct. Usually this value will be close to 1.0, but not exactly 1.0.
    • rssiConfidence

      private double rssiConfidence
      Amount of confidence expressed as a value between 0.0 and 1.0 (which is equivalent to 100%) for robust position estimation on RSSI data. The amount of confidence indicates the probability that the estimated result is correct. Usually this value will be close to 1.0, but not exactly 1.0.
    • rangingMaxIterations

      private int rangingMaxIterations
      Maximum allowed number of iterations for robust ranging position estimation. When the maximum number of iterations is exceeded, an approximate result might be available for retrieval.
    • rssiMaxIterations

      private int rssiMaxIterations
      Maximum allowed number of iterations for robust RSSI position estimation. When the maximum number of iterations is exceeded, an approximate result might be available for retrieval.
    • refineResult

      private boolean refineResult
      Indicates whether result is refined using all found inliers.
    • keepCovariance

      private boolean keepCovariance
      Indicates that covariance is kept after refining result.
    • useRangingLinearSolver

      private boolean useRangingLinearSolver
      Indicates that a linear solver is used for preliminary solution estimation using ranging measurements. The result obtained on each preliminary solution might be later refined.
    • useRssiLinearSolver

      private boolean useRssiLinearSolver
      Indicates that a linear solver is used for preliminary solution estimation using RSSI measurements. The result obtained on each preliminary solution might be later refined.
    • useRangingHomogeneousLinearSolver

      private boolean useRangingHomogeneousLinearSolver
      Indicates whether an homogeneous linear solver is used either to estimate preliminary solutions or an initial solution for preliminary solutions that will be later refined on the ranging fine estimation.
    • useRssiHomogeneousLinearSolver

      private boolean useRssiHomogeneousLinearSolver
      Indicates whether an homogeneous linear solver is used either to estimate preliminary solutions or an initial solution for preliminary solutions that will be later refined on the RSSI coarse estimation.
    • refineRangingPreliminarySolutions

      private boolean refineRangingPreliminarySolutions
      Indicates whether preliminary ranging solutions are refined.
    • refineRssiPreliminarySolutions

      private boolean refineRssiPreliminarySolutions
      Indicates whether preliminary RSSI solutions are refined.
    • listener

      private SequentialRobustMixedPositionEstimatorListener<P extends com.irurueta.geometry.Point<?>> listener
      Listener in charge of handling events.
    • sources

      private List<? extends RadioSourceLocated<P extends com.irurueta.geometry.Point<?>>> sources
      Located radio sources used for lateration.
    • fingerprint

      private Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint
      Fingerprint containing readings at an unknown location for provided located radio sources.
    • sourceQualityScores

      private double[] sourceQualityScores
      Quality scores corresponding to each provided located radio source. The larger the score value the better the quality of the radio source.
    • fingerprintReadingsQualityScores

      private double[] fingerprintReadingsQualityScores
      Quality scores corresponding to each reading with provided fingerprint. The larger the score value the better the quality of the reading.
    • initialPosition

      private P extends com.irurueta.geometry.Point<?> initialPosition
      An initial position to start the estimation from. This can be useful if we only intend to refine a previously known estimation.
    • locked

      private boolean locked
      Indicates if this instance is locked because estimation is being executed.
    • rangingEstimatorAvailable

      private boolean rangingEstimatorAvailable
      Indicates whether ranging estimation must be available or not using provided fingerprint readings.
    • rssiEstimatorAvailable

      private boolean rssiEstimatorAvailable
      Indicates whether RSSI estimation must be available or not using provided fingerprint readings.
    • numRangingReadings

      private int numRangingReadings
      Number of ranging readings found on provided fingerprint.
    • numRssiReadings

      private int numRssiReadings
      Number of RSSI readings found on provided fingerprint.
  • Constructor Details

    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator()
      Constructor.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(List<? extends RadioSourceLocated<P>> 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.
    • SequentialRobustMixedPositionEstimator

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

      protected SequentialRobustMixedPositionEstimator(List<? extends RadioSourceLocated<P>> 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.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(SequentialRobustMixedPositionEstimatorListener<P> listener)
      Constructor.
      Parameters:
      listener - listener in charge of handling events.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(List<? extends RadioSourceLocated<P>> sources, SequentialRobustMixedPositionEstimatorListener<P> 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.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint, SequentialRobustMixedPositionEstimatorListener<P> listener)
      Constructor.
      Parameters:
      fingerprint - fingerprint containing readings at an unknown location for provided located radio sources.
      listener - listener in charge of handling events.
      Throws:
      IllegalArgumentException - if provided fingerprint is null.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(List<? extends RadioSourceLocated<P>> sources, Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint, SequentialRobustMixedPositionEstimatorListener<P> 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.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(double[] sourceQualityScores, double[] fingerprintReadingQualityScores)
      Constructor.
      Parameters:
      sourceQualityScores - quality scores corresponding to each provided located radio source. The larger the score value the better the quality of the radio source.
      fingerprintReadingQualityScores - quality scores corresponding to readings within provided fingerprint. The larger the score the better the quality of the reading.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(double[] sourceQualityScores, double[] fingerprintReadingQualityScores, List<? extends RadioSourceLocated<P>> sources)
      Constructor.
      Parameters:
      sourceQualityScores - quality scores corresponding to each provided located radio source. The larger the score value the better the quality of the radio source.
      fingerprintReadingQualityScores - quality scores corresponding to readings within provided fingerprint. The larger the score the better the quality of the reading.
      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.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(double[] sourceQualityScores, double[] fingerprintReadingQualityScores, Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint)
      Constructor.
      Parameters:
      sourceQualityScores - quality scores corresponding to each provided located radio source. The larger the score value the better the quality of the radio source.
      fingerprintReadingQualityScores - quality scores corresponding to readings within provided fingerprint. The larger the score the better the quality of the reading.
      fingerprint - fingerprint containing readings at an unknown location for provided located radio sources.
      Throws:
      IllegalArgumentException - if provided fingerprint is null.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(double[] sourceQualityScores, double[] fingerprintReadingQualityScores, List<? extends RadioSourceLocated<P>> sources, Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint)
      Constructor.
      Parameters:
      sourceQualityScores - quality scores corresponding to each provided located radio source. The larger the score value the better the quality of the radio source.
      fingerprintReadingQualityScores - quality scores corresponding to readings within provided fingerprint. The larger the score the better the quality of the reading.
      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.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(double[] sourceQualityScores, double[] fingerprintReadingQualityScores, SequentialRobustMixedPositionEstimatorListener<P> listener)
      Constructor.
      Parameters:
      sourceQualityScores - quality scores corresponding to each provided located radio source. The larger the score value the better the quality of the radio source.
      fingerprintReadingQualityScores - quality scores corresponding to readings within provided fingerprint. The larger the score the better the quality of the reading.
      listener - listener in charge of handling events.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(double[] sourceQualityScores, double[] fingerprintReadingQualityScores, List<? extends RadioSourceLocated<P>> sources, SequentialRobustMixedPositionEstimatorListener<P> listener)
      Constructor.
      Parameters:
      sourceQualityScores - quality scores corresponding to each provided located radio source. The larger the score value the better the quality of the radio source.
      fingerprintReadingQualityScores - quality scores corresponding to readings within provided fingerprint. The larger the score the better the quality of the reading.
      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.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(double[] sourceQualityScores, double[] fingerprintReadingQualityScores, Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint, SequentialRobustMixedPositionEstimatorListener<P> listener)
      Constructor.
      Parameters:
      sourceQualityScores - quality scores corresponding to each provided located radio source. The larger the score value the better the quality of the radio source.
      fingerprintReadingQualityScores - quality scores corresponding to readings within provided fingerprint. The larger the score the better the quality of the reading.
      fingerprint - fingerprint containing readings at an unknown location for provided located radio sources.
      listener - listener in charge of handling events.
      Throws:
      IllegalArgumentException - if provided fingerprint is null.
    • SequentialRobustMixedPositionEstimator

      protected SequentialRobustMixedPositionEstimator(double[] sourceQualityScores, double[] fingerprintReadingQualityScores, List<? extends RadioSourceLocated<P>> sources, Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint, SequentialRobustMixedPositionEstimatorListener<P> listener)
      Constructor.
      Parameters:
      sourceQualityScores - quality scores corresponding to each provided located radio source. The larger the score value the better the quality of the radio source.
      fingerprintReadingQualityScores - quality scores corresponding to readings within provided fingerprint. The larger the score the better the quality of the reading.
      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

    • getRangingRobustMethod

      public com.irurueta.numerical.robust.RobustEstimatorMethod getRangingRobustMethod()
      Gets robust method used for robust position estimation using ranging data.
      Returns:
      robust method used for robust position estimation using ranging data.
    • setRangingRobustMethod

      public void setRangingRobustMethod(com.irurueta.numerical.robust.RobustEstimatorMethod rangingRobustMethod) throws com.irurueta.navigation.LockedException
      Sets robust method for robust position estimation using ranging data.
      Parameters:
      rangingRobustMethod - robust method used for robust position estimation using ranging data.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
    • getRssiRobustMethod

      public com.irurueta.numerical.robust.RobustEstimatorMethod getRssiRobustMethod()
      Gets robust method used for coarse robust position estimation using RSSI data.
      Returns:
      robust method used for coarse robust position estimation using RSSI data.
    • setRssiRobustMethod

      public void setRssiRobustMethod(com.irurueta.numerical.robust.RobustEstimatorMethod rssiRobustMethod) throws com.irurueta.navigation.LockedException
      Sets robust method used for coarse robust position estimation using RSSI data.
      Parameters:
      rssiRobustMethod - robust method used for coarse robust position estimation using RSSI data.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
    • isRangingRadioSourcePositionCovarianceUsed

      public boolean isRangingRadioSourcePositionCovarianceUsed()
      Indicates whether located radio source position covariance is taken into account (if available) to determine distance standard deviation for ranging measurements.
      Returns:
      true to take into account radio source position covariance during ranging position estimation, false otherwise.
    • setRangingRadioSourcePositionCovarianceUsed

      public void setRangingRadioSourcePositionCovarianceUsed(boolean useRangingRadioSourcePositionCovariance) throws com.irurueta.navigation.LockedException
      Specifies whether located radio source position covariance is taken into account (if available) to determine distance standard deviation for ranging measurements.
      Parameters:
      useRangingRadioSourcePositionCovariance - true to take into account radio source position covariance during ranging position estimation, false otherwise.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
    • isRssiRadioSourcePositionCovarianceUsed

      public boolean isRssiRadioSourcePositionCovarianceUsed()
      Indicates whether located radio source position covariance is taken into account (if available) to determine distance standard deviation for RSSI measurements.
      Returns:
      true to take into account radio source position covariance during RSSI position estimation, false otherwise.
    • setRssiRadioSourcePositionCovarianceUsed

      public void setRssiRadioSourcePositionCovarianceUsed(boolean useRssiRadioSourcePositionCovariance) throws com.irurueta.navigation.LockedException
      Specifies whether located radio source position covariance is taken into account (if available) to determine distance standard deviation for RSSI measurements.
      Parameters:
      useRssiRadioSourcePositionCovariance - true to take into account radio source position covariance during RSSI position estimation, false otherwise.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
    • isRangingReadingsEvenlyDistributed

      public boolean isRangingReadingsEvenlyDistributed()
      Indicates whether ranging readings are evenly distributed among radio sources taking into account quality scores of both radio sources and ranging readings.
      Returns:
      true if ranging readings are evenly distributed among radio sources, false otherwise.
    • setRangingReadingsEvenlyDistributed

      public void setRangingReadingsEvenlyDistributed(boolean evenlyDistributeRangingReadings) throws com.irurueta.navigation.LockedException
      Specifies whether ranging readings are evenly distributed among radio sources taking into account quality scores of both radio sources and ranging readings.
      Parameters:
      evenlyDistributeRangingReadings - true if ranging readings are evenly distributed among radio sources, false otherwise.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
    • getRssiFallbackDistanceStandardDeviation

      public double getRssiFallbackDistanceStandardDeviation()
      Gets distance standard deviation fallback value to use when none can be determined from provided RSSI measurements.
      Returns:
      distance standard deviation fallback value to use when none can be determined from provided RSSI measurements.
    • setRssiFallbackDistanceStandardDeviation

      public void setRssiFallbackDistanceStandardDeviation(double rssiFallbackDistanceStandardDeviation) throws com.irurueta.navigation.LockedException
      Sets distance standard deviation fallback value to use when none can be determined from provided RSSI measurements.
      Parameters:
      rssiFallbackDistanceStandardDeviation - distance standard deviation fallback value to use when none can be determined from provided RSSI measurements.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
    • getRangingFallbackDistanceStandardDeviation

      public double getRangingFallbackDistanceStandardDeviation()
      Gets distance standard deviation fallback value to use when none can be determined from provided ranging measurements.
      Returns:
      distance standard deviation fallback value to use when none can be determined from provided ranging measurements.
    • setRangingFallbackDistanceStandardDeviation

      public void setRangingFallbackDistanceStandardDeviation(double rangingFallbackDistanceStandardDeviation) throws com.irurueta.navigation.LockedException
      Sets distance standard deviation fallback value to use when none can be determined from provided ranging measurements.
      Parameters:
      rangingFallbackDistanceStandardDeviation - distance standard deviation fallback value to use when none can be determined from provided ranging measurements.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
    • isRssiReadingsEvenlyDistributed

      public boolean isRssiReadingsEvenlyDistributed()
      Indicates whether RSSI readings are evenly distributed among radio sources taking into account quality scores of both radio sources and RSSI readings.
      Returns:
      true if RSSI readings are evenly distributed among radio sources, false otherwise.
    • setRssiReadingsEvenlyDistributed

      public void setRssiReadingsEvenlyDistributed(boolean evenlyDistributeRssiReadings) throws com.irurueta.navigation.LockedException
      Specifies whether RSSI readings are evenly distributed among radio sources taking into account quality scores of both radio sources and RSSI readings.
      Parameters:
      evenlyDistributeRssiReadings - true if RSSI readings are evenly distributed among radio sources, false otherwise.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
    • getProgressDelta

      public float getProgressDelta()
      Gets amount of progress variation before notifying a progress change during estimation.
      Returns:
      amount of progress variation before notifying a progress change during estimation.
    • setProgressDelta

      public void setProgressDelta(float progressDelta) throws com.irurueta.navigation.LockedException
      Sets amount of progress variation before notifying a progress change during estimation.
      Parameters:
      progressDelta - amount of progress variation before notifying a progress change during estimation.
      Throws:
      IllegalArgumentException - if progress delta is less than zero or greater than 1.
      com.irurueta.navigation.LockedException - if this instance is locked.
    • getRangingConfidence

      public double getRangingConfidence()
      Returns amount of confidence expressed as a value between 0.0 and 1.0 (which is equivalent to 100%) for robust position estimation on ranging data. The amount of confidence indicates the probability that the estimated result is correct. Usually this value will be close to 1.0, but not exactly 1.0.
      Returns:
      amount of confidence for robust position estimation as a value between 0.0 and 1.0.
    • setRangingConfidence

      public void setRangingConfidence(double rangingConfidence) throws com.irurueta.navigation.LockedException
      Sets amount of confidence expressed as a value between 0.0 and 1.0 (which is equivalent to 100%) for robust position estimation on ranging data. The amount of confidence indicates the probability that the estimated result is correct. Usually this value will be close to 1.0, but not exactly 1.0.
      Parameters:
      rangingConfidence - confidence to be set for robust position estimation as a value between 0.0 and 1.0.
      Throws:
      IllegalArgumentException - if provided value is not between 0.0 and 1.0.
      com.irurueta.navigation.LockedException - if estimator is locked.
    • getRssiConfidence

      public double getRssiConfidence()
      Returns amount of confidence expressed as a value between 0.0 and 1.0 (which is equivalent to 100%) for robust position estimation on RSSI data. The amount of confidence indicates the probability that the estimated result is correct. Usually this value will be close to 1.0, but not exactly 1.0.
      Returns:
      amount of confidence for robust position estimation as a value between 0.0 and 1.0.
    • setRssiConfidence

      public void setRssiConfidence(double rssiConfidence) throws com.irurueta.navigation.LockedException
      Sets amount of confidence expressed as a value between 0.0 and 1.0 (which is equivalent to 100%) for robust position estimation on RSSI data. The amount of confidence indicates the probability that the estimated result is correct. Usually this value will be close to 1.0, but not exactly 1.0.
      Parameters:
      rssiConfidence - amount of confidence for robust position estimation as a value between 0.0 and 1.0.
      Throws:
      IllegalArgumentException - if provided value is not between 0.0 and 1.0.
      com.irurueta.navigation.LockedException - if estimator is locked.
    • getRangingMaxIterations

      public int getRangingMaxIterations()
      Gets maximum allowed number of iterations for robust ranging position estimation. When the maximum number of iterations is exceeded, an approximate result might be available for retrieval.
      Returns:
      maximum allowed number of iterations for position estimation.
    • setRangingMaxIterations

      public void setRangingMaxIterations(int rangingMaxIterations) throws com.irurueta.navigation.LockedException
      Sets maximum allowed number of iterations for robust ranging position estimation. When the maximum number of iterations is exceeded, an approximate result might be available for retrieval.
      Parameters:
      rangingMaxIterations - maximum allowed number of iterations to be set for position estimation.
      Throws:
      IllegalArgumentException - if provided value is less than 1.
      com.irurueta.navigation.LockedException - if estimator is locked.
    • getRssiMaxIterations

      public int getRssiMaxIterations()
      Gets maximum allowed number of iterations for robust RSSI position estimation. When the maximum number of iterations is exceeded, an approximate result might be available for retrieval.
      Returns:
      maximum allowed number of iterations for position estimation.
    • setRssiMaxIterations

      public void setRssiMaxIterations(int rssiMaxIterations) throws com.irurueta.navigation.LockedException
      Sets maximum allowed number of iterations for robust RSSI position estimation. When the maximum number of iterations is exceeded, an approximate result might be available for retrieval.
      Parameters:
      rssiMaxIterations - maximum allowed number of iterations to be set for position estimation.
      Throws:
      IllegalArgumentException - if provided value is less than 1.
      com.irurueta.navigation.LockedException - if estimator is locked.
    • isResultRefined

      public boolean isResultRefined()
      Indicates whether result is refined using all found inliers.
      Returns:
      true if result is refined, false otherwise.
    • setResultRefined

      public void setResultRefined(boolean refineResult) throws com.irurueta.navigation.LockedException
      Specifies whether result is refined using all found inliers.
      Parameters:
      refineResult - true if result is refined, false otherwise.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
    • isCovarianceKept

      public boolean isCovarianceKept()
      Indicates whether covariance must be kept after refining result. This setting is only taken into account if result is refined.
      Returns:
      true if covariance must be kept after refining result, false otherwise.
    • setCovarianceKept

      public void setCovarianceKept(boolean keepCovariance) throws com.irurueta.navigation.LockedException
      Specifies whether covariance must be kept after refining result. This setting is only taken into account if result is refined.
      Parameters:
      keepCovariance - true if covariance must be kept after refining result, false otherwise.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • isRangingLinearSolverUsed

      public boolean isRangingLinearSolverUsed()
      Indicates whether a linear solver is used for preliminary solution estimation using ranging measurements. The result obtained on each preliminary solution might be later refined.
      Returns:
      true if a linear solver is used for preliminary solution estimation on ranging readings.
    • setRangingLinearSolverUsed

      public void setRangingLinearSolverUsed(boolean useRangingLinearSolver) throws com.irurueta.navigation.LockedException
      Specifies whether a linear solver is used for preliminary solution estimation using ranging measurements. The result obtained on each preliminary solution might be later refined.
      Parameters:
      useRangingLinearSolver - true if a linear solver is used for preliminary solution estimation on ranging readings.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • isRssiLinearSolverUsed

      public boolean isRssiLinearSolverUsed()
      Indicates whether a linear solver is used for preliminary solution estimation using RSSI measurements. The result obtained on each preliminary solution might be later refined.
      Returns:
      true if a linear solver is used for preliminary solution estimation on RSSI readings.
    • setRssiLinearSolverUsed

      public void setRssiLinearSolverUsed(boolean useRssiLinearSolver) throws com.irurueta.navigation.LockedException
      Specifies whether a linear solver is used for preliminary solution estimation using RSSI measurements. The result obtained on each preliminary solution might be later refined.
      Parameters:
      useRssiLinearSolver - true if a linear solver is used for preliminary solution estimation on RSSI readings.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • isRangingHomogeneousLinearSolverUsed

      public boolean isRangingHomogeneousLinearSolverUsed()
      Indicates whether an homogeneous linear solver is used either to estimate preliminary solutions or an initial solution for preliminary solutions that will be later refined on the ranging fine estimation.
      Returns:
      true to use an homogeneous linear solver for preliminary solutions during ranging fine position estimation.
    • setRangingHomogeneousLinearSolverUsed

      public void setRangingHomogeneousLinearSolverUsed(boolean useRangingHomogeneousLinearSolver) throws com.irurueta.navigation.LockedException
      Specifies whether an homogeneous linear solver is used either to estimate preliminary solutions or an initial solution for preliminary solutions that will be later refined on the ranging fine estimation.
      Parameters:
      useRangingHomogeneousLinearSolver - true to use an homogeneous linear solver for preliminary solutions during ranging fine position estimation.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • isRssiHomogeneousLinearSolverUsed

      public boolean isRssiHomogeneousLinearSolverUsed()
      Indicates whether an homogeneous linear solver is used either to estimate preliminary solutions or an initial solution for preliminary solutions that will be later refined on the RSSI coarse estimation.
      Returns:
      true to use an homogeneous linear solver for preliminary solutions during RSSI coarse position estimation.
    • setRssiHomogeneousLinearSolverUsed

      public void setRssiHomogeneousLinearSolverUsed(boolean useRssiHomogeneousLinearSolver) throws com.irurueta.navigation.LockedException
      Specifies whether an homogeneous linear solver is used either to estimate preliminary solutions or an initial solution for preliminary solutions that will be later refined on the RSSI coarse estimation.
      Parameters:
      useRssiHomogeneousLinearSolver - true to use an homogeneous linear solver for preliminary solutions during RSSI fine position estimation.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • isRangingPreliminarySolutionRefined

      public boolean isRangingPreliminarySolutionRefined()
      Indicates whether preliminary ranging solutions are refined after an initial linear solution is found. If no initial preliminary solution is found using a linear solver, a non-linear solver will be used regardless of this value using an average solution as the initial value to be refined.
      Returns:
      true if preliminary ranging solutions must be refined after an initial linear solution, false otherwise.
    • setRangingPreliminarySolutionRefined

      public void setRangingPreliminarySolutionRefined(boolean refineRangingPreliminarySolutions) throws com.irurueta.navigation.LockedException
      Specifies whether preliminary ranging solutions are refined after an initial linear solution is found. If no initial preliminary solution is found using a linear solver, a non-linear solver will be used regardless of this value using an average solution as the initial value to be refined.
      Parameters:
      refineRangingPreliminarySolutions - true if preliminary ranging solutions must be refined after an initial linear solution, false otherwise.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • isRssiPreliminarySolutionRefined

      public boolean isRssiPreliminarySolutionRefined()
      Indicates whether preliminary RSSI solutions are refined after an initial linear solution is found. If no initial preliminary solution is found using a linear solver, a non-linear solver will be used regardless of this value using an average solution as the initial value to be refined.
      Returns:
      true if preliminary RSSI solutions must be refined after an initial linear solution, false otherwise.
    • setRssiPreliminarySolutionRefined

      public void setRssiPreliminarySolutionRefined(boolean refineRssiPreliminarySolutions) throws com.irurueta.navigation.LockedException
      Specifies whether preliminary RSSI solutions are refined after an initial linear solution is found. If no initial preliminary solution is found using a linear solver, a non-linear solver will be used regardless of this value using an average solution as the initial value ot be refined.
      Parameters:
      refineRssiPreliminarySolutions - true if preliminary RSSI solutions must be refined after an initial linear solution, false otherwise.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • getRangingPreliminarySubsetSize

      public int getRangingPreliminarySubsetSize()
      Gets size of subsets to be checked during ranging robust estimation.
      Returns:
      size of subsets to be checked during ranging robust estimation.
    • setRangingPreliminarySubsetSize

      public void setRangingPreliminarySubsetSize(int rangingPreliminarySubsetSize) throws com.irurueta.navigation.LockedException
      Sets size of subsets to be checked during ranging robust estimation.
      Parameters:
      rangingPreliminarySubsetSize - size of subsets to be checked during ranging robust estimation.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
      IllegalArgumentException - if provided value is less than getMinRequiredSources().
    • getRssiPreliminarySubsetSize

      public int getRssiPreliminarySubsetSize()
      Gets size of subsets to be checked during RSSI robust estimation.
      Returns:
      size of subsets to be checked during RSSI robust estimation.
    • setRssiPreliminarySubsetSize

      public void setRssiPreliminarySubsetSize(int rssiPreliminarySubsetSize) throws com.irurueta.navigation.LockedException
      Sets size of subsets to be checked during RSSI robust estimation.
      Parameters:
      rssiPreliminarySubsetSize - size of subsets to be checked during RSSI robust estimation.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
      IllegalArgumentException - if provided value is less than getMinRequiredSources().
    • getRangingThreshold

      public Double getRangingThreshold()
      Gets threshold to determine when samples are inliers or not, used during robust fine ranging position estimation. If not defined, default threshold will be used.
      Returns:
      threshold for ranging estimation or null.
    • setRangingThreshold

      public void setRangingThreshold(Double rangingThreshold) throws com.irurueta.navigation.LockedException
      Sets threshold to determine when samples are inliers or not, used during robust fine ranging position estimation. If not defined, default threshold will be used.
      Parameters:
      rangingThreshold - threshold for ranging estimation or null.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • getRssiThreshold

      public Double getRssiThreshold()
      Gets threshold to determine when samples are inliers or not, used during robust coarse RSSI position estimation. If not defined, default threshold will be used.
      Returns:
      threshold for RSSI estimation or null.
    • setRssiThreshold

      public void setRssiThreshold(Double rssiThreshold) throws com.irurueta.navigation.LockedException
      Sets threshold to determine when samples are inliers or not, used during robust coarse RSSI position estimation. If not defined, default threshold will be used.
      Parameters:
      rssiThreshold - threshold for RSSI estimation or null.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • getSources

      public List<RadioSourceLocated<P>> getSources()
      Gets located radio sources used for lateration.
      Returns:
      located radio sources used for lateration.
    • setSources

      public void setSources(List<? extends RadioSourceLocated<P>> sources) throws com.irurueta.navigation.LockedException
      Sets located radio sources used for lateration.
      Parameters:
      sources - located radio sources used for lateration.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
      IllegalArgumentException - if provided value is null or the number of provided sources is less than the required minimum.
    • getFingerprint

      public Fingerprint<RadioSource,Reading<RadioSource>> getFingerprint()
      Gets fingerprint containing readings at an unknown location for provided located radio sources.
      Returns:
      fingerprint containing readings at an unknown location for provided located radio sources.
    • setFingerprint

      public void setFingerprint(Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint) throws com.irurueta.navigation.LockedException
      Sets fingerprint containing readings at an unknown location for provided located radio sources.
      Parameters:
      fingerprint - fingerprint containing readings at an unknown location for provided located radio sources.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • getSourceQualityScores

      public double[] getSourceQualityScores()
      Returns quality scores corresponding to each radio source. The larger the score value the better the quality of the radio source.
      Returns:
      quality scores corresponding to each radio source.
    • setSourceQualityScores

      public void setSourceQualityScores(double[] sourceQualityScores) throws com.irurueta.navigation.LockedException
      Sets quality scores corresponding to each radio source. The larger the score value the better the quality of the radio source.
      Parameters:
      sourceQualityScores - quality scores corresponding to each radio source.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
      IllegalArgumentException - if provided quality scores length is smaller than minimum required samples.
    • getFingerprintReadingsQualityScores

      public double[] getFingerprintReadingsQualityScores()
      Gets quality scores corresponding to each reading within provided fingerprint. The larger the score value the better the quality of the reading.
      Returns:
      quality scores corresponding to each reading within provided fingerprint.
    • setFingerprintReadingsQualityScores

      public void setFingerprintReadingsQualityScores(double[] fingerprintReadingsQualityScores) throws com.irurueta.navigation.LockedException
      Sets quality scores corresponding to each reading within provided fingerprint. The larger the score value the better the quality of the reading.
      Parameters:
      fingerprintReadingsQualityScores - quality scores corresponding to each reading within provided fingerprint.
      Throws:
      com.irurueta.navigation.LockedException - if this instance is locked.
      IllegalArgumentException - if provided quality scores length is smaller than minimum required samples.
    • getListener

      Gets listener to be notified of events raised by this instance.
      Returns:
      listener to be notified of events raised by this instance.
    • setListener

      public void setListener(SequentialRobustMixedPositionEstimatorListener<P> listener) throws com.irurueta.navigation.LockedException
      Sets listener to be notified of events raised by this instance.
      Parameters:
      listener - listener to be notified of events raised by this instance.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • getInitialPosition

      public P getInitialPosition()
      Gets initial position to use as a starting point to find a new solution. This is optional, but if provided, when no linear solvers are used, this is taken into account. If linear solvers are used, this is ignored.
      Returns:
      an initial position.
    • setInitialPosition

      public void setInitialPosition(P initialPosition) throws com.irurueta.navigation.LockedException
      Sets initial position to use as a starting point to find a new solution. This is optional, but if provided, when no linear solvers are used, this is taken into account. If linear solvers are used, this is ignored.
      Parameters:
      initialPosition - an initial position.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • isLocked

      public boolean isLocked()
      Returns boolean indicating if estimator is locked because estimation is under progress.
      Returns:
      true if estimator is locked, false otherwise.
    • isReady

      public boolean isReady()
      Indicates whether this instance is ready to start the estimation.
      Returns:
      true if this instance is ready, false otherwise.
    • estimate

      public P estimate() throws com.irurueta.navigation.LockedException, com.irurueta.navigation.NotReadyException, com.irurueta.numerical.robust.RobustEstimatorException
      Estimates position based on provided located radio sources and readings of such sources at an unknown location.
      Returns:
      estimated position.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
      com.irurueta.navigation.NotReadyException - if estimator is not ready.
      com.irurueta.numerical.robust.RobustEstimatorException - if estimation fails for some other reason.
    • getInliersData

      public com.irurueta.numerical.robust.InliersData getInliersData()
      Gets data related to inliers found after estimation.
      Returns:
      data related to inliers found after estimation.
    • getPositions

      public P[] getPositions()
      Gets known positions of radio sources used internally to solve lateration.
      Returns:
      known positions used internally.
    • getDistances

      public double[] getDistances()
      Gets Euclidean distances from known located radio sources to the location of provided readings in a fingerprint. Distance values are used internally to solve lateration.
      Returns:
      Euclidean distances used internally.
    • getDistanceStandardDeviations

      public double[] getDistanceStandardDeviations()
      Gets standard deviation distances from known located radio sources to the location of provided readings in a fingerprint. Distance standard deviations are used internally to solve lateration.
      Returns:
      standard deviations used internally.
    • getCovariance

      public com.irurueta.algebra.Matrix getCovariance()
      Gets estimated covariance of estimated position if available. This is only available when result has been refined and covariance is kept.
      Returns:
      estimated covariance or null.
    • getEstimatedPosition

      public P getEstimatedPosition()
      Gets estimated position.
      Returns:
      estimated position.
    • getNumberOfDimensions

      public abstract int getNumberOfDimensions()
      Gets number of dimensions of provided points.
      Returns:
      number of dimensions of provided points.
    • getMinRequiredSources

      public abstract int getMinRequiredSources()
      Gets minimum required number of located radio sources to perform lateration.
      Returns:
      minimum required number of located radio sources to perform lateration.
    • buildRangingEstimator

      protected abstract void buildRangingEstimator()
      Builds ranging internal estimator.
    • buildRssiEstimator

      protected abstract void buildRssiEstimator()
      Builds RSSI internal estimator.
    • setupRangingEstimator

      protected void setupRangingEstimator() throws com.irurueta.navigation.LockedException
      Setup ranging internal estimator.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • setupRssiEstimator

      protected void setupRssiEstimator() throws com.irurueta.navigation.LockedException
      Setup RSSI internal estimator.
      Throws:
      com.irurueta.navigation.LockedException - if estimator is locked.
    • internalSetSources

      private void internalSetSources(List<? extends RadioSourceLocated<P>> sources)
      Internally sets located radio sources used for lateration.
      Parameters:
      sources - located radio sources used for lateration.
      Throws:
      IllegalArgumentException - if provided value is null or the number of provided sources is less than the required minimum.
    • internalSetFingerprint

      private void internalSetFingerprint(Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint)
      Internally sets fingerprint containing readings at an unknown location for provided located radio sources.
      Parameters:
      fingerprint - fingerprint containing readings at an unknown location for provided located radio sources.
      Throws:
      IllegalArgumentException - if provided value is null.
    • internalSetSourceQualityScores

      private void internalSetSourceQualityScores(double[] sourceQualityScores)
      Sets quality scores corresponding to each provided located radio source. This method is used internally and does not check whether instance is locked or not.
      Parameters:
      sourceQualityScores - quality scores to be set.
      Throws:
      IllegalArgumentException - if provided quality scores length is smaller than 3 samples for 2D or 4 samples for 3D.
    • internalSetFingerprintReadingsQualityScores

      private void internalSetFingerprintReadingsQualityScores(double[] fingerprintReadingsQualityScores)
      Sets quality scores corresponding to each provided reading within provided fingerprint. This method is used internally and does not check whether instance is locked or not.
      Parameters:
      fingerprintReadingsQualityScores - quality scores to be set.
      Throws:
      IllegalArgumentException - if provided quality scores length is smaller than 3 samples for 2D or 4 samples for 3D.
    • createRangingReading

      private RangingReading<RadioSource> createRangingReading(RangingAndRssiReading<? extends RadioSource> reading)
      Creates a ranging reading from a ranging and RSSI reading.
      Parameters:
      reading - input reading to convert from.
      Returns:
      a ranging reading containing only the ranging data of input reading.
    • createRssiReading

      private RssiReading<RadioSource> createRssiReading(RangingAndRssiReading<? extends RadioSource> reading)
      Creates an RSSI reading from a ranging and RSSI reading.
      Parameters:
      reading - input reading to convert from.
      Returns:
      an RSSI reading containing only the RSSI data of input reading.
    • checkFingerprint

      private void checkFingerprint(Fingerprint<? extends RadioSource,? extends Reading<? extends RadioSource>> fingerprint)
      Checks readings within provided fingerprint to determine the amount of available ranging or RSSI readings.
      Parameters:
      fingerprint - fingerprint to be checked.
    • checkReadings

      private void checkReadings(List<? extends Reading<?>> readings)
      Checks number of available ranging readings and number of available RSSI readings. Also determines whether position must be estimated using ranging data or RSSI data.
      Parameters:
      readings - readings to be checked.