30 CPoseRandomSampler::CPoseRandomSampler() {}
34 m_pdf2D.reset(dynamic_cast<const CPosePDF*>(o.
m_pdf2D->clone()));
36 m_pdf3D.reset(dynamic_cast<const CPose3DPDF*>(o.
m_pdf3D->clone()));
45 if (&o ==
this)
return *
this;
49 m_pdf2D.reset(dynamic_cast<const CPosePDF*>(o.
m_pdf2D->clone()));
51 m_pdf3D.reset(dynamic_cast<const CPose3DPDF*>(o.
m_pdf3D->clone()));
60 : m_pdf2D(nullptr), m_pdf3D(nullptr)
79 if (
this == &o)
return *
this;
135 D = D.array().sqrt().matrix();
145 "Unsupported class: %s",
m_pdf2D->GetRuntimeClass()->className);
179 D = D.array().sqrt().matrix();
189 "Unsoported class: %s",
m_pdf3D->GetRuntimeClass()->className);
225 THROW_EXCEPTION(
"No associated pdf: setPosePDF must be called first.");
242 p.setFromValues(
q.x(),
q.y(), 0,
q.phi(), 0, 0);
249 THROW_EXCEPTION(
"No associated pdf: setPosePDF must be called first.");
271 for (
size_t i = 0; i < 3; i++)
274 for (
size_t d = 0; d < 3; d++)
301 "Unsoported class: %s",
m_pdf2D->GetRuntimeClass()->className);
322 for (
size_t i = 0; i < 6; i++)
325 for (
size_t d = 0; d < 6; d++)
355 "Unsoported class: %s",
m_pdf3D->GetRuntimeClass()->className);
374 m_pdf2D->getCovariance(cov3x3);
405 m_pdf3D->getCovariance(cov6x6);
A namespace of pseudo-random numbers generators of diferent distributions.
CPose2D & getSamplingMean2D(CPose2D &out_mean) const
If the object has been loaded with setPosePDF this method returns the 2D pose mean samples will be dr...
double x() const
Common members of all points & poses classes.
void copyFrom(const CPosePDF &o) override
Copy operator, translating if necesary (for example, between particles and gaussian representations) ...
CPose2D mean
The mean value.
CPose3D mean
The mean value.
#define THROW_EXCEPTION(msg)
Declares a class that represents a Probability Density function (PDF) of a 2D pose ...
void copyFrom(const CPose3DPDF &o) override
Copy operator, translating if necesary (for example, between particles and gaussian representations) ...
GLdouble GLdouble GLdouble GLdouble q
Declares a class that represents a Probability Density function (PDF) of a 3D(6D) pose ...
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction...
double pitch() const
Get the PITCH angle (in radians)
double yaw() const
Get the YAW angle (in radians)
std::unique_ptr< const CPose3DPDF > m_pdf3D
A local copy of the PDF.
bool isPrepared() const
Return true if samples can be generated, which only requires a previous call to setPosePDF.
mrpt::math::CMatrixDouble33 cov
The 3x3 covariance matrix.
void getOriginalPDFCov3D(mrpt::math::CMatrixDouble66 &cov6x6) const
Retrieves the 6x6 covariance of the original PDF in .
void drawSingleSample(CPose2D &outPart) const override
Draws a single sample from the distribution (WARNING: weights are assumed to be normalized!) ...
#define ASSERT_(f)
Defines an assertion mechanism.
This base provides a set of functions for maths stuff.
CPose3D & getSamplingMean3D(CPose3D &out_mean) const
If the object has been loaded with setPosePDF this method returns the 3D pose mean samples will be dr...
void do_sample_3D(CPose3D &p) const
Used internally: sample from m_pdf3D.
Declares a class that represents a Probability Density function (PDF) of a 2D pose ...
void clear()
Clear internal pdf.
void setPosePDF(const CPosePDF *pdf)
This method must be called to select the PDF from which to draw samples.
virtual CObject * clone() const =0
Returns a deep copy (clone) of the object, indepently of its class.
void getOriginalPDFCov2D(mrpt::math::CMatrixDouble33 &cov3x3) const
Retrieves the 3x3 covariance of the original PDF in .
void do_sample_2D(CPose2D &p) const
Used internally: sample from m_pdf2D.
CPose3D m_fastdraw_gauss_M_3D
mrpt::math::CMatrixDouble33 m_fastdraw_gauss_Z3
Declares a class that represents a Probability Density Function (PDF) over a 2D pose (x...
Declares a class that represents a probability density function (pdf) of a 2D pose (x...
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
double roll() const
Get the ROLL angle (in radians)
mrpt::math::CMatrixDouble66 cov
The 6x6 covariance matrix.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
void drawSingleSample(CPose3D &outPart) const override
Draws a single sample from the distribution (WARNING: weights are assumed to be normalized!) ...
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
const double & phi() const
Get the phi angle of the 2D pose (in radians)
#define IS_CLASS(ptrObj, class_name)
Evaluates to true if the given pointer to an object (derived from mrpt::rtti::CObject) is of the give...
CPoseRandomSampler & operator=(const CPoseRandomSampler &o)
Declares a class that represents a Probability Density function (PDF) of a 3D pose ...
std::unique_ptr< const CPosePDF > m_pdf2D
A local copy of the PDF.
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...
CPose2D m_fastdraw_gauss_M_2D
CPose2D & drawSample(CPose2D &p) const
Generate a new sample from the selected PDF.
mrpt::math::CMatrixDouble66 m_fastdraw_gauss_Z6
An efficient generator of random samples drawn from a given 2D (CPosePDF) or 3D (CPose3DPDF) pose pro...
#define THROW_EXCEPTION_FMT(_FORMAT_STRING,...)
CRandomGenerator & getRandomGenerator()
A static instance of a CRandomGenerator class, for use in single-thread applications.
Declares a class that represents a Probability Density Function (PDF) of a 3D pose (6D actually)...
Declares a class that represents a Probability Density function (PDF) of a 3D pose.
double drawGaussian1D_normalized()
Generate a normalized (mean=0, std=1) normally distributed sample.