13 #include <gtest/gtest.h>    16 namespace mrpt { 
namespace utils {
    30                 cerr << 
"**WARNING* Skipping tests since file cannot be found: '" << sFil << 
"'\n";
    36         const unsigned int PTG_COUNT = cfg.
read_int(
"PTG_UNIT_TESTS",
"PTG_COUNT",0, 
true );
    37         EXPECT_TRUE(PTG_COUNT>0);
    38         vector<CParameterizedTrajectoryGenerator *> PTGs(PTG_COUNT);
    40         for ( 
unsigned int n=0;
n<PTG_COUNT;
n++)
    43                 const string sPTGName = cfg.
read_string(
"PTG_UNIT_TESTS",
format(
"PTG%u_Type", 
n ),
"", 
true );
    44                 PTGs[
n] = CParameterizedTrajectoryGenerator::CreatePTG(sPTGName,cfg,
"PTG_UNIT_TESTS", 
format(
"PTG%u_",
n) );
    45                 EXPECT_TRUE(PTGs[
n]!=NULL) << 
"Failed creating PTG #" << 
n << endl;
    49                         PTGs[
n]->initialize( 
string(), 
false  );
    50                 } 
catch (std::exception &e)
    52                         GTEST_FAIL() << 
"Failed initializing PTG #" << 
n << endl << e.what() << endl;
    58         for ( 
unsigned int n=0;
n<PTG_COUNT;
n++)
    65                 size_t num_tests_run = 0;
    69                         for (
double dist=0.1;dist<refDist*0.5;dist+=0.2)
    71                                 bool any_good = 
false;
    72                                 for (
size_t k=0;k<num_paths;k++)
    80                                                 EXPECT_NEAR(d,dist, 0.05) << 
"Test: step <-> dist match\n PTG: " << sPTGDesc << endl << 
"dist:" << dist << endl;
    84                                 EXPECT_TRUE(any_good) << 
"Test: step <-> dist match\n PTG: " << sPTGDesc << endl << 
"dist:" << dist << endl;
    91                         bool skip_this_ptg = 
false;
    92                         for (
double tx=-refDist*0.5;!skip_this_ptg && tx<refDist*0.5;tx+=0.1)
    94                                 for (
double ty=-refDist*0.5;!skip_this_ptg && 
ty<refDist*0.5;
ty+=0.1)
    96                                         if (std::abs(tx)<1e-2 && std::abs(
ty)<1e-2)
    99                                         const double tolerance_dist = std::max(0.10,  10.0 * std::sqrt( tx*tx+
ty*
ty ) * 
M_PI *2 / ptg->
getPathCount() );
   104                                         if (valid && normalized_d<1.0)
   110                                                 EXPECT_TRUE(step_ok) << 
"PTG: " << sPTGDesc << endl << 
"(tx,ty): " << tx << 
" " << 
ty << 
" k= " << k << 
" normalized_d=" << normalized_d << endl;
   115                                                         EXPECT_NEAR(pose.
x, tx, tolerance_dist)  << 
"Test: inverseMap_WS2TP\n PTG#"<<
n<< 
": " << sPTGDesc << endl << 
"(tx,ty): " << tx << 
" " << 
ty << 
" k= " << k << 
" normalized_d=" << normalized_d << endl;
   116                                                         EXPECT_NEAR(pose.
y, 
ty, tolerance_dist)  << 
"Test: inverseMap_WS2TP\n PTG#"<<
n<< 
": " << sPTGDesc << endl << 
"(tx,ty): " << tx << 
" " << 
ty << 
" k= " << k << 
" normalized_d=" << normalized_d << endl;
   118                                                         if (std::abs(pose.
x-tx)>=tolerance_dist ||std::abs(pose.
y-
ty)>=tolerance_dist)
   119                                                              skip_this_ptg = 
true;
   120                                                         else num_tests_run++;
   125                         EXPECT_TRUE(any_ok) << 
"PTG: " << sPTGDesc << endl;
   130                         bool skip_this_ptg = 
false;
   131                         bool any_change_all = 
false;
   132                         for (
double ox=-refDist*0.5;!skip_this_ptg && ox<refDist*0.5;ox+=0.1)
   134                                 for (
double oy=-refDist*0.5;!skip_this_ptg && oy<refDist*0.5;oy+=0.1)
   136                                         if (std::abs(ox)<1e-2 && std::abs(oy)<1e-2)
   139                                         std::vector<double> TP_obstacles;
   142                                         const std::vector<double> TP_obstacles_org = TP_obstacles;
   145                                         const bool any_change = (TP_obstacles_org!=TP_obstacles);
   146                                         if (any_change) any_change_all=
true;
   150                         EXPECT_TRUE(any_change_all);
   154                 printf(
"PTG `%50s` run %6u tests.\n", sPTGDesc.c_str(), (
unsigned int)num_tests_run );
   159         for ( 
unsigned int n=0;
n<PTG_COUNT;
n++)
 virtual bool getPathStepForDist(uint16_t k, double dist, uint32_t &out_step) const =0
Access path k ([0,N-1]=>[-pi,pi] in alpha): largest step count for which the traversed distance is < ...
 
std::string MRPT_GLOBAL_UNITTEST_SRC_DIR
 
double getRefDistance() const
 
This class allows loading and storing values and vectors of different types from ".ini" files easily. 
 
void initTPObstacles(std::vector< double > &TP_Obstacles) const
Resizes and populates the initial appropriate contents in a vector of tp-obstacles (collision-free ra...
 
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
 
uint16_t getPathCount() const
Get the number of different, discrete paths in this family. 
 
virtual double getPathDist(uint16_t k, uint32_t step) const =0
Access path k ([0,N-1]=>[-pi,pi] in alpha): traversed distance at discrete step step. 
 
virtual void getPathPose(uint16_t k, uint32_t step, mrpt::math::TPose2D &p) const =0
Access path k ([0,N-1]=>[-pi,pi] in alpha): pose of the vehicle at discrete step step. 
 
int read_int(const std::string §ion, const std::string &name, int defaultValue, bool failIfNotFound=false) const
 
This is the base class for any user-defined PTG. 
 
GLsizei const GLchar ** string
 
virtual void updateTPObstacle(double ox, double oy, std::vector< double > &tp_obstacles) const =0
Updates the radial map of closest TP-Obstacles given a single obstacle point at (ox,oy) 
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. 
 
GLenum GLsizei GLenum format
 
TEST(NavTests, PTGs_tests)
 
unsigned __int32 uint32_t
 
virtual bool inverseMap_WS2TP(double x, double y, int &out_k, double &out_normalized_d, double tolerance_dist=0.10) const =0
Computes the closest (alpha,d) TP coordinates of the trajectory point closest to the Workspace (WS) C...
 
virtual std::string getDescription() const =0
Gets a short textual description of the PTG and its parameters.