26 CReactiveNavigationSystem::CReactiveNavigationSystem(
28 bool enableLogToFile,
const std::string& logFileDirectory)
30 react_iterf_impl, enableConsoleOutput, enableLogToFile,
68 unsigned int PTG_COUNT =
PTGs.size();
78 const std::string sectCfg =
"CReactiveNavigationSystem";
81 unsigned int PTG_COUNT =
c.read_int(sectCfg,
"PTG_COUNT", 0,
true);
87 sectCfg,
"RobotModel_shape2D_xs", vector<float>(0), xs,
false);
89 sectCfg,
"RobotModel_shape2D_ys", vector<float>(0), ys,
false);
91 xs.size() == ys.size(),
92 "Config parameters `RobotModel_shape2D_xs` and `RobotModel_shape2D_ys` " 93 "must have the same length!");
97 for (
size_t i = 0; i < xs.size(); i++) shape.
AddVertex(xs[i], ys[i]);
103 const double robot_shape_radius =
104 c.read_double(sectCfg,
"RobotModel_circular_shape_radius", .0,
false);
105 ASSERT_(robot_shape_radius >= .0);
106 if (robot_shape_radius != .0)
115 PTGs.resize(PTG_COUNT);
117 for (
unsigned int n = 0;
n < PTG_COUNT;
n++)
121 c.read_string(sectCfg,
format(
"PTG%u_Type",
n),
"",
true);
123 sPTGName,
c, sectCfg,
format(
"PTG%u_",
n));
141 for (
unsigned int i = 0; i <
PTGs.size(); i++)
143 PTGs[i]->deinitialize();
147 "[CReactiveNavigationSystem::STEP1_InitPTGs] Initializing " 149 i,
PTGs[i]->getDescription().c_str());
167 "%s/ReacNavGrid_%03u.dat.gz",
204 catch (
const std::exception& e)
207 "[CReactiveNavigationSystem::STEP2_Sense] Exception:" << e.what());
213 "[CReactiveNavigationSystem::STEP2_Sense] Unexpected exception!");
220 const size_t ptg_idx, std::vector<double>& out_TPObstacles,
223 const bool eval_clearance)
229 rel_pose_PTG_origin_wrt_sense_);
236 const float *xs, *ys, *zs;
239 for (
size_t obs = 0; obs < nObs; obs++)
241 double ox, oy, oz = zs[obs];
242 rel_pose_PTG_origin_wrt_sense.
composePoint(xs[obs], ys[obs], ox, oy);
244 if (ox > -OBS_MAX_XY && ox < OBS_MAX_XY && oy > -OBS_MAX_XY &&
271 for (
size_t i = 0; i < nVerts; i++)
289 min_obstacles_height,
290 "Minimum `z` coordinate of obstacles to be considered fo collision " 293 max_obstacles_height,
294 "Maximum `z` coordinate of obstacles to be considered fo collision " 307 const float *xs, *ys, *zs;
310 for (
size_t i = 0; i < 1 ;
313 const auto ptg =
PTGs[i];
315 const double R = ptg->getMaxRobotRadius();
316 for (
size_t obs = 0; obs < nObs; obs++)
318 const double gox = xs[obs], goy = ys[obs], oz = zs[obs];
327 if (lo.
x >= -
R && lo.
x <=
R && lo.
y >= -
R && lo.
y <=
R &&
328 ptg->isPointInsideRobotShape(lo.
x, lo.
y))
double GetVertex_x(size_t i) const
Methods for accessing the vertices.
TRobotPoseVel m_curPoseVel
Current robot pose (updated in CAbstractNavigator::navigationStep() )
virtual bool senseObstacles(mrpt::maps::CSimplePointsMap &obstacles, mrpt::system::TTimeStamp ×tamp)=0
Return the current set of obstacle points, as seen from the local coordinate frame of the robot...
mrpt::system::CTimeLogger m_timlog_delays
Time logger to collect delay-related stats.
size_t verticesCount() const
Returns the vertices count in the polygon:
mrpt::math::CVectorFloat robotShape_y
void logFmt(const VerbosityLevel level, const char *fmt,...) const MRPT_printf_format_check(3
Alternative logging method, which mimics the printf behavior.
mrpt::maps::CSimplePointsMap m_WS_Obstacles
The obstacle points, as seen from the local robot frame.
#define THROW_EXCEPTION(msg)
A safe way to call enter() and leave() of a mrpt::system::CTimeLogger upon construction and destructi...
void STEP1_InitPTGs() override
Base class for all PTGs using a 2D circular robot shape model.
#define ASSERT_BELOW_(__A, __B)
void changeRobotCircularShapeRadius(const double R)
Defines the 2D circular robot shape radius, used for some PTGs for collision checking.
double max_obstacles_height
TReactiveNavigatorParams params_reactive_nav
mrpt::maps::CSimplePointsMap m_WS_Obstacles_original
Obstacle points, before filtering (if filtering is enabled).
size_t getPTG_count() const override
Returns the number of different PTGs that have been setup.
A wrapper of a TPolygon2D class, implementing CSerializable.
bool m_enableConsoleOutput
Enables / disables the console debug output.
std::vector< CParameterizedTrajectoryGenerator::Ptr > PTGs
The list of PTGs to use for navigation.
Clearance information for one particular PTG and one set of obstacles.
static CParameterizedTrajectoryGenerator::Ptr CreatePTG(const std::string &ptgClassName, const mrpt::config::CConfigFileBase &cfg, const std::string &sSection, const std::string &sKeyPrefix)
The class factory for creating a PTG from a list of parameters in a section of a given config file (p...
A class for storing, saving and loading a reactive navigation log record for the CReactiveNavigationS...
void composePoint(double lx, double ly, double &gx, double &gy) const
An alternative, slightly more efficient way of doing with G and L being 2D points and P this 2D pose...
mrpt::math::CVectorFloat robotShape_x
The robot shape in WS.
void loadConfigFile(const mrpt::config::CConfigFileBase &c) override
Loads all params from a file.
#define ASSERT_(f)
Defines an assertion mechanism.
mrpt::Clock::time_point TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1...
This is the base class for any user-defined PTG.
This class allows loading and storing values and vectors of different types from a configuration text...
This base provides a set of functions for maths stuff.
void loadConfigFile(const mrpt::config::CConfigFileBase &c) override
Loads all params from a file.
void loggingGetWSObstaclesAndShape(CLogFileRecord &out_log) override
Generates a pointcloud of obstacles, and the robot shape, to be saved in the logging record for the c...
void saveToConfigFile(mrpt::config::CConfigFileBase &c, const std::string &s) const override
This method saves the options to a ".ini"-like file or memory-stored string list. ...
mrpt::math::TPoint2D inverseComposePoint(const TPoint2D g) const
Base class for all PTGs using a 2D polygonal robot shape model.
Base class for reactive navigator systems based on TP-Space, with an arbitrary holonomic reactive met...
void setRobotShapeRadius(const double robot_radius)
Robot shape must be set before initialization, either from ctor params or via this method...
#define ASSERTMSG_(f, __ERROR_MSG)
Defines an assertion mechanism.
mrpt::maps::CSimplePointsMap WS_Obstacles_original
GLsizei const GLchar ** string
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
~CReactiveNavigationSystem() override
Destructor.
void loadFromConfigFile(const mrpt::config::CConfigFileBase &c, const std::string &s) override
This method load the options from a ".ini"-like file or memory-stored string list.
std::string ptg_cache_files_directory
(Default: ".")
void updateClearance(const double ox, const double oy, ClearanceDiagram &cd) const
Updates the clearance diagram given one (ox,oy) obstacle point, in coordinates relative to the PTG pa...
void setRobotShape(const mrpt::math::CPolygon &robotShape)
Robot shape must be set before initialization, either from ctor params or via this method...
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.
double min_obstacles_height
void saveConfigFile(mrpt::config::CConfigFileBase &c) const override
Saves all current options to a config file.
void changeRobotShape(const mrpt::math::CPolygon &shape)
Defines the 2D polygonal robot shape, used for some PTGs for collision checking.
CParameterizedTrajectoryGenerator * getPTG(size_t i) override
Gets the i'th PTG.
void getPointsBuffer(size_t &outPointsCount, const float *&xs, const float *&ys, const float *&zs) const
Provides a direct access to points buffer, or nullptr if there is no points in the map...
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
TAbstractPTGNavigatorParams params_abstract_ptg_navigator
std::string format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
CRobot2NavInterface & m_robot
The navigator-robot interface.
void STEP3_WSpaceToTPSpace(const size_t ptg_idx, std::vector< double > &out_TPObstacles, mrpt::nav::ClearanceDiagram &out_clearance, const mrpt::math::TPose2D &rel_pose_PTG_origin_wrt_sense, const bool eval_clearance) override
Builds TP-Obstacles from Workspace obstacles for the given PTG.
Lightweight 3D pose (three spatial coordinates, plus three angular coordinates).
#define MRPT_LOAD_CONFIG_VAR_REQUIRED_CS(variableName, variableType)
Shortcut for MRPT_LOAD_CONFIG_VAR_NO_DEFAULT() for REQUIRED variables config file object named c and ...
TReactiveNavigatorParams()
double ref_distance
Maximum distance up to obstacles will be considered (D_{max} in papers).
#define MRPT_SAVE_CONFIG_VAR_COMMENT(variableName, __comment)
double m_robotShapeCircularRadius
Radius of the robot if approximated as a circle.
void saveConfigFile(mrpt::config::CConfigFileBase &c) const override
Saves all current options to a config file.
bool checkCollisionWithLatestObstacles(const mrpt::math::TPose2D &relative_robot_pose) const override
Checks whether the robot shape, when placed at the given pose (relative to the current pose)...
double GetVertex_y(size_t i) const
void resize(std::size_t N, bool zeroNewElements=false)
mrpt::maps::CSimplePointsMap WS_Obstacles
The WS-Obstacles.
void logStr(const VerbosityLevel level, const std::string &msg_str) const
Main method to add the specified message string to the logger.
The pure virtual interface between a real or simulated robot and any CAbstractNavigator-derived class...
#define MRPT_LOG_ERROR_STREAM(__CONTENTS)
mrpt::math::CPolygon m_robotShape
The robot 2D shape model.
void AddVertex(double x, double y)
Add a new vertex to polygon.
bool m_PTGsMustBeReInitialized
mrpt::system::CTimeLogger m_timelogger
A complete time logger.
bool implementSenseObstacles(mrpt::system::TTimeStamp &obs_timestamp) override
Return false on any fatal error.
mrpt::maps::CPointCloudFilterBase::Ptr m_WS_filter
Default: none.
void preDestructor()
To be called during children destructors to assure thread-safe destruction, and free of shared object...
double robotShape_radius
The circular robot radius.