10 #include <gtest/gtest.h>    21 template <
typename RNAVCLASS>
    23     const std::string& sFilename, 
const std::string& sHoloMethod,
    34                              std::string(
"config_files/navigation-ptgs/") +
    39         cerr << 
"**WARNING* Skipping tests since file cannot be found: '"    45     cfg.
write(
"CAbstractPTGBasedReactive", 
"holonomic_method", sHoloMethod);
    52         world_topleft.x, world_rightbottom.x, world_rightbottom.y,
    53         world_topleft.y, 0.10f );
    58         const int xi0 = grid.
x2idx(block_obstacle_topleft.x),
    59                   xi1 = grid.
x2idx(block_obstacle_rightbottom.x);
    60         const int yi0 = grid.
y2idx(block_obstacle_rightbottom.y),
    61                   yi1 = grid.
y2idx(block_obstacle_topleft.y);
    63         for (
int xi = xi0; xi < xi1; xi++)
    65             for (
int yi = yi0; yi < yi1; yi++)
    85         void sendNavigationStartEvent()
 override {}
    86         void sendNavigationEndEvent()
 override {}
    95             std::string pose_frame_id;
    98             getCurrentPoseAndSpeeds(
    99                 curPose, curVel, pose_tim, odomPose, pose_frame_id);
   118     MyDummyRobotIF robot2nav_if(robot_simul, grid);
   123         std::make_unique<RNAVCLASS>(robot2nav_if, 
false );
   124     auto& rnav = *rnav_ptr;
   127         rnav.enableTimeLog(
false);
   136         rnav.setLogFileDirectory(sTmpDir);
   137         rnav.enableLogFile(
true);
   141     rnav.loadConfigFile(cfg);
   153     unsigned int MAX_ITERS = 200;
   154     for (
unsigned int i = 0; i < MAX_ITERS; i++)
   159         rnav.navigationStep();
   161         EXPECT_TRUE(rnav.getCurrentState() != CAbstractNavigator::NAV_ERROR);
   162         if (rnav.getCurrentState() == CAbstractNavigator::IDLE) 
break;
   169     EXPECT_TRUE(rnav.getCurrentState() == CAbstractNavigator::IDLE);
   184     run_rnav_test<mrpt::nav::CReactiveNavigationSystem>(
   190     run_rnav_test<mrpt::nav::CReactiveNavigationSystem>(
   196     run_rnav_test<mrpt::nav::CReactiveNavigationSystem>(
   197         "reactive2d_config.ini", 
"CHolonomicFullEval", 
no_obs_trg,
   203     run_rnav_test<mrpt::nav::CReactiveNavigationSystem3D>(
   209     run_rnav_test<mrpt::nav::CReactiveNavigationSystem3D>(
   215     run_rnav_test<mrpt::nav::CReactiveNavigationSystem3D>(
   216         "reactive3d_config.ini", 
"CHolonomicFullEval", 
no_obs_trg,
   222     run_rnav_test<mrpt::nav::CReactiveNavigationSystem>(
   228     run_rnav_test<mrpt::nav::CReactiveNavigationSystem>(
   234     run_rnav_test<mrpt::nav::CReactiveNavigationSystem>(
   235         "reactive2d_config.ini", 
"CHolonomicFullEval", 
with_obs_trg,
   241     run_rnav_test<mrpt::nav::CReactiveNavigationSystem3D>(
   247     run_rnav_test<mrpt::nav::CReactiveNavigationSystem3D>(
   253     run_rnav_test<mrpt::nav::CReactiveNavigationSystem3D>(
   254         "reactive3d_config.ini", 
"CHolonomicFullEval", 
with_obs_trg,
 void clear()
Erase all the contents of the map. 
 
void laserScanSimulator(mrpt::obs::CObservation2DRangeScan &inout_Scan, const mrpt::poses::CPose2D &robotPose, float threshold=0.6f, size_t N=361, float noiseStd=0, unsigned int decimation=1, float angleNoiseStd=mrpt::DEG2RAD(.0)) const
Simulates a laser range scan into the current grid map. 
 
EXPECT_LT(out.final_rmse, 3.0)
 
void setCell(int x, int y, float value)
Change the contents [0,1] of a cell, given its index. 
 
EXPECT_TRUE(mrpt::system::fileExists(ini_fil))
 
TPoint2D_< double > TPoint2D
Lightweight 2D point. 
 
app setMinLoggingLevel(mrpt::system::LVL_ERROR)
 
void simulateOneTimeStep(const double dt)
Runs the simulator during "dt" seconds. 
 
This class allows loading and storing values and vectors of different types from ".ini" files easily. 
 
float targetAllowedDistance
(Default=0.5 meters) Allowed distance to target in order to end the navigation. 
 
void run_rnav_test(const std::string &sFilename, const std::string &sHoloMethod, const TPoint2D &nav_target, const TPoint2D &world_topleft, const TPoint2D &world_rightbottom, const TPoint2D &block_obstacle_topleft=TPoint2D(0, 0), const TPoint2D &block_obstacle_rightbottom=TPoint2D(0, 0))
 
bool fileExists(const std::string &fileName)
Test if a given file (or directory) exists. 
 
mrpt::system::TTimeStamp now()
A shortcut for system::getCurrentTime. 
 
A cloud of points in 2D or 3D, which can be built from a sequence of laser scans. ...
 
const TPoint2D with_obs_topleft(-10, 10)
 
const TPoint2D no_obs_trg(2.0, 0.4)
 
const TPoint2D with_obs_trg(9.0, 4.0)
 
const mrpt::math::TPose2D & getCurrentGTPose() const
Returns the instantaneous, ground truth pose in world coordinates. 
 
std::string find_mrpt_shared_dir()
Finds the "[MRPT]/share/mrpt/" directory, if available in the system. 
 
float maxRange
The maximum range allowed by the device, in meters (e.g. 
 
2D twist: 2D velocity vector (vx,vy) + planar angular velocity (omega) 
 
The struct for configuring navigation requests. 
 
mrpt::Clock::time_point TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1...
 
std::string getTempFileName()
Returns the name of a proposed temporary file name. 
 
TEST(CReactiveNavigationSystem, no_obstacle_nav_VFF)
 
CRobot2NavInterface implemented for a simulator object based on mrpt::kinematics::CVehicleSimul_DiffD...
 
constexpr double DEG2RAD(const double x)
Degrees to radians. 
 
void loadFromRangeScan(const mrpt::obs::CObservation2DRangeScan &rangeScan, const mrpt::poses::CPose3D *robotPose=nullptr) override
See CPointsMap::loadFromRangeScan() 
 
Simulates the kinematics of a differential-driven planar mobile robot/vehicle, including odometry err...
 
const TPoint2D with_obs_bottomright(30, -10)
 
const TPoint2D no_obs_bottomright(10, -10)
 
const TPoint2D obs_br(5.0, -2.0)
 
mrpt::math::TPose2D target_coords
Coordinates of desired target location. 
 
void write(const std::string §ion, const std::string &name, enum_t value, const int name_padding_width=-1, const int value_padding_width=-1, const std::string &comment=std::string())
 
See base class CAbstractPTGBasedReactive for a description and instructions of use. 
 
A class for storing an occupancy grid map. 
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. 
 
A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...
 
A versatile "profiler" that logs the time spent within each pair of calls to enter(X)-leave(X), among other stats. 
 
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
 
float aperture
The "aperture" or field-of-view of the range finder, in radians (typically M_PI = 180 degrees)...
 
TargetInfo target
Navigation target. 
 
const TPoint2D obs_tl(4.0, 2.0)
 
void fill(float default_value=0.5f)
Fills all the cells with a default value. 
 
TInsertionOptions insertionOptions
The options used when inserting observations in the map. 
 
void discardSavingChanges()
Discard saving (current) changes to physical file upon destruction. 
 
const TPoint2D no_obs_topleft(-10, 10)
 
See base class CAbstractPTGBasedReactive for a description and instructions of use. 
 
void setSize(float x_min, float x_max, float y_min, float y_max, float resolution, float default_value=0.5f)
Change the size of gridmap, erasing all its previous contents. 
 
void clear()
Clear the contents of this container. 
 
int x2idx(float x) const
Transform a coordinate value into a cell index. 
 
mrpt::poses::CPose3D sensorPose
The 6D pose of the sensor on the robot at the moment of starting the scan. 
 
std::string extractFileDirectory(const std::string &filePath)
Extract the whole path (the directory) of a filename from a complete path plus name plus extension...
 
float minDistBetweenLaserPoints
The minimum distance between points (in 3D): If two points are too close, one of them is not inserted...