Class NonLinearRssiPositionEstimator<P extends com.irurueta.geometry.Point<?>>
java.lang.Object
com.irurueta.navigation.indoor.position.PositionEstimator<P,RssiReading<? extends RadioSource>,RssiPositionEstimatorListener<P>>
com.irurueta.navigation.indoor.position.RssiPositionEstimator<P>
com.irurueta.navigation.indoor.position.NonLinearRssiPositionEstimator<P>
- Type Parameters:
P- aPointtype.
- Direct Known Subclasses:
NonLinearRssiPositionEstimator2D,NonLinearRssiPositionEstimator3D
public abstract class NonLinearRssiPositionEstimator<P extends com.irurueta.geometry.Point<?>>
extends RssiPositionEstimator<P>
Estimates position non-linearly using located radio sources and their RSSI readings at
unknown locations.
These kind of estimators can be used to determine the position of a given device by
getting RSSI readings at an unknown location of different radio sources whose locations
are known.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final doubleDistance standard deviation assumed for provided distances as a fallback when none can be determined.private doubleDistance standard deviation fallback value to use when none can be determined from provided radio sources and fingerprint readings.private PInitial position to start position estimation.protected com.irurueta.navigation.lateration.LaterationSolverListener<P> Listener for the lateration solver.protected com.irurueta.navigation.lateration.NonLinearLeastSquaresLaterationSolver<P> A non-linear lateration solver to solve position.private booleanIndicates whether located radio source position covariance must be taken into account (if available) to determine distance standard deviation.Fields inherited from class com.irurueta.navigation.indoor.position.PositionEstimator
estimatedPositionCoordinates, fingerprint, listener, sources -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedConstructor.protectedConstructor.protectedNonLinearRssiPositionEstimator(P initialPosition) Constructor.protectedNonLinearRssiPositionEstimator(P initialPosition, RssiPositionEstimatorListener<P> listener) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidBuilds positions, distances and standard deviation of distances for the internal lateration solver.voidestimate()Estimates position based on provided located radio sources and readings of such radio sources at an unknown location.com.irurueta.algebra.MatrixGets estimated covariance matrix for estimated position.double[]Gets Euclidean distances from known located radio sources to the location of provided readings in a fingerprint.double[]Gets standard deviations of distances from known located radio sources to the location of provided readings in a fingerprint.doubleGets distance standard deviation fallback value to use when none can be determined from provided radio sources and fingerprint readings.Gets initial position to start position estimation.intGets minimum required number of located radio sources to perform lateration.P[]Gets known positions of radio sources used internally to solve lateration.private voidinit()Initializes lateration solver listener.protected voidinternalSetFingerprint(Fingerprint<? extends RadioSource, ? extends RssiReading<? extends RadioSource>> fingerprint) Internally sets fingerprint containing readings at an unknown location for provided located radio sources.protected voidinternalSetSources(List<? extends RadioSourceLocated<P>> sources) Internally sets located radio sources used for lateration.booleanisLocked()Returns boolean indicating whether this estimator is locked because an estimation is already in progress.booleanIndicates whether located radio source position covariance must be taken into account (if available) to determine distance standard deviation.booleanisReady()Indicates whether estimator is ready to find a solution.voidsetFallbackDistanceStandardDeviation(double fallbackDistanceStandardDeviation) Sets distance standard deviation fallback value to use when none can be determined from provided radio sources and fingerprint readings.voidsetInitialPosition(P initialPosition) Sets initial position to start position estimation.protected abstract voidsetPositionsDistancesAndDistanceStandardDeviations(List<P> positions, List<Double> distances, List<Double> distanceStandardDeviations) Sets positions, distances and standard deviations of distances on internal lateration solver.voidsetRadioSourcePositionCovarianceUsed(boolean useRadioSourcePositionCovariance) Specifies whether located radio source position covariance must be taken into account (if available) to determine distance standard deviation.Methods inherited from class com.irurueta.navigation.indoor.position.PositionEstimator
getEstimatedPosition, getEstimatedPosition, getEstimatedPositionCoordinates, getFingerprint, getListener, getSources, setFingerprint, setListener, setSources
-
Field Details
-
FALLBACK_DISTANCE_STANDARD_DEVIATION
public static final double FALLBACK_DISTANCE_STANDARD_DEVIATIONDistance standard deviation assumed for provided distances as a fallback when none can be determined.- See Also:
-
trilaterationSolver
protected com.irurueta.navigation.lateration.NonLinearLeastSquaresLaterationSolver<P extends com.irurueta.geometry.Point<?>> trilaterationSolverA non-linear lateration solver to solve position. -
laterationSolverListener
protected com.irurueta.navigation.lateration.LaterationSolverListener<P extends com.irurueta.geometry.Point<?>> laterationSolverListenerListener for the lateration solver. -
initialPosition
Initial position to start position estimation. If not defined, centroid of provided located sources will be used. -
useRadioSourcePositionCovariance
private boolean useRadioSourcePositionCovarianceIndicates whether located radio source position covariance must be taken into account (if available) to determine distance standard deviation. -
fallbackDistanceStandardDeviation
private double fallbackDistanceStandardDeviationDistance standard deviation fallback value to use when none can be determined from provided radio sources and fingerprint readings.
-
-
Constructor Details
-
NonLinearRssiPositionEstimator
protected NonLinearRssiPositionEstimator()Constructor. -
NonLinearRssiPositionEstimator
Constructor.- Parameters:
initialPosition- initial position to start position estimation.
-
-
Method Details
-
getInitialPosition
Gets initial position to start position estimation. If not defined, centroid of located sources position will be used to start the estimation.- Returns:
- initial position to start position estimation.
-
setInitialPosition
Sets initial position to start position estimation. If not defined, centroid of located sources position will be used to start the estimation.- Parameters:
initialPosition- initial position to start position estimation.- Throws:
com.irurueta.navigation.LockedException- if estimator is locked.
-
isRadioSourcePositionCovarianceUsed
public boolean isRadioSourcePositionCovarianceUsed()Indicates whether located radio source position covariance must be taken into account (if available) to determine distance standard deviation.- Returns:
- true to take radio source position covariance into account, false otherwise.
-
setRadioSourcePositionCovarianceUsed
public void setRadioSourcePositionCovarianceUsed(boolean useRadioSourcePositionCovariance) throws com.irurueta.navigation.LockedException Specifies whether located radio source position covariance must be taken into account (if available) to determine distance standard deviation.- Parameters:
useRadioSourcePositionCovariance- true to take radio source position covariance into account, false otherwise.- Throws:
com.irurueta.navigation.LockedException- if estimator is locked.
-
getFallbackDistanceStandardDeviation
public double getFallbackDistanceStandardDeviation()Gets distance standard deviation fallback value to use when none can be determined from provided radio sources and fingerprint readings.- Returns:
- distance standard deviation to use as fallback.
-
setFallbackDistanceStandardDeviation
public void setFallbackDistanceStandardDeviation(double fallbackDistanceStandardDeviation) throws com.irurueta.navigation.LockedException Sets distance standard deviation fallback value to use when none can be determined from provided radio sources and fingerprint readings.- Parameters:
fallbackDistanceStandardDeviation- distance standard deviation to use as fallback.- Throws:
com.irurueta.navigation.LockedException- if estimator is locked.
-
getMinRequiredSources
public int getMinRequiredSources()Gets minimum required number of located radio sources to perform lateration.- Specified by:
getMinRequiredSourcesin classPositionEstimator<P extends com.irurueta.geometry.Point<?>,RssiReading<? extends RadioSource>, RssiPositionEstimatorListener<P extends com.irurueta.geometry.Point<?>>> - Returns:
- minimum required number of located radio sources to perform lateration.
-
isReady
public boolean isReady()Indicates whether estimator is ready to find a solution.- Specified by:
isReadyin classPositionEstimator<P extends com.irurueta.geometry.Point<?>,RssiReading<? extends RadioSource>, RssiPositionEstimatorListener<P extends com.irurueta.geometry.Point<?>>> - Returns:
- true if estimator is ready, false otherwise.
-
isLocked
public boolean isLocked()Returns boolean indicating whether this estimator is locked because an estimation is already in progress.- Specified by:
isLockedin classPositionEstimator<P extends com.irurueta.geometry.Point<?>,RssiReading<? extends RadioSource>, RssiPositionEstimatorListener<P extends com.irurueta.geometry.Point<?>>> - Returns:
- true if estimator is locked, false otherwise.
-
getDistanceStandardDeviations
public double[] getDistanceStandardDeviations()Gets standard deviations of 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.
-
estimate
public void estimate() throws com.irurueta.navigation.LockedException, com.irurueta.navigation.NotReadyException, PositionEstimationExceptionEstimates position based on provided located radio sources and readings of such radio sources at an unknown location.- Specified by:
estimatein classPositionEstimator<P extends com.irurueta.geometry.Point<?>,RssiReading<? extends RadioSource>, RssiPositionEstimatorListener<P extends com.irurueta.geometry.Point<?>>> - Throws:
com.irurueta.navigation.LockedException- if estimator is locked.com.irurueta.navigation.NotReadyException- if estimator is not ready.PositionEstimationException- if estimation fails for some other reason.
-
getPositions
Gets known positions of radio sources used internally to solve lateration.- Specified by:
getPositionsin classPositionEstimator<P extends com.irurueta.geometry.Point<?>,RssiReading<? extends RadioSource>, RssiPositionEstimatorListener<P extends com.irurueta.geometry.Point<?>>> - 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.- Specified by:
getDistancesin classPositionEstimator<P extends com.irurueta.geometry.Point<?>,RssiReading<? extends RadioSource>, RssiPositionEstimatorListener<P extends com.irurueta.geometry.Point<?>>> - Returns:
- Euclidean distances used internally.
-
getCovariance
public com.irurueta.algebra.Matrix getCovariance()Gets estimated covariance matrix for estimated position.- Returns:
- estimated covariance matrix for estimated position.
-
internalSetSources
Internally sets located radio sources used for lateration.- Overrides:
internalSetSourcesin classPositionEstimator<P extends com.irurueta.geometry.Point<?>,RssiReading<? extends RadioSource>, RssiPositionEstimatorListener<P extends com.irurueta.geometry.Point<?>>> - 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.
-
setPositionsDistancesAndDistanceStandardDeviations
protected abstract void setPositionsDistancesAndDistanceStandardDeviations(List<P> positions, List<Double> distances, List<Double> distanceStandardDeviations) Sets positions, distances and standard deviations of distances on internal lateration solver.- Parameters:
positions- positions to be set.distances- distances to be set.distanceStandardDeviations- standard deviations of distances to be set.
-
init
private void init()Initializes lateration solver listener. -
buildPositionsDistancesAndDistanceStandardDeviations
private void buildPositionsDistancesAndDistanceStandardDeviations()Builds positions, distances and standard deviation of distances for the internal lateration solver.
-