Main MRPT website > C++ reference for MRPT 1.9.9
CTopLCDetector_FabMap.cpp
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 
10 #include "hmtslam-precomp.h" // Precomp header
11 
12 #ifdef HTMSLAM_HAS_FABMAP
13 #include <FabMapLibInterface.h>
14 #define THE_FABMAP static_cast<fabmap::FabMapInstance*>(m_fabmap)
15 #endif
16 
17 using namespace mrpt;
18 using namespace mrpt::utils;
19 using namespace mrpt::obs;
20 using namespace mrpt::poses;
21 using namespace mrpt::hmtslam;
22 using namespace std;
23 
24 CTopLCDetector_FabMap::CTopLCDetector_FabMap(CHMTSLAM* hmtslam)
25  : CTopLCDetectorBase(hmtslam), m_fabmap(nullptr)
26 {
27 #ifdef HTMSLAM_HAS_FABMAP
28  // Use already loaded options:
31 
32  unsigned int nVocabSize;
33  if (!fabmap::ParseOXV_PeekDimensions(
34  o->vocab_path + o->vocabName + ".oxv", nVocabSize))
36  "Error parsing vocabulary file: %s",
37  std::string(o->vocab_path + o->vocabName + ".oxv").c_str())
38 
39  m_fabmap = new fabmap::FabMapInstance(
40  o->vocab_path, o->vocabName, o->p_obs_given_exists, 0.1,
41  o->p_at_new_place, nVocabSize, o->df_lik_smooth);
42 
43  // Restart msg:
44  cout << "[CTopLCDetector_FabMap::constructor] Resetting FabMap" << endl;
45  THE_FABMAP->hmtslam_restart();
46 #else
47  THROW_EXCEPTION("Please, recompile MRPT with FabMap to use this class.")
48 #endif
49 }
50 
52 {
53 #ifdef HTMSLAM_HAS_FABMAP
54  delete THE_FABMAP;
55  m_fabmap = nullptr;
56 #endif
57 }
58 
59 /** This method must compute the topological observation model.
60  * \param out_log_lik The output, a log-likelihood.
61  * \return nullptr, or a PDF of the estimated translation between the two areas
62  * (can be a multi-modal PDF).
63  */
65  const THypothesisID& hypID, const CHMHMapNode::Ptr& currentArea,
66  const CHMHMapNode::Ptr& refArea, double& out_log_lik)
67 {
68  MRPT_UNUSED_PARAM(hypID);
69  MRPT_UNUSED_PARAM(currentArea);
70  MRPT_UNUSED_PARAM(refArea);
71  MRPT_UNUSED_PARAM(out_log_lik);
72  return CPose3DPDF::Ptr();
73 }
74 
75 /** Hook method for being warned about the insertion of a new poses into the
76  * maps.
77  * This should be independent of hypothesis IDs.
78  */
80  const TPoseID& poseID, const CSensoryFrame* SF)
81 {
82 #ifdef HTMSLAM_HAS_FABMAP
83 
84  vector<string> lstObsImages;
85 
86  size_t n = 0;
88  while ((obsIm = SF->getObservationByClass<CObservationImage>(n)))
89  {
90  string path;
91  obsIm->image.getExternalStorageFileAbsolutePath(path);
92  lstObsImages.push_back(path);
93  n++;
94  };
95 
96  if (lstObsImages.empty()) return; // Not all poses must have images.
97 
98  cout << "[OnNewPose] Adding new pose: " << poseID
99  << " # of images: " << lstObsImages.size() << endl;
100  THE_FABMAP->hmtslam_addNewPose(poseID, lstObsImages);
101 
102 #else
103  MRPT_UNUSED_PARAM(poseID);
104  MRPT_UNUSED_PARAM(SF);
105 #endif
106 }
107 
108 // Initialization
110  : vocab_path("./vocab"),
111  vocabName("vocab_name"),
112  p_obs_given_exists(0.39),
113  p_at_new_place(0.99),
114  df_lik_smooth(0.99)
115 {
116 }
117 
118 // Load parameters from configuration source
120  const mrpt::utils::CConfigFileBase& iniFile, const std::string& section)
121 {
122  MRPT_LOAD_CONFIG_VAR(vocab_path, string, iniFile, section);
123  MRPT_LOAD_CONFIG_VAR(vocabName, string, iniFile, section);
124  MRPT_LOAD_CONFIG_VAR(p_obs_given_exists, double, iniFile, section);
125  MRPT_LOAD_CONFIG_VAR(p_at_new_place, double, iniFile, section);
126  MRPT_LOAD_CONFIG_VAR(df_lik_smooth, double, iniFile, section);
127 }
128 
129 // This method must display clearly all the contents of the structure in
130 // textual form, sending it to a CStream.
132  mrpt::utils::CStream& out) const
133 {
134  out.printf(
135  "\n----------- [CTopLCDetector_FabMap::TOptions] ------------ \n\n");
136 
137  LOADABLEOPTS_DUMP_VAR(vocab_path, string)
138  LOADABLEOPTS_DUMP_VAR(vocabName, string)
139  LOADABLEOPTS_DUMP_VAR(p_obs_given_exists, double)
140  LOADABLEOPTS_DUMP_VAR(p_at_new_place, double)
141  LOADABLEOPTS_DUMP_VAR(df_lik_smooth, double)
142 }
Declares a class derived from "CObservation" that encapsules an image from a camera, whose relative pose to robot is also stored.
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL.
void OnNewPose(const TPoseID &poseID, const mrpt::obs::CSensoryFrame *SF)
Hook method for being warned about the insertion of a new poses into the maps.
CTopLCDetector_FabMap::TOptions TLC_fabmap_options
Options passed to this TLC constructor.
Definition: CHMTSLAM.h:503
Classes related to the implementation of Hybrid Metric Topological (HMT) SLAM.
#define THROW_EXCEPTION(msg)
#define THROW_EXCEPTION_FMT(_FORMAT_STRING,...)
GLenum GLsizei n
Definition: glext.h:5074
#define LOADABLEOPTS_DUMP_VAR(variableName, variableType)
Macro for dumping a variable to a stream, within the method "dumpToTextStream(out)" (Variable types a...
STL namespace.
uint64_t TPoseID
An integer number uniquely identifying each robot pose stored in HMT-SLAM.
An implementation of Hybrid Metric Topological SLAM (HMT-SLAM).
Definition: CHMTSLAM.h:65
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.
This class allows loading and storing values and vectors of different types from a configuration text...
int64_t THypothesisID
An integer number uniquely identifying each of the concurrent hypotheses for the robot topological pa...
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
Definition: CStream.h:41
mrpt::poses::CPose3DPDF::Ptr computeTopologicalObservationModel(const THypothesisID &hypID, const CHMHMapNode::Ptr &currentArea, const CHMHMapNode::Ptr &refArea, double &out_log_lik)
This method must compute the topological observation model.
#define MRPT_UNUSED_PARAM(a)
Can be used to avoid "not used parameters" warnings from the compiler.
std::shared_ptr< CPose3DPDF > Ptr
Definition: CPose3DPDF.h:45
This namespace contains representation of robot actions and observations.
Declares a class for storing a "sensory frame", a set of "observations" taken by the robot approximat...
Definition: CSensoryFrame.h:54
mrpt::hmtslam::CHMTSLAM::TOptions m_options
void dumpToTextStream(mrpt::utils::CStream &out) const override
This method should clearly display all the contents of the structure in textual form, sending it to a CStream.
The virtual base class for Topological Loop-closure Detectors; used in HMT-SLAM.
GLsizei const GLchar ** string
Definition: glext.h:4101
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
Definition: CPoint.h:17
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
Options for a TLC-detector of type FabMap, used from CHMTSLAM.
std::shared_ptr< CObservationImage > Ptr
std::shared_ptr< CHMHMapNode > Ptr
Definition: CHMHMapNode.h:42
#define MRPT_LOAD_CONFIG_VAR( variableName, variableType, configFileObject, sectionNameStr)
An useful macro for loading variables stored in a INI-like file under a key with the same name that t...
T::Ptr getObservationByClass(const size_t &ith=0) const
Returns the i&#39;th observation of a given class (or of a descendant class), or nullptr if there is no s...
virtual int printf(const char *fmt,...) MRPT_printf_format_check(2
Writes a string to the stream in a textual form.
Definition: CStream.cpp:597



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