29 #include <Eigen/Dense> 55 insertionOpts.loadFromConfigFile(
56 source, sectionNamePrefix +
string(
"_insertOpts"));
57 likelihoodOpts.loadFromConfigFile(
58 source, sectionNamePrefix +
string(
"_likelihoodOpts"));
62 std::ostream& out)
const 66 this->insertionOpts.dumpToTextStream(out);
67 this->likelihoodOpts.dumpToTextStream(out);
106 out << genericMapParams;
112 for (
const auto& it : *
this) out << it;
123 if (version >= 1)
in >> genericMapParams;
134 for (i = 0; i < n; i++) in >> m_beacons[i];
174 for (
auto& it_obs : o.sensedData)
177 beac = getBeaconByID(it_obs.beaconID);
179 if (beac !=
nullptr && it_obs.sensedDistance > 0 &&
180 !std::isnan(it_obs.sensedDistance))
182 float sensedRange = it_obs.sensedDistance;
187 sensor3D = robotPose3D + it_obs.sensorLocationOnRobot;
197 CPointPDFParticles::CParticleList::const_iterator it;
205 itLW = logWeights.begin(), itLL = logLiks.begin();
207 ++it, ++itLW, ++itLL)
210 it->d->x, it->d->y, it->d->z);
217 (sensedRange - expectedRange) /
218 likelihoodOptions.rangeStd);
224 if (logWeights.size())
226 logWeights, logLiks);
238 float varZ, varR =
square(likelihoodOptions.rangeStd);
248 float expectedRange =
266 -0.5 *
square(sensedRange - expectedRange) / varZ;
281 itLW = logWeights.begin(), itLL = logLiks.begin();
283 ++it, ++itLW, ++itLL)
287 varR =
square(likelihoodOptions.rangeStd);
288 double Ax = it->val.mean.x() - sensor3D.
x();
289 double Ay = it->val.mean.y() - sensor3D.
y();
290 double Az = it->val.mean.z() - sensor3D.z();
294 double expectedRange =
311 *itLL = -0.5 *
square(sensedRange - expectedRange) /
316 if (logWeights.size())
330 if (o.maxSensorDistance != o.minSensorDistance)
332 log(1.0 / (o.maxSensorDistance - o.minSensorDistance));
364 robotPose2D =
CPose2D(*robotPose);
365 robotPose3D = (*robotPose);
392 for (
const auto& it : o.sensedData)
394 CPoint3D sensorPnt(robotPose3D + it.sensorLocationOnRobot);
395 float sensedRange = it.sensedDistance;
396 unsigned int sensedID = it.beaconID;
398 CBeacon* beac = getBeaconByID(sensedID);
408 newBeac.
m_ID = sensedID;
410 if (insertionOptions.insertAsMonteCarlo)
417 size_t numParts =
round(
418 insertionOptions.MC_numSamplesPerMeter *
421 insertionOptions.minElevation_deg <=
422 insertionOptions.maxElevation_deg);
424 DEG2RAD(insertionOptions.minElevation_deg);
426 DEG2RAD(insertionOptions.maxElevation_deg);
428 for (
auto& m_particle :
436 sensedRange, likelihoodOptions.rangeStd);
438 sensorPnt.
x() +
R * cos(th) * cos(el);
440 sensorPnt.
y() +
R * sin(th) * cos(el);
441 m_particle.d->z = sensorPnt.z() +
R * sin(el);
458 m_beacons.push_back(newBeac);
473 double maxW = -1e308, sumW = 0;
479 p.d->x,
p.d->y,
p.d->z);
482 (sensedRange - expectedRange) /
483 likelihoodOptions.rangeStd);
484 maxW = max(
p.log_w, maxW);
485 sumW += exp(
p.log_w);
491 if (insertionOptions.MC_performResampling)
499 vector<double> log_ws;
500 vector<size_t> indxs;
504 CParticleFilterCapable::computeResampling(
505 CParticleFilter::prSystematic, log_ws,
514 (insertionOptions.minElevation_deg ==
515 insertionOptions.maxElevation_deg);
518 .MC_afterResamplingNoise;
521 CPointPDFParticles::CParticleList::iterator
556 (maxW - insertionOptions
557 .MC_thresholdNegligible))
581 double D1 = sqrt(COV(0, 0));
582 double D2 = sqrt(COV(1, 1));
583 double D3 = sqrt(COV(2, 2));
585 double mxVar =
max3(D1, D2, D3);
587 if (mxVar < insertionOptions.MC_maxStdToGauss)
600 if (insertionOptions.minElevation_deg ==
601 insertionOptions.maxElevation_deg)
621 float varR =
square(likelihoodOptions.rangeStd);
633 float y = sensedRange - expectedRange;
681 float varR =
square(likelihoodOptions.rangeStd);
690 double expectedRange =
694 double y = sensedRange - expectedRange;
699 double Ax = (
mode.val.mean.x() - sensorPnt.
x());
700 double Ay = (
mode.val.mean.y() - sensorPnt.
y());
701 double Az = (
mode.val.mean.z() - sensorPnt.z());
705 H.
asEigen() *= 1.0 / expectedRange;
714 mode.val.mean.x_incr(K(0, 0) *
y);
715 mode.val.mean.y_incr(K(1, 0) *
y);
716 mode.val.mean.z_incr(K(2, 0) *
y);
718 mode.val.cov = (Eigen::Matrix3d::Identity() -
720 mode.val.cov.asEigen();
727 max_w = max(max_w,
mode.log_w);
735 if (max_w - it_p->log_w >
736 insertionOptions.SOG_thresholdNegligible)
748 const auto [curCov, curMean] =
751 double D1 = sqrt(curCov(0, 0));
752 double D2 = sqrt(curCov(1, 1));
753 double D3 = sqrt(curCov(2, 2));
754 float maxDiag =
max3(D1, D2, D3);
799 CPose3D otherMapPose3D(otherMapPose);
803 const auto* otherMap2 =
static_cast<const CBeaconMap*
>(otherMap);
804 vector<bool> otherCorrespondences;
810 computeMatchingWith3DLandmarks(
811 otherMap2, correspondences, extraResults.correspondencesRatio,
812 otherCorrespondences);
823 for (
auto& m_beacon : m_beacons)
824 m_beacon.changeCoordinatesReference(newOrg);
836 changeCoordinatesReference(newOrg);
845 vector<bool>& otherCorrespondences)
const 849 TSequenceBeacons::const_iterator thisIt, otherIt;
850 size_t nThis, nOther;
854 vector<bool> thisLandmarkAssigned;
857 nThis = m_beacons.size();
861 thisLandmarkAssigned.resize(nThis,
false);
864 correspondences.clear();
865 otherCorrespondences.clear();
866 otherCorrespondences.resize(nOther,
false);
867 correspondencesRatio = 0;
869 for (k = 0, otherIt = anotherMap->
m_beacons.begin();
870 otherIt != anotherMap->
m_beacons.end(); ++otherIt, ++k)
872 for (j = 0, thisIt = m_beacons.begin(); thisIt != m_beacons.end();
876 if ((otherIt)->m_ID == (thisIt)->m_ID)
880 if (!thisLandmarkAssigned[j])
882 thisLandmarkAssigned[j] =
true;
885 otherCorrespondences[k] =
true;
889 CPoint3D mean_j = m_beacons[j].getMeanVal();
893 match.
this_z = mean_j.z();
901 correspondences.push_back(match);
910 correspondencesRatio =
911 2.0f * correspondences.size() /
static_cast<float>(nThis + nOther);
920 const string& file,
const char* style,
float confInterval)
const 926 if (!f)
return false;
930 f,
"%%-------------------------------------------------------\n");
931 os::fprintf(f,
"%% File automatically generated using the MRPT method:\n");
932 os::fprintf(f,
"%% 'CBeaconMap::saveToMATLABScript3D'\n");
936 f,
"%% Jose Luis Blanco Claraco, University of Malaga @ 2006\n");
939 f,
"%%-------------------------------------------------------\n\n");
943 std::vector<std::string> strs;
946 for (
const auto& m_beacon : m_beacons)
948 m_beacon.getAsMatlabDrawCommands(strs);
962 "\n----------- [CBeaconMap::TLikelihoodOptions] ------------ \n\n");
964 "rangeStd = %f\n", rangeStd);
974 rangeStd =
iniFile.read_float(section.c_str(),
"rangeStd", rangeStd);
980 "\n----------- [CBeaconMap::TInsertionOptions] ------------ \n\n");
983 "insertAsMonteCarlo = %c\n",
984 insertAsMonteCarlo ?
'Y' :
'N');
986 "minElevation_deg = %.03f\n", minElevation_deg);
988 "maxElevation_deg = %.03f\n", maxElevation_deg);
990 "MC_numSamplesPerMeter = %d\n",
991 MC_numSamplesPerMeter);
993 "MC_maxStdToGauss = %.03f\n", MC_maxStdToGauss);
995 "MC_thresholdNegligible = %.03f\n",
996 MC_thresholdNegligible);
998 "MC_performResampling = %c\n",
999 MC_performResampling ?
'Y' :
'N');
1001 "MC_afterResamplingNoise = %.03f\n",
1002 MC_afterResamplingNoise);
1004 "SOG_thresholdNegligible = %.03f\n",
1005 SOG_thresholdNegligible);
1007 "SOG_maxDistBetweenGaussians = %.03f\n",
1008 SOG_maxDistBetweenGaussians);
1010 "SOG_separationConstant = %.03f\n",
1011 SOG_separationConstant);
1028 MC_thresholdNegligible,
float,
iniFile, section.c_str());
1031 MC_afterResamplingNoise,
float,
iniFile, section.c_str());
1033 SOG_thresholdNegligible,
float,
iniFile, section.c_str());
1035 SOG_maxDistBetweenGaussians,
float,
iniFile, section.c_str());
1037 SOG_separationConstant,
float,
iniFile, section.c_str());
1048 const CPose3D& in_robotPose,
const CPoint3D& in_sensorLocationOnRobot,
1051 TSequenceBeacons::const_iterator it;
1057 point3D = in_robotPose + in_sensorLocationOnRobot;
1063 for (it = m_beacons.begin(); it != m_beacons.end(); ++it)
1065 it->getMean(beacon3D);
1082 out_Observations.
sensedData.push_back(newMeas);
1092 const string& filNamePrefix)
const 1097 string fil1(filNamePrefix +
string(
"_3D.m"));
1098 saveToMATLABScript3D(fil1);
1103 std::make_shared<opengl::CSetOfObjects>();
1105 getAs3DObject(obj3D);
1107 -100.0f, 100.0f, -100.0f, 100.0f, .0f, 1.f);
1112 string fil2(filNamePrefix +
string(
"_3D.3Dscene"));
1116 string fil3(filNamePrefix +
string(
"_covs.txt"));
1117 saveToTextFile(fil3);
1120 string fil4(filNamePrefix +
string(
"_population.txt"));
1122 FILE* f =
os::fopen(fil4.c_str(),
"wt");
1125 size_t nParts = 0, nGaussians = 0;
1127 for (
const auto& m_beacon : m_beacons)
1129 switch (m_beacon.m_typePDF)
1132 nParts += m_beacon.m_locationMC.size();
1135 nGaussians += m_beacon.m_locationSOG.size();
1144 f,
"%u %u", static_cast<unsigned>(nParts),
1145 static_cast<unsigned>(nGaussians));
1160 if (!genericMapParams.enableSaveAs3DObject)
return;
1168 for (
const auto& m_beacon : m_beacons) m_beacon.getAs3DObject(outObj);
1201 otherMap = static_cast<const CBeaconMap*>(otherMap2);
1203 if (!otherMap)
return 0;
1206 vector<bool> otherCorrespondences;
1207 float out_corrsRatio;
1213 computeMatchingWith3DLandmarks(
1214 &modMap, matchList, out_corrsRatio, otherCorrespondences);
1216 return out_corrsRatio;
1226 for (
const auto& m_beacon : m_beacons)
1227 if (m_beacon.m_ID ==
id)
return &m_beacon;
1236 for (
auto& m_beacon : m_beacons)
1237 if (m_beacon.m_ID ==
id)
return &m_beacon;
1253 for (
const auto& m_beacon : m_beacons)
1255 const auto [C,
p] = m_beacon.getCovarianceAndMean();
1258 float D2 = C(0, 0) * C(1, 1) -
square(C(0, 1));
1260 f,
"%i %f %f %f %e %e %e %e %e %e %e %e\n",
1261 static_cast<int>(m_beacon.m_ID),
p.x(),
p.y(),
p.z(), C(0, 0),
1262 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.
double drawUniform(const double Min, const double Max)
Generate a uniformly distributed pseudo-random number using the MT19937 algorithm, scaled to the selected range.
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.
#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.
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.
double DEG2RAD(const double x)
Degrees to radians.
The namespace for Bayesian filtering algorithm: different particle filters and Kalman filter algorith...
const T max3(const T &A, const T &B, const T &C)
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].
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 (a scalar) = H^t * C * H (with a row vector H and a symmetric matrix C)
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.
GLsizei GLsizei GLuint * obj
mrpt::poses::CPointPDFSOG m_locationSOG
The individual PDF, if m_typePDF=pdfSOG (publicly accesible for ease of use, but the CPointPDF interf...
double drawGaussian1D(const double mean, const double std)
Generate a normally distributed pseudo-random number.
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.
T square(const T x)
Inline function for the square of a number.
#define ASSERT_(f)
Defines an assertion mechanism.
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...
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)
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...
GLsizei const GLchar ** string
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).
#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).
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.
std::string format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
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...
GLsizei GLsizei GLchar * source
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.
static void generateRingSOG(const 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), const float &maxDistanceFromCenter=0)
This static method returns a SOG with ring-shape (or as a 3D sphere) that can be used to initialize a...
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.
unsigned __int32 uint32_t
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...
GLenum const GLfloat * params
void clear()
Clear the contents of this container.
static Ptr Create(Args &&... args)
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).
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.
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.