10 #include <gtest/gtest.h>    22 #include <test_mrpt_common.h>    43         UNITTEST_BASEDIR + string(
"/tests/montecarlo_test1.ini");
    46         cerr << 
"WARNING: Skipping test due to missing file: " << 
ini_fil    58     string iniSectionName(
"LocalizationExperiment");
    62         iniSectionName, 
"particles_count", std::vector<int>(1, 0),
    66         iniSectionName, 
"rawlog_file", 
"",  
true);
    71     string MAP_FILE = 
iniFile.read_string(iniSectionName, 
"map_file", 
"");
    73     MAP_FILE = UNITTEST_BASEDIR + string(
"/") + MAP_FILE;
    75     size_t rawlog_offset = 
iniFile.read_int(iniSectionName, 
"rawlog_offset", 0);
    76     int NUM_REPS = 
iniFile.read_int(iniSectionName, 
"experimentRepetitions", 1);
    99     size_t rawlogEntry, rawlogEntries;
   119         if (!mapExt.compare(
"simplemap"))
   132                 "Map file has unknown extension: '%s'", mapExt.c_str());
   140     rawlogEntries = rawlog.
size();
   142     for (
int PARTICLE_COUNT : particles_count)
   145         vector<double> covergenceErrors;
   146         covergenceErrors.reserve(NUM_REPS);
   151         for (
int repetition = 0; repetition < NUM_REPS; repetition++)
   153             int M = PARTICLE_COUNT;
   157             pdf.
options = pdfPredictionOptions;
   172                     iniSectionName, 
"init_PDF_mode", 
false,
   177                     grid.get(), 0.7f, PARTICLE_COUNT,
   179                         iniSectionName, 
"init_PDF_min_x", 0, 
true),
   181                         iniSectionName, 
"init_PDF_max_x", 0, 
true),
   183                         iniSectionName, 
"init_PDF_min_y", 0, 
true),
   185                         iniSectionName, 
"init_PDF_max_y", 0, 
true),
   187                         iniSectionName, 
"init_PDF_min_phi_deg", -180)),
   189                         iniSectionName, 
"init_PDF_max_phi_deg", 180)));
   194                         iniSectionName, 
"init_PDF_min_x", 0, 
true),
   196                         iniSectionName, 
"init_PDF_max_x", 0, 
true),
   198                         iniSectionName, 
"init_PDF_min_y", 0, 
true),
   200                         iniSectionName, 
"init_PDF_max_y", 0, 
true),
   202                         iniSectionName, 
"init_PDF_min_phi_deg", -180)),
   204                         iniSectionName, 
"init_PDF_max_phi_deg", 180)),
   216             while (rawlogEntry < (rawlogEntries - 1) && !
end)
   221                         action, observations, rawlogEntry))
   230                 if (step >= rawlog_offset)
   235                     if (step > rawlog_offset)
   264 TEST(MonteCarlo2D, RunSampleDataset)
   269         const CPose2D GT_endpose(15.904, -10.010, 4.93_deg);
   278         for (
int op = 0; op < 3; op++)
   282             const double final_pf_cov_trace = 
cov.
trace();
   283             const CPose2D final_pf_pose = meanPose;
   285             bool pass1 = (final_pf_pose - GT_endpose).
norm() < 0.10;
   286             bool pass2 = final_pf_cov_trace < 0.01;
   288             if (pass1 && pass2) 
return;  
   291             cout << 
"\n*Warning: Test failed. Will give it another chance, "   293                     "after all it's nondeterministic!\n";
   296         FAIL() << 
"Failed to converge after 3 opportunities!!" << endl;
   298     catch (
const std::exception& e)
 A namespace of pseudo-random numbers generators of diferent distributions. 
 
void resetUniform(const double x_min, const double x_max, const double y_min, const double y_max, const double phi_min=-M_PI, const double phi_max=M_PI, const int particlesCount=-1)
Reset the PDF to an uniformly distributed one, inside of the defined 2D area [x_min,x_max]x[y_min,y_max] (in meters) and for orientations [phi_min, phi_max] (in radians). 
 
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...
 
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. 
 
The struct for passing extra simulation parameters to the prediction stage when running a particle fi...
 
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...
 
bool getActionObservationPair(CActionCollection::Ptr &action, CSensoryFrame::Ptr &observations, size_t &rawlogEntry) const
Gets the next consecutive pair action / observation from the rawlog loaded into this object...
 
void loadFromProbabilisticPosesAndObservations(const mrpt::maps::CSimpleMap &Map)
Load the map contents from a CSimpleMap object, erasing all previous content of the map...
 
#define THROW_EXCEPTION(msg)
 
This class stores a sequence of <Probabilistic Pose,SensoryFrame> pairs, thus a "metric map" can be t...
 
TEST(MonteCarlo2D, RunSampleDataset)
 
The namespace for Bayesian filtering algorithm: different particle filters and Kalman filter algorith...
 
void randomize(const uint32_t seed)
Initialize the PRNG from the given random seed. 
 
This class allows loading and storing values and vectors of different types from ".ini" files easily. 
 
bool fileExists(const std::string &fileName)
Test if a given file (or directory) exists. 
 
A high-performance stopwatch, with typical resolution of nanoseconds. 
 
TMonteCarloLocalizationParams options
MCL parameters. 
 
T::Ptr mapByClass(size_t ith=0) const
Returns the i'th map of a given class (or of a derived class), or empty smart pointer if there is no ...
 
Statistics for being returned from the "execute" method. 
 
A set of TMetricMapInitializer structures, passed to the constructor CMultiMetricMap::CMultiMetricMap...
 
mrpt::maps::CMetricMap * metricMap
[update stage] Must be set to a metric map used to estimate the likelihood of observations ...
 
void run_test_pf_localization(CPose2D &meanPose, CMatrixDouble33 &cov)
 
CArchiveStreamBase< STREAM > archiveFrom(STREAM &s)
Helper function to create a templatized wrapper CArchive object for a: MRPT's CStream, std::istream, std::ostream, std::stringstream. 
 
#define ASSERT_(f)
Defines an assertion mechanism. 
 
bool loadFromRawLogFile(const std::string &fileName, bool non_obs_objects_are_legal=false)
Load the contents from a file containing one of these possibilities: 
 
This base provides a set of functions for maths stuff. 
 
std::string lowerCase(const std::string &str)
Returns an lower-case version of a string. 
 
void loadFromConfigFile(const mrpt::config::CConfigFileBase &source, const std::string §ionName) override
Loads the configuration for the set of internal maps from a textual definition in an INI-like file...
 
constexpr double DEG2RAD(const double x)
Degrees to radians. 
 
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. 
 
const std::string ini_fil
 
This class stores a rawlog (robotic datasets) in one of two possible formats: 
 
This namespace contains representation of robot actions and observations. 
 
string iniFile(myDataDir+string("benchmark-options.ini"))
 
std::string extractFileExtension(const std::string &filePath, bool ignore_gz=false)
Extract the extension of a filename. 
 
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...
 
CMatrixDouble cov(const MATRIX &v)
Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample...
 
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
 
Declares a class that represents a Probability Density Function (PDF) over a 2D pose (x...
 
A class for storing an occupancy grid map. 
 
const_iterator end() const
 
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. 
 
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
 
The configuration of a particle filter. 
 
Scalar trace() const
Returns the trace of the matrix (not necessarily square). 
 
std::string exception_to_str(const std::exception &e)
Builds a nice textual representation of a nested exception, which if generated using MRPT macros (THR...
 
void Tic() noexcept
Starts the stopwatch. 
 
This class stores any customizable set of metric maps. 
 
#define THROW_EXCEPTION_FMT(_FORMAT_STRING,...)
 
CParticleFilter::TParticleFilterOptions m_options
The options to be used in the PF, must be set before executing any step of the particle filter...
 
CRandomGenerator & getRandomGenerator()
A static instance of a CRandomGenerator class, for use in single-thread applications. 
 
size_t size() const
Returns the number of actions / observations object in the sequence. 
 
TKLDParams KLD_params
Parameters for dynamic sample size, KLD method. 
 
void setListOfMaps(const mrpt::maps::TSetOfMetricMapInitializers &init)
Sets the list of internal map according to the passed list of map initializers (current maps will be ...
 
CONTAINER::Scalar norm(const CONTAINER &v)