44     const TPose3D* newPoseToBeInserted)
    47     if (newPoseToBeInserted)
    70 CMonteCarloLocalization2D::CMonteCarloLocalization2D(
size_t M)
    78     const size_t i, 
bool& is_valid_pose)
 const   105     PF_SLAM_implementation_pfStandardProposal<mrpt::slam::detail::TPoseBin2D>(
   156     PF_SLAM_implementation_pfAuxiliaryPFOptimal<mrpt::slam::detail::TPoseBin2D>(
   169         const size_t particleIndexForMap, 
const CSensoryFrame& observation,
   181     for (
const auto& it : observation)
   182         ret += map->computeObservationLikelihood(
   194     *particleData = 
TPose2D(newPose);
   198     CParticleList& old_particles, 
const vector<TPose3D>& newParticles,
   199     const vector<double>& newParticlesWeight,
   200     [[maybe_unused]] 
const vector<size_t>& newParticlesDerivedFromIdx)
 const   203         size_t(newParticlesWeight.size()), 
size_t(newParticles.size()));
   214     const size_t N = newParticles.size();
   215     old_particles.resize(N);
   216     for (
size_t i = 0; i < N; i++)
   218         old_particles[i].log_w = newParticlesWeight[i];
   219         old_particles[i].d = 
TPose2D(newParticles[i]);
   225     const int particlesCount, 
const double x_min, 
const double x_max,
   226     const double y_min, 
const double y_max, 
const double phi_min,
   227     const double phi_max)
   235     std::vector<double> freeCells_x, freeCells_y;
   237     unsigned int xIdx1, xIdx2;
   238     unsigned int yIdx1, yIdx2;
   240     freeCells_x.reserve(sizeX * sizeY);
   241     freeCells_y.reserve(sizeX * sizeY);
   244         xIdx1 = max(0, theMap->
x2idx(x_min));
   247     if (x_max < theMap->getXMax())
   248         xIdx2 = min(sizeX - 1, theMap->
x2idx(x_max));
   252         yIdx1 = max(0, theMap->
y2idx(y_min));
   255     if (y_max < theMap->getYMax())
   256         yIdx2 = min(sizeY - 1, theMap->
y2idx(y_max));
   260     for (
unsigned int x = xIdx1; x <= xIdx2; x++)
   261         for (
unsigned int y = yIdx1; y <= yIdx2; y++)
   262             if (theMap->
getCell(x, y) >= freeCellsThreshold)
   264                 freeCells_x.push_back(theMap->
idx2x(x));
   265                 freeCells_y.push_back(theMap->
idx2y(y));
   268     nFreeCells = freeCells_x.size();
   277     for (
size_t i = 0; i < M; i++)
 A namespace of pseudo-random numbers generators of diferent distributions. 
 
void prediction_and_update_pfStandardProposal(const mrpt::obs::CActionCollection *action, const mrpt::obs::CSensoryFrame *observation, const bayes::CParticleFilter::TParticleFilterOptions &PF_options) override
Update the m_particles, predicting the posterior of robot pose and map after a movement command...
 
float getYMin() const
Returns the "y" coordinate of top side of grid map. 
 
void resetUniformFreeSpace(mrpt::maps::COccupancyGridMap2D *theMap, const double freeCellsThreshold=0.7, const int particlesCount=-1, const double x_min=-1e10f, const double x_max=1e10f, const double y_min=-1e10f, const double y_max=1e10f, const double phi_min=-M_PI, const double phi_max=M_PI)
Reset the PDF to an uniformly distributed one, but only in the free-space of a given 2D occupancy-gri...
 
float getResolution() const
Returns the resolution of the grid map. 
 
#define THROW_EXCEPTION(msg)
 
CParticleList m_particles
The array of particles. 
 
~CMonteCarloLocalization2D() override
Destructor. 
 
The namespace for Bayesian filtering algorithm: different particle filters and Kalman filter algorith...
 
void PF_SLAM_implementation_pfAuxiliaryPFStandard(const mrpt::obs::CActionCollection *actions, const mrpt::obs::CSensoryFrame *sf, const mrpt::bayes::CParticleFilter::TParticleFilterOptions &PF_options, const TKLDParams &KLD_options)
A generic implementation of the PF method "prediction_and_update_pfAuxiliaryPFStandard" (Auxiliary pa...
 
This file contains the implementations of the template members declared in mrpt::slam::PF_implementat...
 
Option set for KLD algorithm. 
 
TMonteCarloLocalizationParams options
MCL parameters. 
 
void PF_SLAM_implementation_replaceByNewParticleSet(CParticleList &old_particles, const std::vector< mrpt::math::TPose3D > &newParticles, const std::vector< double > &newParticlesWeight, const std::vector< size_t > &newParticlesDerivedFromIdx) const override
 
mrpt::maps::TMetricMapList metricMaps
[update stage] Alternative way (if metricMap==nullptr): A metric map is supplied for each particle: T...
 
double yaw
Yaw coordinate (rotation angle over Z axis). 
 
mrpt::maps::CMetricMap * metricMap
[update stage] Must be set to a metric map used to estimate the likelihood of observations ...
 
Declares a class for storing a collection of robot actions. 
 
size_t particlesCount() const override
 
void PF_SLAM_implementation_custom_update_particle_with_new_pose(mrpt::math::TPose2D *particleData, const mrpt::math::TPose3D &newPose) const override
 
#define ASSERT_(f)
Defines an assertion mechanism. 
 
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 base provides a set of functions for maths stuff. 
 
float getXMin() const
Returns the "x" coordinate of left side of grid map. 
 
#define ASSERT_EQUAL_(__A, __B)
Assert comparing two values, reporting their actual values upon failure. 
 
float idx2x(const size_t cx) const
Transform a cell index into a coordinate value. 
 
void setLoggerName(const std::string &name)
Set the name of the COutputLogger instance. 
 
This namespace contains representation of robot actions and observations. 
 
void prediction_and_update_pfAuxiliaryPFOptimal(const mrpt::obs::CActionCollection *action, const mrpt::obs::CSensoryFrame *observation, const bayes::CParticleFilter::TParticleFilterOptions &PF_options) override
Update the m_particles, predicting the posterior of robot pose and map after a movement command...
 
Declares a class for storing a "sensory frame", a set of "observations" taken by the robot approximat...
 
unsigned int getSizeX() const
Returns the horizontal size of grid map in cells count. 
 
double KLD_binSize_XY
Parameters for the KLD adaptive sample size algorithm (see Dieter Fox's papers), which is used only i...
 
Declares a class that represents a Probability Density Function (PDF) over a 2D pose (x...
 
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
 
Auxiliary structure used in KLD-sampling in particle filters. 
 
A class for storing an occupancy grid map. 
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. 
 
double PF_SLAM_computeObservationLikelihoodForParticle(const mrpt::bayes::CParticleFilter::TParticleFilterOptions &PF_options, const size_t particleIndexForMap, const mrpt::obs::CSensoryFrame &observation, const mrpt::poses::CPose3D &x) const override
Evaluate the observation likelihood for one particle at a given location. 
 
mrpt::math::TPose3D getLastPose(const size_t i, bool &is_valid_pose) const override
Return the robot pose for the i'th particle. 
 
Declares a virtual base class for all metric maps storage classes. 
 
A class used to store a 3D pose (a 3D translation + a rotation in 3D). 
 
The configuration of a particle filter. 
 
Lightweight 3D pose (three spatial coordinates, plus three angular coordinates). 
 
float idx2y(const size_t cy) const
 
void KLF_loadBinFromParticle(mrpt::slam::detail::TPoseBin2D &outBin, const TKLDParams &opts, const CMonteCarloLocalization2D::CParticleDataContent *currentParticleValue, const TPose3D *newPoseToBeInserted)
Fills out a "TPoseBin2D" variable, given a path hypotesis and (if not set to nullptr) a new pose appe...
 
unsigned int getSizeY() const
Returns the vertical size of grid map in cells count. 
 
CRandomGenerator & getRandomGenerator()
A static instance of a CRandomGenerator class, for use in single-thread applications. 
 
void prediction_and_update_pfAuxiliaryPFStandard(const mrpt::obs::CActionCollection *action, const mrpt::obs::CSensoryFrame *observation, const bayes::CParticleFilter::TParticleFilterOptions &PF_options) override
Update the m_particles, predicting the posterior of robot pose and map after a movement command...
 
int x2idx(float x) const
Transform a coordinate value into a cell index. 
 
double phi
Orientation (rads) 
 
float getCell(int x, int y) const
Read the real valued [0,1] contents of a cell, given its index. 
 
TKLDParams KLD_params
Parameters for dynamic sample size, KLD method. 
 
for(unsigned int i=0;i< NUM_IMGS;i++)
 
int round(const T value)
Returns the closer integer (int) to x.