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>(
168 const size_t particleIndexForMap,
const CSensoryFrame& observation,
182 it != observation.
end(); ++it)
195 *particleData =
TPose2D(newPose);
199 CParticleList& old_particles,
const vector<TPose3D>& newParticles,
200 const vector<double>& newParticlesWeight,
201 const vector<size_t>& newParticlesDerivedFromIdx)
const
205 size_t(newParticlesWeight.size()),
size_t(newParticles.size()));
216 const size_t N = newParticles.size();
217 old_particles.resize(N);
218 for (
size_t i = 0; i < N; i++)
220 old_particles[i].log_w = newParticlesWeight[i];
221 old_particles[i].d =
TPose2D(newParticles[i]);
227 const int particlesCount,
const double x_min,
const double x_max,
228 const double y_min,
const double y_max,
const double phi_min,
229 const double phi_max)
237 std::vector<double> freeCells_x, freeCells_y;
239 unsigned int xIdx1, xIdx2;
240 unsigned int yIdx1, yIdx2;
242 freeCells_x.reserve(sizeX * sizeY);
243 freeCells_y.reserve(sizeX * sizeY);
246 xIdx1 = max(0, theMap->
x2idx(x_min));
249 if (x_max < theMap->getXMax())
250 xIdx2 =
min(sizeX - 1, theMap->
x2idx(x_max));
254 yIdx1 = max(0, theMap->
y2idx(y_min));
257 if (y_max < theMap->getYMax())
258 yIdx2 =
min(sizeY - 1, theMap->
y2idx(y_max));
262 for (
unsigned int x = xIdx1;
x <= xIdx2;
x++)
263 for (
unsigned int y = yIdx1;
y <= yIdx2;
y++)
264 if (theMap->
getCell(
x,
y) >= freeCellsThreshold)
266 freeCells_x.push_back(theMap->
idx2x(
x));
267 freeCells_y.push_back(theMap->
idx2y(
y));
270 nFreeCells = freeCells_x.size();
280 for (
size_t i = 0; i < M; i++)
This file contains the implementations of the template members declared in mrpt::slam::PF_implementat...
CParticleList m_particles
The array of particles.
Declares a virtual base class for all metric maps storage classes.
double computeObservationLikelihood(const mrpt::obs::CObservation *obs, const mrpt::poses::CPose3D &takenFrom)
Computes the log-likelihood of a given observation given an arbitrary robot 3D pose.
A class for storing an occupancy grid map.
float getResolution() const
Returns the resolution of the grid map.
float getYMin() const
Returns the "y" coordinate of top side of grid map.
float idx2y(const size_t cy) const
unsigned int getSizeX() const
Returns the horizontal size of grid map in cells count.
float getCell(int x, int y) const
Read the real valued [0,1] contents of a cell, given its index.
int x2idx(float x) const
Transform a coordinate value into a cell index.
unsigned int getSizeY() const
Returns the vertical size of grid map in cells count.
float getXMin() const
Returns the "x" coordinate of left side of grid map.
float idx2x(const size_t cx) const
Transform a cell index into a coordinate value.
Declares a class for storing a collection of robot actions.
Declares a class for storing a "sensory frame", a set of "observations" taken by the robot approximat...
const_iterator end() const
Returns a constant iterator to the end of the list of observations: this is an example of usage:
std::deque< CObservation::Ptr >::const_iterator const_iterator
You can use CSensoryFrame::begin to get a iterator to the first element.
const_iterator begin() const
Returns a constant iterator to the first observation: this is an example of usage:
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
Declares a class that represents a Probability Density Function (PDF) over a 2D pose (x,...
double drawUniform(const double Min, const double Max)
Generate a uniformly distributed pseudo-random number using the MT19937 algorithm,...
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...
virtual ~CMonteCarloLocalization2D()
Destructor.
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.
mrpt::math::TPose3D getLastPose(const size_t i, bool &is_valid_pose) const override
Return the robot pose for the i'th particle.
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
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.
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.
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.
void PF_SLAM_implementation_custom_update_particle_with_new_pose(mrpt::math::TPose2D *particleData, const mrpt::math::TPose3D &newPose) const override
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...
Option set for KLD algorithm.
double KLD_binSize_XY
Parameters for the KLD adaptive sample size algorithm (see Dieter Fox's papers), which is used only i...
void setLoggerName(const std::string &name)
Set the name of the COutputLogger instance.
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.
#define ASSERT_EQUAL_(__A, __B)
Assert comparing two values, reporting their actual values upon failure.
#define ASSERT_(f)
Defines an assertion mechanism.
#define THROW_EXCEPTION(msg)
int round(const T value)
Returns the closer integer (int) to x.
The namespace for Bayesian filtering algorithm: different particle filters and Kalman filter algorith...
This base provides a set of functions for maths stuff.
This namespace contains representation of robot actions and observations.
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
A namespace of pseudo-random numbers generators of diferent distributions.
CRandomGenerator & getRandomGenerator()
A static instance of a CRandomGenerator class, for use in single-thread applications.
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...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
The configuration of a particle filter.
size_t particlesCount() const override
double phi
Orientation (rads)
Lightweight 3D pose (three spatial coordinates, plus three angular coordinates).
double yaw
Yaw coordinate (rotation angle over Z axis).
TKLDParams KLD_params
Parameters for dynamic sample size, KLD method.
mrpt::maps::TMetricMapList metricMaps
[update stage] Alternative way (if metricMap==nullptr): A metric map is supplied for each particle: T...
mrpt::maps::CMetricMap * metricMap
[update stage] Must be set to a metric map used to estimate the likelihood of observations
Auxiliary structure used in KLD-sampling in particle filters.