49         for (
const auto& m : m_modes)
    51             const double w = exp(m.log_w);
    52             se_averager.
append(m.val.mean, w);
    62 std::tuple<mrpt::math::CMatrixDouble66, CPose3D>
    65     const size_t N = m_modes.size();
    79         for (
const auto& m : m_modes)
    82             sumW += w = exp(m.log_w);
    91         if (sumW != 0) estCov *= (1.0 / sumW);
    94     return {estCov, 
mean};
   100     uint32_t N = m_modes.size();
   102     for (
const auto& m : m_modes) 
out << m.log_w << m.val.mean << m.val.cov;
   117             for (
auto& m : m_modes)
   122                 if (version == 0) m.log_w = log(std::max(1e-300, m.log_w));
   144     if (
this == &o) 
return;  
   153         m_modes[0].log_w = 0;
   156         m_modes[0].val.cov = C;
   168     if (!f) 
return false;
   170     for (
const auto& m : m_modes)
   172             f, 
"%e %e %e %e %e %e %e %e %e %e\n", exp(m.log_w), m.val.mean.x(),
   173             m.val.mean.y(), m.val.mean.z(), m.val.cov(0, 0), m.val.cov(1, 1),
   174             m.val.cov(2, 2), m.val.cov(0, 1), m.val.cov(0, 2), m.val.cov(1, 2));
   184     for (
auto& m : m_modes) m.val.changeCoordinatesReference(newReferenceBase);
   212     for (
auto& m : m_modes)
   214         for (
size_t i = 0; i < 6; i++)
   215             for (
size_t j = i + 1; j < 6; j++)
   216                 m.val.cov(i, j) = m.val.cov(j, i);
   228     if (m_modes.empty()) 
return;
   229     double maxW = m_modes[0].log_w;
   230     for (
auto& m : m_modes) maxW = max(maxW, m.log_w);
   231     for (
auto& m : m_modes) m.log_w -= maxW;
   247     [[maybe_unused]] 
size_t N,
   248     [[maybe_unused]] std::vector<CVectorDouble>& outSamples)
 const   264     out->resize(m_modes.size());
   269     for (it = m_modes.begin(), outIt = 
out->m_modes.begin();
   270          it != m_modes.end(); it++, outIt++)
   272         (it)->
val.inverse((outIt)->val);
   273         (outIt)->log_w = (it)->log_w;
   290     for (
const auto& m_mode : o.
m_modes) m_modes.push_back(m_mode);
   307         auto it_best = m_modes.end();
   308         for (
auto it = m_modes.begin(); it != m_modes.end(); ++it)
   309             if (it_best == m_modes.end() || it->log_w > it_best->log_w)
   312         outVal = it_best->val;
 A compile-time fixed-size numeric matrix container. 
 
void append(const mrpt::poses::CPose3D &p)
Adds a new pose to the computation. 
 
virtual const mrpt::rtti::TRuntimeClassId * GetRuntimeClass() const override
Returns information about the class of an object in runtime. 
 
void enforceCovSymmetry()
Assures the symmetry of the covariance matrix (eventually certain operations in the math-coprocessor ...
 
#define THROW_EXCEPTION(msg)
 
int void fclose(FILE *f)
An OS-independent version of fclose. 
 
void getMostLikelyMode(CPose3DPDFGaussian &outVal) const
Return the Gaussian mode with the highest likelihood (or an empty Gaussian if there are no modes in t...
 
void appendFrom(const CPose3DPDFSOG &o)
Append the Gaussian modes from "o" to the current set of modes of "this" density. ...
 
#define IMPLEMENTS_SERIALIZABLE(class_name, base, NameSpace)
To be added to all CSerializable-classes implementation files. 
 
Declares a class that represents a Probability Density function (PDF) of a 3D(6D) pose ...
 
void getMean(CPose3D &mean_pose) const override
 
void normalizeWeights()
Normalize the weights in m_modes such as the maximum log-weight is 0. 
 
void matProductOf_AAt(const MAT_A &A)
this = A * AT 
 
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations. 
 
void inverse(CPose3DPDF &o) const override
Returns a new PDF such as: NEW_PDF = (0,0,0) - THIS_PDF. 
 
#define ASSERT_(f)
Defines an assertion mechanism. 
 
This base provides a set of functions for maths stuff. 
 
#define CLASS_ID(T)
Access to runtime class ID for a defined class name. 
 
void drawManySamples(size_t N, std::vector< mrpt::math::CVectorDouble > &outSamples) const override
Draws a number of samples from the distribution, and saves as a list of 1x6 vectors, where each row contains a (x,y,z,yaw,pitch,roll) datum. 
 
TModesList m_modes
Access directly to this array for modify the modes as desired. 
 
bool saveToTextFile(const std::string &file) const override
Save the density to a text file, with the following format: There is one row per Gaussian "mode"...
 
void changeCoordinatesReference(const CPose3D &newReferenceBase) override
this = p (+) this. 
 
CMatrixFixed< double, 6, 1 > CMatrixDouble61
 
void drawSingleSample(CPose3D &outPart) const override
Draws a single sample from the distribution. 
 
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
 
TModesList::const_iterator const_iterator
 
int fprintf(FILE *fil, const char *format,...) noexcept MRPT_printf_format_check(2
An OS-independent version of fprintf. 
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. 
 
Computes weighted and un-weighted averages of SE(3) poses. 
 
Virtual base class for "archives": classes abstracting I/O streams. 
 
virtual std::tuple< cov_mat_t, type_value > getCovarianceAndMean() const =0
Returns an estimate of the pose covariance matrix (STATE_LENxSTATE_LEN cov matrix) and the mean...
 
void get_average(mrpt::poses::CPose3D &out_mean) const
Returns the average pose. 
 
A class used to store a 3D pose (a 3D translation + a rotation in 3D). 
 
mrpt::vision::TStereoCalibResults out
 
void clear()
Clear all the gaussian modes. 
 
std::tuple< cov_mat_t, type_value > getCovarianceAndMean() const override
Returns an estimate of the pose covariance matrix (STATE_LENxSTATE_LEN cov matrix) and the mean...
 
TModesList::iterator iterator
 
This file implements matrix/vector text and binary serialization. 
 
void setFromValues(const double x0, const double y0, const double z0, const double yaw=0, const double pitch=0, const double roll=0)
Set the pose from a 3D position (meters) and yaw/pitch/roll angles (radians) - This method recomputes...
 
double mean(const CONTAINER &v)
Computes the mean value of a vector. 
 
uint8_t serializeGetVersion() const override
Must return the current versioning number of the object. 
 
Declares a class that represents a Probability Density function (PDF) of a 3D pose ...
 
void bayesianFusion(const CPose3DPDF &p1, const CPose3DPDF &p2) override
Bayesian fusion of two pose distributions, then save the result in this object (WARNING: Currently p1...
 
FILE * fopen(const char *fileName, const char *mode) noexcept
An OS-independent version of fopen. 
 
Declares a class that represents a Probability Density Function (PDF) of a 3D pose (6D actually)...
 
void copyFrom(const CPose3DPDF &o) override
Copy operator, translating if necesary (for example, between particles and gaussian representations) ...
 
void serializeFrom(mrpt::serialization::CArchive &in, uint8_t serial_version) override
Pure virtual method for reading (deserializing) from an abstract archive. 
 
void serializeTo(mrpt::serialization::CArchive &out) const override
Pure virtual method for writing (serializing) to an abstract archive. 
 
void resize(const size_t N)
Set the number of SOG modes.