20 #include <gtest/gtest.h> 35 namespace mrpt {
namespace utils {
49 cerr <<
"WARNING: Skipping test due to missing file: " << ini_fil <<
"\n";
58 string iniSectionName (
"LocalizationExperiment" );
62 string RAWLOG_FILE = iniFile.
read_string(iniSectionName,
"rawlog_file",
"",
true );
67 string MAP_FILE = iniFile.
read_string(iniSectionName,
"map_file",
"" );
71 size_t rawlog_offset = iniFile.
read_int(iniSectionName,
"rawlog_offset",0);
72 int NUM_REPS = iniFile.
read_int(iniSectionName,
"experimentRepetitions",1);
95 size_t rawlogEntry, rawlogEntries;
114 if ( !mapExt.compare(
"simplemap" ) )
126 else if ( !mapExt.compare(
"gridmap" ) )
144 rawlogEntries = rawlog.
size();
146 for (
vector_int::iterator itNum = particles_count.begin(); itNum!=particles_count.end(); ++itNum )
148 int PARTICLE_COUNT = *itNum;
152 vector<double> covergenceErrors;
153 covergenceErrors.reserve(NUM_REPS);
158 for (
int repetition = 0; repetition <NUM_REPS; repetition++)
160 int M = PARTICLE_COUNT;
164 pdf.
options = pdfPredictionOptions;
178 if ( !iniFile.
read_bool(iniSectionName,
"init_PDF_mode",
false,
true) )
183 iniFile.
read_float(iniSectionName,
"init_PDF_min_x",0,
true),
184 iniFile.
read_float(iniSectionName,
"init_PDF_max_x",0,
true),
185 iniFile.
read_float(iniSectionName,
"init_PDF_min_y",0,
true),
186 iniFile.
read_float(iniSectionName,
"init_PDF_max_y",0,
true),
192 iniFile.
read_float(iniSectionName,
"init_PDF_min_x",0,
true),
193 iniFile.
read_float(iniSectionName,
"init_PDF_max_x",0,
true),
194 iniFile.
read_float(iniSectionName,
"init_PDF_min_y",0,
true),
195 iniFile.
read_float(iniSectionName,
"init_PDF_max_y",0,
true),
205 CActionCollectionPtr action;
206 CSensoryFramePtr observations;
211 while (rawlogEntry<(rawlogEntries-1) && !
end)
228 if (step>=rawlog_offset)
232 if (step>rawlog_offset)
243 observations.pointer(),
263 TEST(MonteCarlo2D, RunSampleDataset)
265 #if MRPT_IS_BIG_ENDIAN 266 MRPT_TODO(
"Debug this issue in big endian platforms")
279 for (
int op=0;op<3;op++)
283 const double final_pf_cov_trace =
cov.trace();
284 const CPose2D final_pf_pose = meanPose;
286 bool pass1 = (final_pf_pose-GT_endpose).
norm() < 0.10;
287 bool pass2 = final_pf_cov_trace < 0.01;
293 cout <<
"\n*Warning: Test failed. Will give it another chance, since after all it's nondeterministic!\n";
296 FAIL() <<
"Failed to converge after 3 opportunities!!" << endl;
A namespace of pseudo-random numbers genrators of diferent distributions.
bool read_bool(const std::string §ion, const std::string &name, bool defaultValue, bool failIfNotFound=false) const
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL.
std::string MRPT_GLOBAL_UNITTEST_SRC_DIR
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...
void loadFromProbabilisticPosesAndObservations(const mrpt::maps::CSimpleMap &Map)
Load the map contents from a CSimpleMap object, erasing all previous content of the map...
This namespace provides a OS-independent interface to many useful functions: filenames manipulation...
void getCovarianceAndMean(mrpt::math::CMatrixDouble33 &cov, CPose2D &mean_point) const MRPT_OVERRIDE
Returns an estimate of the pose covariance matrix (3x3 cov matrix) and the mean, both at once...
float read_float(const std::string §ion, const std::string &name, float defaultValue, bool failIfNotFound=false) const
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...
This class allows loading and storing values and vectors of different types from ".ini" files easily.
#define THROW_EXCEPTION(msg)
BASE_IMPEXP CRandomGenerator randomGenerator
A static instance of a CRandomGenerator class, for use in single-thread applications.
void randomize(const uint32_t seed)
Initialize the PRNG from the given random seed.
#define THROW_EXCEPTION_FMT(_FORMAT_STRING,...)
void loadFromConfigFile(const mrpt::utils::CConfigFileBase &source, const std::string §ion) MRPT_OVERRIDE
This method load the options from a ".ini"-like file or memory-stored string list.
bool BASE_IMPEXP fileExists(const std::string &fileName)
Test if a given file (or directory) exists.
std::string read_string(const std::string §ion, const std::string &name, const std::string &defaultValue, bool failIfNotFound=false) const
TMonteCarloLocalizationParams options
MCL parameters.
Statistics for being returned from the "execute" method.
ProxyFilterContainerByClass< mrpt::maps::COccupancyGridMap2DPtr, TListMaps > m_gridMaps
STL-like proxy to access this kind of maps in maps.
void Tic()
Starts the stopwatch.
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)
int read_int(const std::string §ion, const std::string &name, int defaultValue, bool failIfNotFound=false) const
MRPT_TODO("Modify ping to run on Windows + Test this")
bool loadFromRawLogFile(const std::string &fileName, bool non_obs_objects_are_legal=false)
Load the contents from a file containing one of these possibilities:
int BASE_IMPEXP getch() MRPT_NO_THROWS
An OS-independent version of getch, which waits until a key is pushed.
This base provides a set of functions for maths stuff.
void executeOn(CParticleFilterCapable &obj, const mrpt::obs::CActionCollection *action, const mrpt::obs::CSensoryFrame *observation, TParticleFilterStats *stats=NULL)
Executes a complete prediction + update step of the selected particle filtering algorithm.
std::string BASE_IMPEXP lowerCase(const std::string &str)
Returns an lower-case version of a string.
void loadFromConfigFile(const mrpt::utils::CConfigFileBase &source, const std::string §ionName) MRPT_OVERRIDE
Loads the configuration for the set of internal maps from a textual definition in an INI-like file...
Eigen::Matrix< typename MATRIX::Scalar, MATRIX::ColsAtCompileTime, MATRIX::ColsAtCompileTime > cov(const MATRIX &v)
Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample...
void read_vector(const std::string §ion, const std::string &name, const VECTOR_TYPE &defaultValue, VECTOR_TYPE &outValues, bool failIfNotFound=false) const
Reads a configuration parameter of type vector, stored in the file as a string: "[v1 v2 v3 ...
This class implements a high-performance stopwatch.
This class stores a rawlog (robotic datasets) in one of two possible formats:
This namespace contains representation of robot actions and observations.
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 cube.
std::string BASE_IMPEXP 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...
GLsizei const GLchar ** string
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...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
void setListOfMaps(const mrpt::maps::TSetOfMetricMapInitializers *initializers)
Sets the list of internal map according to the passed list of map initializers (Current maps' content...
bool BASE_IMPEXP kbhit() MRPT_NO_THROWS
An OS-independent version of kbhit, which returns true if a key has been pushed.
The configuration of a particle filter.
std::vector< int32_t > vector_int
bool getActionObservationPair(CActionCollectionPtr &action, CSensoryFramePtr &observations, size_t &rawlogEntry) const
Gets the next consecutive pair action / observation from the rawlog loaded into this object...
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...
size_t size() const
Returns the number of actions / observations object in the sequence.
void loadFromConfigFile(const mrpt::utils::CConfigFileBase &source, const std::string §ion) MRPT_OVERRIDE
This method load the options from a ".ini"-like file or memory-stored string list.
TKLDParams KLD_params
Parameters for dynamic sample size, KLD method.
CONTAINER::Scalar norm(const CONTAINER &v)