RTAB-Map 0.23.13
Real-Time Appearance-Based Mapping
Loading...
Searching...
No Matches
DBDriverSqlite3.h
1/*
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions are met:
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9 * Redistributions in binary form must reproduce the above copyright
10 notice, this list of conditions and the following disclaimer in the
11 documentation and/or other materials provided with the distribution.
12 * Neither the name of the Universite de Sherbrooke nor the
13 names of its contributors may be used to endorse or promote products
14 derived from this software without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*/
27
28#ifndef DBDRIVERSQLITE3_H_
29#define DBDRIVERSQLITE3_H_
30
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
32#include "rtabmap/core/DBDriver.h"
33#if CV_MAJOR_VERSION < 5
34#include <opencv2/features2d/features2d.hpp>
35#else
36#include <opencv2/features.hpp>
37#endif
38
39typedef struct sqlite3_stmt sqlite3_stmt;
40typedef struct sqlite3 sqlite3;
41
42namespace rtabmap {
43
70class RTABMAP_CORE_EXPORT DBDriverSqlite3: public DBDriver {
71public:
77 virtual ~DBDriverSqlite3();
78
80 virtual void parseParameters(const ParametersMap & parameters);
85 virtual bool isInMemory() const {return getUrl().empty() || _dbInMemory;}
90 void setDbInMemory(bool dbInMemory);
110 void setJournalMode(int journalMode);
111
123 void setCacheSize(unsigned int cacheSize);
124
140 void setSynchronous(int synchronous);
141
156 void setTempStore(int tempStore);
157
158protected:
168 void asyncSave(Signature * s) = delete;
169 void asyncSave(VisualWord * vw) = delete;
170 void loadSignatures(const std::list<int> & ids, std::list<Signature *> & signatures, std::set<int> * loadedFromTrash = 0, bool loadWordIdsOnly = false) = delete;
171 void loadWords(const std::set<int> & wordIds, std::list<VisualWord *> & vws) = delete;
172 void loadNodeData(Signature & signature, bool images = true, bool scan = true, bool userData = true, bool occupancyGrid = true) const = delete;
173 void loadNodeData(std::list<Signature *> & signatures, bool images = true, bool scan = true, bool userData = true, bool occupancyGrid = true) const = delete;
174 void getNodeData(int signatureId, SensorData & data, bool images = true, bool scan = true, bool userData = true, bool occupancyGrid = true) const = delete;
175 bool getCalibration(int signatureId, std::vector<CameraModel> & models, std::vector<StereoCameraModel> & stereoModels) const = delete;
176 bool getLaserScanInfo(int signatureId, LaserScan & info) const = delete;
177 bool getNodeInfo(int signatureId, Transform & pose, int & mapId, int & weight, std::string & label, double & stamp, Transform & groundTruthPose, std::vector<float> & velocity, GPS & gps, EnvSensors & sensors) const = delete;
178 void getLocalFeatures(int signatureId, std::multimap<int, int> & words, std::vector<cv::KeyPoint> & keypoints, std::vector<cv::Point3f> & points, cv::Mat & descriptors) const = delete;
179 void loadLinks(int signatureId, std::multimap<int, Link> & links, Link::Type type = Link::kUndef) const = delete;
180 void getWeight(int signatureId, int & weight) const = delete;
181 void getAllNodeIds(std::set<int> & ids, bool ignoreChildren = false, bool ignoreBadSignatures = false, bool ignoreIntermediateNodes = false) const = delete;
182 void getAllOdomPoses(std::map<int, Transform> & poses, bool ignoreChildren = false, bool ignoreIntermediateNodes = false) const = delete;
183 void getAllLinks(std::multimap<int, Link> & links, bool ignoreNullLinks = true, bool withLandmarks = false) const = delete;
184 void getLastNodeId(int & id) const = delete;
185 void getLastMapId(int & mapId) const = delete;
186 void getLastWordId(int & id) const = delete;
187 void getInvertedIndexNi(int signatureId, int & ni) const = delete;
188 void getNodesObservingLandmark(int landmarkId, std::map<int, Link> & nodes) const = delete;
189 void getNodeIdByLabel(const std::string & label, int & id) const = delete;
190 void getAllLabels(std::map<int, std::string> & labels) const = delete;
193 virtual bool connectDatabaseQuery(const std::string & url, bool overwritten = false, bool readOnly = false);
194 virtual void disconnectDatabaseQuery(bool save = true, const std::string & outputUrl = "");
195 virtual bool isConnectedQuery() const;
196 virtual unsigned long getMemoryUsedQuery() const; // In bytes
197 virtual bool getDatabaseVersionQuery(std::string & version) const;
198 virtual long getNodesMemoryUsedQuery() const;
199 virtual long getLinksMemoryUsedQuery() const;
200 virtual long getImagesMemoryUsedQuery() const;
201 virtual long getDepthImagesMemoryUsedQuery() const;
202 virtual long getCalibrationsMemoryUsedQuery() const;
203 virtual long getGridsMemoryUsedQuery() const;
204 virtual long getLaserScansMemoryUsedQuery() const;
205 virtual long getUserDataMemoryUsedQuery() const;
206 virtual long getWordsMemoryUsedQuery() const;
207 virtual long getFeaturesMemoryUsedQuery() const;
208 virtual long getStatisticsMemoryUsedQuery() const;
209 virtual int getLastNodesSizeQuery() const;
210 virtual int getLastDictionarySizeQuery() const;
211 virtual int getTotalNodesSizeQuery() const;
212 virtual int getTotalDictionarySizeQuery() const;
213 virtual ParametersMap getLastParametersQuery() const;
214 virtual std::map<std::string, float> getStatisticsQuery(int nodeId, double & stamp, std::vector<int> * wmState) const;
215 virtual std::map<int, std::pair<std::map<std::string, float>, double> > getAllStatisticsQuery() const;
216 virtual std::map<int, std::vector<int> > getAllStatisticsWmStatesQuery() const;
217
218 virtual void executeNoResultQuery(const std::string & sql) const;
219
220 virtual void getWeightQuery(int signatureId, int & weight) const;
221
222 virtual void saveQuery(const std::list<Signature *> & signatures);
223 virtual void saveQuery(const std::list<VisualWord *> & words) const;
224 virtual void updateQuery(const std::list<Signature *> & signatures, bool updateTimestamp) const;
225 virtual void updateQuery(const std::list<VisualWord *> & words, bool updateTimestamp) const;
226
227 virtual void addLinkQuery(const Link & link) const;
228 virtual void updateLinkQuery(const Link & link) const;
229
230 virtual void updateOccupancyGridQuery(
231 int nodeId,
232 const cv::Mat & ground,
233 const cv::Mat & obstacles,
234 const cv::Mat & empty,
235 float cellSize,
236 const cv::Point3f & viewpoint) const;
237
238 virtual void updateCalibrationQuery(
239 int nodeId,
240 const std::vector<CameraModel> & models,
241 const std::vector<StereoCameraModel> & stereoModels) const;
242
243 virtual void updateDepthImageQuery(
244 int nodeId,
245 const cv::Mat & image,
246 const std::string & format) const;
247
248 void updateLaserScanQuery(
249 int nodeId,
250 const LaserScan & scan) const;
251
252 virtual void addStatisticsQuery(const Statistics & statistics, bool saveWmState) const;
253 virtual void savePreviewImageQuery(const cv::Mat & image) const;
254 virtual cv::Mat loadPreviewImageQuery() const;
255 virtual void saveOptimizedPosesQuery(const std::map<int, Transform> & optimizedPoses, const Transform & lastlocalizationPose) const;
256 virtual std::map<int, Transform> loadOptimizedPosesQuery(Transform * lastlocalizationPose = 0) const;
257 virtual void save2DMapQuery(const cv::Mat & map, float xMin, float yMin, float cellSize) const;
258 virtual cv::Mat load2DMapQuery(float & xMin, float & yMin, float & cellSize) const;
259 virtual void saveOptimizedMeshQuery(
260 const cv::Mat & cloud,
261 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & polygons,
262#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
263 const std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > & texCoords,
264#else
265 const std::vector<std::vector<Eigen::Vector2f> > & texCoords,
266#endif
267 const cv::Mat & textures) const;
268 virtual cv::Mat loadOptimizedMeshQuery(
269 std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > * polygons,
270#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
271 std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > * texCoords,
272#else
273 std::vector<std::vector<Eigen::Vector2f> > * texCoords,
274#endif
275 cv::Mat * textures) const;
276
277 virtual void saveFlannIndexQuery(const std::vector<unsigned char> & indexData) const;
278
279 // Load objects
280 virtual void loadQuery(VWDictionary & dictionary, bool lastStateOnly = true, bool idsOnly = false) const;
281 virtual void loadLastNodesQuery(std::list<Signature *> & signatures, bool loadWordIdsOnly) const;
282 virtual void loadSignaturesQuery(const std::list<int> & ids, std::list<Signature *> & signatures, bool loadWordIdsOnly) const;
283 virtual void loadWordsQuery(const std::set<int> & wordIds, std::list<VisualWord *> & vws) const;
284 virtual void loadLinksQuery(int signatureId, std::multimap<int, Link> & links, Link::Type type = Link::kUndef) const;
285
286 virtual void loadNodeDataQuery(std::list<Signature *> & signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const;
287 virtual bool getCalibrationQuery(int signatureId, std::vector<CameraModel> & models, std::vector<StereoCameraModel> & stereoModels) const;
288 virtual bool getLaserScanInfoQuery(int signatureId, LaserScan & info) const;
289 virtual bool getNodeInfoQuery(int signatureId, Transform & pose, int & mapId, int & weight, std::string & label, double & stamp, Transform & groundTruthPose, std::vector<float> & velocity, GPS & gps, EnvSensors & sensors) const;
290 virtual void getLocalFeaturesQuery(int signatureId, std::multimap<int, int> & words, std::vector<cv::KeyPoint> & keypoints, std::vector<cv::Point3f> & points, cv::Mat & descriptors) const;
291 virtual void getLastNodeIdsQuery(std::set<int> & ids) const;
292 virtual void getAllNodeIdsQuery(std::set<int> & ids, bool ignoreChildren, bool ignoreBadSignatures, bool ignoreIntermediateNodes) const;
293 virtual void getAllOdomPosesQuery(std::map<int, Transform> & poses, bool ignoreChildren, bool ignoreIntermediateNodes) const;
294 virtual void getAllLinksQuery(std::multimap<int, Link> & links, bool ignoreNullLinks, bool withLandmarks) const;
295 virtual void getLastIdQuery(const std::string & tableName, int & id, const std::string & fieldName="id") const;
296 virtual void getInvertedIndexNiQuery(int signatureId, int & ni) const;
297 virtual void getNodesObservingLandmarkQuery(int landmarkId, std::map<int, Link> & nodes) const;
298 virtual void getNodeIdByLabelQuery(const std::string & label, int & id) const;
299 virtual void getAllLabelsQuery(std::map<int, std::string> & labels) const;
300
301private:
302 std::string queryStepNode() const;
303 std::string queryStepImage() const;
304 std::string queryStepDepth() const;
305 std::string queryStepCalibrationUpdate() const;
306 std::string queryStepDepthUpdate() const;
307 std::string queryStepScanUpdate() const;
308 std::string queryStepSensorData() const;
309 std::string queryStepLinkUpdate() const;
310 std::string queryStepLink() const;
311 std::string queryStepWordsChanged() const;
312 std::string queryStepKeypoint() const;
313 std::string queryStepGlobalDescriptor() const;
314 std::string queryStepOccupancyGridUpdate() const;
315 void stepNode(sqlite3_stmt * ppStmt, const Signature * s) const;
316 void stepImage(sqlite3_stmt * ppStmt, int id, const cv::Mat & imageBytes) const;
317 void stepDepth(sqlite3_stmt * ppStmt, const SensorData & sensorData) const;
318 void stepCalibrationUpdate(sqlite3_stmt * ppStmt, int nodeId, const std::vector<CameraModel> & models, const std::vector<StereoCameraModel> & stereoModels) const;
319 void stepDepthUpdate(sqlite3_stmt * ppStmt, int nodeId, const cv::Mat & image, const std::string & format) const;
320 void stepScanUpdate(sqlite3_stmt * ppStmt, int nodeId, const LaserScan & image) const;
321 void stepSensorData(sqlite3_stmt * ppStmt, const SensorData & sensorData) const;
322 void stepLink(sqlite3_stmt * ppStmt, const Link & link) const;
323 void stepWordsChanged(sqlite3_stmt * ppStmt, int signatureId, int oldWordId, int newWordId) const;
324 void stepKeypoint(sqlite3_stmt * ppStmt, int nodeID, int wordId, const cv::KeyPoint & kp, const cv::Point3f & pt, const cv::Mat & descriptor) const;
325 void stepGlobalDescriptor(sqlite3_stmt * ppStmt, int nodeId, const GlobalDescriptor & descriptor) const;
326 void stepOccupancyGridUpdate(sqlite3_stmt * ppStmt,
327 int nodeId,
328 const cv::Mat & ground,
329 const cv::Mat & obstacles,
330 const cv::Mat & empty,
331 float cellSize,
332 const cv::Point3f & viewpoint) const;
333
334private:
335 void loadWordsQuery(std::list<Signature *> & signatures) const;
336 void loadWordIdsQuery(std::list<Signature *> & signatures) const;
337 void loadLinksQuery(std::list<Signature *> & signatures) const;
338 int loadOrSaveDb(sqlite3 *pInMemory, const std::string & fileName, int isSave) const;
339
340protected:
341 sqlite3 * _ppDb;
342 std::string _version;
343
344private:
345 unsigned long _memoryUsedEstimate;
346 bool _dbInMemory;
347 unsigned int _cacheSize;
348 int _journalMode;
349 int _synchronous;
350 int _tempStore;
351};
352
353}
354
355#endif /* DBDRIVERSQLITE3_H_ */
SQLite3 implementation of DBDriver for RTAB-Map map databases.
void setDbInMemory(bool dbInMemory)
Enable or disable in-memory mode. If connected, the connection is closed and reopened with the new mo...
sqlite3 * _ppDb
Open SQLite connection (null when disconnected)
std::string _version
Schema version read from the database.
void setSynchronous(int synchronous)
Set how aggressively SQLite syncs the database file to disk (PRAGMA synchronous).
DBDriverSqlite3(const ParametersMap &parameters=ParametersMap())
Construct driver with optional SQLite-specific parameters.
void setTempStore(int tempStore)
Set where SQLite stores temporary tables and indices (PRAGMA temp_store).
virtual void parseParameters(const ParametersMap &parameters)
Apply SQLite parameters from the map; forwards to DBDriver::parseParameters().
void setJournalMode(int journalMode)
Set SQLite rollback journal mode (PRAGMA journal_mode).
virtual bool isInMemory() const
True when the database runs in RAM instead of on disk.
void setCacheSize(unsigned int cacheSize)
Set the number of database pages kept in SQLite's page cache (PRAGMA cache_size).
Abstract database driver for RTAB-Map maps (signatures, links, words, statistics).
Definition DBDriver.h:72
WGS84 GPS fix attached to a sensor sample or graph node.
Definition GPS.h:47
Represents 2D or 3D laser scan data with support for multiple point data formats.
Definition LaserScan.h:46
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
Collects and manages runtime statistics for RTAB-Map.
Definition Statistics.h:108
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
Manages a dictionary of visual words for visual place recognition and loop closure detection.
Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model.
Definition VisualWord.h:50
std::map< EnvSensor::Type, EnvSensor > EnvSensors
Map of environmental readings keyed by EnvSensor::Type (at most one per type).
Definition EnvSensor.h:114
std::map< std::string, std::string > ParametersMap
Parameter keys mapped to their values, as used by every configurable class (see Parameters).
Definition Parameters.h:44