34 initializationOptions.PF_options,
35 initializationOptions.mapsInitializers,
36 initializationOptions.predictionOptions),
37 m_PF_options(initializationOptions.PF_options),
38 insertionLinDistance(initializationOptions.insertionLinDistance),
39 insertionAngDistance(initializationOptions.insertionAngDistance),
40 localizeLinDistance(initializationOptions.localizeLinDistance),
41 localizeAngDistance(initializationOptions.localizeAngDistance),
42 odoIncrementSinceLastLocalization(),
43 odoIncrementSinceLastMapUpdate()
85 std::lock_guard<std::mutex> csl(
89 static CPose2D nullPose(0, 0, 0);
107 std::lock_guard<std::mutex> csl(
119 "processActionObservation(): Input action is " 120 "CActionRobotMovement3D=" 121 << act3D->poseChange.getMeanVal().asString());
128 "processActionObservation(): Input action is " 129 "CActionRobotMovement2D=" 130 << act2D->poseChange->getMeanVal().asString());
146 bool do_localization =
163 for (
auto& o : observations)
164 if (o->GetRuntimeClass() == *itCl)
166 do_map_update =
true;
167 do_localization =
true;
171 if (do_map_update) do_localization =
true;
174 "do_map_update=%s do_localization=%s", do_map_update ?
"YES" :
"NO",
175 do_localization ?
"YES" :
"NO"));
203 act2D->motionModelConfiguration);
210 "odoIncrementSinceLastLocalization before resetting = " 228 poseEstimation.
getMean(meanPose);
233 "New pose=" << estPos << std::endl
234 <<
"New ESS:" <<
mapPDF.
ESS() << std::endl);
236 " STDs: x=%2.3f y=%2.3f z=%.03f yaw=%2.3fdeg\n",
237 sqrt(
cov(0, 0)), sqrt(
cov(1, 1)), sqrt(
cov(2, 2)),
254 "**No map was updated** after inserting a CSensoryFrame with " 255 << observations.size());
268 m_particle.d->mapTillNow.auxParticleFilterCleanUp();
274 "Split initialize() in two, one generic without pose, one with " 275 "particles-based PDF");
284 "[initialize] Called with " << initialMap.
size()
285 <<
" nodes in fixed map");
289 std::lock_guard<std::mutex> csl(
297 else if (!initialMap.
empty())
300 curPose = initialMap.
rbegin()->first->getMeanVal();
318 for (
auto&
p : posePDF->m_particles)
330 std::deque<TPose3D>& outPath)
const 375 std::deque<TPose3D> path;
376 unsigned int imgHeight = 0;
385 unsigned int bestPath = 0;
386 double bestPathLik = -1;
387 for (i = 0; i < M; i++)
400 bool alreadyCopiedImage =
false;
406 if (!alreadyCopiedImage)
412 g->getAsImage(imgGrid);
418 int x1 = 0, x2 = 0, y1 = 0, y2 = 0;
419 float x_min =
g->getXMin();
420 float y_min =
g->getYMin();
421 float resolution =
g->getResolution();
426 for (i = 0; i <= M; i++)
428 if (i != bestPath || i == M)
432 size_t nPoses = path.size();
435 x2 =
round((path[0].
x - x_min) / resolution);
436 y2 =
round((path[0].
y - y_min) / resolution);
439 for (
size_t j = 0; j < nPoses; j++)
446 x2 =
round((path[j].
x - x_min) / resolution);
447 y2 =
round((path[j].
y - y_min) / resolution);
451 x1,
round((imgHeight - 1) - y1), x2,
452 round((imgHeight - 1) - y2),
454 :
TColor(0x50, 0x50, 0x50),
483 img.saveToFile(file);
510 : insertionAngDistance(
DEG2RAD(30)),
512 localizeAngDistance(
DEG2RAD(10)),
524 std::ostream& out)
const 527 "\n----------- [CMetricMapBuilderRBPF::TConstructionOptions] " 528 "------------ \n\n");
531 "insertionLinDistance = %f m\n",
534 "insertionAngDistance = %f deg\n",
537 "localizeLinDistance = %f m\n",
540 "localizeAngDistance = %f deg\n",
543 "verbosity_level = %s\n",
548 PF_options.dumpToTextStream(out);
551 " Now showing 'mapsInitializers' and 'predictionOptions':\n");
554 mapsInitializers.dumpToTextStream(out);
555 predictionOptions.dumpToTextStream(out);
566 PF_options.loadFromConfigFile(
iniFile, section);
577 section,
"verbosity_level", verbosity_level);
579 mapsInitializers.loadFromConfigFile(
iniFile, section);
580 predictionOptions.loadFromConfigFile(
iniFile, section);
bool isLoggingLevelVisible(VerbosityLevel level) const
mrpt::math::TPose3D asTPose() const
void clear(const mrpt::poses::CPose2D &initialPose)
Clear all elements of the maps, and restore all paths to a single starting pose.
mrpt::poses::CPose3DPDFGaussian poseChange
The 3D pose change probabilistic estimation.
bool empty() const
Returns size()!=0.
#define MRPT_LOG_DEBUG(_STRING)
Use: MRPT_LOG_DEBUG("message");
CPose3D mean
The mean value.
This virtual class defines the interface of any object accepting drawing primitives on it...
VerbosityLevel
Enumeration of available verbosity levels.
double RAD2DEG(const double x)
Radians to degrees.
bool observationsInserted
Whether the SF has been inserted in the metric maps.
CMetricMapBuilderRBPF & operator=(const CMetricMapBuilderRBPF &src)
Copy Operator.
const mrpt::maps::CMultiMetricMap * getCurrentlyBuiltMetricMap() const override
Returns the map built so far.
const CMultiMetricMap * getCurrentMostLikelyMetricMap() const
Returns a pointer to the current most likely map (associated to the most likely particle) ...
mrpt::poses::CPose3D odoIncrementSinceLastMapUpdate
Traveled distance since last map update.
#define MRPT_LOAD_HERE_CONFIG_VAR_DEGREES_NO_DEFAULT( variableName, variableType, targetVariable, configFileObject, sectionNameStr)
This class stores a sequence of <Probabilistic Pose,SensoryFrame> pairs, thus a "metric map" can be t...
CParticleList m_particles
The array of particles.
float insertionLinDistance
Distances (linear and angular) for inserting a new observation into the map.
double DEG2RAD(const double x)
Degrees to radians.
The namespace for Bayesian filtering algorithm: different particle filters and Kalman filter algorith...
float localizeLinDistance
Distances (linear and angular) for updating the robot pose estimate (and particles weighs...
mrpt::rtti::CListOfClasses alwaysInsertByClass
A list of observation classes (derived from mrpt::obs::CObservation) which will be always inserted in...
void drawImage(int x, int y, const mrpt::img::CImage &img) override
Draws an image as a bitmap at a given position.
void saveCurrentPathEstimationToTextFile(const std::string &fil)
A logging utility: saves the current path estimation for each particle in a text file (a row per part...
double ESS() const override
Returns the normalized ESS (Estimated Sample Size), in the range [0,1].
MRPT_TODO("Split initialize() in two, one generic without pose, one with " "particles-based PDF")
size_t getHeight() const override
Returns the height of the image in pixels.
double yaw() const
Get the YAW angle (in radians)
const_reverse_iterator rbegin() const
double getCurrentJointEntropy()
void saveCurrentEstimationToImage(const std::string &file, bool formatEMF_BMP=true) override
A useful method for debugging: the current map (and/or poses) estimation is dumped to an image file...
void initialize(const mrpt::maps::CSimpleMap &initialMap=mrpt::maps::CSimpleMap(), const mrpt::poses::CPosePDF *x0=nullptr) override
Initialize the method, starting with a known location PDF "x0"(if supplied, set to nullptr to left un...
void computeFromOdometry(const mrpt::poses::CPose2D &odometryIncrement, const TMotionModelOptions &options)
Computes the PDF of the pose increment from an odometry reading and according to the given motion mod...
GLsizei GLsizei GLuint * obj
#define MRPT_LOG_WARN_STREAM(__CONTENTS)
Declares a class for storing a collection of robot actions.
void getEstimatedPosePDF(mrpt::poses::CPose3DPDFParticles &out_estimation) const
Returns the current estimate of the robot pose, as a particles PDF.
GLubyte GLubyte GLubyte GLubyte w
size_t particlesCount() const override
Get the m_particles count.
void processActionObservation(mrpt::obs::CActionCollection &action, mrpt::obs::CSensoryFrame &observations) override
Appends a new action and observations to update this map: See the description of the class at the top...
void clear()
Clear all elements of the maps.
TEstimationMethod estimationMethod
This fields indicates the way this estimation was obtained.
void saveCurrentPathEstimationToTextFile(const std::string &fil)
A logging utility: saves the current path estimation for each particle in a text file (a row per part...
VerbosityLevel getMinLoggingLevel() const
#define ASSERT_(f)
Defines an assertion mechanism.
void getMean(CPose3D &mean_pose) const override
Returns an estimate of the pose, (the mean, or mathematical expectation of the PDF), computed as a weighted average over all m_particles.
Represents a probabilistic 3D (6D) movement.
Represents a probabilistic 2D movement of the robot mobile base.
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 resize(std::size_t width, std::size_t height, TImageChannels nChannels, PixelDepth depth=PixelDepth::D8U)
Changes the size of the image, erasing previous contents (does NOT scale its current content...
mrpt::maps::CMultiMetricMapPDF mapPDF
The map PDF: It includes a path and associated map for each particle.
void setLoggerName(const std::string &name)
Set the name of the COutputLogger instance.
~CMetricMapBuilderRBPF() override
Destructor.
CMetricMapBuilderRBPF()
This second constructor is created for the situation where a class member needs to be of type CMetric...
void getCurrentlyBuiltMap(mrpt::maps::CSimpleMap &out_map) const override
Fills "out_map" with the set of "poses"-"sensory-frames", thus the so far built map.
This namespace contains representation of robot actions and observations.
string iniFile(myDataDir+string("benchmark-options.ini"))
Declares a class for storing a "sensory frame", a set of "observations" taken by the robot approximat...
mrpt::poses::CPose3DPDF::Ptr getCurrentPoseEstimation() const override
Returns a copy of the current best pose estimation as a pose PDF.
float insertionAngDistance
size_t size() const
Returns the count of pairs (pose,sensory data)
This class acts as a common interface to the different interfaces (see CParticleFilter::TParticleFilt...
#define MRPT_LOG_DEBUG_STREAM(__CONTENTS)
Use: MRPT_LOG_DEBUG_STREAM("Var=" << value << " foo=" << foo_var);
CMatrixDouble cov(const MATRIX &v)
Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample...
double norm() const
Returns the euclidean norm of vector: .
type_value getMeanVal() const
Returns the mean, or mathematical expectation of the probability density distribution (PDF)...
GLsizei const GLchar ** string
std::tuple< cov_mat_t, type_value > getCovarianceAndMean() const override
Returns an estimate of the pose covariance matrix (6x6 cov matrix) and the mean, both at once...
Declares a class that represents a probability density function (pdf) of a 2D pose (x...
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
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.
float localizeAngDistance
mrpt::math::CMatrixDouble66 cov
The 6x6 covariance matrix.
#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...
#define MRPT_LOG_INFO_STREAM(__CONTENTS)
void setVerbosityLevel(const VerbosityLevel level)
alias of setMinLoggingLevel()
A class for storing an occupancy grid map.
void updateSensoryFrameSequence()
Update the poses estimation of the member "SFs" according to the current path belief.
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.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
void executeOn(CParticleFilterCapable &obj, const mrpt::obs::CActionCollection *action, const mrpt::obs::CSensoryFrame *observation, TParticleFilterStats *stats=nullptr)
Executes a complete prediction + update step of the selected particle filtering algorithm.
double getW(size_t i) const override
Access to i'th particle (logarithm) weight, where first one is index 0.
mrpt::maps::CSimpleMap SFs
The SFs and their corresponding pose estimations.
TStats m_statsLastIteration
This structure will hold stats after each execution of processActionObservation.
TConstructionOptions()
Constructor.
mrpt::system::VerbosityLevel verbosity_level
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
This class implements a Rao-Blackwelized Particle Filter (RBPF) approach to map building (SLAM)...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
std::string format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
double getCurrentJointEntropy()
Returns the joint entropy estimation over paths and maps, acording to "Information Gain-based Explora...
void setFromValues(const double x0, const double y0, const double z0, const double yaw=0, const double pitch=0, const double roll=0)
Set the pose from a 3D position (meters) and yaw/pitch/roll angles (radians) - This method recomputes...
void getCurrentMostLikelyPath(std::deque< mrpt::math::TPose3D > &outPath) const
Returns the current most-likely path estimation (the path associated to the most likely particle)...
bool debugForceInsertion
Always insert into map.
Declares a class that represents a Probability Density function (PDF) of a 3D pose ...
mrpt::poses::CPose3DPDFGaussian odoIncrementSinceLastLocalization
Traveled distance since last localization update.
#define MRPT_LOG_WARN(_STRING)
T::Ptr getActionByClass(const size_t &ith=0) const
Access to the i'th action of a given class, or a nullptr smart pointer if there is no action of that ...
bool insertObservation(mrpt::obs::CSensoryFrame &sf)
Insert an observation to the map, at each particle's pose and to each particle's metric map...
This class stores any customizable set of metric maps.
CParticleFilter::TParticleFilterOptions m_options
The options to be used in the PF, must be set before executing any step of the particle filter...
unsigned int getCurrentlyBuiltMapSize() override
Returns just how many sensory-frames are stored in the currently build map.
Options for building a CMetricMapBuilderRBPF object, passed to the constructor.
std::mutex critZoneChangingMap
Critical zones.
bayes::CParticleFilter::TParticleFilterOptions m_PF_options
The configuration of the particle filter.
void drawCurrentEstimationToImage(mrpt::img::CCanvas *img)
A useful method for debugging: draws the current map and path hypotheses to a CCanvas.
mrpt::system::TTimeStamp timestamp
The associated time-stamp.
Declares a class that represents a Probability Density function (PDF) of a 3D pose.
A class for storing images as grayscale or RGB bitmaps.
#define MRPT_LOG_INFO(_STRING)
void getPath(size_t i, std::deque< math::TPose3D > &out_path) const
Return the path (in absolute coordinate poses) for the i'th particle.
void insert(CAction &action)
Add a new object to the list.
int round(const T value)
Returns the closer integer (int) to x.