MRPT  2.0.4
CHolonomicND.h
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | https://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2020, Individual contributors, see AUTHORS file |
6  | See: https://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See: https://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 #pragma once
10 
13 
14 namespace mrpt::nav
15 {
16 class CLogFileRecord_ND;
17 /** \addtogroup nav_holo Holonomic navigation methods
18  * \ingroup mrpt_nav_grp
19  * @{ */
20 
21 /** An implementation of the holonomic reactive navigation method
22  * "Nearness-Diagram".
23  * The algorithm "Nearness-Diagram" was proposed in:
24  *
25  * Nearness diagram (ND) navigation: collision avoidance in troublesome
26  * scenarios, IEEE Transactions on
27  * Robotics and Automation, Minguez, J. and Montano, L., vol. 20, no. 1, pp.
28  * 45-59, 2004.
29  *
30  * These are the optional parameters of the method which can be set by means of
31  * a configuration file passed to the constructor or to
32  * CHolonomicND::initialize() or directly in \a CHolonomicND::options
33  *
34  * \code
35  * # Section name can be changed via setConfigFileSectionName()
36  * [ND_CONFIG]
37  * factorWeights=1.0 0.5 2.0 0.4
38  * // 1: Free space
39  * // 2: Dist. in sectors
40  * // 3: Closer to target (euclidean)
41  * // 4: Hysteresis
42  * WIDE_GAP_SIZE_PERCENT = 0.25
43  * MAX_SECTOR_DIST_FOR_D2_PERCENT = 0.25
44  * RISK_EVALUATION_SECTORS_PERCENT = 0.25
45  * RISK_EVALUATION_DISTANCE = 0.15 // In normalized ps-meters [0,1]
46  * TARGET_SLOW_APPROACHING_DISTANCE = 0.60 // For stopping gradually
47  * TOO_CLOSE_OBSTACLE = 0.02 // In normalized ps-meters
48  * \endcode
49  *
50  * \sa CAbstractHolonomicReactiveMethod,CReactiveNavigationSystem
51  */
53 {
55  public:
56  /** Initialize the parameters of the navigator, from some configuration
57  * file, or default values if set to nullptr */
58  CHolonomicND(const mrpt::config::CConfigFileBase* INI_FILE = nullptr);
59 
60  // See base class docs
61  void navigate(const NavInput& ni, NavOutput& no) override;
62 
63  /** The structure used to store a detected gap in obstacles. */
64  struct TGap
65  {
66  unsigned int ini;
67  unsigned int end;
68  double maxDistance;
69  double minDistance;
70  unsigned int representative_sector;
71  };
72 
73  using TGapArray = std::vector<TGap>;
74 
75  /** The set of posible situations for each trajectory.
76  * (mrpt::typemeta::TEnumType works with this enum) */
78  {
83  };
84 
85  /** Initialize the parameters of the navigator. */
86  void initialize(const mrpt::config::CConfigFileBase& INI_FILE) override;
88  const override; // See base class docs
89 
90  /** Algorithm options */
92  {
98  /** Vector of 4 weights: [0]=Free space, [1]=Dist. in sectors,
99  * [2]=Closer to target (Euclidean), [3]=Hysteresis */
100  std::vector<double> factorWeights;
101 
102  TOptions();
103  void loadFromConfigFile(
104  const mrpt::config::CConfigFileBase& source,
105  const std::string& section) override; // See base docs
106  void saveToConfigFile(
108  const std::string& section) const override; // See base docs
109  };
110 
111  /** Parameters of the algorithm (can be set manually or loaded from
112  * CHolonomicND::initialize or options.loadFromConfigFile(), etc.) */
114 
115  double getTargetApproachSlowDownDistance() const override
116  {
118  }
119  void setTargetApproachSlowDownDistance(const double dist) override
120  {
122  }
123 
124  private:
126 
127  unsigned int direction2sector(const double a, const unsigned int N);
128 
129  /** Find gaps in the obtacles.
130  */
131  void gapsEstimator(
132  const std::vector<double>& obstacles,
133  const mrpt::math::TPoint2D& in_target, TGapArray& gaps);
134 
135  /** Search the best gap.
136  */
137  void searchBestGap(
138  const std::vector<double>& in_obstacles, const double in_maxObsRange,
139  const TGapArray& in_gaps, const mrpt::math::TPoint2D& in_target,
140  unsigned int& out_selDirection, double& out_selEvaluation,
141  TSituations& out_situation, double& out_riskEvaluation,
142  CLogFileRecord_ND& log);
143 
144  /** Fills in the representative sector field in the gap structure:
145  */
147  TGap& gap, const mrpt::math::TPoint2D& target,
148  const std::vector<double>& obstacles);
149 
150  /** Evaluate each gap:
151  */
152  void evaluateGaps(
153  const std::vector<double>& in_obstacles, const double in_maxObsRange,
154  const TGapArray& in_gaps, const unsigned int TargetSector,
155  const float TargetDist, std::vector<double>& out_gaps_evaluation);
156 
157 }; // end of CHolonomicND
158 
159 /** A class for storing extra information about the execution of
160  * CHolonomicND navigation.
161  * \sa CHolonomicND, CHolonomicLogFileRecord
162  */
164 {
166 
167  public:
168  /** Member data.
169  */
170  std::vector<int> gaps_ini, gaps_end;
171  std::vector<double> gaps_eval;
172  int32_t selectedSector;
173  double evaluation;
176 };
177 
178 /** @} */
179 } // namespace mrpt::nav
181 using namespace mrpt::nav;
182 MRPT_FILL_ENUM_MEMBER(CHolonomicND, SITUATION_TARGET_DIRECTLY);
183 MRPT_FILL_ENUM_MEMBER(CHolonomicND, SITUATION_SMALL_GAP);
184 MRPT_FILL_ENUM_MEMBER(CHolonomicND, SITUATION_WIDE_GAP);
185 MRPT_FILL_ENUM_MEMBER(CHolonomicND, SITUATION_NO_WAY_FOUND);
CAbstractHolonomicReactiveMethod.h
mrpt::nav::CHolonomicND::TGap::ini
unsigned int ini
Definition: CHolonomicND.h:66
mrpt::nav::CHolonomicND::TGap::end
unsigned int end
Definition: CHolonomicND.h:67
mrpt::nav::CAbstractHolonomicReactiveMethod::NavInput
Input parameters for CAbstractHolonomicReactiveMethod::navigate()
Definition: CAbstractHolonomicReactiveMethod.h:35
mrpt::nav::CHolonomicND::SITUATION_SMALL_GAP
@ SITUATION_SMALL_GAP
Definition: CHolonomicND.h:80
mrpt::nav::CHolonomicND::TOptions::TARGET_SLOW_APPROACHING_DISTANCE
double TARGET_SLOW_APPROACHING_DISTANCE
Definition: CHolonomicND.h:97
mrpt::nav::CHolonomicND::TOptions::saveToConfigFile
void saveToConfigFile(mrpt::config::CConfigFileBase &cfg, const std::string &section) const override
This method saves the options to a ".ini"-like file or memory-stored string list.
Definition: CHolonomicND.cpp:690
MRPT_ENUM_TYPE_END
#define MRPT_ENUM_TYPE_END()
Definition: TEnumType.h:78
mrpt::nav::CHolonomicND::TOptions::factorWeights
std::vector< double > factorWeights
Vector of 4 weights: [0]=Free space, [1]=Dist.
Definition: CHolonomicND.h:100
mrpt::nav::CLogFileRecord_ND
A class for storing extra information about the execution of CHolonomicND navigation.
Definition: CHolonomicND.h:163
mrpt::nav::CLogFileRecord_ND::riskEvaluation
double riskEvaluation
Definition: CHolonomicND.h:174
mrpt::nav::CHolonomicND::searchBestGap
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.
Definition: CHolonomicND.cpp:294
DEFINE_SERIALIZABLE
#define DEFINE_SERIALIZABLE(class_name, NS)
This declaration must be inserted in all CSerializable classes definition, within the class declarati...
Definition: CSerializable.h:152
mrpt::nav::CLogFileRecord_ND::evaluation
double evaluation
Definition: CHolonomicND.h:173
mrpt::nav::CLogFileRecord_ND::gaps_ini
std::vector< int > gaps_ini
Member data.
Definition: CHolonomicND.h:170
mrpt::math::TPoint2D_< double >
mrpt::nav::CLogFileRecord_ND::selectedSector
int32_t selectedSector
Definition: CHolonomicND.h:172
mrpt::nav::CHolonomicND::TOptions::RISK_EVALUATION_SECTORS_PERCENT
double RISK_EVALUATION_SECTORS_PERCENT
Definition: CHolonomicND.h:94
mrpt::nav::CLogFileRecord_ND::gaps_end
std::vector< int > gaps_end
Definition: CHolonomicND.h:170
mrpt::nav::CHolonomicND
An implementation of the holonomic reactive navigation method "Nearness-Diagram".
Definition: CHolonomicND.h:52
mrpt::nav::CHolonomicND::TOptions::MAX_SECTOR_DIST_FOR_D2_PERCENT
double MAX_SECTOR_DIST_FOR_D2_PERCENT
Definition: CHolonomicND.h:96
mrpt::nav::CHolonomicND::setTargetApproachSlowDownDistance
void setTargetApproachSlowDownDistance(const double dist) override
Sets the actual value of this parameter [m].
Definition: CHolonomicND.h:119
mrpt::nav
Definition: CAbstractHolonomicReactiveMethod.h:20
mrpt::nav::CHolonomicND::gapsEstimator
void gapsEstimator(const std::vector< double > &obstacles, const mrpt::math::TPoint2D &in_target, TGapArray &gaps)
Find gaps in the obtacles.
Definition: CHolonomicND.cpp:131
mrpt::nav::CHolonomicND::TOptions::TOptions
TOptions()
Definition: CHolonomicND.cpp:666
mrpt::nav::CHolonomicND::TOptions
Algorithm options.
Definition: CHolonomicND.h:91
MRPT_ENUM_TYPE_BEGIN
#define MRPT_ENUM_TYPE_BEGIN(_ENUM_TYPE_WITH_NS)
Definition: TEnumType.h:62
mrpt::nav::CHolonomicND::TOptions::loadFromConfigFile
void loadFromConfigFile(const mrpt::config::CConfigFileBase &source, const std::string &section) override
This method load the options from a ".ini"-like file or memory-stored string list.
Definition: CHolonomicND.cpp:667
mrpt::nav::CLogFileRecord_ND::situation
CHolonomicND::TSituations situation
Definition: CHolonomicND.h:175
mrpt::nav::CLogFileRecord_ND::gaps_eval
std::vector< double > gaps_eval
Definition: CHolonomicND.h:171
mrpt::nav::CHolonomicND::direction2sector
unsigned int direction2sector(const double a, const unsigned int N)
Definition: CHolonomicND.cpp:608
mrpt::nav::CHolonomicND::CHolonomicND
CHolonomicND(const mrpt::config::CConfigFileBase *INI_FILE=nullptr)
Initialize the parameters of the navigator, from some configuration file, or default values if set to...
mrpt::nav::CHolonomicND::TGap::maxDistance
double maxDistance
Definition: CHolonomicND.h:68
mrpt::nav::CHolonomicND::TOptions::RISK_EVALUATION_DISTANCE
double RISK_EVALUATION_DISTANCE
Definition: CHolonomicND.h:95
mrpt::nav::CAbstractHolonomicReactiveMethod
A base class for holonomic reactive navigation methods.
Definition: CAbstractHolonomicReactiveMethod.h:29
mrpt::nav::CHolonomicND::m_last_selected_sector
unsigned int m_last_selected_sector
Definition: CHolonomicND.h:125
mrpt::nav::CHolonomicND::TGap::minDistance
double minDistance
Definition: CHolonomicND.h:69
MRPT_FILL_ENUM_MEMBER
MRPT_FILL_ENUM_MEMBER(CHolonomicND, SITUATION_TARGET_DIRECTLY)
mrpt::config::CConfigFileBase
This class allows loading and storing values and vectors of different types from a configuration text...
Definition: config/CConfigFileBase.h:44
mrpt::config::CLoadableOptions
This is a virtual base class for sets of options than can be loaded from and/or saved to configuratio...
Definition: config/CLoadableOptions.h:26
mrpt::nav::CHolonomicND::options
TOptions options
Parameters of the algorithm (can be set manually or loaded from CHolonomicND::initialize or options....
Definition: CHolonomicND.h:113
mrpt::nav::CHolonomicND::calcRepresentativeSectorForGap
void calcRepresentativeSectorForGap(TGap &gap, const mrpt::math::TPoint2D &target, const std::vector< double > &obstacles)
Fills in the representative sector field in the gap structure:
Definition: CHolonomicND.cpp:445
mrpt::nav::CHolonomicND::initialize
void initialize(const mrpt::config::CConfigFileBase &INI_FILE) override
Initialize the parameters of the navigator.
Definition: CHolonomicND.cpp:37
mrpt::nav::CHolonomicND::TGap
The structure used to store a detected gap in obstacles.
Definition: CHolonomicND.h:64
CLoadableOptions.h
mrpt::nav::CHolonomicND::SITUATION_NO_WAY_FOUND
@ SITUATION_NO_WAY_FOUND
Definition: CHolonomicND.h:82
mrpt::nav::CHolonomicND::TGapArray
std::vector< TGap > TGapArray
Definition: CHolonomicND.h:73
mrpt::nav::CAbstractHolonomicReactiveMethod::NavOutput
Output for CAbstractHolonomicReactiveMethod::navigate()
Definition: CAbstractHolonomicReactiveMethod.h:62
mrpt::nav::CHolonomicND::evaluateGaps
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:
Definition: CHolonomicND.cpp:508
mrpt::nav::CHolonomicLogFileRecord
A base class for log records for different holonomic navigation methods.
Definition: CHolonomicLogFileRecord.h:24
mrpt::nav::CHolonomicND::saveConfigFile
void saveConfigFile(mrpt::config::CConfigFileBase &c) const override
saves all available parameters, in a forma loadable by initialize()
Definition: CHolonomicND.cpp:41
mrpt::nav::CHolonomicND::TOptions::TOO_CLOSE_OBSTACLE
double TOO_CLOSE_OBSTACLE
Definition: CHolonomicND.h:93
mrpt::nav::CHolonomicND::TOptions::WIDE_GAP_SIZE_PERCENT
double WIDE_GAP_SIZE_PERCENT
Definition: CHolonomicND.h:93
mrpt::nav::CHolonomicND::TSituations
TSituations
The set of posible situations for each trajectory.
Definition: CHolonomicND.h:77
mrpt::nav::CHolonomicND::getTargetApproachSlowDownDistance
double getTargetApproachSlowDownDistance() const override
Returns the actual value of this parameter [m], as set via the children class options structure.
Definition: CHolonomicND.h:115
mrpt::nav::CHolonomicND::SITUATION_TARGET_DIRECTLY
@ SITUATION_TARGET_DIRECTLY
Definition: CHolonomicND.h:79
mrpt::nav::CHolonomicND::TGap::representative_sector
unsigned int representative_sector
Definition: CHolonomicND.h:70
mrpt::nav::CHolonomicND::navigate
void navigate(const NavInput &ni, NavOutput &no) override
Invokes the holonomic navigation algorithm itself.
Definition: CHolonomicND.cpp:49
mrpt::nav::CHolonomicND::SITUATION_WIDE_GAP
@ SITUATION_WIDE_GAP
Definition: CHolonomicND.h:81



Page generated by Doxygen 1.8.17 for MRPT 2.0.4 at Sun Jul 19 15:15:43 UTC 2020