Class MSACRobustLateration2DSolver
java.lang.Object
com.irurueta.navigation.lateration.RobustLaterationSolver<com.irurueta.geometry.Point2D>
com.irurueta.navigation.lateration.RobustLateration2DSolver
com.irurueta.navigation.lateration.MSACRobustLateration2DSolver
Robustly solves the lateration problem by finding the best pairs of 2D
positions and distances among the provided ones using MSAC algorithm to
discard outliers.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final double
Constant defining default threshold to determine whether samples are inliers or not.static final double
Minimum value that can be set as threshold.private double
Threshold to determine whether samples are inliers or not when testing possible estimation solutions.Fields inherited from class com.irurueta.navigation.lateration.RobustLateration2DSolver
homogeneousLinearSolver, inhomogeneousLinearSolver, innerDistances, innerDistanceStandardDeviations, innerPositions, nonLinearSolver
Fields inherited from class com.irurueta.navigation.lateration.RobustLaterationSolver
confidence, covariance, DEFAULT_CONFIDENCE, DEFAULT_KEEP_COVARIANCE, DEFAULT_MAX_ITERATIONS, DEFAULT_PROGRESS_DELTA, DEFAULT_REFINE_PRELIMINARY_SOLUTIONS, DEFAULT_REFINE_RESULT, DEFAULT_ROBUST_METHOD, DEFAULT_USE_HOMOGENEOUS_LINEAR_SOLVER, distances, distanceStandardDeviations, EPSILON, estimatedPosition, initialPosition, inliersData, keepCovariance, listener, locked, MAX_CONFIDENCE, MAX_PROGRESS_DELTA, maxIterations, MIN_CONFIDENCE, MIN_ITERATIONS, MIN_PROGRESS_DELTA, positions, preliminarySubsetSize, progressDelta, refinePreliminarySolutions, refineResult, useHomogeneousLinearSolver, useLinearSolver
-
Constructor Summary
ConstructorsConstructorDescriptionConstructor.MSACRobustLateration2DSolver
(com.irurueta.geometry.Circle[] circles) Constructor.MSACRobustLateration2DSolver
(com.irurueta.geometry.Circle[] circles, double[] distanceStandardDeviations) Constructor.MSACRobustLateration2DSolver
(com.irurueta.geometry.Circle[] circles, double[] distanceStandardDeviations, RobustLaterationSolverListener<com.irurueta.geometry.Point2D> listener) Constructor.MSACRobustLateration2DSolver
(com.irurueta.geometry.Circle[] circles, RobustLaterationSolverListener<com.irurueta.geometry.Point2D> listener) Constructor.MSACRobustLateration2DSolver
(com.irurueta.geometry.Point2D[] positions, double[] distances) Constructor.MSACRobustLateration2DSolver
(com.irurueta.geometry.Point2D[] positions, double[] distances, double[] distanceStandardDeviations) Constructor.MSACRobustLateration2DSolver
(com.irurueta.geometry.Point2D[] positions, double[] distances, double[] distanceStandardDeviations, RobustLaterationSolverListener<com.irurueta.geometry.Point2D> listener) Constructor.MSACRobustLateration2DSolver
(com.irurueta.geometry.Point2D[] positions, double[] distances, RobustLaterationSolverListener<com.irurueta.geometry.Point2D> listener) Constructor.MSACRobustLateration2DSolver
(RobustLaterationSolverListener<com.irurueta.geometry.Point2D> listener) Constructor. -
Method Summary
Modifier and TypeMethodDescriptioncom.irurueta.numerical.robust.RobustEstimatorMethod
Returns method being used for robust estimation.double
Returns threshold to determine whether samples are inliers or not.void
setThreshold
(double threshold) Sets threshold to determine whether samples are inliers or not.com.irurueta.geometry.Point2D
solve()
Solves the lateration problem.Methods inherited from class com.irurueta.navigation.lateration.RobustLateration2DSolver
attemptRefine, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, create, getCircles, getMinRequiredPositionsAndDistances, getNumberOfDimensions, setCircles, setCirclesAndStandardDeviations, setPreliminarySubsetSize, solvePreliminarySolutions
Methods inherited from class com.irurueta.navigation.lateration.RobustLaterationSolver
getConfidence, getCovariance, getDistances, getDistanceStandardDeviations, getEstimatedPosition, getInitialPosition, getInliersData, getListener, getMaxIterations, getPositions, getPreliminarySubsetSize, getProgressDelta, getQualityScores, internalSetPositionsAndDistances, internalSetPositionsDistancesAndStandardDeviations, isCovarianceKept, isHomogeneousLinearSolverUsed, isLinearSolverUsed, isLocked, isPreliminarySolutionRefined, isReady, isResultRefined, setConfidence, setCovarianceKept, setHomogeneousLinearSolverUsed, setInitialPosition, setLinearSolverUsed, setListener, setMaxIterations, setPositionsAndDistances, setPositionsDistancesAndStandardDeviations, setPreliminarySolutionRefined, setProgressDelta, setQualityScores, setResultRefined
-
Field Details
-
DEFAULT_THRESHOLD
public static final double DEFAULT_THRESHOLDConstant defining default threshold to determine whether samples are inliers or not.- See Also:
-
MIN_THRESHOLD
public static final double MIN_THRESHOLDMinimum value that can be set as threshold. Threshold must be strictly greater than 0.0.- See Also:
-
threshold
private double thresholdThreshold to determine whether samples are inliers or not when testing possible estimation solutions.
-
-
Constructor Details
-
MSACRobustLateration2DSolver
public MSACRobustLateration2DSolver()Constructor. -
MSACRobustLateration2DSolver
public MSACRobustLateration2DSolver(com.irurueta.geometry.Point2D[] positions, double[] distances) Constructor.- Parameters:
positions
- known positions of static nodes.distances
- euclidean distances from static nodes to mobile node to be estimated.- Throws:
IllegalArgumentException
- if either positions or distances are null, don't have the same length or their length is smaller than required (3 points).
-
MSACRobustLateration2DSolver
public MSACRobustLateration2DSolver(com.irurueta.geometry.Point2D[] positions, double[] distances, double[] distanceStandardDeviations) Constructor.- Parameters:
positions
- known positions of static nodes.distances
- euclidean distances from static nodes to mobile node to be estimated.distanceStandardDeviations
- standard deviations of provided measured distances.- Throws:
IllegalArgumentException
- if either positions or distances are null, don't have the same length or their length is smaller than required (3 points).
-
MSACRobustLateration2DSolver
public MSACRobustLateration2DSolver(com.irurueta.geometry.Circle[] circles) Constructor.- Parameters:
circles
- circles defining positions and distances.- Throws:
IllegalArgumentException
- if circles is null or if length of circles array is less than required (3 points).
-
MSACRobustLateration2DSolver
public MSACRobustLateration2DSolver(com.irurueta.geometry.Circle[] circles, double[] distanceStandardDeviations) Constructor.- Parameters:
circles
- circles defining positions and distances.distanceStandardDeviations
- standard deviations of provided measured distances.- Throws:
IllegalArgumentException
- if circles is null, length of circles array is less than required (3 points) or don't have the same length.
-
-
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
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.LockedException
- if robust estimator is locked because an estimation is already in progress.
-
solve
public com.irurueta.geometry.Point2D solve() throws LockedException, NotReadyException, com.irurueta.numerical.robust.RobustEstimatorExceptionSolves the lateration problem.- Specified by:
solve
in classRobustLaterationSolver<com.irurueta.geometry.Point2D>
- Returns:
- estimated position.
- Throws:
LockedException
- if instance is busy solving the lateration problem.NotReadyException
- is solver is not ready.com.irurueta.numerical.robust.RobustEstimatorException
- if estimation fails for any reason (i.e. numerical instability, no solution available, etc).
-
getMethod
public com.irurueta.numerical.robust.RobustEstimatorMethod getMethod()Returns method being used for robust estimation.- Specified by:
getMethod
in classRobustLaterationSolver<com.irurueta.geometry.Point2D>
- Returns:
- method being used for robust estimation.
-