Main MRPT website > C++ reference
MRPT logo
CMetricMapBuilderRBPF.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-2014, 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 CMetricMapBuilderRBPF_H
10 #define CMetricMapBuilderRBPF_H
11 
15 
20 
21 #include <mrpt/slam/link_pragmas.h>
22 
23 namespace mrpt
24 {
25 namespace slam
26 {
27  /** This class implements a Rao-Blackwelized Particle Filter (RBPF) approach to map building (SLAM).
28  * Internally, the list of particles, each containing a hypothesis for the robot path plus its associated
29  * metric map, is stored in an object of class CMultiMetricMapPDF.
30  *
31  * This class processes robot actions and observations sequentially (through the method CMetricMapBuilderRBPF::processActionObservation)
32  * and exploits the generic design of metric map classes in MRPT to deal with any number and combination of maps simultaneously: the likelihood
33  * of observations is the product of the likelihood in the different maps, etc.
34  *
35  * A number of particle filter methods are implemented as well, by selecting the appropriate values in TConstructionOptions::PF_options.
36  * Not all the PF algorithms are implemented for all kinds of maps.
37  *
38  * For an example of usage, check the application "rbpf-slam", in "apps/RBPF-SLAM". See also the <a href="http://www.mrpt.org/Application:RBPF-SLAM" >wiki page</a>.
39  *
40  * \note Since MRPT 0.7.2, the new variables "localizeLinDistance,localizeAngDistance" are introduced to provide a way to update the robot pose at a different rate than the map is updated.
41  * \note Since MRPT 0.7.1 the semantics of the parameters "insertionLinDistance" and "insertionAngDistance" changes: the entire RBFP is now NOT updated unless odometry increments surpass the threshold (previously, only the map was NOT updated). This is done to gain efficiency.
42  * \note Since MRPT 0.6.2 this class implements full 6D SLAM. Previous versions worked in 2D + heading only.
43  *
44  * \sa CMetricMap \ingroup metric_slam_grp
45  */
47  {
48  public:
49  /** The map PDF: It includes a path and associated map for each particle.
50  */
52 
53  protected:
54  /** The configuration of the particle filter:
55  */
57 
58  /** Distances (linear and angular) for inserting a new observation into the map.
59  */
60  float insertionLinDistance,insertionAngDistance;
61 
62  /** Distances (linear and angular) for updating the robot pose estimate (and particles weighs, if applicable).
63  */
64  float localizeLinDistance,localizeAngDistance;
65 
66 
67  mrpt::poses::CPose3DPDFGaussian odoIncrementSinceLastLocalization; //!< Traveled distance since last localization update
68  mrpt::poses::CPose3D odoIncrementSinceLastMapUpdate; //!< Traveled distance since last map update
69 
70  /** A buffer: memory is actually hold within "mapPDF".
71  */
73 
74  public:
75 
76  /** Options for building a CMetricMapBuilderRBPF object, passed to the constructor.
77  */
79  {
80  public:
81  /** Constructor
82  */
84 
85  /** See utils::CLoadableOptions
86  */
87  void loadFromConfigFile(
88  const mrpt::utils::CConfigFileBase &source,
89  const std::string &section);
90 
91  /** See utils::CLoadableOptions
92  */
93  void dumpToTextStream(CStream &out) const;
94 
97 
100 
102 
105  };
106 
107  /** Constructor.
108  */
109  CMetricMapBuilderRBPF( const TConstructionOptions &initializationOptions );
110 
111  /** Destructor.
112  */
113  virtual ~CMetricMapBuilderRBPF( );
114 
115  /** Initialize the method, starting with a known location PDF "x0"(if supplied, set to NULL to left unmodified) and a given fixed, past map.
116  */
117  void initialize(
118  const CSimpleMap &initialMap = CSimpleMap(),
119  CPosePDF *x0 = NULL
120  );
121 
122  /** Clear all elements of the maps.
123  */
124  void clear();
125 
126  /** Returns a copy of the current best pose estimation as a pose PDF.
127  */
128  CPose3DPDFPtr getCurrentPoseEstimation() const;
129 
130  /** Returns the current most-likely path estimation (the path associated to the most likely particle).
131  */
132  void getCurrentMostLikelyPath( std::deque<TPose3D> &outPath ) const;
133 
134  /** Appends a new action and observations to update this map: See the description of the class at the top of this page to see a more complete description.
135  * \param action The incremental 2D pose change in the robot pose. This value is deterministic.
136  * \param observations The set of observations that robot senses at the new pose.
137  * Statistics will be saved to statsLastIteration
138  */
139  void processActionObservation(
140  CActionCollection &action,
141  CSensoryFrame &observations );
142 
143  /** Fills "out_map" with the set of "poses"-"sensory-frames", thus the so far built map.
144  */
145  void getCurrentlyBuiltMap(CSimpleMap &out_map) const;
146 
147  /** Returns the map built so far. NOTE that for efficiency a pointer to the internal object is passed, DO NOT delete nor modify the object in any way, if desired, make a copy of ir with "duplicate()".
148  */
149  CMultiMetricMap* getCurrentlyBuiltMetricMap();
150 
151  /** Returns just how many sensory-frames are stored in the currently build map.
152  */
153  unsigned int getCurrentlyBuiltMapSize();
154 
155  /** A useful method for debugging: the current map (and/or poses) estimation is dumped to an image file.
156  * \param file The output file name
157  * \param formatEMF_BMP Output format = true:EMF, false:BMP
158  */
159  void saveCurrentEstimationToImage(const std::string &file, bool formatEMF_BMP = true);
160 
161  /** A usefull method for debugging: draws the current map and path hypotheses to a CCanvas
162  */
163  void drawCurrentEstimationToImage( utils::CCanvas *img );
164 
165  /** A logging utility: saves the current path estimation for each particle in a text file (a row per particle, each 3-column-entry is a set [x,y,phi], respectively).
166  */
167  void saveCurrentPathEstimationToTextFile( std::string fil );
168 
169  double getCurrentJointEntropy();
170 
171  /** This structure will hold stats after each execution of processActionObservation
172  */
174  {
175  TStats() :
176  observationsInserted(false)
177  { }
178 
179  /** Whether the SF has been inserted in the metric maps. */
181 
182  };
183 
184 
185  /** This structure will hold stats after each execution of processActionObservation
186  */
188 
189  }; // End of class def.
190 
191  } // End of namespace
192 } // End of namespace
193 
194 #endif
bool observationsInserted
Whether the SF has been inserted in the metric maps.
mrpt::poses::CPose3D odoIncrementSinceLastMapUpdate
Traveled distance since last map update.
This class stores any customizable set of metric maps.
float insertionLinDistance
Distances (linear and angular) for inserting a new observation into the map.
float localizeLinDistance
Distances (linear and angular) for updating the robot pose estimate (and particles weighs...
CMultiMetricMapPDF mapPDF
The map PDF: It includes a path and associated map for each particle.
Declares a class for storing a collection of robot actions.
This class allows loading and storing values and vectors of different types from a configuration text...
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
Definition: CStream.h:38
non_copiable_ptr< CMultiMetricMap > currentMetricMapEstimation
A buffer: memory is actually hold within "mapPDF".
This virtual class is the base for SLAM implementations.
Declares a class that represents a probability density function (pdf) of a 2D pose (x...
Definition: CPosePDF.h:39
This class stores a sequence of pairs, thus a "metric map" can be t...
Definition: CSimpleMap.h:34
The struct for passing extra simulation parameters to the prediction/update stage when running a part...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
TStats m_statsLastIteration
This structure will hold stats after each execution of processActionObservation.
A set of TMetricMapInitializer structures, passed to the constructor CMultiMetricMap::CMultiMetricMap...
Declares a class for storing a "sensory frame", a set of "observations" taken by the robot approximat...
Definition: CSensoryFrame.h:53
This class implements a Rao-Blackwelized Particle Filter (RBPF) approach to map building (SLAM)...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
Definition: CPose3D.h:69
The configuration of a particle filter.
Declares a class that represents a Probability Density function (PDF) of a 3D pose ...
This virtual class defines the interface of any object accepting drawing primitives on it...
Definition: CCanvas.h:40
mrpt::poses::CPose3DPDFGaussian odoIncrementSinceLastLocalization
Traveled distance since last localization update.
This structure will hold stats after each execution of processActionObservation.
bayes::CParticleFilter::TParticleFilterOptions PF_options
Declares a class that represents a Rao-Blackwellized set of particles for solving the SLAM problem (T...
Options for building a CMetricMapBuilderRBPF object, passed to the constructor.
bayes::CParticleFilter::TParticleFilterOptions m_PF_options
The configuration of the particle filter:
A wrapper class for pointers that can NOT be copied with "=" operator, raising an exception at runtim...
This is a virtual base class for sets of options than can be loaded from and/or saved to configuratio...



Page generated by Doxygen 1.8.8 for MRPT 1.2.2 SVN:Unversioned directory at Tue Oct 14 02:14:08 UTC 2014