17 #include <gtest/gtest.h>
21 template <
typename RNAVCLASS>
40 cerr <<
"**WARNING* Skipping tests since file cannot be found: '" << sFil <<
"'\n";
45 cfg.
write(
"CAbstractPTGBasedReactive",
"holonomic_method", sHoloMethod);
50 grid.
setSize(world_topleft.
x, world_rightbottom.
x, world_rightbottom.
y, world_topleft.
y, 0.10f );
55 const int xi0 = grid.
x2idx(block_obstacle_topleft.x), xi1 = grid.
x2idx(block_obstacle_rightbottom.x);
56 const int yi0 = grid.
y2idx(block_obstacle_rightbottom.y), yi1 = grid.
y2idx(block_obstacle_topleft.y);
58 for (
int xi = xi0; xi < xi1; xi++) {
59 for (
int yi = yi0; yi < yi1; yi++) {
73 this->setMinLoggingLevel(mrpt::utils::LVL_ERROR);
88 getCurrentPoseAndSpeeds(curPose, curVel, pose_tim, odomPose, pose_frame_id);
105 MyDummyRobotIF robot2nav_if(robot_simul, grid);
107 RNAVCLASS rnav(robot2nav_if,
false );
110 rnav.enableTimeLog(
false);
112 rnav.setMinLoggingLevel(mrpt::utils::LVL_DEBUG);
114 rnav.setMinLoggingLevel(mrpt::utils::LVL_ERROR);
119 rnav.setLogFileDirectory(sTmpDir);
120 rnav.enableLogFile(
true);
124 rnav.loadConfigFile(cfg);
136 unsigned int MAX_ITERS = 200;
137 for (
unsigned int i = 0; i < MAX_ITERS; i++)
141 rnav.navigationStep();
143 EXPECT_TRUE(rnav.getCurrentState() != CAbstractNavigator::NAV_ERROR);
144 if (rnav.getCurrentState() == CAbstractNavigator::IDLE)
151 EXPECT_TRUE(rnav.getCurrentState() == CAbstractNavigator::IDLE);
Simulates the kinematics of a differential-driven planar mobile robot/vehicle, including odometry err...
void simulateOneTimeStep(const double dt)
Runs the simulator during "dt" seconds.
const mrpt::math::TPose2D & getCurrentGTPose() const
Returns the instantaneous, ground truth pose in world coordinates.
void clear()
Erase all the contents of the map.
A class for storing an occupancy grid map.
void setCell(int x, int y, float value)
Change the contents [0,1] of a cell, given its index.
int x2idx(float x) const
Transform a coordinate value into a cell index.
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::utils::DEG2RAD(0)) const
Simulates a laser range scan into the current grid map.
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 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.
A cloud of points in 2D or 3D, which can be built from a sequence of laser scans.
virtual void loadFromRangeScan(const mrpt::obs::CObservation2DRangeScan &rangeScan, const mrpt::poses::CPose3D *robotPose=NULL) MRPT_OVERRIDE
See CPointsMap::loadFromRangeScan()
See base class CAbstractPTGBasedReactive for a description and instructions of use.
See base class CAbstractPTGBasedReactive for a description and instructions of use.
CRobot2NavInterface implemented for a simulator object based on mrpt::kinematics::CVehicleSimul_DiffD...
A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...
float maxRange
The maximum range allowed by the device, in meters (e.g. 80m, 50m,...)
float aperture
The "aperture" or field-of-view of the range finder, in radians (typically M_PI = 180 degrees).
mrpt::poses::CPose3D sensorPose
The 6D pose of the sensor on the robot at the moment of starting the scan.
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle.
void write(const std::string §ion, const std::string &name, const data_t &value, const int name_padding_width=-1, const int value_padding_width=-1, const std::string &comment=std::string())
This class allows loading and storing values and vectors of different types from "....
void discardSavingChanges()
Discard saving (current) changes to physical file upon destruction.
A versatile "profiler" that logs the time spent within each pair of calls to enter(X)-leave(X),...
GLsizei const GLchar ** string
std::string BASE_IMPEXP getTempFileName()
Returns the name of a proposed temporary file name.
std::string BASE_IMPEXP extractFileDirectory(const std::string &filePath)
Extract the whole path (the directory) of a filename from a complete path plus name plus extension.
bool BASE_IMPEXP fileExists(const std::string &fileName)
Test if a given file (or directory) exists.
std::string BASE_IMPEXP find_mrpt_shared_dir()
Finds the "[MRPT]/share/mrpt/" directory, if available in the system.
uint64_t TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1,...
mrpt::system::TTimeStamp now()
A shortcut for system::getCurrentTime.
#define MRPT_OVERRIDE
C++11 "override" for virtuals:
double DEG2RAD(const double x)
Degrees to radians.
void clear()
Clear the contents of this container.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
const TPoint2D with_obs_topleft(-10, 10)
const TPoint2D no_obs_trg(2.0, 0.4)
const TPoint2D with_obs_bottomright(30, -10)
TEST(CReactiveNavigationSystem, no_obstacle_nav_VFF)
const TPoint2D no_obs_topleft(-10, 10)
const TPoint2D obs_tl(4.0, 2.0)
const TPoint2D no_obs_bottomright(10, -10)
const TPoint2D with_obs_trg(9.0, 4.0)
const TPoint2D obs_br(5.0,-2.0)
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))
float minDistBetweenLaserPoints
The minimum distance between points (in 3D): If two points are too close, one of them is not inserted...
2D twist: 2D velocity vector (vx,vy) + planar angular velocity (omega)
The struct for configuring navigation requests.
TargetInfo target
Navigation target.
mrpt::math::TPose2D target_coords
Coordinates of desired target location. Heading may be ignored by some reactive implementations.
float targetAllowedDistance
(Default=0.5 meters) Allowed distance to target in order to end the navigation.