Main MRPT website > C++ reference
MRPT logo
CLandmarksMap.h
Go to the documentation of this file.
1 /* +---------------------------------------------------------------------------+
2  | The Mobile Robot Programming Toolkit (MRPT) C++ library |
3  | |
4  | http://www.mrpt.org/ |
5  | |
6  | Copyright (C) 2005-2012 University of Malaga |
7  | |
8  | This software was written by the Machine Perception and Intelligent |
9  | Robotics Lab, University of Malaga (Spain). |
10  | Contact: Jose-Luis Blanco <jlblanco@ctima.uma.es> |
11  | |
12  | This file is part of the MRPT project. |
13  | |
14  | MRPT is free software: you can redistribute it and/or modify |
15  | it under the terms of the GNU General Public License as published by |
16  | the Free Software Foundation, either version 3 of the License, or |
17  | (at your option) any later version. |
18  | |
19  | MRPT is distributed in the hope that it will be useful, |
20  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
21  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
22  | GNU General Public License for more details. |
23  | |
24  | You should have received a copy of the GNU General Public License |
25  | along with MRPT. If not, see <http://www.gnu.org/licenses/>. |
26  | |
27  +---------------------------------------------------------------------------+ */
28 #ifndef CLandmarksMap_H
29 #define CLandmarksMap_H
30 
32 #include <mrpt/slam/CMetricMap.h>
33 #include <mrpt/slam/CLandmark.h>
39 #include <mrpt/math/CMatrix.h>
42 
43 namespace mrpt
44 {
45 namespace slam
46 {
47  class CObservationBeaconRanges;
49 
50  /** Internal use.
51  */
52  typedef std::vector<CLandmark> TSequenceLandmarks;
53 
55 
56  /** A class for storing a map of 3D probabilistic landmarks.
57  * <br>
58  * Currently these types of landmarks are defined: (see mrpt::slam::CLandmark)
59  * - For "visual landmarks" from images: features with associated descriptors.
60  * - For laser scanners: each of the range measuremnts, as "occupancy" landmarks.
61  * - For grid maps: "Panoramic descriptor" feature points.
62  * - For range-only localization and SLAM: Beacons. It is also supported the simulation of expected beacon-to-sensor readings, observation likelihood,...
63  * <br>
64  * <b>How to load landmarks from observations:</b><br>
65  * When invoking CLandmarksMap::insertObservation(), the values in CLandmarksMap::insertionOptions will
66  * determinate the kind of landmarks that will be extracted and fused into the map. Supported feature
67  * extraction processes are listed next:
68  *
69  <table>
70  <tr> <td><b>Observation class:</b></td> <td><b>Generated Landmarks:</b></td> <td><b>Comments:</b></td> </tr>
71  <tr> <td>CObservationImage</td> <td>vlSIFT</td> <td>1) A SIFT feature is created for each SIFT detected in the image,
72  <br>2) Correspondences between SIFTs features and existing ones are finded by computeMatchingWith3DLandmarks,
73  <br>3) The corresponding feaures are fused, and the new ones added, with an initial uncertainty according to insertionOptions</td> </tr>
74  <tr> <td>CObservationStereoImages</td> <td>vlSIFT</td> <td> Each image is separately procesed by the method for CObservationImage observations </td> </tr>
75  <tr> <td>CObservationStereoImages</td> <td>vlColor</td> <td> TODO... </td> </tr>
76  <tr> <td>CObservation2DRangeScan</td> <td>glOccupancy</td> <td> A landmark is added for each range in the scan, with its appropiate covariance matrix derived from the jacobians matrixes. </td> </tr>
77  </table>
78  *
79  * \sa CMetricMap
80  * \ingroup mrpt_vision_grp
81  */
83  {
84  // This must be added to any CSerializable derived class:
86 
87  private:
88 
89  virtual void internal_clear();
90 
91  /** Insert the observation information into this map. This method must be implemented
92  * in derived classes.
93  * \param obs The observation
94  * \param robotPose The 3D pose of the robot mobile base in the map reference system, or NULL (default) if you want to use CPose2D(0,0,deg)
95  *
96  * \sa CObservation::insertObservationInto
97  */
98  virtual bool internal_insertObservation( const CObservation *obs, const CPose3D *robotPose = NULL );
99 
100  public:
101 
102  static mrpt::utils::TColorf COLOR_LANDMARKS_IN_3DSCENES; //!< The color of landmark ellipsoids in CLandmarksMap::getAs3DObject
103 
104  typedef mrpt::slam::CLandmark landmark_type;
105 
106 
107  /** The list of landmarks: the wrapper class is just for maintaining the KD-Tree representation
108  */
110  {
111  private:
112  /** The actual list:
113  */
115 
116  /** A grid-map with the set of landmarks falling into each cell.
117  * \todo Use the KD-tree instead?
118  */
120 
121  /** Auxiliary variables used in "getLargestDistanceFromOrigin"
122  * \sa getLargestDistanceFromOrigin
123  */
125 
126  /** Auxiliary variables used in "getLargestDistanceFromOrigin"
127  * \sa getLargestDistanceFromOrigin
128  */
130 
131  public:
132  /** Default constructor
133  */
134  TCustomSequenceLandmarks();
135 
137  inline iterator begin() { return m_landmarks.begin(); };
138  inline iterator end() { return m_landmarks.end(); };
139  void clear();
140  inline size_t size() const { return m_landmarks.size(); };
141 
143  inline const_iterator begin() const { return m_landmarks.begin(); };
144  inline const_iterator end() const { return m_landmarks.end(); };
145 
146  /** The object is copied, thus the original copy passed as a parameter can be released.
147  */
148  void push_back( const CLandmark &lm);
149  CLandmark* get(unsigned int indx);
150  const CLandmark* get(unsigned int indx) const;
151  void isToBeModified(unsigned int indx);
152  void hasBeenModified(unsigned int indx);
153  void hasBeenModifiedAll();
154  void erase(unsigned int indx);
155 
156  CDynamicGrid<vector_int>* getGrid() { return &m_grid; }
157 
158  /** Returns the landmark with a given landmrk ID, or NULL if not found
159  */
160  const CLandmark* getByID( CLandmark::TLandmarkID ID ) const;
161 
162  /** Returns the landmark with a given beacon ID, or NULL if not found
163  */
164  const CLandmark* getByBeaconID( unsigned int ID ) const;
165 
166  /** This method returns the largest distance from the origin to any of the points, such as a sphere centered at the origin with this radius cover ALL the points in the map (the results are buffered, such as, if the map is not modified, the second call will be much faster than the first one).
167  */
168  float getLargestDistanceFromOrigin() const;
169 
170  } landmarks;
171 
172  /** Constructor
173  */
174  CLandmarksMap();
175 
176  /** Virtual destructor.
177  */
178  virtual ~CLandmarksMap();
179 
180 
181  /**** FAMD ***/
182  /** Map of the Euclidean Distance between the descriptors of two SIFT-based landmarks
183  */
184  static std::map<std::pair<mrpt::slam::CLandmark::TLandmarkID, mrpt::slam::CLandmark::TLandmarkID>, double> _mEDD;
186  static bool _maxIDUpdated;
187 
189  /**** END FAMD *****/
190 
191  /** Computes the ratio in [0,1] of correspondences between "this" and the "otherMap" map, whose 6D pose relative to "this" is "otherMapPose"
192  * In the case of a multi-metric map, this returns the average between the maps. This method always return 0 for grid maps.
193  * \param otherMap [IN] The other map to compute the matching with.
194  * \param otherMapPose [IN] The 6D pose of the other map as seen from "this".
195  * \param minDistForCorr [IN] The minimum distance between 2 non-probabilistic map elements for counting them as a correspondence.
196  * \param minMahaDistForCorr [IN] The minimum Mahalanobis distance between 2 probabilistic map elements for counting them as a correspondence.
197  *
198  * \return The matching ratio [0,1]
199  * \sa computeMatchingWith2D
200  */
201  float compute3DMatchingRatio(
202  const CMetricMap *otherMap,
203  const CPose3D &otherMapPose,
204  float minDistForCorr = 0.10f,
205  float minMahaDistForCorr = 2.0f
206  ) const;
207 
208  /** With this struct options are provided to the observation insertion process.
209  */
211  {
212  public:
213  /** Initilization of default parameters
214  */
216 
217  /** See utils::CLoadableOptions
218  */
219  void loadFromConfigFile(
220  const mrpt::utils::CConfigFileBase &source,
221  const std::string &section);
222 
223  /** See utils::CLoadableOptions
224  */
225  void dumpToTextStream(CStream &out) const;
226 
227  /** If set to true (default), the insertion of a CObservationImage in the map will insert SIFT 3D features.
228  */
230 
231  /** If set to true (default), the insertion of a CObservationStereoImages in the map will insert SIFT 3D features.
232  */
234 
235  /** If set to true (default), inserting a CObservation2DRangeScan in the map will generate landmarks for each range.
236  */
238 
239  /** [For SIFT landmarks only] The ratio between the best and second best descriptor distances to set as correspondence (Default=0.4)
240  */
242 
243  /** [For SIFT landmarks only] The minimum likelihood value of a match to set as correspondence (Default=0.5)
244  */
246 
247  /****************************************** FAMD ******************************************/
248  /** [For SIFT landmarks only] The minimum Euclidean Descriptor Distance value of a match to set as correspondence (Default=200)
249  */
251 
252  /** [For SIFT landmarks only] Method to compute 3D matching (Default = 0 (Our method))
253  * 0: Our method -> Euclidean Distance between Descriptors and 3D position
254  * 1: Sim, Elinas, Griffin, Little -> Euclidean Distance between Descriptors
255  */
256  unsigned int SIFTMatching3DMethod;
257 
258  /** [For SIFT landmarks only] Method to compute the likelihood (Default = 0 (Our method))
259  * 0: Our method -> Euclidean Distance between Descriptors and 3D position
260  * 1: Sim, Elinas, Griffin, Little -> 3D position
261  */
262  unsigned int SIFTLikelihoodMethod;
263 
264  /****************************************** END FAMD ******************************************/
265 
266  /** [For SIFT landmarks only] The distance (in meters) of the mean value of landmarks, for the initial position PDF (Default = 3m)
267  */
269 
270  /** [For SIFT landmarks only] The width (in meters, standard deviation) of the ellipsoid in the axis perpendicular to the main directiom (Default = 0.05f)
271  */
273 
274  /** [For SIFT landmarks only] The standard deviation (in pixels) for the SIFTs detector (This is used for the Jacobbian to project stereo images to 3D)
275  */
276  float SIFTs_stdXY, SIFTs_stdDisparity;
277 
278  /** Number of points to extract in the image
279  */
281 
282  /** Maximum depth of 3D landmarks when loading a landmarks map from a stereo image observation.
283  */
285 
286  /** Maximum distance (in pixels) from a point to a certain epipolar line to be considered a potential match.
287  */
289 
290  /** Indicates if the images (as well as the SIFT detected features) should be shown in a window.
291  */
293 
294  /** Parameters of the SIFT feature detector/descriptors while inserting images in the landmark map.
295  * \note There exists another \a SIFT_feat_options field in the \a likelihoodOptions member.
296  * \note All parameters of this field can be loaded from a config file. See mrpt::vision::CFeatureExtraction::TOptions for the names of the expected fields.
297  */
299 
300  } insertionOptions;
301 
302  /** With this struct options are provided to the likelihood computations.
303  */
305  {
306  public:
307  /** Initilization of default parameters
308  */
310 
311  /** See utils::CLoadableOptions
312  */
313  void loadFromConfigFile(
314  const mrpt::utils::CConfigFileBase &source,
315  const std::string &section);
316 
317  /** See utils::CLoadableOptions
318  */
319  void dumpToTextStream(CStream &out) const;
320 
321  /** The number of rays from a 2D range scan will be decimated by this factor (default = 1, no decimation)
322  */
324 
326 
328 
330 
332 
333  /** Considers 1 out of "SIFTs_decimation" visual landmarks in the observation during the likelihood computation.
334  */
336 
337  /** The standard deviation used for Beacon ranges likelihood (default=0.08).
338  */
340 
341  /** The ratio between gaussian and uniform distribution (default=1).
342  */
343  float alphaRatio;
344 
345  /** Maximun reliable beacon range value (default=20)
346  */
348 
349  /** This struct store de GPS longitude, latitude (in degrees ) and altitude (in meters) for the first GPS observation
350  * compose with de sensor position on the robot.
351  */
353  {
354  public:
355  TGPSOrigin();
356 
357  /** Longitud del Origen del GPS (en grados)
358  */
359  double longitude;
360 
361  /** Latitud del Origen del GPS (en grados)
362  */
363  double latitude;
364 
365  /** Altitud del Origen del GPS (en metros)
366  */
367  double altitude;
368 
369  /** Estas tres opciones sirven para encajar mapas de GPS con posiciones absolutas con
370  * mapas de otros sensores (como laser :D) se obtienen facilmente con el programa matlab map_matching
371  * ang : Rotación del mapa del GPS (para encajarlo en grados)
372  * x_shift: Desplazamiento en x relativo al robot (en metros)
373  * y_shift: Desplazamiento en y relativo al robot (en metros)
374  */
375  double ang,
376  x_shift,
377  y_shift;
378 
379  /** Número mínimo de satelites para tener en cuenta los datos
380  */
381  unsigned int min_sat;
382 
383  } GPSOrigin;
384 
385  /** A constant "sigma" for GPS localization data (in meters)
386  */
387  float GPS_sigma;
388 
389  /** Parameters of the SIFT feature detector/descriptors while inserting images in the landmark map.
390  * \note There exists another \a SIFT_feat_options field in the \a insertionOptions member.
391  * \note All parameters of this field can be loaded from a config file. See mrpt::vision::CFeatureExtraction::TOptions for the names of the expected fields.
392  */
394 
395  } likelihoodOptions;
396 
397  /** This struct stores extra results from invoking insertObservation
398  */
400  {
401  /** The number of SIFT detected in left and right images respectively
402  */
403 
404  unsigned int nSiftL, nSiftR;
405 
406 
407  } insertionResults;
408 
409  /** With this struct options are provided to the fusion process.
410  */
412  {
413  /** Initialization
414  */
415  TFuseOptions();
416 
417  /** Required number of times of a landmark to be seen not to be removed, in "ellapsedTime" seconds.
418  */
419  unsigned int minTimesSeen;
420 
421  /** See "minTimesSeen"
422  */
424 
425  } fuseOptions;
426 
427 
428  /** Save to a text file.
429  * In line "i" there are the (x,y,z) mean values of the i'th landmark + type of landmark + # times seen + timestamp + RGB/descriptor + ID
430  *
431  * Returns false if any error occured, true elsewere.
432  */
433  bool saveToTextFile(std::string file);
434 
435  /** Save to a MATLAB script which displays 2D error ellipses for the map (top-view, projection on the XY plane).
436  * \param file The name of the file to save the script to.
437  * \param style The MATLAB-like string for the style of the lines (see 'help plot' in MATLAB for posibilities)
438  * \param stdCount The ellipsoids will be drawn from the center to "stdCount" times the "standard deviations". (default is 2std = 95% confidence intervals)
439  *
440  * \return Returns false if any error occured, true elsewere.
441  */
442  bool saveToMATLABScript2D(
443  std::string file,
444  const char *style="b",
445  float stdCount = 2.0f );
446 
447  /** Save to a MATLAB script which displays 3D error ellipses for the map.
448  * \param file The name of the file to save the script to.
449  * \param style The MATLAB-like string for the style of the lines (see 'help plot' in MATLAB for posibilities)
450  * \param stdCount The ellipsoids will be drawn from the center to a given confidence interval in [0,1], e.g. 2 sigmas=0.95 (default is 2std = 0.95 confidence intervals)
451  *
452  * \return Returns false if any error occured, true elsewere.
453  */
454  bool saveToMATLABScript3D(
455  std::string file,
456  const char *style="b",
457  float confInterval = 0.95f ) const ;
458 
459  /** Returns the stored landmarks count.
460  */
461  size_t size() const;
462 
463  /** Computes the (logarithmic) likelihood function for a sensed observation "o" according to "this" map.
464  * This is the implementation of the algorithm reported in the paper:
465  <em>J.L. Blanco, J. Gonzalez, and J.A. Fernandez-Madrigal, "A Consensus-based Approach for Estimating the Observation Likelihood of Accurate Range Sensors", in IEEE International Conference on Robotics and Automation (ICRA), Rome (Italy), Apr 10-14, 2007</em>
466  */
467  double computeLikelihood_RSLC_2007( const CLandmarksMap *s, const CPose2D &sensorPose);
468 
469  /** Loads into this landmarks map the SIFT features extracted from an image observation (Previous contents of map will be erased)
470  * The robot is assumed to be at the origin of the map.
471  * Some options may be applicable from "insertionOptions" (insertionOptions.SIFTsLoadDistanceOfTheMean)
472  *
473  * \param feat_options Optionally, you can pass here parameters for changing the default SIFT detector settings.
474  */
475  void loadSiftFeaturesFromImageObservation(
476  const CObservationImage &obs,
478  );
479 
480  /** Loads into this landmarks map the SIFT features extracted from an observation consisting of a pair of stereo-image (Previous contents of map will be erased)
481  * The robot is assumed to be at the origin of the map.
482  * Some options may be applicable from "insertionOptions"
483  *
484  * \param feat_options Optionally, you can pass here parameters for changing the default SIFT detector settings.
485  */
486  void loadSiftFeaturesFromStereoImageObservation(
487  const CObservationStereoImages &obs,
490  );
491 
492  /** Loads into this landmarks-map a set of occupancy features according to a 2D range scan (Previous contents of map will be erased)
493  * \param obs The observation
494  * \param robotPose The robot pose in the map (Default = the origin)
495  * Some options may be applicable from "insertionOptions"
496  */
497  void loadOccupancyFeaturesFrom2DRangeScan(
498  const CObservation2DRangeScan &obs,
499  const CPose3D *robotPose = NULL,
500  unsigned int downSampleFactor = 1);
501 
502 
503  /** Computes the (logarithmic) likelihood that a given observation was taken from a given pose in the world being modeled with this map.
504  *
505  * In the current implementation, this method behaves in a different way according to the nature of
506  * the observation's class:
507  * - "mrpt::slam::CObservation2DRangeScan": This calls "computeLikelihood_RSLC_2007".
508  * - "mrpt::slam::CObservationStereoImages": This calls "computeLikelihood_SIFT_LandmarkMap".
509  *
510  * \param takenFrom The robot's pose the observation is supposed to be taken from.
511  * \param obs The observation.
512  * \return This method returns a likelihood value > 0.
513  *
514  * \sa Used in particle filter algorithms, see: CMultiMetricMapPDF::update
515  */
516  double computeObservationLikelihood( const CObservation *obs, const CPose3D &takenFrom );
517 
518  void computeMatchingWith2D(
519  const CMetricMap *otherMap,
520  const CPose2D &otherMapPose,
521  float maxDistForCorrespondence,
522  float maxAngularDistForCorrespondence,
523  const CPose2D &angularDistPivotPoint,
524  TMatchingPairList &correspondences,
525  float &correspondencesRatio,
526  float *sumSqrDist = NULL,
527  bool onlyKeepTheClosest = false,
528  bool onlyUniqueRobust = false ) const;
529 
530  /** Perform a search for correspondences between "this" and another lansmarks map:
531  * In this class, the matching is established solely based on the landmarks' IDs.
532  * \param otherMap [IN] The other map.
533  * \param correspondences [OUT] The matched pairs between maps.
534  * \param correspondencesRatio [OUT] This is NumberOfMatchings / NumberOfLandmarksInTheAnotherMap
535  * \param otherCorrespondences [OUT] Will be returned with a vector containing "true" for the indexes of the other map's landmarks with a correspondence.
536  */
537  void computeMatchingWith3DLandmarks(
538  const mrpt::slam::CLandmarksMap *otherMap,
539  TMatchingPairList &correspondences,
540  float &correspondencesRatio,
541  std::vector<bool> &otherCorrespondences) const;
542 
543  /** Changes the reference system of the map to a given 3D pose.
544  */
545  void changeCoordinatesReference( const CPose3D &newOrg );
546 
547  /** Changes the reference system of the map "otherMap" and save the result in "this" map.
548  */
549  void changeCoordinatesReference( const CPose3D &newOrg, const mrpt::slam::CLandmarksMap *otherMap );
550 
551  /** Fuses the contents of another map with this one, updating "this" object with the result.
552  * This process involves fusing corresponding landmarks, then adding the new ones.
553  * \param other The other landmarkmap, whose landmarks will be inserted into "this"
554  * \param justInsertAllOfThem If set to "true", all the landmarks in "other" will be inserted into "this" without checking for possible correspondences (may appear duplicates ones, etc...)
555  */
556  void fuseWith( CLandmarksMap &other, bool justInsertAllOfThem = false );
557 
558  /** Returns the (logarithmic) likelihood of a set of landmarks "map" given "this" map.
559  * See paper: JJAA 2006
560  */
561  double computeLikelihood_SIFT_LandmarkMap( CLandmarksMap *map,
562  TMatchingPairList *correspondences = NULL,
563  std::vector<bool> *otherCorrespondences = NULL);
564 
565  /** Returns true if the map is empty/no observation has been inserted.
566  */
567  bool isEmpty() const;
568 
569  /** Simulates a noisy reading toward each of the beacons in the landmarks map, if any.
570  * \param in_robotPose This robot pose is used to simulate the ranges to each beacon.
571  * \param in_sensorLocationOnRobot The 3D position of the sensor on the robot
572  * \param out_Observations The results will be stored here. NOTICE that the fields "CObservationBeaconRanges::minSensorDistance","CObservationBeaconRanges::maxSensorDistance" and "CObservationBeaconRanges::stdError" MUST BE FILLED OUT before calling this function.
573  * An observation will be generated for each beacon in the map, but notice that some of them may be missed if out of the sensor maximum range.
574  */
575  void simulateBeaconReadings(
576  const CPose3D &in_robotPose,
577  const CPoint3D &in_sensorLocationOnRobot,
578  CObservationBeaconRanges &out_Observations ) const;
579 
580  /** Simulates a noisy bearing-range observation of all the beacons (landamrks with type glBeacon) in the landmarks map, if any.
581  * \param[in] robotPose The robot pose.
582  * \param[in] sensorLocationOnRobot The 3D position of the sensor on the robot
583  * \param[out] observations The results will be stored here.
584  * \param[in] sensorDetectsIDs If this is set to false, all the landmarks will be sensed with INVALID_LANDMARK_ID as ID.
585  * \param[in] stdRange The sigma of the sensor noise in range (meters).
586  * \param[in] stdYaw The sigma of the sensor noise in yaw (radians).
587  * \param[in] stdPitch The sigma of the sensor noise in pitch (radians).
588  * \param[out] real_associations If it's not a NULL pointer, this will contain at the return the real indices of the landmarks in the map in the same order than they appear in out_Observations. Useful when sensorDetectsIDs=false. Spurious readings are assigned a std::string::npos (=-1) index.
589  * \param[in] spurious_count_mean The mean number of spurious measurements (uniformly distributed in range & angle) to generate. The number of spurious is generated by rounding a random Gaussin number. If both this mean and the std are zero (the default) no spurious readings are generated.
590  * \param[in] spurious_count_std Read spurious_count_mean above.
591  *
592  * \note The fields "CObservationBearingRange::fieldOfView_*","CObservationBearingRange::maxSensorDistance" and "CObservationBearingRange::minSensorDistance" MUST BE FILLED OUT before calling this function.
593  * \note At output, the observation will have CObservationBearingRange::validCovariances set to "false" and the 3 sensor_std_* members correctly set to their values.
594  * An observation will be generated for each beacon in the map, but notice that some of them may be missed if out of the sensor maximum range or field of view-
595  */
596  void simulateRangeBearingReadings(
597  const CPose3D &robotPose,
598  const CPose3D &sensorLocationOnRobot,
599  CObservationBearingRange &observations,
600  bool sensorDetectsIDs = true,
601  const float stdRange = 0.01f,
602  const float stdYaw = DEG2RAD(0.1f),
603  const float stdPitch = DEG2RAD(0.1f),
604  vector_size_t *real_associations = NULL,
605  const double spurious_count_mean = 0,
606  const double spurious_count_std = 0
607  ) const;
608 
609 
610  /** This virtual method saves the map to a file "filNamePrefix"+< some_file_extension >, as an image or in any other applicable way (Notice that other methods to save the map may be implemented in classes implementing this virtual interface).
611  * In the case of this class, these files are generated:
612  * - "filNamePrefix"+"_3D.m": A script for MATLAB for drawing landmarks as 3D ellipses.
613  * - "filNamePrefix"+"_3D.3DScene": A 3D scene with a "ground plane grid" and the set of ellipsoids in 3D.
614  */
615  void saveMetricMapRepresentationToFile(
616  const std::string &filNamePrefix ) const;
617 
618  /** Returns a 3D object representing the map.
619  * \sa COLOR_LANDMARKS_IN_3DSCENES
620  */
621  void getAs3DObject ( mrpt::opengl::CSetOfObjectsPtr &outObj ) const;
622 
623  /** This method is called at the end of each "prediction-update-map insertion" cycle within "mrpt::slam::CMetricMapBuilderRBPF::processActionObservation".
624  * This method should normally do nothing, but in some cases can be used to free auxiliary cached variables.
625  */
626  virtual void auxParticleFilterCleanUp();
627 
628  }; // End of class def.
629 
630 
631  } // End of namespace
632 } // End of namespace
633 
634 #endif



Page generated by Doxygen 1.8.3 for MRPT 0.9.6 SVN: at Fri Feb 15 22:05:02 EST 2013