Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef POINT_TO_PLANE_ERROR_MINIMIZER_H
00037 #define POINT_TO_PLANE_ERROR_MINIMIZER_H
00038
00039 #include "PointMatcher.h"
00040
00041 template<typename T>
00042 struct PointToPlaneErrorMinimizer: public PointMatcher<T>::ErrorMinimizer
00043 {
00044 typedef PointMatcherSupport::Parametrizable Parametrizable;
00045 typedef PointMatcherSupport::Parametrizable P;
00046 typedef Parametrizable::Parameters Parameters;
00047 typedef Parametrizable::ParameterDoc ParameterDoc;
00048 typedef Parametrizable::ParametersDoc ParametersDoc;
00049
00050 typedef typename PointMatcher<T>::DataPoints DataPoints;
00051 typedef typename PointMatcher<T>::Matches Matches;
00052 typedef typename PointMatcher<T>::OutlierWeights OutlierWeights;
00053 typedef typename PointMatcher<T>::ErrorMinimizer ErrorMinimizer;
00054 typedef typename PointMatcher<T>::ErrorMinimizer::ErrorElements ErrorElements;
00055 typedef typename PointMatcher<T>::TransformationParameters TransformationParameters;
00056 typedef typename PointMatcher<T>::Vector Vector;
00057 typedef typename PointMatcher<T>::Matrix Matrix;
00058
00059 virtual inline const std::string name()
00060 {
00061 return "PointToPlaneErrorMinimizer";
00062 }
00063
00064 inline static const std::string description()
00065 {
00066 return "Point-to-plane error (or point-to-line in 2D). Per \\cite{Chen1991Point2Plane}.";
00067 }
00068
00069 inline static const ParametersDoc availableParameters()
00070 {
00071 return {
00072 {"force2D", "If set to true(1), the minimization will be force to give a solution in 2D (i.e., on the XY-plane) even with 3D inputs.", "0", "0", "1", &P::Comp<bool>}
00073 };
00074 }
00075
00076 const bool force2D;
00077
00078 PointToPlaneErrorMinimizer(const Parameters& params = Parameters());
00079 PointToPlaneErrorMinimizer(const ParametersDoc paramsDoc, const Parameters& params);
00080
00081 virtual TransformationParameters compute(const ErrorElements& mPts);
00082 TransformationParameters compute_in_place(ErrorElements& mPts);
00083 virtual T getResidualError(const DataPoints& filteredReading, const DataPoints& filteredReference, const OutlierWeights& outlierWeights, const Matches& matches) const;
00084 virtual T getOverlap() const;
00085
00086 static T computeResidualError(ErrorElements mPts, const bool& force2D);
00087 };
00088
00089 template<typename T, typename MatrixA, typename Vector>
00090 void solvePossiblyUnderdeterminedLinearSystem(const MatrixA& A, const Vector & b, Vector & x);
00091
00092 #endif