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;
123 if (version >= 1)
in >> genericMapParams;
134 for (i = 0; i < n; i++) in >> m_beacons[i];
180 beac = getBeaconByID(it_obs->beaconID);
182 if (beac !=
nullptr && it_obs->sensedDistance > 0 &&
183 !std::isnan(it_obs->sensedDistance))
185 float sensedRange = it_obs->sensedDistance;
190 sensor3D = robotPose3D + it_obs->sensorLocationOnRobot;
208 itLW = logWeights.begin(), itLL = logLiks.begin();
210 ++it, ++itLW, ++itLL)
213 it->d->x, it->d->y, it->d->z);
220 (sensedRange - expectedRange) /
221 likelihoodOptions.rangeStd);
227 if (logWeights.size())
229 logWeights, logLiks);
241 float varZ, varR =
square(likelihoodOptions.rangeStd);
251 float expectedRange =
253 H *= 1.0 / expectedRange;
268 -0.5 *
square(sensedRange - expectedRange) / varZ;
283 itLW = logWeights.begin(), itLL = logLiks.begin();
285 ++it, ++itLW, ++itLL)
289 varR =
square(likelihoodOptions.rangeStd);
290 double Ax = it->val.mean.x() - sensor3D.
x();
291 double Ay = it->val.mean.y() - sensor3D.
y();
292 double Az = it->val.mean.z() - sensor3D.z();
296 double expectedRange =
301 varZ = H.multiply_HCHt_scalar(it->val.cov);
311 *itLL = -0.5 *
square(sensedRange - expectedRange) /
316 if (logWeights.size())
364 robotPose2D =
CPose2D(*robotPose);
365 robotPose3D = (*robotPose);
397 CPoint3D sensorPnt(robotPose3D + it->sensorLocationOnRobot);
398 float sensedRange = it->sensedDistance;
399 unsigned int sensedID = it->beaconID;
401 CBeacon* beac = getBeaconByID(sensedID);
411 newBeac.
m_ID = sensedID;
413 if (insertionOptions.insertAsMonteCarlo)
420 size_t numParts =
round(
421 insertionOptions.MC_numSamplesPerMeter *
424 insertionOptions.minElevation_deg <=
425 insertionOptions.maxElevation_deg);
427 DEG2RAD(insertionOptions.minElevation_deg);
429 DEG2RAD(insertionOptions.maxElevation_deg);
441 sensedRange, likelihoodOptions.rangeStd);
442 itP->d->x = sensorPnt.
x() +
R * cos(th) * cos(el);
443 itP->d->y = sensorPnt.
y() +
R * sin(th) * cos(el);
444 itP->d->z = sensorPnt.z() +
R * sin(el);
461 m_beacons.push_back(newBeac);
476 double maxW = -1e308, sumW = 0;
482 p.d->x,
p.d->y,
p.d->z);
485 (sensedRange - expectedRange) /
486 likelihoodOptions.rangeStd);
487 maxW = max(
p.log_w, maxW);
488 sumW += exp(
p.log_w);
494 if (insertionOptions.MC_performResampling)
502 vector<double> log_ws;
503 vector<size_t> indxs;
507 CParticleFilterCapable::computeResampling(
508 CParticleFilter::prSystematic, log_ws,
517 (insertionOptions.minElevation_deg ==
518 insertionOptions.maxElevation_deg);
521 .MC_afterResamplingNoise;
559 (maxW - insertionOptions
560 .MC_thresholdNegligible))
585 double D1 = sqrt(COV(0, 0));
586 double D2 = sqrt(COV(1, 1));
587 double D3 = sqrt(COV(2, 2));
589 double mxVar =
max3(D1, D2, D3);
591 if (mxVar < insertionOptions.MC_maxStdToGauss)
604 if (insertionOptions.minElevation_deg ==
605 insertionOptions.maxElevation_deg)
625 float varR =
square(likelihoodOptions.rangeStd);
637 float y = sensedRange - expectedRange;
656 varZ = H.multiply_HCHt_scalar(
670 (Eigen::Matrix<double, 3, 3>::Identity() -
683 float varR =
square(likelihoodOptions.rangeStd);
692 double expectedRange =
696 double y = sensedRange - expectedRange;
701 double Ax = (
mode.val.mean.x() - sensorPnt.
x());
702 double Ay = (
mode.val.mean.y() - sensorPnt.
y());
703 double Az = (
mode.val.mean.z() - sensorPnt.z());
707 H *= 1.0 / expectedRange;
708 varZ = H.multiply_HCHt_scalar(
mode.val.cov);
711 K.multiply(
mode.val.cov, H.transpose());
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);
720 (Eigen::Matrix3d::Identity() - K * H) *
728 max_w = max(max_w,
mode.log_w);
736 if (max_w - it_p->log_w >
737 insertionOptions.SOG_thresholdNegligible)
754 double D1 = sqrt(curCov(0, 0));
755 double D2 = sqrt(curCov(1, 1));
756 double D3 = sqrt(curCov(2, 2));
757 float maxDiag =
max3(D1, D2, D3);
802 CPose3D otherMapPose3D(otherMapPose);
807 vector<bool> otherCorrespondences;
813 computeMatchingWith3DLandmarks(
814 otherMap2, correspondences, extraResults.correspondencesRatio,
815 otherCorrespondences);
826 for (
iterator lm = m_beacons.begin(); lm != m_beacons.end(); ++lm)
827 lm->changeCoordinatesReference(newOrg);
839 changeCoordinatesReference(newOrg);
848 vector<bool>& otherCorrespondences)
const 853 size_t nThis, nOther;
857 vector<bool> thisLandmarkAssigned;
860 nThis = m_beacons.size();
864 thisLandmarkAssigned.resize(nThis,
false);
867 correspondences.clear();
868 otherCorrespondences.clear();
869 otherCorrespondences.resize(nOther,
false);
870 correspondencesRatio = 0;
872 for (k = 0, otherIt = anotherMap->
m_beacons.begin();
873 otherIt != anotherMap->
m_beacons.end(); ++otherIt, ++k)
875 for (j = 0, thisIt = m_beacons.begin(); thisIt != m_beacons.end();
879 if ((otherIt)->m_ID == (thisIt)->m_ID)
883 if (!thisLandmarkAssigned[j])
885 thisLandmarkAssigned[j] =
true;
888 otherCorrespondences[k] =
true;
892 CPoint3D mean_j = m_beacons[j].getMeanVal();
896 match.
this_z = mean_j.z();
904 correspondences.push_back(match);
913 correspondencesRatio =
914 2.0f * correspondences.size() /
static_cast<float>(nThis + nOther);
923 const string& file,
const char* style,
float confInterval)
const 929 if (!f)
return false;
933 f,
"%%-------------------------------------------------------\n");
934 os::fprintf(f,
"%% File automatically generated using the MRPT method:\n");
935 os::fprintf(f,
"%% 'CBeaconMap::saveToMATLABScript3D'\n");
939 f,
"%% Jose Luis Blanco Claraco, University of Malaga @ 2006\n");
942 f,
"%%-------------------------------------------------------\n\n");
946 std::vector<std::string> strs;
949 for (
const_iterator it = m_beacons.begin(); it != m_beacons.end(); ++it)
951 it->getAsMatlabDrawCommands(strs);
965 "\n----------- [CBeaconMap::TLikelihoodOptions] ------------ \n\n");
967 "rangeStd = %f\n", rangeStd);
977 rangeStd =
iniFile.read_float(section.c_str(),
"rangeStd", rangeStd);
983 "\n----------- [CBeaconMap::TInsertionOptions] ------------ \n\n");
986 "insertAsMonteCarlo = %c\n",
987 insertAsMonteCarlo ?
'Y' :
'N');
989 "minElevation_deg = %.03f\n", minElevation_deg);
991 "maxElevation_deg = %.03f\n", maxElevation_deg);
993 "MC_numSamplesPerMeter = %d\n",
994 MC_numSamplesPerMeter);
996 "MC_maxStdToGauss = %.03f\n", MC_maxStdToGauss);
998 "MC_thresholdNegligible = %.03f\n",
999 MC_thresholdNegligible);
1001 "MC_performResampling = %c\n",
1002 MC_performResampling ?
'Y' :
'N');
1004 "MC_afterResamplingNoise = %.03f\n",
1005 MC_afterResamplingNoise);
1007 "SOG_thresholdNegligible = %.03f\n",
1008 SOG_thresholdNegligible);
1010 "SOG_maxDistBetweenGaussians = %.03f\n",
1011 SOG_maxDistBetweenGaussians);
1013 "SOG_separationConstant = %.03f\n",
1014 SOG_separationConstant);
1031 MC_thresholdNegligible,
float,
iniFile, section.c_str());
1034 MC_afterResamplingNoise,
float,
iniFile, section.c_str());
1036 SOG_thresholdNegligible,
float,
iniFile, section.c_str());
1038 SOG_maxDistBetweenGaussians,
float,
iniFile, section.c_str());
1040 SOG_separationConstant,
float,
iniFile, section.c_str());
1051 const CPose3D& in_robotPose,
const CPoint3D& in_sensorLocationOnRobot,
1060 point3D = in_robotPose + in_sensorLocationOnRobot;
1066 for (it = m_beacons.begin(); it != m_beacons.end(); ++it)
1068 it->getMean(beacon3D);
1085 out_Observations.
sensedData.push_back(newMeas);
1095 const string& filNamePrefix)
const 1100 string fil1(filNamePrefix +
string(
"_3D.m"));
1101 saveToMATLABScript3D(fil1);
1106 mrpt::make_aligned_shared<opengl::CSetOfObjects>();
1108 getAs3DObject(obj3D);
1110 -100.0f, 100.0f, -100.0f, 100.0f, .0f, 1.f);
1115 string fil2(filNamePrefix +
string(
"_3D.3Dscene"));
1119 string fil3(filNamePrefix +
string(
"_covs.txt"));
1123 string fil4(filNamePrefix +
string(
"_population.txt"));
1125 FILE* f =
os::fopen(fil4.c_str(),
"wt");
1128 size_t nParts = 0, nGaussians = 0;
1131 it != m_beacons.end(); ++it)
1133 switch (it->m_typePDF)
1136 nParts += it->m_locationMC.size();
1139 nGaussians += it->m_locationSOG.size();
1148 f,
"%u %u", static_cast<unsigned>(nParts),
1149 static_cast<unsigned>(nGaussians));
1164 if (!genericMapParams.enableSaveAs3DObject)
return;
1172 for (
const_iterator it = m_beacons.begin(); it != m_beacons.end(); ++it)
1173 it->getAs3DObject(outObj);
1206 otherMap = static_cast<const CBeaconMap*>(otherMap2);
1208 if (!otherMap)
return 0;
1211 vector<bool> otherCorrespondences;
1212 float out_corrsRatio;
1218 computeMatchingWith3DLandmarks(
1219 &modMap, matchList, out_corrsRatio, otherCorrespondences);
1221 return out_corrsRatio;
1231 for (
const_iterator it = m_beacons.begin(); it != m_beacons.end(); ++it)
1232 if (it->m_ID ==
id)
return &(*it);
1241 for (
iterator it = m_beacons.begin(); it != m_beacons.end(); ++it)
1242 if (it->m_ID ==
id)
return &(*it);
1261 for (
const_iterator it = m_beacons.begin(); it != m_beacons.end(); ++it)
1263 it->getCovarianceAndMean(C,
p);
1266 float D2 = C(0, 0) * C(1, 1) -
square(C(0, 1));
1268 f,
"%i %f %f %f %e %e %e %e %e %e %e %e\n",
1269 static_cast<int>(it->m_ID),
p.x(),
p.y(),
p.z(), C(0, 0), C(1, 1),
1270 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.
double x() const
Common members of all points & poses classes.
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).
void getWeights(std::vector< double > &out_logWeights) const
Returns a vector with the sequence of the logaritmic weights of all the samples.
double distanceTo(const CPoseOrPoint< OTHERCLASS > &b) const
Returns the Euclidean distance to another pose/point:
void y_incr(const double v)
#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)
This must be inserted in 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].
EIGEN_STRONG_INLINE iterator begin()
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction...
Declares a class derived from "CObservation" that represents one (or more) range measurements to labe...
void saveToTextFile(const std::string &file, mrpt::math::TMatrixTextFileFormat fileFormat=mrpt::math::MATRIX_FORMAT_ENG, bool appendMRPTHeader=false, const std::string &userHeader=std::string()) const
Save matrix to a text file, compatible with MATLAB text format (see also the methods of matrix classe...
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.
virtual void internal_clear() override
Internal method called by clear()
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.
#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.
A numeric matrix of compile-time fixed size.
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.
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.
CMatrixTemplateNumeric< double > CMatrixDouble
Declares a matrix of double numbers (non serializable).
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.
void x_incr(const double v)
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.
void saveToTextFile(const std::string &fil) const
Save a text file with a row per beacon, containing this 11 elements:
void getCovarianceAndMean(mrpt::math::CMatrixDouble33 &cov, CPoint3D &mean_point) const override
Returns an estimate of the point covariance matrix (3x3 cov matrix) and the mean, both at once...
TTypePDF m_typePDF
Which one of the different 3D point PDF is currently used in this object: montecarlo, gaussian, or a sum of gaussians.
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...
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.
virtual const mrpt::rtti::TRuntimeClassId * GetRuntimeClass() const override
Returns information about the class of an object in runtime.
virtual 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.
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
virtual bool internal_insertObservation(const mrpt::obs::CObservation *obs, const mrpt::poses::CPose3D *robotPose=nullptr) override
Internal method called by insertObservation()
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.
std::deque< CBeacon >::const_iterator const_iterator
void clear()
Clear all the particles (free memory)
double internal_computeObservationLikelihood(const mrpt::obs::CObservation *obs, const mrpt::poses::CPose3D &takenFrom) override
Internal method called by computeObservationLikelihood()
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 getCovarianceAndMean(mrpt::math::CMatrixDouble33 &cov, CPoint3D &mean_point) const override
Returns an estimate of the point covariance matrix (3x3 cov matrix) and the mean, both at once...
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)
const Scalar * const_iterator
The class for storing individual "beacon landmarks" under a variety of 3D position PDF distributions...
std::deque< CBeacon >::iterator iterator
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.
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.
double distance3DTo(double ax, double ay, double az) const
Returns the 3D distance from this pose/point to a 3D point.
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.