48 CPosePDFGaussian::CPosePDFGaussian(
115 cov = auxCov.cast<
double>();
130 if (
this == &o)
return;
148 C(2,0)=C(0,2) = C(0,3);
149 C(2,1)=C(1,2) = C(1,3);
151 cov = C.block(0,0,3,3);
203 const double ccos = cos(ang);
204 const double ssin = sin(ang);
212 cov = (rot *
cov * rot.adjoint()).eval();
233 cov.saveToTextFile(
"__DEBUG_EXC_DUMP_drawSingleSample_COV.txt"); \
242 std::vector<CVectorDouble> &outSamples )
const
246 std::vector<CVectorDouble> rndSamples;
249 outSamples.resize( N );
250 for (
unsigned int i=0;i<N;i++)
252 outSamples[i].resize(3);
253 outSamples[i][0] =
mean.
x() + rndSamples[i][0] ;
254 outSamples[i][1] =
mean.
y() + rndSamples[i][1] ;
255 outSamples[i][2] =
mean.
phi() + rndSamples[i][2] ;
320 const double ccos = ::cos(
mean.
phi());
321 const double ssin = ::sin(
mean.
phi());
331 out->
cov.noalias() = (H *
cov * H.adjoint()).eval();
390 if (MU[0]==0 && MU[1]==0 && MU[2]==0)
397 COV_.inv_fast(COV_inv);
412 out <<
"Mean: " <<
obj.mean <<
"\n";
413 out <<
"Covariance:\n" <<
obj.cov <<
"\n";
448 double cpi = cos(xi.
mean.
phi());
449 double spi = sin(xi.
mean.
phi());
454 dh_xv(0,0) = cpi; dh_xv(0,1) = spi;
455 dh_xv(1,0) = -spi; dh_xv(1,1) = cpi;
464 dh_xi(0,0) = -cpi; dh_xi(0,1) = -spi; dh_xi(0,2) = -xv_xi*spi+yv_yi*cpi;
465 dh_xi(1,0) = spi; dh_xi(1,1) = -cpi; dh_xi(1,2) = -xv_xi*cpi-yv_yi*spi;
470 dh_xv.multiply_HCHt( xv.
cov, this->cov );
471 dh_xi.multiply_HCHt( xi.
cov, this->cov,
true );
489 double cp0 = cos(x0.
mean.
phi());
490 double sp0 = sin(x0.
mean.
phi());
495 dh_x1(0,0) = cp0; dh_x1(0,1) = sp0;
496 dh_x1(1,0) = -sp0; dh_x1(1,1) = cp0;
505 dh_x0(0,0) = -cp0; dh_x0(0,1) = -sp0; dh_x0(0,2) = -xv_xi*sp0+yv_yi*cp0;
506 dh_x0(1,0) = sp0; dh_x0(1,1) = -cp0; dh_x0(1,2) = -xv_xi*cp0-yv_yi*sp0;
512 dh_x0.multiply_HCHt( x0.
cov, this->cov );
513 dh_x1.multiply_HCHt( x1.
cov, this->cov,
true );
516 M.multiply_ABCt( dh_x0, COV_01, dh_x1 );
518 this->
cov.add_AAt(M);
540 df_dx.multiply_HCHt( OLD_COV,
cov );
541 df_du.multiply_HCHt( Ap.
cov,
cov,
true);
568 g.cov = dp_dx * this->
cov * dp_dx.transpose();
588 res.inverseComposition(
a,
b);
#define CLASS_ID(class_name)
Access to runtime class ID for a defined class name.
#define IMPLEMENTS_SERIALIZABLE(class_name, base, NameSpace)
This must be inserted in all CSerializable classes implementation files.
This class is a "CSerializable" wrapper for "CMatrixFloat".
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction.
A gaussian distribution for 2D points.
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle.
void normalizePhi()
Forces "phi" to be in the range [-pi,pi];.
void composeFrom(const CPose2D &A, const CPose2D &B)
Makes .
void composePoint(double lx, double ly, double &gx, double &gy) const
An alternative, slightly more efficient way of doing with G and L being 2D points and P this 2D pose...
const double & phi() const
Get the phi angle of the 2D pose (in radians)
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
Declares a class that represents a Probability Density Function (PDF) of a 3D pose (6D actually).
double x() const
Common members of all points & poses classes.
Declares a class that represents a Probability Density function (PDF) of a 2D pose .
void composePoint(const mrpt::math::TPoint2D &l, CPoint2DPDFGaussian &g) const
Returns the PDF of the 2D point with "q"=this pose and "l" a point without uncertainty.
CPose2D mean
The mean value.
void rotateCov(const double ang)
Rotate the covariance matrix by replacing it by , where .
void inverse(CPosePDF &o) const MRPT_OVERRIDE
Returns a new PDF such as: NEW_PDF = (0,0,0) - THIS_PDF.
mrpt::math::CMatrixDouble33 cov
The 3x3 covariance matrix.
void assureSymmetry()
Assures the symmetry of the covariance matrix (eventually certain operations in the math-coprocessor ...
void drawManySamples(size_t N, std::vector< mrpt::math::CVectorDouble > &outSamples) const MRPT_OVERRIDE
Draws a number of samples from the distribution, and saves as a list of 1x3 vectors,...
double evaluatePDF(const CPose2D &x) const
Evaluates the PDF at a given point.
void operator+=(const CPose2D &Ap)
Makes: thisPDF = thisPDF + Ap, where "+" is pose composition (both the mean, and the covariance matri...
void saveToTextFile(const std::string &file) const MRPT_OVERRIDE
Save PDF's particles to a text file, containing the 2D pose in the first line, then the covariance ma...
void copyFrom(const CPosePDF &o) MRPT_OVERRIDE
Copy operator, translating if necesary (for example, between particles and gaussian representations)
void readFromStream(mrpt::utils::CStream &in, int version)
Introduces a pure virtual method responsible for loading from a CStream This can not be used directly...
CPosePDFGaussian()
Default constructor.
double mahalanobisDistanceTo(const CPosePDFGaussian &theOther)
Computes the Mahalanobis distance between the centers of two Gaussians.
void drawSingleSample(CPose2D &outPart) const MRPT_OVERRIDE
Draws a single sample from the distribution.
void bayesianFusion(const CPosePDF &p1, const CPosePDF &p2, const double &minMahalanobisDistToDrop=0) MRPT_OVERRIDE
Bayesian fusion of two points gauss.
void inverseComposition(const CPosePDFGaussian &x, const CPosePDFGaussian &ref)
Set , computing the mean using the "-" operator and the covariances through the corresponding Jacobi...
void changeCoordinatesReference(const CPose3D &newReferenceBase) MRPT_OVERRIDE
this = p (+) this.
double evaluateNormalizedPDF(const CPose2D &x) const
Evaluates the ratio PDF(x) / PDF(MEAN), that is, the normalized PDF in the range [0,...
void assureMinCovariance(const double &minStdXY, const double &minStdPhi)
Substitutes the diagonal elements if (square) they are below some given minimum values (Use this befo...
void writeToStream(mrpt::utils::CStream &out, int *getVersion) const
Introduces a pure virtual method responsible for writing to a CStream.
Declares a class that represents a probability density function (pdf) of a 2D pose (x,...
static void jacobiansPoseComposition(const CPose2D &x, const CPose2D &u, mrpt::math::CMatrixDouble33 &df_dx, mrpt::math::CMatrixDouble33 &df_du, const bool compute_df_dx=true, const bool compute_df_du=true)
This static method computes the pose composition Jacobians, with these formulas:
virtual const mrpt::utils::TRuntimeClassId * GetRuntimeClass() const
Returns information about the class of an object in runtime.
void drawGaussianMultivariateMany(VECTOR_OF_VECTORS &ret, size_t desiredSamples, const COVMATRIX &cov, const typename VECTOR_OF_VECTORS::value_type *mean=NULL)
Generate a given number of multidimensional random samples according to a given covariance matrix.
void drawGaussianMultivariate(std::vector< T > &out_result, const mrpt::math::CMatrixTemplateNumeric< T > &cov, const std::vector< T > *mean=NULL)
Generate multidimensional random samples according to a given covariance matrix.
void getCovariance(mrpt::math::CMatrixDouble &cov) const
Returns the estimate of the covariance matrix (STATE_LEN x STATE_LEN covariance matrix)
virtual void getMean(TDATA &mean_point) const =0
Returns the mean, or mathematical expectation of the probability density distribution (PDF).
TDATA getMeanVal() const
Returns the mean, or mathematical expectation of the probability density distribution (PDF).
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
EIGEN_STRONG_INLINE double mean() const
Computes the mean of the entire matrix.
GLsizei GLsizei GLuint * obj
GLubyte GLubyte GLubyte a
GLsizei const GLchar ** string
void wrapToPiInPlace(T &a)
Modifies the given angle to translate it into the ]-pi,pi] range.
int BASE_IMPEXP fprintf(FILE *fil, const char *format,...) MRPT_NO_THROWS MRPT_printf_format_check(2
An OS-independent version of fprintf.
FILE BASE_IMPEXP * fopen(const char *fileName, const char *mode) MRPT_NO_THROWS
An OS-independent version of fopen.
int BASE_IMPEXP void BASE_IMPEXP fclose(FILE *f)
An OS-independent version of fclose.
double BASE_IMPEXP normalPDF(double x, double mu, double std)
Evaluates the univariate normal (Gaussian) distribution at a given point "x".
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations.
#define MRPT_END_WITH_CLEAN_UP(stuff)
#define MRPT_UNUSED_PARAM(a)
Can be used to avoid "not used parameters" warnings from the compiler.
This base provides a set of functions for maths stuff.
Eigen::Matrix< typename MATRIX::Scalar, MATRIX::ColsAtCompileTime, MATRIX::ColsAtCompileTime > cov(const MATRIX &v)
Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample,...
CMatrixFixedNumeric< double, 3, 1 > CMatrixDouble31
MAT_C::Scalar multiply_HCHt_scalar(const VECTOR_H &H, const MAT_C &C)
r (a scalar) = H * C * H^t (with a vector H and a symmetric matrix C)
T square(const T x)
Inline function for the square of a number.
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
mrpt::math::TPoint2D BASE_IMPEXP operator+(const CPose2D &pose, const mrpt::math::TPoint2D &pnt)
Compose a 2D point from a new coordinate base given by a 2D pose.
CPose2D BASE_IMPEXP operator-(const CPose2D &p)
Unary - operator: return the inverse pose "-p" (Note that is NOT the same than a pose with negative x...
std::ostream & operator<<(std::ostream &o, const CPoint< DERIVEDCLASS > &p)
Dumps a point as a string [x,y] or [x,y,z]
bool operator==(const CPoint< DERIVEDCLASS > &p1, const CPoint< DERIVEDCLASS > &p2)
A namespace of pseudo-random numbers genrators of diferent distributions.
BASE_IMPEXP CRandomGenerator randomGenerator
A static instance of a CRandomGenerator class, for use in single-thread applications.
This namespace provides a OS-independent interface to many useful functions: filenames manipulation,...
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values,...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.