Go to the documentation of this file.
   13 #include <gtest/gtest.h> 
   28                                                 string(
"/tests/PTGs_for_tests.ini");
 
   31                 cerr << 
"**WARNING* Skipping tests since file cannot be found: '" 
   38         const unsigned int PTG_COUNT =
 
   39                 cfg.
read_int(
"PTG_UNIT_TESTS", 
"PTG_COUNT", 0, 
true);
 
   40         EXPECT_TRUE(PTG_COUNT > 0);
 
   41         vector<CParameterizedTrajectoryGenerator*> PTGs(PTG_COUNT);
 
   43         for (
unsigned int n = 0; 
n < PTG_COUNT; 
n++)
 
   47                         "PTG_UNIT_TESTS", 
format(
"PTG%u_Type", 
n), 
"", 
true);
 
   48                 PTGs[
n] = CParameterizedTrajectoryGenerator::CreatePTG(
 
   49                         sPTGName, cfg, 
"PTG_UNIT_TESTS", 
format(
"PTG%u_", 
n));
 
   50                 EXPECT_TRUE(PTGs[
n] != 
nullptr) << 
"Failed creating PTG #" << 
n << endl;
 
   54                         PTGs[
n]->initialize(
string(), 
false );
 
   56                 catch (std::exception& e)
 
   58                         GTEST_FAIL() << 
"Failed initializing PTG #" << 
n << endl
 
   65         for (
unsigned int n = 0; 
n < PTG_COUNT; 
n++)
 
   72                 size_t num_tests_run = 0;
 
   76                         for (
double dist = 0.1; dist < refDist * 0.5; dist += 0.2)
 
   78                                 bool any_good = 
false;
 
   79                                 for (
size_t k = 0; k < num_paths; k++)
 
   87                                                 EXPECT_NEAR(d, dist, 0.05)
 
   88                                                         << 
"Test: step <-> dist match\n PTG: " << sPTGDesc
 
   90                                                         << 
"dist:" << dist << endl;
 
   95                                         << 
"Test: step <-> dist match\n PTG: " << sPTGDesc << endl
 
   96                                         << 
"dist:" << dist << endl;
 
  103                         bool skip_this_ptg = 
false;
 
  104                         for (
double tx = -refDist * 0.5;
 
  105                                  !skip_this_ptg && tx < refDist * 0.5; tx += 0.1)
 
  107                                 for (
double ty = -refDist * 0.5;
 
  108                                          !skip_this_ptg && 
ty < refDist * 0.5; 
ty += 0.1)
 
  110                                         if (std::abs(tx) < 1e-2 && std::abs(
ty) < 1e-2)
 
  114                                         const double tolerance_dist = std::max(
 
  115                                                 0.10, 10.0 * std::sqrt(tx * tx + 
ty * 
ty) * 
M_PI * 2 /
 
  121                                         if (valid && normalized_d < 1.0)
 
  127                                                         k, normalized_d * refDist, step);
 
  129                                                         << 
"PTG: " << sPTGDesc << endl
 
  130                                                         << 
"(tx,ty): " << tx << 
" " << 
ty << 
" k= " << k
 
  131                                                         << 
" normalized_d=" << normalized_d << endl;
 
  136                                                         EXPECT_NEAR(pose.
x, tx, tolerance_dist)
 
  137                                                                 << 
"Test: inverseMap_WS2TP\n PTG#" << 
n << 
": " 
  139                                                                 << 
"(tx,ty): " << tx << 
" " << 
ty << 
" k= " << k
 
  140                                                                 << 
" normalized_d=" << normalized_d << endl;
 
  141                                                         EXPECT_NEAR(pose.
y, 
ty, tolerance_dist)
 
  142                                                                 << 
"Test: inverseMap_WS2TP\n PTG#" << 
n << 
": " 
  144                                                                 << 
"(tx,ty): " << tx << 
" " << 
ty << 
" k= " << k
 
  145                                                                 << 
" normalized_d=" << normalized_d << endl;
 
  147                                                         if (std::abs(pose.
x - tx) >= tolerance_dist ||
 
  148                                                                 std::abs(pose.
y - 
ty) >= tolerance_dist)
 
  149                                                                 skip_this_ptg = 
true;
 
  156                         EXPECT_TRUE(any_ok) << 
"PTG: " << sPTGDesc << endl;
 
  161                         bool skip_this_ptg = 
false;
 
  162                         bool any_change_all = 
false;
 
  163                         for (
double ox = -refDist * 0.5;
 
  164                                  !skip_this_ptg && ox < refDist * 0.5; ox += 0.1)
 
  166                                 for (
double oy = -refDist * 0.5;
 
  167                                          !skip_this_ptg && oy < refDist * 0.5; oy += 0.1)
 
  169                                         if (std::abs(ox) < 1e-2 && std::abs(oy) < 1e-2)
 
  173                                         std::vector<double> TP_obstacles;
 
  176                                         const std::vector<double> TP_obstacles_org = TP_obstacles;
 
  179                                         const bool any_change = (TP_obstacles_org != TP_obstacles);
 
  180                                         if (any_change) any_change_all = 
true;
 
  184                         EXPECT_TRUE(any_change_all);
 
  188                         "PTG `%50s` run %6u tests.\n", sPTGDesc.c_str(),
 
  189                         (
unsigned int)num_tests_run);
 
  194         for (
unsigned int n = 0; 
n < PTG_COUNT; 
n++) 
delete PTGs[
n];
 
  
GLenum GLsizei GLenum format
 
TEST(NavTests, PTGs_tests)
 
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,...
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
 
bool fileExists(const std::string &fileName)
Test if a given file (or directory) exists.
 
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...
 
std::string read_string(const std::string §ion, const std::string &name, const std::string &defaultValue, bool failIfNotFound=false) const
 
int read_int(const std::string §ion, const std::string &name, int defaultValue, bool failIfNotFound=false) const
 
void initTPObstacles(std::vector< double > &TP_Obstacles) const
Resizes and populates the initial appropriate contents in a vector of tp-obstacles (collision-free ra...
 
virtual std::string getDescription() const =0
Gets a short textual description of the PTG and its parameters.
 
std::string MRPT_GLOBAL_UNITTEST_SRC_DIR
 
uint16_t getPathCount() const
Get the number of different, discrete paths in this family.
 
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 < ...
 
double getRefDistance() const
 
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.
 
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.
 
This class allows loading and storing values and vectors of different types from "....
 
GLsizei const GLchar ** string
 
unsigned __int32 uint32_t
 
This is the base class for any user-defined PTG.
 
   |  Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at miƩ 12 jul 2023 10:03:34 CEST |   |