29 #include <Eigen/Dense> 49 const std::string& sectionNamePrefix)
56 insertionOpts.loadFromConfigFile(
57 source, sectionNamePrefix +
string(
"_insertOpts"));
58 likelihoodOpts.loadFromConfigFile(
59 source, sectionNamePrefix +
string(
"_likelihoodOpts"));
63 std::ostream&
out)
const 67 this->insertionOpts.dumpToTextStream(
out);
68 this->likelihoodOpts.dumpToTextStream(
out);
107 out << genericMapParams;
110 const uint32_t n = m_beacons.size();
113 for (
const auto& it : *
this)
out << it;
124 if (version >= 1) in >> genericMapParams;
135 for (i = 0; i < n; i++) in >> m_beacons[i];
175 for (
auto& it_obs : o.sensedData)
178 beac = getBeaconByID(it_obs.beaconID);
180 if (beac !=
nullptr && it_obs.sensedDistance > 0 &&
181 !std::isnan(it_obs.sensedDistance))
183 float sensedRange = it_obs.sensedDistance;
188 sensor3D = robotPose3D + it_obs.sensorLocationOnRobot;
198 CPointPDFParticles::CParticleList::const_iterator it;
206 itLW = logWeights.begin(), itLL = logLiks.begin();
208 ++it, ++itLW, ++itLL)
211 it->d->x, it->d->y, it->d->z);
218 (sensedRange - expectedRange) /
219 likelihoodOptions.rangeStd);
225 if (logWeights.size())
227 logWeights, logLiks);
239 float varZ, varR =
square(likelihoodOptions.rangeStd);
249 float expectedRange =
267 -0.5 *
square(sensedRange - expectedRange) / varZ;
282 itLW = logWeights.begin(), itLL = logLiks.begin();
284 ++it, ++itLW, ++itLL)
288 varR =
square(likelihoodOptions.rangeStd);
289 double Ax = it->val.mean.x() - sensor3D.
x();
290 double Ay = it->val.mean.y() - sensor3D.
y();
291 double Az = it->val.mean.z() - sensor3D.z();
295 double expectedRange =
312 *itLL = -0.5 *
square(sensedRange - expectedRange) /
317 if (logWeights.size())
331 if (o.maxSensorDistance != o.minSensorDistance)
333 log(1.0 / (o.maxSensorDistance - o.minSensorDistance));
365 robotPose2D =
CPose2D(*robotPose);
366 robotPose3D = (*robotPose);
393 for (
const auto& it : o.sensedData)
395 CPoint3D sensorPnt(robotPose3D + it.sensorLocationOnRobot);
396 float sensedRange = it.sensedDistance;
397 unsigned int sensedID = it.beaconID;
399 CBeacon* beac = getBeaconByID(sensedID);
409 newBeac.
m_ID = sensedID;
411 if (insertionOptions.insertAsMonteCarlo)
418 size_t numParts =
round(
419 insertionOptions.MC_numSamplesPerMeter *
422 insertionOptions.minElevation_deg <=
423 insertionOptions.maxElevation_deg);
425 DEG2RAD(insertionOptions.minElevation_deg);
427 DEG2RAD(insertionOptions.maxElevation_deg);
429 for (
auto& m_particle :
437 sensedRange, likelihoodOptions.rangeStd);
439 sensorPnt.
x() +
R * cos(th) * cos(el);
441 sensorPnt.
y() +
R * sin(th) * cos(el);
442 m_particle.d->z = sensorPnt.z() +
R * sin(el);
459 m_beacons.push_back(newBeac);
474 double maxW = -1e308, sumW = 0;
480 p.d->x, p.d->y, p.d->z);
483 (sensedRange - expectedRange) /
484 likelihoodOptions.rangeStd);
485 maxW = max(p.log_w, maxW);
486 sumW += exp(p.log_w);
492 if (insertionOptions.MC_performResampling)
500 vector<double> log_ws;
501 vector<size_t> indxs;
505 CParticleFilterCapable::computeResampling(
506 CParticleFilter::prSystematic, log_ws,
515 (insertionOptions.minElevation_deg ==
516 insertionOptions.maxElevation_deg);
519 .MC_afterResamplingNoise;
522 CPointPDFParticles::CParticleList::iterator
557 (maxW - insertionOptions
558 .MC_thresholdNegligible))
582 double D1 = sqrt(COV(0, 0));
583 double D2 = sqrt(COV(1, 1));
584 double D3 = sqrt(COV(2, 2));
586 double mxVar =
max3(D1, D2, D3);
588 if (mxVar < insertionOptions.MC_maxStdToGauss)
601 if (insertionOptions.minElevation_deg ==
602 insertionOptions.maxElevation_deg)
622 float varR =
square(likelihoodOptions.rangeStd);
634 float y = sensedRange - expectedRange;
682 float varR =
square(likelihoodOptions.rangeStd);
691 double expectedRange =
695 double y = sensedRange - expectedRange;
700 double Ax = (mode.val.mean.x() - sensorPnt.
x());
701 double Ay = (mode.val.mean.y() - sensorPnt.
y());
702 double Az = (mode.val.mean.z() - sensorPnt.z());
706 H.
asEigen() *= 1.0 / expectedRange;
715 mode.val.mean.x_incr(K(0, 0) * y);
716 mode.val.mean.y_incr(K(1, 0) * y);
717 mode.val.mean.z_incr(K(2, 0) * y);
719 mode.val.cov = (Eigen::Matrix3d::Identity() -
721 mode.val.cov.asEigen();
725 mode.log_w += -0.5 *
square(y) / varZ;
728 max_w = max(max_w, mode.log_w);
736 if (max_w - it_p->log_w >
737 insertionOptions.SOG_thresholdNegligible)
749 const auto [curCov, curMean] =
752 double D1 = sqrt(curCov(0, 0));
753 double D2 = sqrt(curCov(1, 1));
754 double D3 = sqrt(curCov(2, 2));
755 float maxDiag =
max3(D1, D2, D3);
800 CPose3D otherMapPose3D(otherMapPose);
804 const auto* otherMap2 =
dynamic_cast<const CBeaconMap*
>(otherMap);
805 vector<bool> otherCorrespondences;
811 computeMatchingWith3DLandmarks(
812 otherMap2, correspondences, extraResults.correspondencesRatio,
813 otherCorrespondences);
824 for (
auto& m_beacon : m_beacons)
825 m_beacon.changeCoordinatesReference(newOrg);
837 changeCoordinatesReference(newOrg);
846 vector<bool>& otherCorrespondences)
const 850 TSequenceBeacons::const_iterator thisIt, otherIt;
851 size_t nThis, nOther;
855 vector<bool> thisLandmarkAssigned;
858 nThis = m_beacons.size();
862 thisLandmarkAssigned.resize(nThis,
false);
865 correspondences.clear();
866 otherCorrespondences.clear();
867 otherCorrespondences.resize(nOther,
false);
868 correspondencesRatio = 0;
870 for (k = 0, otherIt = anotherMap->
m_beacons.begin();
871 otherIt != anotherMap->
m_beacons.end(); ++otherIt, ++k)
873 for (j = 0, thisIt = m_beacons.begin(); thisIt != m_beacons.end();
877 if ((otherIt)->m_ID == (thisIt)->m_ID)
881 if (!thisLandmarkAssigned[j])
883 thisLandmarkAssigned[j] =
true;
886 otherCorrespondences[k] =
true;
890 CPoint3D mean_j = m_beacons[j].getMeanVal();
894 match.
this_z = mean_j.z();
902 correspondences.push_back(match);
911 correspondencesRatio = 2.0f * correspondences.size() /
d2f(nThis + nOther);
920 const string& file, [[maybe_unused]]
const char* style,
921 [[maybe_unused]]
float confInterval)
const 924 if (!f)
return false;
928 f,
"%%-------------------------------------------------------\n");
929 os::fprintf(f,
"%% File automatically generated using the MRPT method:\n");
930 os::fprintf(f,
"%% 'CBeaconMap::saveToMATLABScript3D'\n");
934 f,
"%% Jose Luis Blanco Claraco, University of Malaga @ 2006\n");
937 f,
"%%-------------------------------------------------------\n\n");
941 std::vector<std::string> strs;
944 for (
const auto& m_beacon : m_beacons)
946 m_beacon.getAsMatlabDrawCommands(strs);
959 out <<
"\n----------- [CBeaconMap::TLikelihoodOptions] ------------ \n\n";
961 "rangeStd = %f\n", rangeStd);
971 rangeStd =
iniFile.read_float(section.c_str(),
"rangeStd", rangeStd);
976 out <<
"\n----------- [CBeaconMap::TInsertionOptions] ------------ \n\n";
979 "insertAsMonteCarlo = %c\n",
980 insertAsMonteCarlo ?
'Y' :
'N');
982 "minElevation_deg = %.03f\n", minElevation_deg);
984 "maxElevation_deg = %.03f\n", maxElevation_deg);
986 "MC_numSamplesPerMeter = %d\n",
987 MC_numSamplesPerMeter);
989 "MC_maxStdToGauss = %.03f\n", MC_maxStdToGauss);
991 "MC_thresholdNegligible = %.03f\n",
992 MC_thresholdNegligible);
994 "MC_performResampling = %c\n",
995 MC_performResampling ?
'Y' :
'N');
997 "MC_afterResamplingNoise = %.03f\n",
998 MC_afterResamplingNoise);
1000 "SOG_thresholdNegligible = %.03f\n",
1001 SOG_thresholdNegligible);
1003 "SOG_maxDistBetweenGaussians = %.03f\n",
1004 SOG_maxDistBetweenGaussians);
1006 "SOG_separationConstant = %.03f\n",
1007 SOG_separationConstant);
1024 MC_thresholdNegligible,
double,
iniFile, section.c_str());
1027 MC_afterResamplingNoise,
float,
iniFile, section.c_str());
1029 SOG_thresholdNegligible,
float,
iniFile, section.c_str());
1031 SOG_maxDistBetweenGaussians,
float,
iniFile, section.c_str());
1033 SOG_separationConstant,
float,
iniFile, section.c_str());
1044 const CPose3D& in_robotPose,
const CPoint3D& in_sensorLocationOnRobot,
1047 TSequenceBeacons::const_iterator it;
1053 point3D = in_robotPose + in_sensorLocationOnRobot;
1059 for (it = m_beacons.begin(); it != m_beacons.end(); ++it)
1061 it->getMean(beacon3D);
1078 out_Observations.
sensedData.push_back(newMeas);
1088 const string& filNamePrefix)
const 1093 string fil1(filNamePrefix +
string(
"_3D.m"));
1094 saveToMATLABScript3D(fil1);
1099 std::make_shared<opengl::CSetOfObjects>();
1101 getAs3DObject(obj3D);
1103 -100.0f, 100.0f, -100.0f, 100.0f, .0f, 1.f);
1108 string fil2(filNamePrefix +
string(
"_3D.3Dscene"));
1112 string fil3(filNamePrefix +
string(
"_covs.txt"));
1113 saveToTextFile(fil3);
1116 string fil4(filNamePrefix +
string(
"_population.txt"));
1118 FILE* f =
os::fopen(fil4.c_str(),
"wt");
1121 size_t nParts = 0, nGaussians = 0;
1123 for (
const auto& m_beacon : m_beacons)
1125 switch (m_beacon.m_typePDF)
1128 nParts += m_beacon.m_locationMC.size();
1131 nGaussians += m_beacon.m_locationSOG.size();
1140 f,
"%u %u", static_cast<unsigned>(nParts),
1141 static_cast<unsigned>(nGaussians));
1156 if (!genericMapParams.enableSaveAs3DObject)
return;
1164 for (
const auto& m_beacon : m_beacons) m_beacon.getAs3DObject(outObj);
1197 otherMap = dynamic_cast<const CBeaconMap*>(otherMap2);
1199 if (!otherMap)
return 0;
1202 vector<bool> otherCorrespondences;
1203 float out_corrsRatio;
1209 computeMatchingWith3DLandmarks(
1210 &modMap, matchList, out_corrsRatio, otherCorrespondences);
1212 return out_corrsRatio;
1222 for (
const auto& m_beacon : m_beacons)
1223 if (m_beacon.m_ID ==
id)
return &m_beacon;
1232 for (
auto& m_beacon : m_beacons)
1233 if (m_beacon.m_ID ==
id)
return &m_beacon;
1249 for (
const auto& m_beacon : m_beacons)
1251 const auto [C, p] = m_beacon.getCovarianceAndMean();
1254 float D2 = C(0, 0) * C(1, 1) -
square(C(0, 1));
1256 f,
"%i %f %f %f %e %e %e %e %e %e %e %e\n",
1257 static_cast<int>(m_beacon.m_ID), p.x(), p.y(), p.z(), C(0, 0),
1258 C(1, 1), C(2, 2), D2, D3, C(0, 1), C(1, 2), C(1, 2));
A namespace of pseudo-random numbers generators of diferent distributions.
bool isEmpty() const override
Returns true if the map is empty/no observation has been inserted.
Virtual base for specifying the kind and parameters of one map (normally, to be inserted into mrpt::m...
Parameters for CMetricMap::compute3DMatchingRatio()
mrpt::maps::CBeaconMap::TInsertionOptions insertionOpts
Observations insertion options.
mrpt::poses::CPointPDFParticles m_locationMC
The individual PDF, if m_typePDF=pdfMonteCarlo (publicly accesible for ease of use, but the CPointPDF interface is also implemented in CBeacon).
typename vec_t::iterator iterator
A compile-time fixed-size numeric matrix container.
void getWeights(std::vector< double > &out_logWeights) const
Returns a vector with the sequence of the logaritmic weights of all the samples.
static void generateRingSOG(float sensedRange, mrpt::poses::CPointPDFSOG &outPDF, const CBeaconMap *myBeaconMap, const mrpt::poses::CPoint3D &sensorPnt, const mrpt::math::CMatrixDouble33 *covarianceCompositionToAdd=nullptr, bool clearPreviousContentsOutPDF=true, const mrpt::poses::CPoint3D ¢erPoint=mrpt::poses::CPoint3D(0, 0, 0), float maxDistanceFromCenter=0)
This static method returns a SOG with ring-shape (or as a 3D sphere) that can be used to initialize a...
#define THROW_EXCEPTION(msg)
float compute3DMatchingRatio(const mrpt::maps::CMetricMap *otherMap, const mrpt::poses::CPose3D &otherMapPose, const TMatchingRatioParams ¶ms) const override
Computes the ratio in [0,1] of correspondences between "this" and the "otherMap" map, whose 6D pose relative to "this" is "otherMapPose" In the case of a multi-metric map, this returns the average between the maps.
std::string std::string format(std::string_view fmt, ARGS &&... args)
size_t size(const MATRIXLIKE &m, const int dim)
void getAs3DObject(mrpt::opengl::CSetOfObjects::Ptr &outObj) const override
Returns a 3D object representing the map.
CParticleList m_particles
The array of particles.
int void fclose(FILE *f)
An OS-independent version of fclose.
#define IMPLEMENTS_SERIALIZABLE(class_name, base, NameSpace)
To be added to all CSerializable-classes implementation files.
CPoint3D mean
The mean value.
The namespace for Bayesian filtering algorithm: different particle filters and Kalman filter algorith...
void serializeTo(mrpt::serialization::CArchive &out) const override
Pure virtual method for writing (serializing) to an abstract archive.
double ESS() const override
Returns the normalized ESS (Estimated Sample Size), in the range [0,1].
mrpt::vision::TStereoCalibParams params
Declares a class derived from "CObservation" that represents one (or more) range measurements to labe...
MAT_C::Scalar multiply_HCHt_scalar(const VECTOR_H &H, const MAT_C &C)
r (scalar) = H*C*H^t (H: row vector, C: symmetric matrix)
int32_t beaconID
The ID of the sensed beacon (or INVALID_BEACON_ID if unknown)
void stringListAsString(const std::vector< std::string > &lst, std::string &out, const std::string &newline="\")
Convert a string list to one single string with new-lines.
void internal_clear() override
Internal method called by clear()
double distance3DTo(double ax, double ay, double az) const
Returns the 3D distance from this pose/point to a 3D point.
mrpt::poses::CPointPDFSOG m_locationSOG
The individual PDF, if m_typePDF=pdfSOG (publicly accesible for ease of use, but the CPointPDF interf...
void dumpToTextStream(std::ostream &out) const override
This method should clearly display all the contents of the structure in textual form, sending it to a std::ostream.
double distanceTo(const CPoseOrPoint< OTHERCLASS, DIM2 > &b) const
Returns the Euclidean distance to another pose/point:
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations.
TSequenceBeacons m_beacons
The individual beacons.
#define ASSERT_(f)
Defines an assertion mechanism.
float d2f(const double d)
shortcut for static_cast<float>(double)
return_t drawUniform(const double Min, const double Max)
Generate a uniformly distributed pseudo-random number using the MT19937 algorithm, scaled to the selected range.
This class allows loading and storing values and vectors of different types from a configuration text...
This base provides a set of functions for maths stuff.
void loadFromConfigFile_map_specific(const mrpt::config::CConfigFileBase &source, const std::string §ionNamePrefix) override
Load all map-specific params.
void changeCoordinatesReference(const mrpt::poses::CPose3D &newOrg)
Changes the reference system of the map to a given 3D pose.
#define CLASS_ID(T)
Access to runtime class ID for a defined class name.
bool internal_insertObservation(const mrpt::obs::CObservation &obs, const mrpt::poses::CPose3D *robotPose=nullptr) override
Internal method called by insertObservation()
int64_t TBeaconID
The type for the IDs of landmarks.
#define MRPT_CHECK_NORMAL_NUMBER(v)
Throws an exception if the number is NaN, IND, or +/-INF, or return the same number otherwise...
double averageLogLikelihood(const CVectorDouble &logLikelihoods)
A numerically-stable method to compute average likelihood values with strongly different ranges (unwe...
constexpr double DEG2RAD(const double x)
Degrees to radians.
mrpt::math::CMatrixDouble33 cov
The 3x3 covariance matrix.
void loadFromConfigFile(const mrpt::config::CConfigFileBase &source, const std::string §ion) override
This method load the options from a ".ini"-like file or memory-stored string list.
std::deque< TMeasurement > sensedData
The list of observed ranges.
This namespace contains representation of robot actions and observations.
A class for storing a map of 3D probabilistic beacons, using a Montecarlo, Gaussian, or Sum of Gaussians (SOG) representation (for range-only SLAM).
string iniFile(myDataDir+string("benchmark-options.ini"))
void normalizeWeights()
Normalize the weights in m_modes such as the maximum log-weight is 0.
Scalar det() const
Determinant of matrix.
void saveToTextFile(const std::string &fil) const
Save a text file with a row per beacon, containing this 11 elements:
double x() const
Common members of all points & poses classes.
void y_incr(const double v)
return_t drawGaussian1D(const double mean, const double std)
Generate a normally distributed pseudo-random number.
TTypePDF m_typePDF
Which one of the different 3D point PDF is currently used in this object: montecarlo, gaussian, or a sum of gaussians.
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...
A class used to store a 3D point.
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
double internal_computeObservationLikelihood(const mrpt::obs::CObservation &obs, const mrpt::poses::CPose3D &takenFrom) override
Internal method called by computeObservationLikelihood()
float stdError
The "sigma" of the sensor, assuming a zero-mean Gaussian noise model.
void performSubstitution(const std::vector< size_t > &indx) override
Replaces the old particles by copies determined by the indexes in "indx", performing an efficient cop...
A structure for holding correspondences between two sets of points or points-like entities in 2D or 3...
bool saveToFile(const std::string &fil) const
Saves the scene to a 3Dscene file, loadable by the application SceneViewer3D.
iterator erase(iterator i)
int fprintf(FILE *fil, const char *format,...) noexcept MRPT_printf_format_check(2
An OS-independent version of fprintf.
float minSensorDistance
Info about sensor.
float sensedDistance
The sensed range itself (in meters).
return_t square(const num_t x)
Inline function for the square of a number.
#define MRPT_LOAD_CONFIG_VAR( variableName, variableType, configFileObject, sectionNameStr)
An useful macro for loading variables stored in a INI-like file under a key with the same name that t...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
#define MAP_DEFINITION_REGISTER(_CLASSNAME_STRINGS, _CLASSNAME_WITH_NS)
Registers one map class into TMetricMapInitializer factory.
virtual const mrpt::rtti::TRuntimeClassId * GetRuntimeClass() const override
Returns information about the class of an object in runtime.
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...
virtual const mrpt::rtti::TRuntimeClassId * GetRuntimeClass() const override
Returns information about the class of an object in runtime.
void x_incr(const double v)
void determineMatching2D(const mrpt::maps::CMetricMap *otherMap, const mrpt::poses::CPose2D &otherMapPose, mrpt::tfest::TMatchingPairList &correspondences, const TMatchingParams ¶ms, TMatchingExtraResults &extraResults) const override
Computes the matching between this and another 2D point map, which includes finding: ...
void loadFromConfigFile(const mrpt::config::CConfigFileBase &source, const std::string §ion) override
Initilization of default parameters.
Virtual base class for "archives": classes abstracting I/O streams.
Declares a virtual base class for all metric maps storage classes.
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).
mrpt::vision::TStereoCalibResults out
Declares a class that represents any robot's observation.
static mrpt::maps::CMetricMap * internal_CreateFromMapDefinition(const mrpt::maps::TMetricMapInitializer &def)
void dumpToTextStream(std::ostream &out) const override
This method should clearly display all the contents of the structure in textual form, sending it to a std::ostream.
std::deque< TGaussianMode >::const_iterator const_iterator
CSetOfObjects::Ptr CornerXYZ(float scale=1.0)
Returns three arrows representing a X,Y,Z 3D corner.
size_t size() const
Return the number of Gaussian modes.
void setSize(size_t row, size_t col, bool zeroNewElements=false)
Changes the size of matrix, maintaining the previous contents.
const CBeacon * getBeaconByID(CBeacon::TBeaconID id) const
Returns a pointer to the beacon with the given ID, or nullptr if it does not exist.
void setSize(size_t numberParticles, const mrpt::math::TPoint3Df &defaultValue=mrpt::math::TPoint3Df{0, 0, 0})
Erase all the previous particles and change the number of particles, with a given initial value...
This class allows the user to create, load, save, and render 3D scenes using OpenGL primitives...
EIGEN_MAP asEigen()
Get as an Eigen-compatible Eigen::Map object.
mrpt::poses::CPoint3D sensorLocationOnRobot
Position of the sensor on the robot.
uint8_t serializeGetVersion() const override
Must return the current versioning number of the object.
void resize(const size_t N)
Resize the number of SOG modes.
mrpt::maps::CBeaconMap::TLikelihoodOptions likelihoodOpts
Probabilistic observation likelihood options.
Each one of the measurements.
void clear()
Clear all the particles (free memory)
FILE * fopen(const char *fileName, const char *mode) noexcept
An OS-independent version of fopen.
TBeaconID m_ID
An ID for the landmark (see details next...) This ID was introduced in the version 3 of this class (2...
bool saveToMATLABScript3D(const std::string &file, const char *style="b", float confInterval=0.95f) const
Save to a MATLAB script which displays 3D error ellipses for the map.
void saveMetricMapRepresentationToFile(const std::string &filNamePrefix) const override
This virtual method saves the map to a file "filNamePrefix"+< some_file_extension >...
Parameters for the determination of matchings between point clouds, etc.
CRandomGenerator & getRandomGenerator()
A static instance of a CRandomGenerator class, for use in single-thread applications.
void insert(const CRenderizable::Ptr &newObject, const std::string &viewportName=std::string("main"))
Insert a new object into the scene, in the given viewport (by default, into the "main" viewport)...
void simulateBeaconReadings(const mrpt::poses::CPose3D &in_robotPose, const mrpt::poses::CPoint3D &in_sensorLocationOnRobot, mrpt::obs::CObservationBeaconRanges &out_Observations) const
Simulates a reading toward each of the beacons in the landmarks map, if any.
Functions for estimating the optimal transformation between two frames of references given measuremen...
void clear()
Clear the contents of this container.
static Ptr Create(Args &&... args)
const T max3(const T &A, const T &B, const T &C)
The class for storing individual "beacon landmarks" under a variety of 3D position PDF distributions...
void serializeFrom(mrpt::serialization::CArchive &in, uint8_t serial_version) override
Pure virtual method for reading (deserializing) from an abstract archive.
A gaussian distribution for 3D points.
void dumpToTextStream_map_specific(std::ostream &out) const override
size_t size() const
Returns the stored landmarks count.
CMatrixDynamic< double > CMatrixDouble
Declares a matrix of double numbers (non serializable).
void computeMatchingWith3DLandmarks(const mrpt::maps::CBeaconMap *otherMap, mrpt::tfest::TMatchingPairList &correspondences, float &correspondencesRatio, std::vector< bool > &otherCorrespondences) const
Perform a search for correspondences between "this" and another lansmarks map: Firsly, the landmarks' descriptor is used to find correspondences, then inconsistent ones removed by looking at their 3D poses.
mrpt::poses::CPointPDFGaussian m_locationGauss
The individual PDF, if m_typePDF=pdfGauss (publicly accesible for ease of use, but the CPointPDF inte...
int round(const T value)
Returns the closer integer (int) to x.