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...