An efficient generator of random samples drawn from a given 2D (CPosePDF) or 3D (CPose3DPDF) pose probability density function (pdf).
This class keeps an internal state which speeds up the sequential generation of samples. It can manage any kind of pose PDF.
Use with CPoseRandomSampler::setPosePDF, then CPoseRandomSampler::drawSample to draw values.
Notice that you can pass a 2D or 3D pose PDF, then ask for a 2D or 3D sample. This class always returns the kind of sample you ask it for, but will skip missing terms or fill out with zeroes as required. Specifically, when sampling 3D poses from a 2D pose pdf, this class will be smart enought to draw only the 3 required dimensions, avoiding a waste of time with the other 3 missing components.
Definition at line 35 of file CPoseRandomSampler.h.
#include <mrpt/poses/CPoseRandomSampler.h>
Public Member Functions | |
CPoseRandomSampler () | |
Ctor. More... | |
~CPoseRandomSampler () | |
Dtor. More... | |
CPoseRandomSampler (const CPoseRandomSampler &o) | |
CPoseRandomSampler & | operator= (const CPoseRandomSampler &o) |
void | setPosePDF (const CPosePDF *pdf) |
This method must be called to select the PDF from which to draw samples. More... | |
void | setPosePDF (const CPosePDFPtr &pdf) |
This method must be called to select the PDF from which to draw samples. More... | |
void | setPosePDF (const CPosePDF &pdf) |
This method must be called to select the PDF from which to draw samples. More... | |
void | setPosePDF (const CPose3DPDF *pdf) |
This method must be called to select the PDF from which to draw samples. More... | |
void | setPosePDF (const CPose3DPDFPtr &pdf) |
This method must be called to select the PDF from which to draw samples. More... | |
void | setPosePDF (const CPose3DPDF &pdf) |
This method must be called to select the PDF from which to draw samples. More... | |
CPose2D & | drawSample (CPose2D &p) const |
Generate a new sample from the selected PDF. More... | |
CPose3D & | drawSample (CPose3D &p) const |
Generate a new sample from the selected PDF. More... | |
bool | isPrepared () const |
Return true if samples can be generated, which only requires a previous call to setPosePDF. More... | |
CPose2D & | getSamplingMean2D (CPose2D &out_mean) const |
If the object has been loaded with setPosePDF this method returns the 2D pose mean samples will be drawn around. More... | |
CPose3D & | getSamplingMean3D (CPose3D &out_mean) const |
If the object has been loaded with setPosePDF this method returns the 3D pose mean samples will be drawn around. More... | |
void | getOriginalPDFCov2D (mrpt::math::CMatrixDouble33 &cov3x3) const |
Retrieves the 3x3 covariance of the original PDF in . More... | |
void | getOriginalPDFCov2D (mrpt::math::CMatrixDouble &cov3x3) const |
Retrieves the 3x3 covariance of the original PDF in . More... | |
void | getOriginalPDFCov3D (mrpt::math::CMatrixDouble66 &cov6x6) const |
Retrieves the 6x6 covariance of the original PDF in . More... | |
void | getOriginalPDFCov3D (mrpt::math::CMatrixDouble &cov6x6) const |
Retrieves the 6x6 covariance of the original PDF in . More... | |
Protected Member Functions | |
void | clear () |
Clear internal pdf. More... | |
void | do_sample_2D (CPose2D &p) const |
Used internally: sample from m_pdf2D. More... | |
void | do_sample_3D (CPose3D &p) const |
Used internally: sample from m_pdf3D. More... | |
Protected Attributes | |
CPosePDF * | m_pdf2D |
A local copy of the PDF. More... | |
CPose3DPDF * | m_pdf3D |
A local copy of the PDF. More... | |
mrpt::math::CMatrixDouble33 | m_fastdraw_gauss_Z3 |
mrpt::math::CMatrixDouble66 | m_fastdraw_gauss_Z6 |
CPose2D | m_fastdraw_gauss_M_2D |
CPose3D | m_fastdraw_gauss_M_3D |
CPoseRandomSampler::CPoseRandomSampler | ( | ) |
Ctor.
Definition at line 31 of file CPoseRandomSampler.cpp.
CPoseRandomSampler::~CPoseRandomSampler | ( | ) |
CPoseRandomSampler::CPoseRandomSampler | ( | const CPoseRandomSampler & | o | ) |
Definition at line 49 of file CPoseRandomSampler.cpp.
References mrpt::utils::CObject::duplicate(), m_fastdraw_gauss_M_2D, m_fastdraw_gauss_M_3D, m_fastdraw_gauss_Z3, m_fastdraw_gauss_Z6, m_pdf2D, and m_pdf3D.
|
protected |
Clear internal pdf.
Definition at line 120 of file CPoseRandomSampler.cpp.
References mrpt::mrpt::utils::delete_safe(), m_pdf2D, and m_pdf3D.
Referenced by operator=(), setPosePDF(), and ~CPoseRandomSampler().
Used internally: sample from m_pdf2D.
Definition at line 274 of file CPoseRandomSampler.cpp.
References ASSERT_, mrpt::utils::TRuntimeClassId::className, mrpt::random::CRandomGenerator::drawGaussian1D_normalized(), mrpt::poses::CPosePDFParticles::drawSingleSample(), mrpt::poses::CPosePDF::GetRuntimeClass(), IS_CLASS, m_fastdraw_gauss_M_2D, m_fastdraw_gauss_Z3, m_pdf2D, MRPT_END, MRPT_START, mrpt::poses::CPose2D::phi(), mrpt::random::randomGenerator, THROW_EXCEPTION, THROW_EXCEPTION_FMT, mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::x(), and mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::y().
Referenced by drawSample().
Used internally: sample from m_pdf3D.
Definition at line 325 of file CPoseRandomSampler.cpp.
References ASSERT_, mrpt::utils::TRuntimeClassId::className, mrpt::random::CRandomGenerator::drawGaussian1D_normalized(), mrpt::poses::CPose3DPDFParticles::drawSingleSample(), mrpt::poses::CPose3DPDF::GetRuntimeClass(), IS_CLASS, m_fastdraw_gauss_M_3D, m_fastdraw_gauss_Z6, m_pdf3D, MRPT_END, MRPT_START, mrpt::poses::CPose3D::pitch(), mrpt::random::randomGenerator, mrpt::poses::CPose3D::roll(), THROW_EXCEPTION, THROW_EXCEPTION_FMT, mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::x(), mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::y(), and mrpt::poses::CPose3D::yaw().
Referenced by drawSample().
Generate a new sample from the selected PDF.
Definition at line 225 of file CPoseRandomSampler.cpp.
References do_sample_2D(), do_sample_3D(), m_pdf2D, m_pdf3D, MRPT_END, MRPT_START, and THROW_EXCEPTION.
Referenced by mrpt::maps::CMultiMetricMapPDF::prediction_and_update_pfOptimalProposal().
Generate a new sample from the selected PDF.
Definition at line 250 of file CPoseRandomSampler.cpp.
References do_sample_2D(), do_sample_3D(), m_pdf2D, m_pdf3D, MRPT_END, MRPT_START, and THROW_EXCEPTION.
void CPoseRandomSampler::getOriginalPDFCov2D | ( | mrpt::math::CMatrixDouble33 & | cov3x3 | ) | const |
Retrieves the 3x3 covariance of the original PDF in .
Definition at line 387 of file CPoseRandomSampler.cpp.
References ASSERT_, mrpt::poses::CPosePDFGaussian::copyFrom(), mrpt::poses::CPosePDFGaussian::cov, mrpt::utils::CProbabilityDensityFunction< TDATA, STATE_LEN >::getCovariance(), isPrepared(), m_pdf2D, m_pdf3D, MRPT_END, and MRPT_START.
Referenced by mrpt::maps::CMultiMetricMapPDF::prediction_and_update_pfOptimalProposal().
|
inline |
Retrieves the 3x3 covariance of the original PDF in .
Definition at line 118 of file CPoseRandomSampler.h.
void CPoseRandomSampler::getOriginalPDFCov3D | ( | mrpt::math::CMatrixDouble66 & | cov6x6 | ) | const |
Retrieves the 6x6 covariance of the original PDF in .
Definition at line 411 of file CPoseRandomSampler.cpp.
References ASSERT_, mrpt::poses::CPose3DPDFGaussian::copyFrom(), mrpt::poses::CPose3DPDFGaussian::cov, mrpt::utils::CProbabilityDensityFunction< TDATA, STATE_LEN >::getCovariance(), isPrepared(), m_pdf2D, m_pdf3D, MRPT_END, and MRPT_START.
|
inline |
Retrieves the 6x6 covariance of the original PDF in .
Definition at line 128 of file CPoseRandomSampler.h.
If the object has been loaded with setPosePDF this method returns the 2D pose mean samples will be drawn around.
Definition at line 434 of file CPoseRandomSampler.cpp.
References ASSERT_, isPrepared(), m_fastdraw_gauss_M_2D, m_fastdraw_gauss_M_3D, m_pdf2D, MRPT_END, and MRPT_START.
If the object has been loaded with setPosePDF this method returns the 3D pose mean samples will be drawn around.
Definition at line 450 of file CPoseRandomSampler.cpp.
References ASSERT_, isPrepared(), m_fastdraw_gauss_M_2D, m_fastdraw_gauss_M_3D, m_pdf3D, MRPT_END, and MRPT_START.
bool CPoseRandomSampler::isPrepared | ( | ) | const |
Return true if samples can be generated, which only requires a previous call to setPosePDF.
Definition at line 379 of file CPoseRandomSampler.cpp.
References m_pdf2D, and m_pdf3D.
Referenced by getOriginalPDFCov2D(), getOriginalPDFCov3D(), getSamplingMean2D(), getSamplingMean3D(), and mrpt::maps::CMultiMetricMapPDF::prediction_and_update_pfOptimalProposal().
CPoseRandomSampler & CPoseRandomSampler::operator= | ( | const CPoseRandomSampler & | o | ) |
Definition at line 61 of file CPoseRandomSampler.cpp.
References clear(), mrpt::utils::CObject::duplicate(), m_fastdraw_gauss_M_2D, m_fastdraw_gauss_M_3D, m_fastdraw_gauss_Z3, m_fastdraw_gauss_Z6, m_pdf2D, and m_pdf3D.
This method must be called to select the PDF from which to draw samples.
Computes the eigenvalues/eigenvector decomposition of this matrix, so that: M = Z · D · ZT, where columns in Z are the eigenvectors and the diagonal matrix D contains the eigenvalues as diagonal elements, sorted in ascending order.
Definition at line 129 of file CPoseRandomSampler.cpp.
References mrpt::utils::TRuntimeClassId::className, clear(), mrpt::poses::CPosePDFGaussian::cov, mrpt::math::cov(), mrpt::utils::CObject::duplicate(), mrpt::poses::CPosePDF::GetRuntimeClass(), IS_CLASS, m_fastdraw_gauss_M_2D, m_fastdraw_gauss_Z3, m_pdf2D, mrpt::poses::CPosePDFGaussian::mean, MRPT_END, MRPT_START, and THROW_EXCEPTION_FMT.
Referenced by mrpt::maps::CMultiMetricMapPDF::prediction_and_update_pfOptimalProposal(), and setPosePDF().
void CPoseRandomSampler::setPosePDF | ( | const CPosePDFPtr & | ) |
This method must be called to select the PDF from which to draw samples.
Definition at line 218 of file CPoseRandomSampler.cpp.
References setPosePDF().
This method must be called to select the PDF from which to draw samples.
Definition at line 76 of file CPoseRandomSampler.h.
References setPosePDF().
Referenced by setPosePDF().
void CPoseRandomSampler::setPosePDF | ( | const CPose3DPDF * | ) |
This method must be called to select the PDF from which to draw samples.
Computes the eigenvalues/eigenvector decomposition of this matrix, so that: M = Z · D · ZT, where columns in Z are the eigenvectors and the diagonal matrix D contains the eigenvalues as diagonal elements, sorted in ascending order.
Definition at line 174 of file CPoseRandomSampler.cpp.
References mrpt::utils::TRuntimeClassId::className, clear(), mrpt::poses::CPose3DPDFGaussian::cov, mrpt::math::cov(), mrpt::utils::CObject::duplicate(), mrpt::poses::CPose3DPDF::GetRuntimeClass(), IS_CLASS, m_fastdraw_gauss_M_3D, m_fastdraw_gauss_Z6, m_pdf3D, mrpt::poses::CPose3DPDFGaussian::mean, MRPT_END, MRPT_START, and THROW_EXCEPTION_FMT.
void CPoseRandomSampler::setPosePDF | ( | const CPose3DPDFPtr & | ) |
This method must be called to select the PDF from which to draw samples.
Definition at line 214 of file CPoseRandomSampler.cpp.
References setPosePDF().
|
inline |
This method must be called to select the PDF from which to draw samples.
Definition at line 91 of file CPoseRandomSampler.h.
References setPosePDF().
Referenced by setPosePDF().
|
protected |
Definition at line 44 of file CPoseRandomSampler.h.
Referenced by CPoseRandomSampler(), do_sample_2D(), getSamplingMean2D(), getSamplingMean3D(), operator=(), and setPosePDF().
|
protected |
Definition at line 45 of file CPoseRandomSampler.h.
Referenced by CPoseRandomSampler(), do_sample_3D(), getSamplingMean2D(), getSamplingMean3D(), operator=(), and setPosePDF().
|
protected |
Definition at line 42 of file CPoseRandomSampler.h.
Referenced by CPoseRandomSampler(), do_sample_2D(), operator=(), and setPosePDF().
|
protected |
Definition at line 43 of file CPoseRandomSampler.h.
Referenced by CPoseRandomSampler(), do_sample_3D(), operator=(), and setPosePDF().
|
protected |
A local copy of the PDF.
Definition at line 39 of file CPoseRandomSampler.h.
Referenced by clear(), CPoseRandomSampler(), do_sample_2D(), drawSample(), getOriginalPDFCov2D(), getOriginalPDFCov3D(), getSamplingMean2D(), isPrepared(), operator=(), and setPosePDF().
|
protected |
A local copy of the PDF.
Definition at line 40 of file CPoseRandomSampler.h.
Referenced by clear(), CPoseRandomSampler(), do_sample_3D(), drawSample(), getOriginalPDFCov2D(), getOriginalPDFCov3D(), getSamplingMean3D(), isPrepared(), operator=(), and setPosePDF().
Page generated by Doxygen 1.8.14 for MRPT 1.5.9 Git: 690a4699f Wed Apr 15 19:29:53 2020 +0200 at mié abr 15 19:30:12 CEST 2020 |