Main MRPT website > C++ reference for MRPT 1.9.9
CHolonomicND.h
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2017, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 #ifndef CHolonomicND_H
10 #define CHolonomicND_H
11 
14 
15 namespace mrpt
16 {
17 namespace nav
18 {
19 class CLogFileRecord_ND;
20 /** \addtogroup nav_holo Holonomic navigation methods
21  * \ingroup mrpt_nav_grp
22  * @{ */
23 
24 /** An implementation of the holonomic reactive navigation method
25  * "Nearness-Diagram".
26  * The algorithm "Nearness-Diagram" was proposed in:
27  *
28  * Nearness diagram (ND) navigation: collision avoidance in troublesome
29  * scenarios, IEEE Transactions on
30  * Robotics and Automation, Minguez, J. and Montano, L., vol. 20, no. 1, pp.
31  * 45-59, 2004.
32  *
33  * These are the optional parameters of the method which can be set by means of
34  * a configuration file passed to the constructor or to
35  * CHolonomicND::initialize() or directly in \a CHolonomicND::options
36  *
37  * \code
38  * # Section name can be changed via setConfigFileSectionName()
39  * [ND_CONFIG]
40  * factorWeights=1.0 0.5 2.0 0.4
41  * // 1: Free space
42  * // 2: Dist. in sectors
43  * // 3: Closer to target (euclidean)
44  * // 4: Hysteresis
45  * WIDE_GAP_SIZE_PERCENT = 0.25
46  * MAX_SECTOR_DIST_FOR_D2_PERCENT = 0.25
47  * RISK_EVALUATION_SECTORS_PERCENT = 0.25
48  * RISK_EVALUATION_DISTANCE = 0.15 // In normalized ps-meters [0,1]
49  * TARGET_SLOW_APPROACHING_DISTANCE = 0.60 // For stopping gradually
50  * TOO_CLOSE_OBSTACLE = 0.02 // In normalized ps-meters
51  * \endcode
52  *
53  * \sa CAbstractHolonomicReactiveMethod,CReactiveNavigationSystem
54  */
56 {
58  public:
59  /** Initialize the parameters of the navigator, from some configuration
60  * file, or default values if set to nullptr */
61  CHolonomicND(const mrpt::utils::CConfigFileBase* INI_FILE = nullptr);
62 
63  // See base class docs
64  void navigate(const NavInput& ni, NavOutput& no) override;
65 
66  /** The structure used to store a detected gap in obstacles. */
67  struct TGap
68  {
69  unsigned int ini;
70  unsigned int end;
71  double maxDistance;
72  double minDistance;
73  unsigned int representative_sector;
74  };
75 
76  typedef std::vector<TGap> TGapArray;
77 
78  /** The set of posible situations for each trajectory.
79  * (mrpt::utils::TEnumType works with this enum) */
81  {
86  };
87 
88  /** Initialize the parameters of the navigator. */
89  void initialize(const mrpt::utils::CConfigFileBase& INI_FILE) override;
90  virtual void saveConfigFile(
91  mrpt::utils::CConfigFileBase& c) const override; // See base class docs
92 
93  /** Algorithm options */
95  {
100  /** Vector of 4 weights: [0]=Free space, [1]=Dist. in sectors,
101  * [2]=Closer to target (Euclidean), [3]=Hysteresis */
102  std::vector<double> factorWeights;
103 
104  TOptions();
105  void loadFromConfigFile(
107  const std::string& section) override; // See base docs
108  void saveToConfigFile(
110  const std::string& section) const override; // See base docs
111  };
112 
113  /** Parameters of the algorithm (can be set manually or loaded from
114  * CHolonomicND::initialize or options.loadFromConfigFile(), etc.) */
116 
117  double getTargetApproachSlowDownDistance() const override
118  {
120  }
121  void setTargetApproachSlowDownDistance(const double dist) override
122  {
124  }
125 
126  private:
128 
129  unsigned int direction2sector(const double a, const unsigned int N);
130 
131  /** Find gaps in the obtacles.
132  */
133  void gapsEstimator(
134  const std::vector<double>& obstacles,
135  const mrpt::math::TPoint2D& in_target, TGapArray& gaps);
136 
137  /** Search the best gap.
138  */
139  void searchBestGap(
140  const std::vector<double>& in_obstacles, const double in_maxObsRange,
141  const TGapArray& in_gaps, const mrpt::math::TPoint2D& in_target,
142  unsigned int& out_selDirection, double& out_selEvaluation,
143  TSituations& out_situation, double& out_riskEvaluation,
144  CLogFileRecord_ND& log);
145 
146  /** Fills in the representative sector field in the gap structure:
147  */
149  TGap& gap, const mrpt::math::TPoint2D& target,
150  const std::vector<double>& obstacles);
151 
152  /** Evaluate each gap:
153  */
154  void evaluateGaps(
155  const std::vector<double>& in_obstacles, const double in_maxObsRange,
156  const TGapArray& in_gaps, const unsigned int TargetSector,
157  const float TargetDist, std::vector<double>& out_gaps_evaluation);
158 
159 }; // end of CHolonomicND
160 
161 /** A class for storing extra information about the execution of
162  * CHolonomicND navigation.
163  * \sa CHolonomicND, CHolonomicLogFileRecord
164  */
166 {
168 
169  public:
170  /** Member data.
171  */
173  std::vector<double> gaps_eval;
175  double evaluation;
178 };
179 
180 /** @} */
181 } // end namespace
182 
183 // Specializations MUST occur at the same namespace:
184 namespace utils
185 {
186 template <>
187 struct TEnumTypeFiller<nav::CHolonomicND::TSituations>
188 {
190  static void fill(bimap<enum_t, std::string>& m_map)
191  {
192  m_map.insert(
194  "SITUATION_TARGET_DIRECTLY");
195  m_map.insert(
196  nav::CHolonomicND::SITUATION_SMALL_GAP, "SITUATION_SMALL_GAP");
197  m_map.insert(
198  nav::CHolonomicND::SITUATION_WIDE_GAP, "SITUATION_WIDE_GAP");
199  m_map.insert(
201  "SITUATION_NO_WAY_FOUND");
202  }
203 };
204 } // End of namespace
205 }
206 
207 #endif
void calcRepresentativeSectorForGap(TGap &gap, const mrpt::math::TPoint2D &target, const std::vector< double > &obstacles)
Fills in the representative sector field in the gap structure:
CHolonomicND(const mrpt::utils::CConfigFileBase *INI_FILE=nullptr)
Initialize the parameters of the navigator, from some configuration file, or default values if set to...
An implementation of the holonomic reactive navigation method "Nearness-Diagram". ...
Definition: CHolonomicND.h:55
unsigned int m_last_selected_sector
Definition: CHolonomicND.h:127
void searchBestGap(const std::vector< double > &in_obstacles, const double in_maxObsRange, const TGapArray &in_gaps, const mrpt::math::TPoint2D &in_target, unsigned int &out_selDirection, double &out_selEvaluation, TSituations &out_situation, double &out_riskEvaluation, CLogFileRecord_ND &log)
Search the best gap.
A base class for holonomic reactive navigation methods.
vector_int gaps_ini
Member data.
Definition: CHolonomicND.h:172
std::vector< TGap > TGapArray
Definition: CHolonomicND.h:76
CHolonomicND::TSituations situation
Definition: CHolonomicND.h:177
Only specializations of this class are defined for each enum type of interest.
Definition: TEnumType.h:24
void gapsEstimator(const std::vector< double > &obstacles, const mrpt::math::TPoint2D &in_target, TGapArray &gaps)
Find gaps in the obtacles.
void navigate(const NavInput &ni, NavOutput &no) override
Invokes the holonomic navigation algorithm itself.
void initialize(const mrpt::utils::CConfigFileBase &INI_FILE) override
Initialize the parameters of the navigator.
This class allows loading and storing values and vectors of different types from a configuration text...
TOptions options
Parameters of the algorithm (can be set manually or loaded from CHolonomicND::initialize or options...
Definition: CHolonomicND.h:115
unsigned int representative_sector
Definition: CHolonomicND.h:73
const GLubyte * c
Definition: glext.h:6313
A base class for log records for different holonomic navigation methods.
A bidirectional version of std::map, declared as bimap<KEY,VALUE> and which actually contains two std...
Definition: bimap.h:34
std::vector< double > factorWeights
Vector of 4 weights: [0]=Free space, [1]=Dist.
Definition: CHolonomicND.h:102
static void fill(bimap< enum_t, std::string > &m_map)
Definition: CHolonomicND.h:190
GLsizei const GLchar ** string
Definition: glext.h:4101
void loadFromConfigFile(const mrpt::utils::CConfigFileBase &source, const std::string &section) override
This method load the options from a ".ini"-like file or memory-stored string list.
void setTargetApproachSlowDownDistance(const double dist) override
Sets the actual value of this parameter [m].
Definition: CHolonomicND.h:121
__int32 int32_t
Definition: rptypes.h:46
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
#define DEFINE_SERIALIZABLE(class_name)
This declaration must be inserted in all CSerializable classes definition, within the class declarati...
virtual void saveConfigFile(mrpt::utils::CConfigFileBase &c) const override
saves all available parameters, in a forma loadable by initialize()
The structure used to store a detected gap in obstacles.
Definition: CHolonomicND.h:67
void evaluateGaps(const std::vector< double > &in_obstacles, const double in_maxObsRange, const TGapArray &in_gaps, const unsigned int TargetSector, const float TargetDist, std::vector< double > &out_gaps_evaluation)
Evaluate each gap:
A class for storing extra information about the execution of CHolonomicND navigation.
Definition: CHolonomicND.h:165
GLsizei GLsizei GLchar * source
Definition: glext.h:4082
std::vector< int32_t > vector_int
Definition: types_simple.h:24
Input parameters for CAbstractHolonomicReactiveMethod::navigate()
void insert(const KEY &k, const VALUE &v)
Insert a new pair KEY<->VALUE in the bi-map.
Definition: bimap.h:75
std::vector< double > gaps_eval
Definition: CHolonomicND.h:173
Lightweight 2D point.
GLubyte GLubyte GLubyte a
Definition: glext.h:6279
Output for CAbstractHolonomicReactiveMethod::navigate()
TSituations
The set of posible situations for each trajectory.
Definition: CHolonomicND.h:80
unsigned int direction2sector(const double a, const unsigned int N)
This is a virtual base class for sets of options than can be loaded from and/or saved to configuratio...
void saveToConfigFile(mrpt::utils::CConfigFileBase &cfg, const std::string &section) const override
This method saves the options to a ".ini"-like file or memory-stored string list. ...
double getTargetApproachSlowDownDistance() const override
Returns the actual value of this parameter [m], as set via the children class options structure...
Definition: CHolonomicND.h:117



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: ae4571287 Thu Nov 23 00:06:53 2017 +0100 at dom oct 27 23:51:55 CET 2019