Files
rtabmap/preview/pr-1492/api/latest/classrtabmap_1_1Memory.html
T

3135 lines
196 KiB
HTML

<!-- HTML header for doxygen 1.9.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>RTAB-Map: rtabmap::Memory Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="custom.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript">window.RTABMAP_DOC_ROOT="";</script>
<script type="text/javascript" src="../versions.js"></script>
<script type="text/javascript" src="version-switcher.js"></script>
<script type="text/javascript" src="doxygen-awesome-darkmode-toggle.js"></script>
<script type="text/javascript">DoxygenAwesomeDarkModeToggle.init();</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">RTAB-Map<span id="projectnumber">&#160;0.23.10</span>
</div>
<div id="projectbrief">Real-Time Appearance-Based Mapping</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classrtabmap_1_1Memory.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classrtabmap_1_1Memory-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">rtabmap::Memory Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Three-tiered memory management (STM, WM, LTM) for RTAB-Map.
<a href="classrtabmap_1_1Memory.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="Memory_8h_source.html">Memory.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for rtabmap::Memory:</div>
<div class="dyncontent">
<div class="center"><img src="classrtabmap_1_1Memory__coll__graph.png" border="0" usemap="#artabmap_1_1Memory_coll__map" alt="Collaboration graph"/></div>
<map name="artabmap_1_1Memory_coll__map" id="artabmap_1_1Memory_coll__map">
<area shape="rect" title="Three&#45;tiered memory management (STM, WM, LTM) for RTAB&#45;Map." alt="" coords="8,243,147,268"/>
<area shape="rect" href="classrtabmap_1_1DBDriver.html" title="Abstract database driver for RTAB&#45;Map maps (signatures, links, words, statistics)." alt="" coords="5,155,149,180"/>
<area shape="poly" title=" " alt="" coords="80,194,80,242,75,242,75,194"/>
<area shape="rect" href="classUThread.html" title=" " alt="" coords="22,80,133,105"/>
<area shape="poly" title=" " alt="" coords="80,120,80,154,75,154,75,120"/>
<area shape="rect" href="classUThreadC_3_01void_01_4.html" title=" " alt="" coords="5,5,149,31"/>
<area shape="poly" title=" " alt="" coords="80,45,80,80,75,80,75,45"/>
</map>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a24d451cdf46a9cc04cce995142a101d4" id="r_a24d451cdf46a9cc04cce995142a101d4"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a24d451cdf46a9cc04cce995142a101d4">Memory</a> (const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;parameters=<a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a>())</td></tr>
<tr class="memdesc:a24d451cdf46a9cc04cce995142a101d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a <a class="el" href="classrtabmap_1_1Memory.html" title="Three-tiered memory management (STM, WM, LTM) for RTAB-Map.">Memory</a> instance with the given parameters. <br /></td></tr>
<tr class="separator:a24d451cdf46a9cc04cce995142a101d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abbf54d2a34838cc13ce98d41a9991918" id="r_abbf54d2a34838cc13ce98d41a9991918"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#abbf54d2a34838cc13ce98d41a9991918">parseParameters</a> (const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;parameters)</td></tr>
<tr class="memdesc:abbf54d2a34838cc13ce98d41a9991918"><td class="mdescLeft">&#160;</td><td class="mdescRight">Re-parses parameters and propagates them to owned sub-objects. <br /></td></tr>
<tr class="separator:abbf54d2a34838cc13ce98d41a9991918"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4cc965870dd757517b126af4860d34d" id="r_af4cc965870dd757517b126af4860d34d"><td class="memItemLeft" align="right" valign="top">virtual const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#af4cc965870dd757517b126af4860d34d">getParameters</a> () const</td></tr>
<tr class="separator:af4cc965870dd757517b126af4860d34d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3c029b2788f3b599480d5150120a6bee" id="r_a3c029b2788f3b599480d5150120a6bee"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee">update</a> (const <a class="el" href="classrtabmap_1_1SensorData.html">SensorData</a> &amp;data, <a class="el" href="classrtabmap_1_1Statistics.html">Statistics</a> *stats=0)</td></tr>
<tr class="memdesc:a3c029b2788f3b599480d5150120a6bee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds a sensor observation to the map (overload without odometry pose). <br /></td></tr>
<tr class="separator:a3c029b2788f3b599480d5150120a6bee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae43fd080c6bc9773fa58f1c36e6684f" id="r_aae43fd080c6bc9773fa58f1c36e6684f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#aae43fd080c6bc9773fa58f1c36e6684f">update</a> (const <a class="el" href="classrtabmap_1_1SensorData.html">SensorData</a> &amp;data, const <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &amp;pose, const cv::Mat &amp;covariance, const std::vector&lt; float &gt; &amp;velocity=std::vector&lt; float &gt;(), <a class="el" href="classrtabmap_1_1Statistics.html">Statistics</a> *stats=0)</td></tr>
<tr class="memdesc:aae43fd080c6bc9773fa58f1c36e6684f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds a sensor observation with odometry pose and velocity to the map. <br /></td></tr>
<tr class="separator:aae43fd080c6bc9773fa58f1c36e6684f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeeabc78648bf7dc14ea1356828cdeddd" id="r_aeeabc78648bf7dc14ea1356828cdeddd"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd">init</a> (const std::string &amp;dbUrl, bool dbOverwritten=false, const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;parameters=<a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a>(), bool postInitClosingEvents=false)</td></tr>
<tr class="memdesc:aeeabc78648bf7dc14ea1356828cdeddd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Opens or creates a database and loads existing state into WM. <br /></td></tr>
<tr class="separator:aeeabc78648bf7dc14ea1356828cdeddd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44023158524dee3471a8dff43ea132db" id="r_a44023158524dee3471a8dff43ea132db"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a44023158524dee3471a8dff43ea132db">close</a> (bool databaseSaved=true, bool postInitClosingEvents=false, const std::string &amp;ouputDatabasePath=&quot;&quot;)</td></tr>
<tr class="memdesc:a44023158524dee3471a8dff43ea132db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flushes pending data and closes the database connection. <br /></td></tr>
<tr class="separator:a44023158524dee3471a8dff43ea132db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a984ca01a87434b11a66dc1d96e2fff17" id="r_a984ca01a87434b11a66dc1d96e2fff17"><td class="memItemLeft" align="right" valign="top">std::map&lt; int, float &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a984ca01a87434b11a66dc1d96e2fff17">computeLikelihood</a> (const <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> *signature, const std::list&lt; int &gt; &amp;ids)</td></tr>
<tr class="memdesc:a984ca01a87434b11a66dc1d96e2fff17"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes loop-closure likelihood of <code>signature</code> against a set of WM ids. <br /></td></tr>
<tr class="separator:a984ca01a87434b11a66dc1d96e2fff17"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afce9dbf3e5657d65540e33c59e992d83" id="r_afce9dbf3e5657d65540e33c59e992d83"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#afce9dbf3e5657d65540e33c59e992d83">incrementMapId</a> (std::map&lt; int, int &gt; *reducedIds=0)</td></tr>
<tr class="memdesc:afce9dbf3e5657d65540e33c59e992d83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Starts a new map id, breaking session continuity (e.g. after localization loss). <br /></td></tr>
<tr class="separator:afce9dbf3e5657d65540e33c59e992d83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76fd8c93220c16fac5843ccc2c0bec3c" id="r_a76fd8c93220c16fac5843ccc2c0bec3c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a76fd8c93220c16fac5843ccc2c0bec3c">updateAge</a> (int signatureId)</td></tr>
<tr class="memdesc:a76fd8c93220c16fac5843ccc2c0bec3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Refreshes the age of <code>signatureId</code> in working memory, marking it as recent. <br /></td></tr>
<tr class="separator:a76fd8c93220c16fac5843ccc2c0bec3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51e89ccab2261912b09a5b7178fdd46c" id="r_a51e89ccab2261912b09a5b7178fdd46c"><td class="memItemLeft" align="right" valign="top">std::list&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a51e89ccab2261912b09a5b7178fdd46c">forget</a> (const std::set&lt; int &gt; &amp;ignoredIds=std::set&lt; int &gt;())</td></tr>
<tr class="memdesc:a51e89ccab2261912b09a5b7178fdd46c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transfers oldest signatures from WM to LTM to respect memory and/or time limits. <br /></td></tr>
<tr class="separator:a51e89ccab2261912b09a5b7178fdd46c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa244b8581684b85e35d2056cf972e377" id="r_aa244b8581684b85e35d2056cf972e377"><td class="memItemLeft" align="right" valign="top">std::set&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#aa244b8581684b85e35d2056cf972e377">reactivateSignatures</a> (const std::list&lt; int &gt; &amp;ids, unsigned int maxLoaded, double &amp;timeDbAccess)</td></tr>
<tr class="memdesc:aa244b8581684b85e35d2056cf972e377"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reloads signatures from LTM into WM. <br /></td></tr>
<tr class="separator:aa244b8581684b85e35d2056cf972e377"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af87e4718dd842c59fd8459430c40d78f" id="r_af87e4718dd842c59fd8459430c40d78f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#af87e4718dd842c59fd8459430c40d78f">cleanup</a> ()</td></tr>
<tr class="memdesc:af87e4718dd842c59fd8459430c40d78f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Drops the last signature if flagged as bad, or any signature in localization mode. <br /></td></tr>
<tr class="separator:af87e4718dd842c59fd8459430c40d78f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afbcfc92dc9bbc344ab106d2f21d93aaf" id="r_afbcfc92dc9bbc344ab106d2f21d93aaf"><td class="memItemLeft" align="right" valign="top"><a id="afbcfc92dc9bbc344ab106d2f21d93aaf" name="afbcfc92dc9bbc344ab106d2f21d93aaf"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>saveStatistics</b> (const <a class="el" href="classrtabmap_1_1Statistics.html">Statistics</a> &amp;statistics, bool saveWMState)</td></tr>
<tr class="memdesc:afbcfc92dc9bbc344ab106d2f21d93aaf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Persists <code>statistics</code> to the database; <code>saveWMState</code> records the WM id list. <br /></td></tr>
<tr class="separator:afbcfc92dc9bbc344ab106d2f21d93aaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:affdd654e385b61306a2ac2ea91d13b85" id="r_affdd654e385b61306a2ac2ea91d13b85"><td class="memItemLeft" align="right" valign="top"><a id="affdd654e385b61306a2ac2ea91d13b85" name="affdd654e385b61306a2ac2ea91d13b85"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>savePreviewImage</b> (const cv::Mat &amp;image) const</td></tr>
<tr class="memdesc:affdd654e385b61306a2ac2ea91d13b85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores a preview image (typically a thumbnail of the last frame) in the database. <br /></td></tr>
<tr class="separator:affdd654e385b61306a2ac2ea91d13b85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd0d7277526f06861df17e03fa13e817" id="r_abd0d7277526f06861df17e03fa13e817"><td class="memItemLeft" align="right" valign="top"><a id="abd0d7277526f06861df17e03fa13e817" name="abd0d7277526f06861df17e03fa13e817"></a>
cv::Mat&#160;</td><td class="memItemRight" valign="bottom"><b>loadPreviewImage</b> () const</td></tr>
<tr class="memdesc:abd0d7277526f06861df17e03fa13e817"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads the preview image previously written by <a class="el" href="classrtabmap_1_1Memory.html#affdd654e385b61306a2ac2ea91d13b85">savePreviewImage()</a>. <br /></td></tr>
<tr class="separator:abd0d7277526f06861df17e03fa13e817"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab7a2da56bb12845f0370a20a9497dfe0" id="r_ab7a2da56bb12845f0370a20a9497dfe0"><td class="memItemLeft" align="right" valign="top"><a id="ab7a2da56bb12845f0370a20a9497dfe0" name="ab7a2da56bb12845f0370a20a9497dfe0"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>saveOptimizedPoses</b> (const std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp;optimizedPoses, const <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &amp;lastlocalizationPose) const</td></tr>
<tr class="memdesc:ab7a2da56bb12845f0370a20a9497dfe0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Persists an optimized pose graph and the last localization pose for next session. <br /></td></tr>
<tr class="separator:ab7a2da56bb12845f0370a20a9497dfe0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e2972a53619456d75ad923fb5e9bc7e" id="r_a9e2972a53619456d75ad923fb5e9bc7e"><td class="memItemLeft" align="right" valign="top"><a id="a9e2972a53619456d75ad923fb5e9bc7e" name="a9e2972a53619456d75ad923fb5e9bc7e"></a>
std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>loadOptimizedPoses</b> (<a class="el" href="classrtabmap_1_1Transform.html">Transform</a> *lastlocalizationPose) const</td></tr>
<tr class="memdesc:a9e2972a53619456d75ad923fb5e9bc7e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads optimized poses previously written by <a class="el" href="classrtabmap_1_1Memory.html#ab7a2da56bb12845f0370a20a9497dfe0">saveOptimizedPoses()</a>. <br /></td></tr>
<tr class="separator:a9e2972a53619456d75ad923fb5e9bc7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac96fffe9fde99f7c74a06bbc5727be6b" id="r_ac96fffe9fde99f7c74a06bbc5727be6b"><td class="memItemLeft" align="right" valign="top"><a id="ac96fffe9fde99f7c74a06bbc5727be6b" name="ac96fffe9fde99f7c74a06bbc5727be6b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>save2DMap</b> (const cv::Mat &amp;map, float xMin, float yMin, float cellSize) const</td></tr>
<tr class="memdesc:ac96fffe9fde99f7c74a06bbc5727be6b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Persists a 2D occupancy grid (origin <code>xMin</code>, <code>yMin</code> and resolution <code>cellSize</code>). <br /></td></tr>
<tr class="separator:ac96fffe9fde99f7c74a06bbc5727be6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a71f27d0de4f7e6400ca470a82be19d" id="r_a9a71f27d0de4f7e6400ca470a82be19d"><td class="memItemLeft" align="right" valign="top"><a id="a9a71f27d0de4f7e6400ca470a82be19d" name="a9a71f27d0de4f7e6400ca470a82be19d"></a>
cv::Mat&#160;</td><td class="memItemRight" valign="bottom"><b>load2DMap</b> (float &amp;xMin, float &amp;yMin, float &amp;cellSize) const</td></tr>
<tr class="memdesc:a9a71f27d0de4f7e6400ca470a82be19d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads the 2D occupancy grid previously written by <a class="el" href="classrtabmap_1_1Memory.html#ac96fffe9fde99f7c74a06bbc5727be6b">save2DMap()</a>. <br /></td></tr>
<tr class="separator:a9a71f27d0de4f7e6400ca470a82be19d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7e16d27512d0daf17b9dbb17aab3b201" id="r_a7e16d27512d0daf17b9dbb17aab3b201"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a7e16d27512d0daf17b9dbb17aab3b201">saveOptimizedMesh</a> (const cv::Mat &amp;cloud, const std::vector&lt; std::vector&lt; std::vector&lt; RTABMAP_PCL_INDEX &gt; &gt; &gt; &amp;polygons=std::vector&lt; std::vector&lt; std::vector&lt; RTABMAP_PCL_INDEX &gt; &gt; &gt;(), const std::vector&lt; std::vector&lt; Eigen::Vector2f &gt; &gt; &amp;texCoords=std::vector&lt; std::vector&lt; Eigen::Vector2f &gt; &gt;(), const cv::Mat &amp;textures=cv::Mat()) const</td></tr>
<tr class="memdesc:a7e16d27512d0daf17b9dbb17aab3b201"><td class="mdescLeft">&#160;</td><td class="mdescRight">Persists an optimized textured/colored mesh to the database. <br /></td></tr>
<tr class="separator:a7e16d27512d0daf17b9dbb17aab3b201"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0827d1d23744b3693f00e518e1b0fda8" id="r_a0827d1d23744b3693f00e518e1b0fda8"><td class="memItemLeft" align="right" valign="top"><a id="a0827d1d23744b3693f00e518e1b0fda8" name="a0827d1d23744b3693f00e518e1b0fda8"></a>
cv::Mat&#160;</td><td class="memItemRight" valign="bottom"><b>loadOptimizedMesh</b> (std::vector&lt; std::vector&lt; std::vector&lt; RTABMAP_PCL_INDEX &gt; &gt; &gt; *polygons=0, std::vector&lt; std::vector&lt; Eigen::Vector2f &gt; &gt; *texCoords=0, cv::Mat *textures=0) const</td></tr>
<tr class="memdesc:a0827d1d23744b3693f00e518e1b0fda8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads the optimized mesh previously written by <a class="el" href="classrtabmap_1_1Memory.html#a7e16d27512d0daf17b9dbb17aab3b201">saveOptimizedMesh()</a>. <br /></td></tr>
<tr class="separator:a0827d1d23744b3693f00e518e1b0fda8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a072ec41027a03072f1a945540b43a1b8" id="r_a072ec41027a03072f1a945540b43a1b8"><td class="memItemLeft" align="right" valign="top"><a id="a072ec41027a03072f1a945540b43a1b8" name="a072ec41027a03072f1a945540b43a1b8"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>emptyTrash</b> ()</td></tr>
<tr class="memdesc:a072ec41027a03072f1a945540b43a1b8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Forces the database driver to flush any queued signature/word saves. <br /></td></tr>
<tr class="separator:a072ec41027a03072f1a945540b43a1b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2bba8c0aa57778bb441a97728d45a58e" id="r_a2bba8c0aa57778bb441a97728d45a58e"><td class="memItemLeft" align="right" valign="top"><a id="a2bba8c0aa57778bb441a97728d45a58e" name="a2bba8c0aa57778bb441a97728d45a58e"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>joinTrashThread</b> ()</td></tr>
<tr class="memdesc:a2bba8c0aa57778bb441a97728d45a58e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blocks until the asynchronous database write thread has finished pending work. <br /></td></tr>
<tr class="separator:a2bba8c0aa57778bb441a97728d45a58e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4140effa4830fbe679a51e975f0021a1" id="r_a4140effa4830fbe679a51e975f0021a1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a4140effa4830fbe679a51e975f0021a1">addLink</a> (const <a class="el" href="classrtabmap_1_1Link.html">Link</a> &amp;link, bool addInDatabase=false)</td></tr>
<tr class="memdesc:a4140effa4830fbe679a51e975f0021a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds a graph link between two signatures. <br /></td></tr>
<tr class="separator:a4140effa4830fbe679a51e975f0021a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c7f80937a35204cb5b44faec8e99736" id="r_a7c7f80937a35204cb5b44faec8e99736"><td class="memItemLeft" align="right" valign="top"><a id="a7c7f80937a35204cb5b44faec8e99736" name="a7c7f80937a35204cb5b44faec8e99736"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>updateLink</b> (const <a class="el" href="classrtabmap_1_1Link.html">Link</a> &amp;link, bool updateInDatabase=false)</td></tr>
<tr class="memdesc:a7c7f80937a35204cb5b44faec8e99736"><td class="mdescLeft">&#160;</td><td class="mdescRight">Replaces an existing link with <code>link</code> (same endpoints and type). <br /></td></tr>
<tr class="separator:a7c7f80937a35204cb5b44faec8e99736"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a838b48bb9c2e6ccfe4f916ea2b2d00fd" id="r_a838b48bb9c2e6ccfe4f916ea2b2d00fd"><td class="memItemLeft" align="right" valign="top"><a id="a838b48bb9c2e6ccfe4f916ea2b2d00fd" name="a838b48bb9c2e6ccfe4f916ea2b2d00fd"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>removeAllVirtualLinks</b> ()</td></tr>
<tr class="memdesc:a838b48bb9c2e6ccfe4f916ea2b2d00fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes every virtual link in WM. <br /></td></tr>
<tr class="separator:a838b48bb9c2e6ccfe4f916ea2b2d00fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa77fb0f90185a274b3e9d0c609ce14ed" id="r_aa77fb0f90185a274b3e9d0c609ce14ed"><td class="memItemLeft" align="right" valign="top"><a id="aa77fb0f90185a274b3e9d0c609ce14ed" name="aa77fb0f90185a274b3e9d0c609ce14ed"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>removeVirtualLinks</b> (int signatureId)</td></tr>
<tr class="memdesc:aa77fb0f90185a274b3e9d0c609ce14ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes virtual links attached to <code>signatureId</code>. <br /></td></tr>
<tr class="separator:aa77fb0f90185a274b3e9d0c609ce14ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a521305f39adcdfbedebbe5bdae9efbc6" id="r_a521305f39adcdfbedebbe5bdae9efbc6"><td class="memItemLeft" align="right" valign="top">std::map&lt; int, int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a521305f39adcdfbedebbe5bdae9efbc6">getNeighborsId</a> (int signatureId, int maxGraphDepth, int maxCheckedInDatabase=-1, bool incrementMarginOnLoop=false, bool ignoreLoopIds=false, bool ignoreIntermediateNodes=false, bool ignoreLocalSpaceLoopIds=false, const std::set&lt; int &gt; &amp;nodesSet=std::set&lt; int &gt;(), double *dbAccessTime=0) const</td></tr>
<tr class="memdesc:a521305f39adcdfbedebbe5bdae9efbc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Breadth-first walk of the pose graph from <code>signatureId</code>. <br /></td></tr>
<tr class="separator:a521305f39adcdfbedebbe5bdae9efbc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a10c44ee8a5d84480b41aa4980665d894" id="r_a10c44ee8a5d84480b41aa4980665d894"><td class="memItemLeft" align="right" valign="top">std::map&lt; int, float &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a10c44ee8a5d84480b41aa4980665d894">getNeighborsIdRadius</a> (int signatureId, float radius, const std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp;optimizedPoses, int maxGraphDepth) const</td></tr>
<tr class="memdesc:a10c44ee8a5d84480b41aa4980665d894"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns neighbor ids within a Euclidean radius using optimized poses. <br /></td></tr>
<tr class="separator:a10c44ee8a5d84480b41aa4980665d894"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae66a7837edc6e844ee9186e61d139300" id="r_ae66a7837edc6e844ee9186e61d139300"><td class="memItemLeft" align="right" valign="top"><a id="ae66a7837edc6e844ee9186e61d139300" name="ae66a7837edc6e844ee9186e61d139300"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>convertToIntermediate</b> (int locationId)</td></tr>
<tr class="memdesc:ae66a7837edc6e844ee9186e61d139300"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marks <code>locationId</code> as intermediate (weight = -1); excludes it from loop closure. <br /></td></tr>
<tr class="separator:ae66a7837edc6e844ee9186e61d139300"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b91d8b5d651fbaa12a31e364c793a21" id="r_a2b91d8b5d651fbaa12a31e364c793a21"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a2b91d8b5d651fbaa12a31e364c793a21">deleteLocation</a> (int locationId, std::list&lt; int &gt; *deletedWords=0, bool keepLinkedInDb=false)</td></tr>
<tr class="memdesc:a2b91d8b5d651fbaa12a31e364c793a21"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes <code>locationId</code> from WM/STM and the database. <br /></td></tr>
<tr class="separator:a2b91d8b5d651fbaa12a31e364c793a21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93119d10342db4a55c77b180cb249453" id="r_a93119d10342db4a55c77b180cb249453"><td class="memItemLeft" align="right" valign="top"><a id="a93119d10342db4a55c77b180cb249453" name="a93119d10342db4a55c77b180cb249453"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>saveLocationData</b> (int locationId)</td></tr>
<tr class="memdesc:a93119d10342db4a55c77b180cb249453"><td class="mdescLeft">&#160;</td><td class="mdescRight">Forces <code>locationId</code> to be flushed to the database. <br /></td></tr>
<tr class="separator:a93119d10342db4a55c77b180cb249453"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3fcaa79a33d63f7e383d05868b1316e3" id="r_a3fcaa79a33d63f7e383d05868b1316e3"><td class="memItemLeft" align="right" valign="top"><a id="a3fcaa79a33d63f7e383d05868b1316e3" name="a3fcaa79a33d63f7e383d05868b1316e3"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>removeLink</b> (int idA, int idB)</td></tr>
<tr class="memdesc:a3fcaa79a33d63f7e383d05868b1316e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes any link between <code>idA</code> and <code>idB</code> (both directions). <br /></td></tr>
<tr class="separator:a3fcaa79a33d63f7e383d05868b1316e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acab72b1076370287ac28a1d464d480f0" id="r_acab72b1076370287ac28a1d464d480f0"><td class="memItemLeft" align="right" valign="top"><a id="acab72b1076370287ac28a1d464d480f0" name="acab72b1076370287ac28a1d464d480f0"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>removeRawData</b> (int id, bool image=true, bool scan=true, bool userData=true, bool occupancyGrid=true)</td></tr>
<tr class="memdesc:acab72b1076370287ac28a1d464d480f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Strips raw images, scan, user data and/or occupancy grid from <code>id</code> to save memory (RAM). This doesn't clear any compressed data. <br /></td></tr>
<tr class="separator:acab72b1076370287ac28a1d464d480f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9e6bfaf161d4bd1a9f99d2352492a1d" id="r_ac9e6bfaf161d4bd1a9f99d2352492a1d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ac9e6bfaf161d4bd1a9f99d2352492a1d">reduceNode</a> (int id, float maxDistance=0.0f, bool keepLinkedInDb=false, int direction=0)</td></tr>
<tr class="memdesc:ac9e6bfaf161d4bd1a9f99d2352492a1d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Merges <code>id</code> with a close neighbor (graph reduction). <br /></td></tr>
<tr class="separator:ac9e6bfaf161d4bd1a9f99d2352492a1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a655f123daec9e4e50e322db9f3bbd6db" id="r_a655f123daec9e4e50e322db9f3bbd6db"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a655f123daec9e4e50e322db9f3bbd6db">setDummyDictionary</a> (bool enabled)</td></tr>
<tr class="memdesc:a655f123daec9e4e50e322db9f3bbd6db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enables a dummy visual word dictionary (no descriptors kept, word ids only). <br /></td></tr>
<tr class="separator:a655f123daec9e4e50e322db9f3bbd6db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6c0794ad1aac6e9084c0240e709cdc6" id="r_ab6c0794ad1aac6e9084c0240e709cdc6"><td class="memItemLeft" align="right" valign="top">const std::map&lt; int, double &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ab6c0794ad1aac6e9084c0240e709cdc6">getWorkingMem</a> () const</td></tr>
<tr class="separator:ab6c0794ad1aac6e9084c0240e709cdc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ca9260a2a63fae6f3d16e1db9cbce53" id="r_a5ca9260a2a63fae6f3d16e1db9cbce53"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a5ca9260a2a63fae6f3d16e1db9cbce53">getWorkingMemSize</a> (bool ignoreIntermediateNodes=false) const</td></tr>
<tr class="memdesc:a5ca9260a2a63fae6f3d16e1db9cbce53"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of signatures in working memory, excluding the virtual place. <br /></td></tr>
<tr class="separator:a5ca9260a2a63fae6f3d16e1db9cbce53"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad9b97cdfd95eb3c0dad649d755fc3267" id="r_ad9b97cdfd95eb3c0dad649d755fc3267"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ad9b97cdfd95eb3c0dad649d755fc3267">getWorkingMemIntermediateNodesCount</a> () const</td></tr>
<tr class="separator:ad9b97cdfd95eb3c0dad649d755fc3267"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f3a3da280f9e5ee9bba6df03e551f79" id="r_a3f3a3da280f9e5ee9bba6df03e551f79"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a3f3a3da280f9e5ee9bba6df03e551f79">getStMemIntermediateNodesCount</a> () const</td></tr>
<tr class="separator:a3f3a3da280f9e5ee9bba6df03e551f79"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a007abab13fade6f63b6db3fc279a1631" id="r_a007abab13fade6f63b6db3fc279a1631"><td class="memItemLeft" align="right" valign="top">const std::set&lt; int &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a007abab13fade6f63b6db3fc279a1631">getStMem</a> () const</td></tr>
<tr class="separator:a007abab13fade6f63b6db3fc279a1631"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41b23c567f6aa6bcc3a756e5ae5c1f33" id="r_a41b23c567f6aa6bcc3a756e5ae5c1f33"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a41b23c567f6aa6bcc3a756e5ae5c1f33">getMaxStMemSize</a> () const</td></tr>
<tr class="separator:a41b23c567f6aa6bcc3a756e5ae5c1f33"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a172f0d3046c0b7d6b37cdf11af153bee" id="r_a172f0d3046c0b7d6b37cdf11af153bee"><td class="memItemLeft" align="right" valign="top"><a id="a172f0d3046c0b7d6b37cdf11af153bee" name="a172f0d3046c0b7d6b37cdf11af153bee"></a>
std::multimap&lt; int, <a class="el" href="classrtabmap_1_1Link.html">Link</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>getNeighborLinks</b> (int signatureId, bool lookInDatabase=false) const</td></tr>
<tr class="memdesc:a172f0d3046c0b7d6b37cdf11af153bee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns neighbor (sequential) links of <code>signatureId</code>; <code>lookInDatabase</code> also checks LTM. <br /></td></tr>
<tr class="separator:a172f0d3046c0b7d6b37cdf11af153bee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88fecb24bd16886d6086937277df5f20" id="r_a88fecb24bd16886d6086937277df5f20"><td class="memItemLeft" align="right" valign="top"><a id="a88fecb24bd16886d6086937277df5f20" name="a88fecb24bd16886d6086937277df5f20"></a>
std::multimap&lt; int, <a class="el" href="classrtabmap_1_1Link.html">Link</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>getLoopClosureLinks</b> (int signatureId, bool lookInDatabase=false) const</td></tr>
<tr class="memdesc:a88fecb24bd16886d6086937277df5f20"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns loop-closure links of <code>signatureId</code>; <code>lookInDatabase</code> also checks LTM. <br /></td></tr>
<tr class="separator:a88fecb24bd16886d6086937277df5f20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d4e2a2281980bc1b18683fd8fc2ebeb" id="r_a7d4e2a2281980bc1b18683fd8fc2ebeb"><td class="memItemLeft" align="right" valign="top">std::multimap&lt; int, <a class="el" href="classrtabmap_1_1Link.html">Link</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a7d4e2a2281980bc1b18683fd8fc2ebeb">getLinks</a> (int signatureId, bool lookInDatabase=false, bool withLandmarks=false) const</td></tr>
<tr class="memdesc:a7d4e2a2281980bc1b18683fd8fc2ebeb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns all links of <code>signatureId</code> (neighbor, loop, prior, gravity, ...). <br /></td></tr>
<tr class="separator:a7d4e2a2281980bc1b18683fd8fc2ebeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acde7a0f34f8896c3c9f002c6cbcc614e" id="r_acde7a0f34f8896c3c9f002c6cbcc614e"><td class="memItemLeft" align="right" valign="top"><a id="acde7a0f34f8896c3c9f002c6cbcc614e" name="acde7a0f34f8896c3c9f002c6cbcc614e"></a>
std::multimap&lt; int, <a class="el" href="classrtabmap_1_1Link.html">Link</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>getAllLinks</b> (bool lookInDatabase, bool ignoreNullLinks=true, bool withLandmarks=false) const</td></tr>
<tr class="memdesc:acde7a0f34f8896c3c9f002c6cbcc614e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns links of every signature; <code>ignoreNullLinks</code> drops empty placeholders. <br /></td></tr>
<tr class="separator:acde7a0f34f8896c3c9f002c6cbcc614e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18a6e852d545751fbc348d2aae6d7fe0" id="r_a18a6e852d545751fbc348d2aae6d7fe0"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a18a6e852d545751fbc348d2aae6d7fe0">isBinDataKept</a> () const</td></tr>
<tr class="separator:a18a6e852d545751fbc348d2aae6d7fe0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae1e4c518ec65f86b7a3eade7ac2705c8" id="r_ae1e4c518ec65f86b7a3eade7ac2705c8"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ae1e4c518ec65f86b7a3eade7ac2705c8">getSimilarityThreshold</a> () const</td></tr>
<tr class="separator:ae1e4c518ec65f86b7a3eade7ac2705c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d8bfc0b85f270dbb3fc66cde079b63e" id="r_a4d8bfc0b85f270dbb3fc66cde079b63e"><td class="memItemLeft" align="right" valign="top">std::map&lt; int, int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a4d8bfc0b85f270dbb3fc66cde079b63e">getWeights</a> () const</td></tr>
<tr class="separator:a4d8bfc0b85f270dbb3fc66cde079b63e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65552e672e67c9f511b3384e3d117de6" id="r_a65552e672e67c9f511b3384e3d117de6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a65552e672e67c9f511b3384e3d117de6">getLastSignatureId</a> () const</td></tr>
<tr class="separator:a65552e672e67c9f511b3384e3d117de6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad14c4346a42a621b7834c60de6bc2e63" id="r_ad14c4346a42a621b7834c60de6bc2e63"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ad14c4346a42a621b7834c60de6bc2e63">getLastWorkingSignature</a> (bool ignoreIntermediateNodes) const</td></tr>
<tr class="memdesc:ad14c4346a42a621b7834c60de6bc2e63"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the most recent WM signature. <br /></td></tr>
<tr class="separator:ad14c4346a42a621b7834c60de6bc2e63"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afe7a1c036129e7ec94905c3650e91cc8" id="r_afe7a1c036129e7ec94905c3650e91cc8"><td class="memItemLeft" align="right" valign="top"><a id="afe7a1c036129e7ec94905c3650e91cc8" name="afe7a1c036129e7ec94905c3650e91cc8"></a>
std::map&lt; int, <a class="el" href="classrtabmap_1_1Link.html">Link</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>getNodesObservingLandmark</b> (int landmarkId, bool lookInDatabase) const</td></tr>
<tr class="memdesc:afe7a1c036129e7ec94905c3650e91cc8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns all nodes observing landmark <code>landmarkId</code>, mapped to the observation link. <br /></td></tr>
<tr class="separator:afe7a1c036129e7ec94905c3650e91cc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4907501b27fdfd5b8053b9d932d8dec4" id="r_a4907501b27fdfd5b8053b9d932d8dec4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a4907501b27fdfd5b8053b9d932d8dec4">getSignatureIdByLabel</a> (const std::string &amp;label, bool lookInDatabase=true) const</td></tr>
<tr class="separator:a4907501b27fdfd5b8053b9d932d8dec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abba1fbec2be0cfced6e14d723fc45794" id="r_abba1fbec2be0cfced6e14d723fc45794"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#abba1fbec2be0cfced6e14d723fc45794">labelSignature</a> (int id, const std::string &amp;label)</td></tr>
<tr class="memdesc:abba1fbec2be0cfced6e14d723fc45794"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns or removes a label on <code>id</code>. <br /></td></tr>
<tr class="separator:abba1fbec2be0cfced6e14d723fc45794"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a055a0ebfc7e2c128d386f8141dc320ce" id="r_a055a0ebfc7e2c128d386f8141dc320ce"><td class="memItemLeft" align="right" valign="top">const std::map&lt; int, std::string &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a055a0ebfc7e2c128d386f8141dc320ce">getAllLabels</a> () const</td></tr>
<tr class="separator:a055a0ebfc7e2c128d386f8141dc320ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf7e6cbe5eda50b024cbb1bc82d03b7c" id="r_acf7e6cbe5eda50b024cbb1bc82d03b7c"><td class="memItemLeft" align="right" valign="top">const std::map&lt; int, std::set&lt; int &gt; &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#acf7e6cbe5eda50b024cbb1bc82d03b7c">getLandmarksIndex</a> () const</td></tr>
<tr class="separator:acf7e6cbe5eda50b024cbb1bc82d03b7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2098205b805bde66a4a57906a8ca95f5" id="r_a2098205b805bde66a4a57906a8ca95f5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a2098205b805bde66a4a57906a8ca95f5">allNodesInWM</a> () const</td></tr>
<tr class="separator:a2098205b805bde66a4a57906a8ca95f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff18f08be0a7951f508276e341759f5c" id="r_aff18f08be0a7951f508276e341759f5c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#aff18f08be0a7951f508276e341759f5c">setUserData</a> (int id, const cv::Mat &amp;data)</td></tr>
<tr class="memdesc:aff18f08be0a7951f508276e341759f5c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attaches user data to signature <code>id</code>, compressing it on the fly if needed. <br /></td></tr>
<tr class="separator:aff18f08be0a7951f508276e341759f5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a83d0b30afc46dd66ab3106c9997657c4" id="r_a83d0b30afc46dd66ab3106c9997657c4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a83d0b30afc46dd66ab3106c9997657c4">getDatabaseMemoryUsed</a> () const</td></tr>
<tr class="separator:a83d0b30afc46dd66ab3106c9997657c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aebd7dd4ef859d70435a5db8e4f398ea5" id="r_aebd7dd4ef859d70435a5db8e4f398ea5"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#aebd7dd4ef859d70435a5db8e4f398ea5">getDatabaseVersion</a> () const</td></tr>
<tr class="separator:aebd7dd4ef859d70435a5db8e4f398ea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2c3951385254cbb42fb399b407ded24" id="r_ab2c3951385254cbb42fb399b407ded24"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ab2c3951385254cbb42fb399b407ded24">getDatabaseUrl</a> () const</td></tr>
<tr class="separator:ab2c3951385254cbb42fb399b407ded24"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40ba03d0f1291fc9e45ce86d05479cd3" id="r_a40ba03d0f1291fc9e45ce86d05479cd3"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a40ba03d0f1291fc9e45ce86d05479cd3">getDbSavingTime</a> () const</td></tr>
<tr class="separator:a40ba03d0f1291fc9e45ce86d05479cd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2391cf06d55513bee3cfd50d8beb3a59" id="r_a2391cf06d55513bee3cfd50d8beb3a59"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a2391cf06d55513bee3cfd50d8beb3a59">getMapId</a> (int id, bool lookInDatabase=false) const</td></tr>
<tr class="separator:a2391cf06d55513bee3cfd50d8beb3a59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4bb01d27d1ec7776103635b11228626c" id="r_a4bb01d27d1ec7776103635b11228626c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a4bb01d27d1ec7776103635b11228626c">getOdomPose</a> (int signatureId, bool lookInDatabase=false) const</td></tr>
<tr class="separator:a4bb01d27d1ec7776103635b11228626c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89dd9b0aea5595e929b23ded82cd8ff1" id="r_a89dd9b0aea5595e929b23ded82cd8ff1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a89dd9b0aea5595e929b23ded82cd8ff1">getGroundTruthPose</a> (int signatureId, bool lookInDatabase=false) const</td></tr>
<tr class="separator:a89dd9b0aea5595e929b23ded82cd8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac61afdb7694d54b5e3d146be427638b2" id="r_ac61afdb7694d54b5e3d146be427638b2"><td class="memItemLeft" align="right" valign="top">const std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ac61afdb7694d54b5e3d146be427638b2">getGroundTruths</a> () const</td></tr>
<tr class="separator:ac61afdb7694d54b5e3d146be427638b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca3bdb688c64dd62672f2385ce6de594" id="r_aca3bdb688c64dd62672f2385ce6de594"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#aca3bdb688c64dd62672f2385ce6de594">getGPS</a> (int id, <a class="el" href="classrtabmap_1_1GPS.html">GPS</a> &amp;gps, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &amp;offsetENU, bool lookInDatabase, int maxGraphDepth=0) const</td></tr>
<tr class="memdesc:aca3bdb688c64dd62672f2385ce6de594"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a <a class="el" href="classrtabmap_1_1GPS.html" title="WGS84 GPS fix attached to a sensor sample or graph node.">GPS</a> fix for <code>id</code>, falling back to the nearest GPS-tagged neighbor. <br /></td></tr>
<tr class="separator:aca3bdb688c64dd62672f2385ce6de594"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae6184a6979703045f34d3e2a155eb9f3" id="r_ae6184a6979703045f34d3e2a155eb9f3"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ae6184a6979703045f34d3e2a155eb9f3">getNodeInfo</a> (int signatureId, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &amp;odomPose, int &amp;mapId, int &amp;weight, std::string &amp;label, double &amp;stamp, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &amp;groundTruth, std::vector&lt; float &gt; &amp;velocity, <a class="el" href="classrtabmap_1_1GPS.html">GPS</a> &amp;gps, <a class="el" href="namespacertabmap.html#ac175ef40b7a4acb632232d3d96a1199a">EnvSensors</a> &amp;sensors, bool lookInDatabase=false) const</td></tr>
<tr class="memdesc:ae6184a6979703045f34d3e2a155eb9f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads metadata of <code>signatureId</code> (no images/scan/words). <br /></td></tr>
<tr class="separator:ae6184a6979703045f34d3e2a155eb9f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc4c40056783163ec5abde9366060cb2" id="r_abc4c40056783163ec5abde9366060cb2"><td class="memItemLeft" align="right" valign="top">cv::Mat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#abc4c40056783163ec5abde9366060cb2">getImageCompressed</a> (int signatureId) const</td></tr>
<tr class="separator:abc4c40056783163ec5abde9366060cb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a22d6c0b38d8699cdbba73b6bcdb38dd6" id="r_a22d6c0b38d8699cdbba73b6bcdb38dd6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classrtabmap_1_1SensorData.html">SensorData</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a22d6c0b38d8699cdbba73b6bcdb38dd6">getNodeData</a> (int locationId, bool images, bool scan, bool userData, bool occupancyGrid) const</td></tr>
<tr class="memdesc:a22d6c0b38d8699cdbba73b6bcdb38dd6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads sensor data of <code>locationId</code> from WM or LTM. <br /></td></tr>
<tr class="separator:a22d6c0b38d8699cdbba73b6bcdb38dd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c555fac41be4b4d44c551c010971dc3" id="r_a4c555fac41be4b4d44c551c010971dc3"><td class="memItemLeft" align="right" valign="top"><a id="a4c555fac41be4b4d44c551c010971dc3" name="a4c555fac41be4b4d44c551c010971dc3"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>getNodeWordsAndGlobalDescriptors</b> (int nodeId, std::multimap&lt; int, int &gt; &amp;words, std::vector&lt; cv::KeyPoint &gt; &amp;wordsKpts, std::vector&lt; cv::Point3f &gt; &amp;words3, cv::Mat &amp;wordsDescriptors, std::vector&lt; <a class="el" href="classrtabmap_1_1GlobalDescriptor.html">GlobalDescriptor</a> &gt; &amp;globalDescriptors) const</td></tr>
<tr class="memdesc:a4c555fac41be4b4d44c551c010971dc3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads the visual words, 3D points and global descriptors stored with <code>nodeId</code>. <br /></td></tr>
<tr class="separator:a4c555fac41be4b4d44c551c010971dc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af48dbd905dda453b6b2c2246a90d0e04" id="r_af48dbd905dda453b6b2c2246a90d0e04"><td class="memItemLeft" align="right" valign="top"><a id="af48dbd905dda453b6b2c2246a90d0e04" name="af48dbd905dda453b6b2c2246a90d0e04"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>getNodeCalibration</b> (int nodeId, std::vector&lt; <a class="el" href="classrtabmap_1_1CameraModel.html">CameraModel</a> &gt; &amp;models, std::vector&lt; <a class="el" href="classrtabmap_1_1StereoCameraModel.html">StereoCameraModel</a> &gt; &amp;stereoModels) const</td></tr>
<tr class="memdesc:af48dbd905dda453b6b2c2246a90d0e04"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads mono and/or stereo camera calibration stored with <code>nodeId</code>. <br /></td></tr>
<tr class="separator:af48dbd905dda453b6b2c2246a90d0e04"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c7c344a7f3733a8f30a6e82fbb4f20a" id="r_a4c7c344a7f3733a8f30a6e82fbb4f20a"><td class="memItemLeft" align="right" valign="top">std::set&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a4c7c344a7f3733a8f30a6e82fbb4f20a">getAllSignatureIds</a> (bool ignoreChildren=true) const</td></tr>
<tr class="memdesc:a4c7c344a7f3733a8f30a6e82fbb4f20a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns all signature ids in WM, STM and LTM. <br /></td></tr>
<tr class="separator:a4c7c344a7f3733a8f30a6e82fbb4f20a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8720df55fa6f8be933827808d364f20a" id="r_a8720df55fa6f8be933827808d364f20a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a8720df55fa6f8be933827808d364f20a">memoryChanged</a> () const</td></tr>
<tr class="memdesc:a8720df55fa6f8be933827808d364f20a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reports whether the in-memory map has been modified since the database was last loaded or reset. <a class="el" href="classrtabmap_1_1Memory.html#a44023158524dee3471a8dff43ea132db">close()</a> uses this flag to decide whether the database needs to be rewritten. <br /></td></tr>
<tr class="separator:a8720df55fa6f8be933827808d364f20a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a420ddb38a3ffefafc84d22b0dd3b3814" id="r_a420ddb38a3ffefafc84d22b0dd3b3814"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a420ddb38a3ffefafc84d22b0dd3b3814">isIncremental</a> () const</td></tr>
<tr class="separator:a420ddb38a3ffefafc84d22b0dd3b3814"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad6d7488b61f8bedf6c9e3f4019a6b7f4" id="r_ad6d7488b61f8bedf6c9e3f4019a6b7f4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ad6d7488b61f8bedf6c9e3f4019a6b7f4">isReadOnly</a> () const</td></tr>
<tr class="separator:ad6d7488b61f8bedf6c9e3f4019a6b7f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a32ed69b783e53be29fca6102ab198a4e" id="r_a32ed69b783e53be29fca6102ab198a4e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a32ed69b783e53be29fca6102ab198a4e">isLocalizationDataSaved</a> () const</td></tr>
<tr class="separator:a32ed69b783e53be29fca6102ab198a4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15ec109dd157745f69dcd4f80efaf561" id="r_a15ec109dd157745f69dcd4f80efaf561"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a15ec109dd157745f69dcd4f80efaf561">getSignature</a> (int id) const</td></tr>
<tr class="separator:a15ec109dd157745f69dcd4f80efaf561"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a19fe91598153249250ac4870db535e8e" id="r_a19fe91598153249250ac4870db535e8e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a19fe91598153249250ac4870db535e8e">isInSTM</a> (int signatureId) const</td></tr>
<tr class="separator:a19fe91598153249250ac4870db535e8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5058d8b44e4f76f1fedb76645087a1ac" id="r_a5058d8b44e4f76f1fedb76645087a1ac"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a5058d8b44e4f76f1fedb76645087a1ac">isInWM</a> (int signatureId) const</td></tr>
<tr class="separator:a5058d8b44e4f76f1fedb76645087a1ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2464a77e0190653e10ce9e60fb919ae9" id="r_a2464a77e0190653e10ce9e60fb919ae9"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a2464a77e0190653e10ce9e60fb919ae9">isInLTM</a> (int signatureId) const</td></tr>
<tr class="separator:a2464a77e0190653e10ce9e60fb919ae9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6d48ff5d4dfcf085123b5dd354fae681" id="r_a6d48ff5d4dfcf085123b5dd354fae681"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a6d48ff5d4dfcf085123b5dd354fae681">isIDsGenerated</a> () const</td></tr>
<tr class="separator:a6d48ff5d4dfcf085123b5dd354fae681"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad6e8870c75b300a7d526f49467f67913" id="r_ad6e8870c75b300a7d526f49467f67913"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ad6e8870c75b300a7d526f49467f67913">getLastGlobalLoopClosureId</a> () const</td></tr>
<tr class="separator:ad6e8870c75b300a7d526f49467f67913"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab094dfa40b0fe37cb12552a6ba081d6b" id="r_ab094dfa40b0fe37cb12552a6ba081d6b"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classrtabmap_1_1Feature2D.html">Feature2D</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ab094dfa40b0fe37cb12552a6ba081d6b">getFeature2D</a> () const</td></tr>
<tr class="separator:ab094dfa40b0fe37cb12552a6ba081d6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a790e24b6cb0fb3ec2ed198121a6211c1" id="r_a790e24b6cb0fb3ec2ed198121a6211c1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a790e24b6cb0fb3ec2ed198121a6211c1">isGraphReduced</a> () const</td></tr>
<tr class="separator:a790e24b6cb0fb3ec2ed198121a6211c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae37d02a779acb85797de25da36066829" id="r_ae37d02a779acb85797de25da36066829"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; double &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ae37d02a779acb85797de25da36066829">getOdomMaxInf</a> () const</td></tr>
<tr class="separator:ae37d02a779acb85797de25da36066829"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab29b6d90e79694d7fdfb56574476141f" id="r_ab29b6d90e79694d7fdfb56574476141f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ab29b6d90e79694d7fdfb56574476141f">isOdomGravityUsed</a> () const</td></tr>
<tr class="separator:ab29b6d90e79694d7fdfb56574476141f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4aef39ff933463d9693e8f4f325f74e7" id="r_a4aef39ff933463d9693e8f4f325f74e7"><td class="memItemLeft" align="right" valign="top"><a id="a4aef39ff933463d9693e8f4f325f74e7" name="a4aef39ff933463d9693e8f4f325f74e7"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>dumpMemoryTree</b> (const char *fileNameTree) const</td></tr>
<tr class="memdesc:a4aef39ff933463d9693e8f4f325f74e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes a human-readable dump of WM/STM, links and weights to <code>fileNameTree</code>. <br /></td></tr>
<tr class="separator:a4aef39ff933463d9693e8f4f325f74e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a634e2fdc0e1c93a2cb01f07c9cbac33f" id="r_a634e2fdc0e1c93a2cb01f07c9cbac33f"><td class="memItemLeft" align="right" valign="top"><a id="a634e2fdc0e1c93a2cb01f07c9cbac33f" name="a634e2fdc0e1c93a2cb01f07c9cbac33f"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>dumpMemory</b> (std::string directory) const</td></tr>
<tr class="memdesc:a634e2fdc0e1c93a2cb01f07c9cbac33f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dumps every internal map (signatures, words, dictionary) to text files in <code>directory</code>. <br /></td></tr>
<tr class="separator:a634e2fdc0e1c93a2cb01f07c9cbac33f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b470cb9ff41fd77a35d9a6230750446" id="r_a1b470cb9ff41fd77a35d9a6230750446"><td class="memItemLeft" align="right" valign="top"><a id="a1b470cb9ff41fd77a35d9a6230750446" name="a1b470cb9ff41fd77a35d9a6230750446"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>dumpSignatures</b> (const char *fileNameSign, bool words3D) const</td></tr>
<tr class="memdesc:a1b470cb9ff41fd77a35d9a6230750446"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dumps signatures' word ids (and 3D positions if <code>words3D</code>) to <code>fileNameSign</code>. <br /></td></tr>
<tr class="separator:a1b470cb9ff41fd77a35d9a6230750446"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc3de4b861e23f90bf753794bcb40e68" id="r_afc3de4b861e23f90bf753794bcb40e68"><td class="memItemLeft" align="right" valign="top"><a id="afc3de4b861e23f90bf753794bcb40e68" name="afc3de4b861e23f90bf753794bcb40e68"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>dumpDictionary</b> (const char *fileNameRef, const char *fileNameDesc) const</td></tr>
<tr class="memdesc:afc3de4b861e23f90bf753794bcb40e68"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dumps the visual word dictionary: references to <code>fileNameRef</code>, descriptors to <code>fileNameDesc</code>. <br /></td></tr>
<tr class="separator:afc3de4b861e23f90bf753794bcb40e68"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad59e8591cd04e2ecd93b4e706f198763" id="r_ad59e8591cd04e2ecd93b4e706f198763"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ad59e8591cd04e2ecd93b4e706f198763">getMemoryUsed</a> () const</td></tr>
<tr class="separator:ad59e8591cd04e2ecd93b4e706f198763"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aebef354bb315f522b4767337a6bd1ee6" id="r_aebef354bb315f522b4767337a6bd1ee6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#aebef354bb315f522b4767337a6bd1ee6">generateGraph</a> (const std::string &amp;fileName, const std::set&lt; int &gt; &amp;ids=std::set&lt; int &gt;())</td></tr>
<tr class="memdesc:aebef354bb315f522b4767337a6bd1ee6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes a Graphviz DOT file of the pose graph. <br /></td></tr>
<tr class="separator:aebef354bb315f522b4767337a6bd1ee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e63312ada575016b583a4252dc0a70c" id="r_a6e63312ada575016b583a4252dc0a70c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a6e63312ada575016b583a4252dc0a70c">cleanupLocalGrids</a> (const std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp;poses, const cv::Mat &amp;map, float xMin, float yMin, float cellSize, int cropRadius=1, bool filterScans=false)</td></tr>
<tr class="memdesc:a6e63312ada575016b583a4252dc0a70c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes spurious obstacle points from each node's local grid using a reference 2D map. <br /></td></tr>
<tr class="separator:a6e63312ada575016b583a4252dc0a70c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a61adae3b07b3daee32efd1abb4dac45e" id="r_a61adae3b07b3daee32efd1abb4dac45e"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classrtabmap_1_1VWDictionary.html">VWDictionary</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a61adae3b07b3daee32efd1abb4dac45e">getVWDictionary</a> () const</td></tr>
<tr class="separator:a61adae3b07b3daee32efd1abb4dac45e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5329c43c6b185613222d8458c049848" id="r_ab5329c43c6b185613222d8458c049848"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ab5329c43c6b185613222d8458c049848">getMetricConstraints</a> (const std::set&lt; int &gt; &amp;ids, std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp;poses, std::multimap&lt; int, <a class="el" href="classrtabmap_1_1Link.html">Link</a> &gt; &amp;links, bool lookInDatabase=false, bool landmarksAdded=false)</td></tr>
<tr class="memdesc:ab5329c43c6b185613222d8458c049848"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts a sub-graph (poses + links) for a set of node ids. <br /></td></tr>
<tr class="separator:ab5329c43c6b185613222d8458c049848"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ae0287262c04905baab2d6f94448486" id="r_a4ae0287262c04905baab2d6f94448486"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a4ae0287262c04905baab2d6f94448486">computeTransform</a> (<a class="el" href="classrtabmap_1_1Signature.html">Signature</a> &amp;fromS, <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> &amp;toS, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> guess, <a class="el" href="classrtabmap_1_1RegistrationInfo.html">RegistrationInfo</a> *info=0, bool useKnownCorrespondencesIfPossible=false) const</td></tr>
<tr class="memdesc:a4ae0287262c04905baab2d6f94448486"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the relative transform from <code>fromS</code> to <code>toS</code> using the registration pipeline. <br /></td></tr>
<tr class="separator:a4ae0287262c04905baab2d6f94448486"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29636c34234e6e2809e3d57329dc40d6" id="r_a29636c34234e6e2809e3d57329dc40d6"><td class="memItemLeft" align="right" valign="top"><a id="a29636c34234e6e2809e3d57329dc40d6" name="a29636c34234e6e2809e3d57329dc40d6"></a>
<a class="el" href="classrtabmap_1_1Transform.html">Transform</a>&#160;</td><td class="memItemRight" valign="bottom"><b>computeTransform</b> (int fromId, int toId, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> guess, <a class="el" href="classrtabmap_1_1RegistrationInfo.html">RegistrationInfo</a> *info=0, bool useKnownCorrespondencesIfPossible=false)</td></tr>
<tr class="memdesc:a29636c34234e6e2809e3d57329dc40d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience overload: loads signatures by id and forwards to the <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> variant. <br /></td></tr>
<tr class="separator:a29636c34234e6e2809e3d57329dc40d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca66c6d1316f9d833b279104a683ee50" id="r_aca66c6d1316f9d833b279104a683ee50"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#aca66c6d1316f9d833b279104a683ee50">computeIcpTransform</a> (const <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> &amp;fromS, const <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> &amp;toS, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> guess, <a class="el" href="classrtabmap_1_1RegistrationInfo.html">RegistrationInfo</a> *info=0) const</td></tr>
<tr class="memdesc:aca66c6d1316f9d833b279104a683ee50"><td class="mdescLeft">&#160;</td><td class="mdescRight">Refines a transform using ICP alignment of laser scans only. <br /></td></tr>
<tr class="separator:aca66c6d1316f9d833b279104a683ee50"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34aa7efd5f6ce0fd3136459542ad8ebb" id="r_a34aa7efd5f6ce0fd3136459542ad8ebb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a34aa7efd5f6ce0fd3136459542ad8ebb">computeIcpTransformMulti</a> (int newId, int oldId, const std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp;poses, <a class="el" href="classrtabmap_1_1RegistrationInfo.html">RegistrationInfo</a> *info=0)</td></tr>
<tr class="memdesc:a34aa7efd5f6ce0fd3136459542ad8ebb"><td class="mdescLeft">&#160;</td><td class="mdescRight">ICP registration of one node against an assembled cloud from multiple neighbors. <br /></td></tr>
<tr class="separator:a34aa7efd5f6ce0fd3136459542ad8ebb"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
Static Public Attributes</h2></td></tr>
<tr class="memitem:a12042e10017298c4dcf6e435c5a2290a" id="r_a12042e10017298c4dcf6e435c5a2290a"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a12042e10017298c4dcf6e435c5a2290a">kIdStart</a></td></tr>
<tr class="memdesc:a12042e10017298c4dcf6e435c5a2290a"><td class="mdescLeft">&#160;</td><td class="mdescRight">First valid signature id assigned to a new signature (positive integer). <br /></td></tr>
<tr class="separator:a12042e10017298c4dcf6e435c5a2290a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a539ccf650a81905db46dd6d98112f603" id="r_a539ccf650a81905db46dd6d98112f603"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a539ccf650a81905db46dd6d98112f603">kIdVirtual</a></td></tr>
<tr class="memdesc:a539ccf650a81905db46dd6d98112f603"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reserved id for the "virtual place" used by the Bayes filter (negative). <br /></td></tr>
<tr class="separator:a539ccf650a81905db46dd6d98112f603"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac78b3a9a3394eb63c50650a4b8ada68e" id="r_ac78b3a9a3394eb63c50650a4b8ada68e"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#ac78b3a9a3394eb63c50650a4b8ada68e">kIdInvalid</a></td></tr>
<tr class="memdesc:ac78b3a9a3394eb63c50650a4b8ada68e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sentinel value indicating an invalid signature id (zero). <br /></td></tr>
<tr class="separator:ac78b3a9a3394eb63c50650a4b8ada68e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a6110b0ea8a7b35bae46083f2ce66e148" id="r_a6110b0ea8a7b35bae46083f2ce66e148"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classrtabmap_1_1DBDriver.html">DBDriver</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1Memory.html#a6110b0ea8a7b35bae46083f2ce66e148">_dbDriver</a></td></tr>
<tr class="memdesc:a6110b0ea8a7b35bae46083f2ce66e148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Database driver owning the persistent storage (created by <a class="el" href="classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd">init()</a>). <br /></td></tr>
<tr class="separator:a6110b0ea8a7b35bae46083f2ce66e148"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Three-tiered memory management (STM, WM, LTM) for RTAB-Map. </p>
<p><a class="el" href="classrtabmap_1_1Memory.html" title="Three-tiered memory management (STM, WM, LTM) for RTAB-Map.">Memory</a> is the core map data structure used by <a class="el" href="classrtabmap_1_1Rtabmap.html">Rtabmap</a>. It stores observations as <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> nodes connected by <a class="el" href="classrtabmap_1_1Link.html">Link</a> edges and orchestrates their lifecycle across three tiers:</p>
<ul>
<li><b>Short-Term <a class="el" href="classrtabmap_1_1Memory.html" title="Three-tiered memory management (STM, WM, LTM) for RTAB-Map.">Memory</a> (STM)</b>: most recently added signatures, kept at a fixed size (see <a class="el" href="classrtabmap_1_1Parameters.html#a46dc1a24b02bb00014262f7f4d818a49">Parameters::kMemSTMSize()</a>). Used to delay recently observed places before they become candidates for loop closure.</li>
<li><b>Working <a class="el" href="classrtabmap_1_1Memory.html" title="Three-tiered memory management (STM, WM, LTM) for RTAB-Map.">Memory</a> (WM)</b>: signatures available for loop-closure likelihood computation in the current iteration. Older signatures are transferred from WM to LTM by <a class="el" href="classrtabmap_1_1Memory.html#a51e89ccab2261912b09a5b7178fdd46c">forget()</a> to bound iteration time.</li>
<li><b>Long-Term <a class="el" href="classrtabmap_1_1Memory.html" title="Three-tiered memory management (STM, WM, LTM) for RTAB-Map.">Memory</a> (LTM)</b>: persisted in the database via <a class="el" href="classrtabmap_1_1DBDriver.html">DBDriver</a>. Signatures can be brought back to WM with <a class="el" href="classrtabmap_1_1Memory.html#aa244b8581684b85e35d2056cf972e377">reactivateSignatures()</a> when their neighbors still in WM are good loop-closure candidates.</li>
</ul>
<p>The class also owns a visual word dictionary (<a class="el" href="classrtabmap_1_1VWDictionary.html">VWDictionary</a>), feature extractor (<a class="el" href="classrtabmap_1_1Feature2D.html">Feature2D</a>) and registration pipelines (<a class="el" href="classrtabmap_1_1Registration.html">Registration</a>, <a class="el" href="classrtabmap_1_1RegistrationVis.html">RegistrationVis</a>, <a class="el" href="classrtabmap_1_1RegistrationIcp.html">RegistrationIcp</a>) used to compute relative transforms between signatures.</p>
<p>Typical iteration: <a class="el" href="classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee">update()</a> adds a new <a class="el" href="classrtabmap_1_1SensorData.html">SensorData</a> as a <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> in STM; <a class="el" href="classrtabmap_1_1Memory.html#a984ca01a87434b11a66dc1d96e2fff17">computeLikelihood()</a> scores it against WM; the <a class="el" href="classrtabmap_1_1Rtabmap.html">Rtabmap</a> caller decides on loop closures with <a class="el" href="classrtabmap_1_1BayesFilter.html">BayesFilter</a>; <a class="el" href="classrtabmap_1_1Memory.html#af87e4718dd842c59fd8459430c40d78f">cleanup()</a> drops bad signatures; <a class="el" href="classrtabmap_1_1Memory.html#a51e89ccab2261912b09a5b7178fdd46c">forget()</a> transfers oldest WM signatures to LTM and <a class="el" href="classrtabmap_1_1Memory.html#aa244b8581684b85e35d2056cf972e377">reactivateSignatures()</a> pulls relevant ones back.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classrtabmap_1_1Signature.html" title="Represents a node in RTAB-Map&#39;s pose graph.">Signature</a> </dd>
<dd>
<a class="el" href="classrtabmap_1_1DBDriver.html" title="Abstract database driver for RTAB-Map maps (signatures, links, words, statistics).">DBDriver</a> </dd>
<dd>
<a class="el" href="classrtabmap_1_1VWDictionary.html" title="Manages a dictionary of visual words for visual place recognition and loop closure detection.">VWDictionary</a> </dd>
<dd>
<a class="el" href="classrtabmap_1_1Rtabmap.html" title="Top-level RTAB-Map SLAM pipeline (mapping, localization and loop closure).">Rtabmap</a> </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00101">101</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a24d451cdf46a9cc04cce995142a101d4" name="a24d451cdf46a9cc04cce995142a101d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24d451cdf46a9cc04cce995142a101d4">&#9670;&#160;</a></span>Memory()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">rtabmap::Memory::Memory </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;&#160;</td>
<td class="paramname"><em>parameters</em> = <code><a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a>()</code></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Constructs a <a class="el" href="classrtabmap_1_1Memory.html" title="Three-tiered memory management (STM, WM, LTM) for RTAB-Map.">Memory</a> instance with the given parameters. </p>
<p>The database is not opened here; call <a class="el" href="classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd">init()</a> to open or create a database and load persisted state. <code>parameters</code> may include any key from <a class="el" href="classrtabmap_1_1Parameters.html">Parameters</a> (memory, keypoint, registration, etc.); missing keys fall back to defaults. </p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="abbf54d2a34838cc13ce98d41a9991918" name="abbf54d2a34838cc13ce98d41a9991918"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abbf54d2a34838cc13ce98d41a9991918">&#9670;&#160;</a></span>parseParameters()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void rtabmap::Memory::parseParameters </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;&#160;</td>
<td class="paramname"><em>parameters</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Re-parses parameters and propagates them to owned sub-objects. </p>
<p>Forwards the relevant subset to <a class="el" href="classrtabmap_1_1VWDictionary.html">VWDictionary</a>, <a class="el" href="classrtabmap_1_1Feature2D.html">Feature2D</a>, the registration pipelines and the database driver. Safe to call at runtime to change settings. </p>
</div>
</div>
<a id="af4cc965870dd757517b126af4860d34d" name="af4cc965870dd757517b126af4860d34d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4cc965870dd757517b126af4860d34d">&#9670;&#160;</a></span>getParameters()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp; rtabmap::Memory::getParameters </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>The most recent parameter map applied via the constructor or <a class="el" href="classrtabmap_1_1Memory.html#abbf54d2a34838cc13ce98d41a9991918">parseParameters()</a>. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00130">130</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a3c029b2788f3b599480d5150120a6bee" name="a3c029b2788f3b599480d5150120a6bee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c029b2788f3b599480d5150120a6bee">&#9670;&#160;</a></span>update() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::update </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classrtabmap_1_1SensorData.html">SensorData</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1Statistics.html">Statistics</a> *&#160;</td>
<td class="paramname"><em>stats</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Adds a sensor observation to the map (overload without odometry pose). </p>
<p>Equivalent to calling the full <a class="el" href="classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee">update()</a> with an identity pose and empty covariance. The new signature is added to STM; oldest STM entries are promoted to WM as needed.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>Sensor data (images, scan, user data, odometry features) for this frame. </td></tr>
<tr><td class="paramname">stats</td><td>Optional output statistics receiver for timing/diagnostic values. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if a signature was successfully created and added, false otherwise. </dd></dl>
</div>
</div>
<a id="aae43fd080c6bc9773fa58f1c36e6684f" name="aae43fd080c6bc9773fa58f1c36e6684f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aae43fd080c6bc9773fa58f1c36e6684f">&#9670;&#160;</a></span>update() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::update </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classrtabmap_1_1SensorData.html">SensorData</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &amp;&#160;</td>
<td class="paramname"><em>pose</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const cv::Mat &amp;&#160;</td>
<td class="paramname"><em>covariance</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>velocity</em> = <code>std::vector&lt;&#160;float&#160;&gt;()</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1Statistics.html">Statistics</a> *&#160;</td>
<td class="paramname"><em>stats</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Adds a sensor observation with odometry pose and velocity to the map. </p>
<p>Creates a new <a class="el" href="classrtabmap_1_1Signature.html">Signature</a>, extracts visual words, links it to the previous STM signature with a neighbor link, runs rehearsal against STM and promotes the oldest STM signature to WM if STM is full.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>Sensor data (images, scan, user data, odometry features). </td></tr>
<tr><td class="paramname">pose</td><td><a class="el" href="classrtabmap_1_1Odometry.html" title="Abstract base class for visual, lidar and visual-inertial odometry backends.">Odometry</a> pose at this frame (null if odometry not used). </td></tr>
<tr><td class="paramname">covariance</td><td>6x6 odometry covariance (or empty if null odometry is provided). </td></tr>
<tr><td class="paramname">velocity</td><td>Optional 6-vector (vx, vy, vz, vroll, vpitch, vyaw). </td></tr>
<tr><td class="paramname">stats</td><td>Optional output statistics receiver. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True on success, false if signature creation failed. </dd></dl>
</div>
</div>
<a id="aeeabc78648bf7dc14ea1356828cdeddd" name="aeeabc78648bf7dc14ea1356828cdeddd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeeabc78648bf7dc14ea1356828cdeddd">&#9670;&#160;</a></span>init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::init </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>dbUrl</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>dbOverwritten</em> = <code>false</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a> &amp;&#160;</td>
<td class="paramname"><em>parameters</em> = <code><a class="el" href="namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55">ParametersMap</a>()</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>postInitClosingEvents</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Opens or creates a database and loads existing state into WM. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">dbUrl</td><td>Path to the database file (empty for in-memory). </td></tr>
<tr><td class="paramname">dbOverwritten</td><td>If true, deletes the existing file before opening. </td></tr>
<tr><td class="paramname">parameters</td><td>Optional parameter override applied before loading. </td></tr>
<tr><td class="paramname">postInitClosingEvents</td><td>If true, posts <a class="el" href="classrtabmap_1_1RtabmapEventInit.html">RtabmapEventInit</a> events for progress reporting (used by GUI). </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True on success, false if the database could not be opened. </dd></dl>
</div>
</div>
<a id="a44023158524dee3471a8dff43ea132db" name="a44023158524dee3471a8dff43ea132db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44023158524dee3471a8dff43ea132db">&#9670;&#160;</a></span>close()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::Memory::close </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>databaseSaved</em> = <code>true</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>postInitClosingEvents</em> = <code>false</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>ouputDatabasePath</em> = <code>&quot;&quot;</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Flushes pending data and closes the database connection. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">databaseSaved</td><td>If true, persists STM/WM signatures and statistics before closing. If false, in-memory state is discarded. </td></tr>
<tr><td class="paramname">postInitClosingEvents</td><td>If true, posts progress events while closing. </td></tr>
<tr><td class="paramname">ouputDatabasePath</td><td>If non-empty, the database is copied to this path on close. If a database on disk was initially created/loaded on a different path, it will be updated with latest changes and renamed to the output path. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a984ca01a87434b11a66dc1d96e2fff17" name="a984ca01a87434b11a66dc1d96e2fff17"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a984ca01a87434b11a66dc1d96e2fff17">&#9670;&#160;</a></span>computeLikelihood()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::map&lt; int, float &gt; rtabmap::Memory::computeLikelihood </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> *&#160;</td>
<td class="paramname"><em>signature</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::list&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>ids</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes loop-closure likelihood of <code>signature</code> against a set of WM ids. </p>
<p>Compares visual words (tf-idf if enabled) between <code>signature</code> and each id in <code>ids</code> and returns a normalized likelihood per id.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">signature</td><td>Query signature (typically the last added one). </td></tr>
<tr><td class="paramname">ids</td><td>Candidate signature ids in working memory. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Map from id to likelihood score. </dd></dl>
</div>
</div>
<a id="afce9dbf3e5657d65540e33c59e992d83" name="afce9dbf3e5657d65540e33c59e992d83"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afce9dbf3e5657d65540e33c59e992d83">&#9670;&#160;</a></span>incrementMapId()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::incrementMapId </td>
<td>(</td>
<td class="paramtype">std::map&lt; int, int &gt; *&#160;</td>
<td class="paramname"><em>reducedIds</em> = <code>0</code></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Starts a new map id, breaking session continuity (e.g. after localization loss). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">reducedIds</td><td>If non-null, populated with id remappings produced by graph reduction triggered by the new map. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The new map id (auto-incremented). </dd></dl>
</div>
</div>
<a id="a76fd8c93220c16fac5843ccc2c0bec3c" name="a76fd8c93220c16fac5843ccc2c0bec3c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a76fd8c93220c16fac5843ccc2c0bec3c">&#9670;&#160;</a></span>updateAge()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::Memory::updateAge </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Refreshes the age of <code>signatureId</code> in working memory, marking it as recent. </p>
<p>Used to keep loop-closure hypotheses active so they are not transferred to LTM during the next <a class="el" href="classrtabmap_1_1Memory.html#a51e89ccab2261912b09a5b7178fdd46c">forget()</a> call. </p>
</div>
</div>
<a id="a51e89ccab2261912b09a5b7178fdd46c" name="a51e89ccab2261912b09a5b7178fdd46c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a51e89ccab2261912b09a5b7178fdd46c">&#9670;&#160;</a></span>forget()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::list&lt; int &gt; rtabmap::Memory::forget </td>
<td>(</td>
<td class="paramtype">const std::set&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>ignoredIds</em> = <code>std::set&lt;&#160;int&#160;&gt;()</code></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Transfers oldest signatures from WM to LTM to respect memory and/or time limits. </p>
<p>Two regimes are used depending on the visual word dictionary state:</p><ul>
<li><b>Word-count regime</b>: active only when mapping mode is on, the <a class="el" href="classrtabmap_1_1VWDictionary.html">VWDictionary</a> is in incremental mode, contains at least one word, and is <em>not</em> using incremental FLANN. In this regime, signatures are transferred until the number of visual words removed from the dictionary catches up with the number of new words indexed since the previous iteration.</li>
<li><b>Signature-count regime</b>: used in every other case (localization mode, dictionary not incremental, dictionary still empty &ndash; e.g. lidar-only mapping or no feature extraction &ndash; or incremental FLANN, where the word count is no longer the bottleneck). In this regime, at least one more signature than the count added/retrieved in the previous iteration is transferred, regardless of words.</li>
</ul>
<p>In both regimes, candidate selection (see <code>getRemovableSignatures()</code>) honors <code>ignoredIds</code>, skips intermediate nodes, and excludes WM nodes linked to STM (to preserve rehearsal). Intermediate (weight==-1) nodes linked to a transferred signature are dragged out with it.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ignoredIds</td><td>Signatures that must not be transferred (e.g. STM, retrieved ids, on the planned path). </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Ids of signatures moved to LTM, in transfer order. </dd></dl>
</div>
</div>
<a id="aa244b8581684b85e35d2056cf972e377" name="aa244b8581684b85e35d2056cf972e377"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa244b8581684b85e35d2056cf972e377">&#9670;&#160;</a></span>reactivateSignatures()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::set&lt; int &gt; rtabmap::Memory::reactivateSignatures </td>
<td>(</td>
<td class="paramtype">const std::list&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>ids</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>maxLoaded</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double &amp;&#160;</td>
<td class="paramname"><em>timeDbAccess</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reloads signatures from LTM into WM. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ids</td><td>Candidate ids; those already in WM/STM are ignored. </td></tr>
<tr><td class="paramname">maxLoaded</td><td>Hard cap on number of ids actually loaded (0 = unlimited). </td></tr>
<tr><td class="paramname">timeDbAccess</td><td>Output: time spent in the database driver (seconds). </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Ids effectively brought back to WM. </dd></dl>
</div>
</div>
<a id="af87e4718dd842c59fd8459430c40d78f" name="af87e4718dd842c59fd8459430c40d78f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af87e4718dd842c59fd8459430c40d78f">&#9670;&#160;</a></span>cleanup()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::cleanup </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Drops the last signature if flagged as bad, or any signature in localization mode. </p>
<dl class="section return"><dt>Returns</dt><dd>Id of the removed signature, or 0 if none was removed. </dd></dl>
</div>
</div>
<a id="a7e16d27512d0daf17b9dbb17aab3b201" name="a7e16d27512d0daf17b9dbb17aab3b201"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7e16d27512d0daf17b9dbb17aab3b201">&#9670;&#160;</a></span>saveOptimizedMesh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::Memory::saveOptimizedMesh </td>
<td>(</td>
<td class="paramtype">const cv::Mat &amp;&#160;</td>
<td class="paramname"><em>cloud</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; std::vector&lt; std::vector&lt; RTABMAP_PCL_INDEX &gt; &gt; &gt; &amp;&#160;</td>
<td class="paramname"><em>polygons</em> = <code>std::vector&lt;&#160;std::vector&lt;&#160;std::vector&lt;&#160;RTABMAP_PCL_INDEX&#160;&gt;&#160;&gt;&#160;&gt;()</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; std::vector&lt; Eigen::Vector2f &gt; &gt; &amp;&#160;</td>
<td class="paramname"><em>texCoords</em> = <code>std::vector&lt;&#160;std::vector&lt;&#160;Eigen::Vector2f&#160;&gt;&#160;&gt;()</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const cv::Mat &amp;&#160;</td>
<td class="paramname"><em>textures</em> = <code>cv::Mat()</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Persists an optimized textured/colored mesh to the database. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cloud</td><td>Point cloud (XYZRGB) of vertices. </td></tr>
<tr><td class="paramname">polygons</td><td>Per-texture list of polygons; each polygon is a list of vertex indices. </td></tr>
<tr><td class="paramname">texCoords</td><td>Per-texture list of UV coords matching <code>polygons</code>. </td></tr>
<tr><td class="paramname">textures</td><td>Concatenated texture images (square, equal-sized). </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a4140effa4830fbe679a51e975f0021a1" name="a4140effa4830fbe679a51e975f0021a1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4140effa4830fbe679a51e975f0021a1">&#9670;&#160;</a></span>addLink()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::addLink </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classrtabmap_1_1Link.html">Link</a> &amp;&#160;</td>
<td class="paramname"><em>link</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>addInDatabase</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Adds a graph link between two signatures. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">link</td><td><a class="el" href="classrtabmap_1_1Link.html" title="Directed constraint between two nodes in RTAB-Map&#39;s pose graph.">Link</a> to add (type, transform, covariance). </td></tr>
<tr><td class="paramname">addInDatabase</td><td>If true, the link is also added when one of the ids is only in LTM. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the link was added, false on conflict or missing nodes. </dd></dl>
</div>
</div>
<a id="a521305f39adcdfbedebbe5bdae9efbc6" name="a521305f39adcdfbedebbe5bdae9efbc6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a521305f39adcdfbedebbe5bdae9efbc6">&#9670;&#160;</a></span>getNeighborsId()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::map&lt; int, int &gt; rtabmap::Memory::getNeighborsId </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>maxGraphDepth</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>maxCheckedInDatabase</em> = <code>-1</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>incrementMarginOnLoop</em> = <code>false</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>ignoreLoopIds</em> = <code>false</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>ignoreIntermediateNodes</em> = <code>false</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>ignoreLocalSpaceLoopIds</em> = <code>false</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::set&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>nodesSet</em> = <code>std::set&lt;&#160;int&#160;&gt;()</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>dbAccessTime</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Breadth-first walk of the pose graph from <code>signatureId</code>. </p>
<p>Visits neighbor and (optionally) loop-closure neighbors up to <code>maxGraphDepth</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">signatureId</td><td>Starting node. </td></tr>
<tr><td class="paramname">maxGraphDepth</td><td>Maximum graph distance (0 = infinite graph depth). </td></tr>
<tr><td class="paramname">maxCheckedInDatabase</td><td>Cap on LTM look-ups (-1 = unlimited, 0 = WM only). </td></tr>
<tr><td class="paramname">incrementMarginOnLoop</td><td>If true, loop-closure links count toward depth. </td></tr>
<tr><td class="paramname">ignoreLoopIds</td><td>If true, loop-closure neighbors are not traversed. </td></tr>
<tr><td class="paramname">ignoreIntermediateNodes</td><td>If true, weight==-1 intermediate nodes are skipped. </td></tr>
<tr><td class="paramname">ignoreLocalSpaceLoopIds</td><td>If true, only global loop closures are traversed. </td></tr>
<tr><td class="paramname">nodesSet</td><td>If non-empty, traversal is constrained to these ids. </td></tr>
<tr><td class="paramname">dbAccessTime</td><td>Output: time spent in database access (seconds). </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Map from visited node id to graph depth, including <code>signatureId</code> (with graph depth of 0) </dd></dl>
</div>
</div>
<a id="a10c44ee8a5d84480b41aa4980665d894" name="a10c44ee8a5d84480b41aa4980665d894"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a10c44ee8a5d84480b41aa4980665d894">&#9670;&#160;</a></span>getNeighborsIdRadius()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::map&lt; int, float &gt; rtabmap::Memory::getNeighborsIdRadius </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>radius</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>optimizedPoses</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>maxGraphDepth</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns neighbor ids within a Euclidean radius using optimized poses. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">signatureId</td><td>Query node id. </td></tr>
<tr><td class="paramname">radius</td><td>Maximum distance from <code>signatureId</code> (meters). </td></tr>
<tr><td class="paramname">optimizedPoses</td><td>Pose graph after optimization (used for distances). </td></tr>
<tr><td class="paramname">maxGraphDepth</td><td>Maximum graph distance (in terms of nodes) to bound the search. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Map from node id to squared distance from <code>signatureId</code>. </dd></dl>
</div>
</div>
<a id="a2b91d8b5d651fbaa12a31e364c793a21" name="a2b91d8b5d651fbaa12a31e364c793a21"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b91d8b5d651fbaa12a31e364c793a21">&#9670;&#160;</a></span>deleteLocation()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::Memory::deleteLocation </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>locationId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::list&lt; int &gt; *&#160;</td>
<td class="paramname"><em>deletedWords</em> = <code>0</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>keepLinkedInDb</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Removes <code>locationId</code> from WM/STM and the database. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">locationId</td><td>Id of the signature to delete. </td></tr>
<tr><td class="paramname">deletedWords</td><td>Optional output: words whose reference count dropped to zero. </td></tr>
<tr><td class="paramname">keepLinkedInDb</td><td>If true, the location keeps its links, weight and label and stays part of the graph in the database. If false (default), it is unlinked first &ndash; links removed on both sides, weight invalidated, label cleared &ndash; so at best it is kept as history only and no longer appears in <a class="el" href="classrtabmap_1_1Memory.html#a4c7c344a7f3733a8f30a6e82fbb4f20a">getAllSignatureIds()</a>. An unlinked location is written to the database only if it was already saved there or if <a class="el" href="classrtabmap_1_1Parameters.html#aa64b9331ee411f41941ca5635da09f81">Parameters::kMemNotLinkedNodesKept()</a> is true (default); otherwise it is discarded outright. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ac9e6bfaf161d4bd1a9f99d2352492a1d" name="ac9e6bfaf161d4bd1a9f99d2352492a1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac9e6bfaf161d4bd1a9f99d2352492a1d">&#9670;&#160;</a></span>reduceNode()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::reduceNode </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>maxDistance</em> = <code>0.0f</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>keepLinkedInDb</em> = <code>false</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>direction</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Merges <code>id</code> with a close neighbor (graph reduction). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">id</td><td>Node to reduce. </td></tr>
<tr><td class="paramname">maxDistance</td><td>Maximum distance to a neighbor to allow the merge (meters). </td></tr>
<tr><td class="paramname">keepLinkedInDb</td><td>Same meaning as in <a class="el" href="classrtabmap_1_1Memory.html#a2b91d8b5d651fbaa12a31e364c793a21">deleteLocation()</a>: if true, the merged node keeps its links, weight and label and stays part of the graph in the database. If false (default), it is unlinked first &ndash; links removed on both sides, weight invalidated, label cleared &ndash; so at best it is kept as history only and no longer appears in <a class="el" href="classrtabmap_1_1Memory.html#a4c7c344a7f3733a8f30a6e82fbb4f20a">getAllSignatureIds()</a>. An unlinked node is written to the database only if it was already saved there or if <a class="el" href="classrtabmap_1_1Parameters.html#aa64b9331ee411f41941ca5635da09f81">Parameters::kMemNotLinkedNodesKept()</a> is true (default); otherwise it is discarded outright. </td></tr>
<tr><td class="paramname">direction</td><td>Restrict merge target: 0=any, 1=previous neighbor, 2=next neighbor. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Id of the node <code>id</code> was merged into, or 0 if no reduction was performed. </dd></dl>
</div>
</div>
<a id="a655f123daec9e4e50e322db9f3bbd6db" name="a655f123daec9e4e50e322db9f3bbd6db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a655f123daec9e4e50e322db9f3bbd6db">&#9670;&#160;</a></span>setDummyDictionary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::Memory::setDummyDictionary </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>enabled</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Enables a dummy visual word dictionary (no descriptors kept, word ids only). </p>
<dl class="section note"><dt>Note</dt><dd>Must be called before <a class="el" href="classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd">init()</a>; ignored (with an error logged) once the database driver is set. </dd>
<dd>
Silently disabled by <a class="el" href="classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd">init()</a> when the database holds no dictionary, since there would be nothing to skip loading, and the memory would otherwise be left unable to add new nodes. </dd></dl>
</div>
</div>
<a id="ab6c0794ad1aac6e9084c0240e709cdc6" name="ab6c0794ad1aac6e9084c0240e709cdc6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab6c0794ad1aac6e9084c0240e709cdc6">&#9670;&#160;</a></span>getWorkingMem()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::map&lt; int, double &gt; &amp; rtabmap::Memory::getWorkingMem </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Working memory as { signature id, age } (does not include STM). </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00400">400</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a5ca9260a2a63fae6f3d16e1db9cbce53" name="a5ca9260a2a63fae6f3d16e1db9cbce53"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ca9260a2a63fae6f3d16e1db9cbce53">&#9670;&#160;</a></span>getWorkingMemSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">size_t rtabmap::Memory::getWorkingMemSize </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>ignoreIntermediateNodes</em> = <code>false</code></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the number of signatures in working memory, excluding the virtual place. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ignoreIntermediateNodes</td><td>If true, intermediate nodes (weight = -1) are not counted. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ad9b97cdfd95eb3c0dad649d755fc3267" name="ad9b97cdfd95eb3c0dad649d755fc3267"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad9b97cdfd95eb3c0dad649d755fc3267">&#9670;&#160;</a></span>getWorkingMemIntermediateNodesCount()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::getWorkingMemIntermediateNodesCount </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Number of intermediate nodes (weight = -1) currently in working memory. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00407">407</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a3f3a3da280f9e5ee9bba6df03e551f79" name="a3f3a3da280f9e5ee9bba6df03e551f79"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3f3a3da280f9e5ee9bba6df03e551f79">&#9670;&#160;</a></span>getStMemIntermediateNodesCount()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::getStMemIntermediateNodesCount </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Number of intermediate nodes (weight = -1) currently in short-term memory. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00409">409</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a007abab13fade6f63b6db3fc279a1631" name="a007abab13fade6f63b6db3fc279a1631"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a007abab13fade6f63b6db3fc279a1631">&#9670;&#160;</a></span>getStMem()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::set&lt; int &gt; &amp; rtabmap::Memory::getStMem </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Set of signature ids currently in short-term memory. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00411">411</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a41b23c567f6aa6bcc3a756e5ae5c1f33" name="a41b23c567f6aa6bcc3a756e5ae5c1f33"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41b23c567f6aa6bcc3a756e5ae5c1f33">&#9670;&#160;</a></span>getMaxStMemSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::getMaxStMemSize </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Configured maximum STM size (<a class="el" href="classrtabmap_1_1Parameters.html#a46dc1a24b02bb00014262f7f4d818a49">Parameters::kMemSTMSize()</a>). </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00413">413</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a7d4e2a2281980bc1b18683fd8fc2ebeb" name="a7d4e2a2281980bc1b18683fd8fc2ebeb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d4e2a2281980bc1b18683fd8fc2ebeb">&#9670;&#160;</a></span>getLinks()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::multimap&lt; int, <a class="el" href="classrtabmap_1_1Link.html">Link</a> &gt; rtabmap::Memory::getLinks </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>lookInDatabase</em> = <code>false</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>withLandmarks</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns all links of <code>signatureId</code> (neighbor, loop, prior, gravity, ...). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">signatureId</td><td>Source node id (can also be a landmark id). </td></tr>
<tr><td class="paramname">lookInDatabase</td><td>Also query LTM for links. </td></tr>
<tr><td class="paramname">withLandmarks</td><td>Include landmark links in the result. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a18a6e852d545751fbc348d2aae6d7fe0" name="a18a6e852d545751fbc348d2aae6d7fe0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a18a6e852d545751fbc348d2aae6d7fe0">&#9670;&#160;</a></span>isBinDataKept()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::isBinDataKept </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True if raw binary data (images, scans) is kept in memory after compression. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00432">432</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="ae1e4c518ec65f86b7a3eade7ac2705c8" name="ae1e4c518ec65f86b7a3eade7ac2705c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae1e4c518ec65f86b7a3eade7ac2705c8">&#9670;&#160;</a></span>getSimilarityThreshold()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">float rtabmap::Memory::getSimilarityThreshold </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Similarity threshold used by rehearsal (<a class="el" href="classrtabmap_1_1Parameters.html#a634f4790c9c84772935bf406265bc692">Parameters::kMemRehearsalSimilarity()</a>). </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00434">434</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a4d8bfc0b85f270dbb3fc66cde079b63e" name="a4d8bfc0b85f270dbb3fc66cde079b63e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4d8bfc0b85f270dbb3fc66cde079b63e">&#9670;&#160;</a></span>getWeights()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::map&lt; int, int &gt; rtabmap::Memory::getWeights </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Map from signature id to weight (rehearsal accumulation count) for WM and STM. </dd></dl>
</div>
</div>
<a id="a65552e672e67c9f511b3384e3d117de6" name="a65552e672e67c9f511b3384e3d117de6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65552e672e67c9f511b3384e3d117de6">&#9670;&#160;</a></span>getLastSignatureId()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::getLastSignatureId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Id of the most recently added signature, or 0 if none. </dd></dl>
</div>
</div>
<a id="ad14c4346a42a621b7834c60de6bc2e63" name="ad14c4346a42a621b7834c60de6bc2e63"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad14c4346a42a621b7834c60de6bc2e63">&#9670;&#160;</a></span>getLastWorkingSignature()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> * rtabmap::Memory::getLastWorkingSignature </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>ignoreIntermediateNodes</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the most recent WM signature. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ignoreIntermediateNodes</td><td>If true, skips weight==-1 placeholder nodes. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a4907501b27fdfd5b8053b9d932d8dec4" name="a4907501b27fdfd5b8053b9d932d8dec4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4907501b27fdfd5b8053b9d932d8dec4">&#9670;&#160;</a></span>getSignatureIdByLabel()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::getSignatureIdByLabel </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>label</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>lookInDatabase</em> = <code>true</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classrtabmap_1_1Signature.html" title="Represents a node in RTAB-Map&#39;s pose graph.">Signature</a> id labeled <code>label</code>, or 0 if not found. </dd></dl>
</div>
</div>
<a id="abba1fbec2be0cfced6e14d723fc45794" name="abba1fbec2be0cfced6e14d723fc45794"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abba1fbec2be0cfced6e14d723fc45794">&#9670;&#160;</a></span>labelSignature()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::labelSignature </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>label</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Assigns or removes a label on <code>id</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">id</td><td><a class="el" href="classrtabmap_1_1Signature.html" title="Represents a node in RTAB-Map&#39;s pose graph.">Signature</a> id; pass 0 to remove an existing label by name. </td></tr>
<tr><td class="paramname">label</td><td>Label text; empty to remove. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the label was applied. </dd></dl>
</div>
</div>
<a id="a055a0ebfc7e2c128d386f8141dc320ce" name="a055a0ebfc7e2c128d386f8141dc320ce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a055a0ebfc7e2c128d386f8141dc320ce">&#9670;&#160;</a></span>getAllLabels()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::map&lt; int, std::string &gt; &amp; rtabmap::Memory::getAllLabels </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Map from signature id to non-empty label (including STM+WM+LTM). </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00456">456</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="acf7e6cbe5eda50b024cbb1bc82d03b7c" name="acf7e6cbe5eda50b024cbb1bc82d03b7c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acf7e6cbe5eda50b024cbb1bc82d03b7c">&#9670;&#160;</a></span>getLandmarksIndex()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::map&lt; int, std::set&lt; int &gt; &gt; &amp; rtabmap::Memory::getLandmarksIndex </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Reverse landmark index: { landmark id (negative), nodes observing it }. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00458">458</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a2098205b805bde66a4a57906a8ca95f5" name="a2098205b805bde66a4a57906a8ca95f5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2098205b805bde66a4a57906a8ca95f5">&#9670;&#160;</a></span>allNodesInWM()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::allNodesInWM </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True if every persisted node (in LTM) is currently loaded in WM/STM. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00460">460</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="aff18f08be0a7951f508276e341759f5c" name="aff18f08be0a7951f508276e341759f5c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aff18f08be0a7951f508276e341759f5c">&#9670;&#160;</a></span>setUserData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::setUserData </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const cv::Mat &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Attaches user data to signature <code>id</code>, compressing it on the fly if needed. </p>
<p>The format is detected automatically: a single-row <code>CV_8UC1</code> matrix is treated as already-compressed data and stored as-is; anything else is considered raw and compressed before being stored.</p>
<dl class="section note"><dt>Note</dt><dd>If you pass one-dimensional unsigned 8-bit raw data, transpose it so it has multiple rows (not multiple columns), otherwise it will be misdetected as already compressed.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">id</td><td>Target signature id (must be in WM/STM or LTM). </td></tr>
<tr><td class="paramname">data</td><td>Raw or pre-compressed user data. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the data was attached, false if <code>id</code> was not found. </dd></dl>
</div>
</div>
<a id="a83d0b30afc46dd66ab3106c9997657c4" name="a83d0b30afc46dd66ab3106c9997657c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a83d0b30afc46dd66ab3106c9997657c4">&#9670;&#160;</a></span>getDatabaseMemoryUsed()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::getDatabaseMemoryUsed </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>On-disk database size in bytes. </dd></dl>
</div>
</div>
<a id="aebd7dd4ef859d70435a5db8e4f398ea5" name="aebd7dd4ef859d70435a5db8e4f398ea5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aebd7dd4ef859d70435a5db8e4f398ea5">&#9670;&#160;</a></span>getDatabaseVersion()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::string rtabmap::Memory::getDatabaseVersion </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Schema version of the open database (e.g. "0.20.0"). </dd></dl>
</div>
</div>
<a id="ab2c3951385254cbb42fb399b407ded24" name="ab2c3951385254cbb42fb399b407ded24"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab2c3951385254cbb42fb399b407ded24">&#9670;&#160;</a></span>getDatabaseUrl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::string rtabmap::Memory::getDatabaseUrl </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>File path of the open database (empty if in-memory). </dd></dl>
</div>
</div>
<a id="a40ba03d0f1291fc9e45ce86d05479cd3" name="a40ba03d0f1291fc9e45ce86d05479cd3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a40ba03d0f1291fc9e45ce86d05479cd3">&#9670;&#160;</a></span>getDbSavingTime()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double rtabmap::Memory::getDbSavingTime </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Last <a class="el" href="classrtabmap_1_1Memory.html#a072ec41027a03072f1a945540b43a1b8">emptyTrash()</a> flush time in seconds. </dd></dl>
</div>
</div>
<a id="a2391cf06d55513bee3cfd50d8beb3a59" name="a2391cf06d55513bee3cfd50d8beb3a59"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2391cf06d55513bee3cfd50d8beb3a59">&#9670;&#160;</a></span>getMapId()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::getMapId </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>lookInDatabase</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Map id of signature <code>id</code>; <code>lookInDatabase</code> also queries LTM. </dd></dl>
</div>
</div>
<a id="a4bb01d27d1ec7776103635b11228626c" name="a4bb01d27d1ec7776103635b11228626c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4bb01d27d1ec7776103635b11228626c">&#9670;&#160;</a></span>getOdomPose()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a> rtabmap::Memory::getOdomPose </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>lookInDatabase</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classrtabmap_1_1Odometry.html" title="Abstract base class for visual, lidar and visual-inertial odometry backends.">Odometry</a> pose stored with <code>signatureId</code> (null if unknown). </dd></dl>
</div>
</div>
<a id="a89dd9b0aea5595e929b23ded82cd8ff1" name="a89dd9b0aea5595e929b23ded82cd8ff1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a89dd9b0aea5595e929b23ded82cd8ff1">&#9670;&#160;</a></span>getGroundTruthPose()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a> rtabmap::Memory::getGroundTruthPose </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>lookInDatabase</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Ground-truth pose stored with <code>signatureId</code> (null if unknown). </dd></dl>
</div>
</div>
<a id="ac61afdb7694d54b5e3d146be427638b2" name="ac61afdb7694d54b5e3d146be427638b2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac61afdb7694d54b5e3d146be427638b2">&#9670;&#160;</a></span>getGroundTruths()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp; rtabmap::Memory::getGroundTruths </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Ground-truth poses for nodes currently in WM/STM. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00493">493</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="aca3bdb688c64dd62672f2385ce6de594" name="aca3bdb688c64dd62672f2385ce6de594"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca3bdb688c64dd62672f2385ce6de594">&#9670;&#160;</a></span>getGPS()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::Memory::getGPS </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1GPS.html">GPS</a> &amp;&#160;</td>
<td class="paramname"><em>gps</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &amp;&#160;</td>
<td class="paramname"><em>offsetENU</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>lookInDatabase</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>maxGraphDepth</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns a <a class="el" href="classrtabmap_1_1GPS.html" title="WGS84 GPS fix attached to a sensor sample or graph node.">GPS</a> fix for <code>id</code>, falling back to the nearest GPS-tagged neighbor. </p>
<p>Two cases:</p><ul>
<li>If <code>id</code> has a <a class="el" href="classrtabmap_1_1GPS.html" title="WGS84 GPS fix attached to a sensor sample or graph node.">GPS</a> fix attached, <code>gps</code> is set to that fix and <code>offsetENU</code> is left at identity.</li>
<li>Otherwise, the graph is searched (via <a class="el" href="classrtabmap_1_1Memory.html#a521305f39adcdfbedebbe5bdae9efbc6">getNeighborsId()</a> with depth <code>maxGraphDepth</code>, ignoring loop closures) for the closest neighbor that has a <a class="el" href="classrtabmap_1_1GPS.html" title="WGS84 GPS fix attached to a sensor sample or graph node.">GPS</a> fix. When one is found, <code>gps</code> is set to that neighbor's fix and <code>offsetENU</code> is the rigid transform from that neighbor's pose to <code>id</code>, expressed in ENU coordinates (derived from the neighbor's heading/bearing). Applying <code>offsetENU</code> on top of the GPS-derived pose of the neighbor yields the ENU pose of <code>id</code>.</li>
</ul>
<p>If no <a class="el" href="classrtabmap_1_1GPS.html" title="WGS84 GPS fix attached to a sensor sample or graph node.">GPS</a> fix is found on <code>id</code> or any reachable neighbor, <code>gps</code> is returned empty (<code>gps.stamp()==0</code>) and <code>offsetENU</code> is identity.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">id</td><td>Query signature id. </td></tr>
<tr><td class="paramname">gps</td><td>Output <a class="el" href="classrtabmap_1_1GPS.html" title="WGS84 GPS fix attached to a sensor sample or graph node.">GPS</a> fix (empty if none found). </td></tr>
<tr><td class="paramname">offsetENU</td><td>Output ENU-frame offset from the GPS-tagged node to <code>id</code> (identity when <code>id</code> itself carries the <a class="el" href="classrtabmap_1_1GPS.html" title="WGS84 GPS fix attached to a sensor sample or graph node.">GPS</a> fix or when none is found). </td></tr>
<tr><td class="paramname">lookInDatabase</td><td>If true, also fetch missing nodes from LTM during the search. </td></tr>
<tr><td class="paramname">maxGraphDepth</td><td>Maximum graph depth used to look for a GPS-tagged neighbor when <code>id</code> has none (0 = no depth limit, i.e. search the whole reachable graph). </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ae6184a6979703045f34d3e2a155eb9f3" name="ae6184a6979703045f34d3e2a155eb9f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6184a6979703045f34d3e2a155eb9f3">&#9670;&#160;</a></span>getNodeInfo()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::getNodeInfo </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &amp;&#160;</td>
<td class="paramname"><em>odomPose</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int &amp;&#160;</td>
<td class="paramname"><em>mapId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int &amp;&#160;</td>
<td class="paramname"><em>weight</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string &amp;&#160;</td>
<td class="paramname"><em>label</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double &amp;&#160;</td>
<td class="paramname"><em>stamp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &amp;&#160;</td>
<td class="paramname"><em>groundTruth</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; float &gt; &amp;&#160;</td>
<td class="paramname"><em>velocity</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1GPS.html">GPS</a> &amp;&#160;</td>
<td class="paramname"><em>gps</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacertabmap.html#ac175ef40b7a4acb632232d3d96a1199a">EnvSensors</a> &amp;&#160;</td>
<td class="paramname"><em>sensors</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>lookInDatabase</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads metadata of <code>signatureId</code> (no images/scan/words). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">signatureId</td><td>Node id. </td></tr>
<tr><td class="paramname">odomPose</td><td>Output odometry pose (null if not set). </td></tr>
<tr><td class="paramname">mapId</td><td>Output map id. </td></tr>
<tr><td class="paramname">weight</td><td>Output rehearsal weight. </td></tr>
<tr><td class="paramname">label</td><td>Output label (empty if none). </td></tr>
<tr><td class="paramname">stamp</td><td>Output timestamp (seconds, epoch). </td></tr>
<tr><td class="paramname">groundTruth</td><td>Output ground-truth pose (null if not set). </td></tr>
<tr><td class="paramname">velocity</td><td>Output 6-vector velocity (empty if not set). </td></tr>
<tr><td class="paramname">gps</td><td>Output <a class="el" href="classrtabmap_1_1GPS.html" title="WGS84 GPS fix attached to a sensor sample or graph node.">GPS</a> fix (invalid if not set). </td></tr>
<tr><td class="paramname">sensors</td><td>Output environmental sensor readings. </td></tr>
<tr><td class="paramname">lookInDatabase</td><td>Also query LTM. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if <code>signatureId</code> was found. </dd></dl>
</div>
</div>
<a id="abc4c40056783163ec5abde9366060cb2" name="abc4c40056783163ec5abde9366060cb2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc4c40056783163ec5abde9366060cb2">&#9670;&#160;</a></span>getImageCompressed()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">cv::Mat rtabmap::Memory::getImageCompressed </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Compressed image blob for <code>signatureId</code> (empty if not stored). </dd></dl>
</div>
</div>
<a id="a22d6c0b38d8699cdbba73b6bcdb38dd6" name="a22d6c0b38d8699cdbba73b6bcdb38dd6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a22d6c0b38d8699cdbba73b6bcdb38dd6">&#9670;&#160;</a></span>getNodeData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classrtabmap_1_1SensorData.html">SensorData</a> rtabmap::Memory::getNodeData </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>locationId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>images</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>scan</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>userData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>occupancyGrid</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Loads sensor data of <code>locationId</code> from WM or LTM. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">images</td><td>Include compressed RGB/depth images. </td></tr>
<tr><td class="paramname">scan</td><td>Include laser scan blob. </td></tr>
<tr><td class="paramname">userData</td><td>Include user data blob. </td></tr>
<tr><td class="paramname">occupancyGrid</td><td>Include occupancy grid cells. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a4c7c344a7f3733a8f30a6e82fbb4f20a" name="a4c7c344a7f3733a8f30a6e82fbb4f20a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4c7c344a7f3733a8f30a6e82fbb4f20a">&#9670;&#160;</a></span>getAllSignatureIds()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::set&lt; int &gt; rtabmap::Memory::getAllSignatureIds </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>ignoreChildren</em> = <code>true</code></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns all signature ids in WM, STM and LTM. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ignoreChildren</td><td>If true, nodes not linked to graph anymore are excluded </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a8720df55fa6f8be933827808d364f20a" name="a8720df55fa6f8be933827808d364f20a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8720df55fa6f8be933827808d364f20a">&#9670;&#160;</a></span>memoryChanged()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::memoryChanged </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Reports whether the in-memory map has been modified since the database was last loaded or reset. <a class="el" href="classrtabmap_1_1Memory.html#a44023158524dee3471a8dff43ea132db">close()</a> uses this flag to decide whether the database needs to be rewritten. </p>
<p>The flag is cleared to <code>false</code> on construction, by <a class="el" href="classrtabmap_1_1Memory.html#a44023158524dee3471a8dff43ea132db">close()</a> and when the memory is cleared, and is raised to <code>true</code> on any of the following events:</p>
<ul>
<li><b><a class="el" href="classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee">update()</a> in mapping mode</b> (<a class="el" href="classrtabmap_1_1Parameters.html#acdc74cd2b096ba28d9c1e00040b69d42">Parameters::kMemIncrementalMemory()</a> == <code>true</code>, see <a class="el" href="classrtabmap_1_1Memory.html#a420ddb38a3ffefafc84d22b0dd3b3814">isIncremental()</a>): every successful call sets the flag, since a new <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> is added to the graph and the visual word dictionary may grow.</li>
<li><b><a class="el" href="classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee">update()</a> in localization mode</b> (<a class="el" href="classrtabmap_1_1Memory.html#a420ddb38a3ffefafc84d22b0dd3b3814">isIncremental()</a> == <code>false</code>): the flag is set only when <a class="el" href="classrtabmap_1_1Parameters.html#aa5a4f5d2c71072ea2896c7ae2c8dda12">Parameters::kMemLocalizationDataSaved()</a> is enabled (see <a class="el" href="classrtabmap_1_1Memory.html#a32ed69b783e53be29fca6102ab198a4e">isLocalizationDataSaved()</a>), i.e. when the new node must be persisted back to the database. Pure localization (the default, <a class="el" href="classrtabmap_1_1Parameters.html#aa5a4f5d2c71072ea2896c7ae2c8dda12">Parameters::kMemLocalizationDataSaved()</a> == <code>false</code>) leaves the flag at <code>false</code> even after many <a class="el" href="classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee">update()</a> calls, because nothing needs to be saved.</li>
<li><b><a class="el" href="classrtabmap_1_1Memory.html#ac9e6bfaf161d4bd1a9f99d2352492a1d">reduceNode()</a></b>: merging a node into a neighbor mutates the graph and marks the memory as changed (and also raises the link-changed flag).</li>
<li><b><a class="el" href="classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd">init()</a> dictionary repair</b>: when <a class="el" href="classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd">init()</a> rebuilds the visual word dictionary because words are missing from the database, the flag is forced to <code>true</code> so the regenerated dictionary is saved back on <a class="el" href="classrtabmap_1_1Memory.html#a44023158524dee3471a8dff43ea132db">close()</a>, even if no new data was processed.</li>
</ul>
<p>Note that link-only modifications (e.g. <a class="el" href="classrtabmap_1_1Memory.html#a4140effa4830fbe679a51e975f0021a1">addLink()</a>, <a class="el" href="classrtabmap_1_1Memory.html#a7c7f80937a35204cb5b44faec8e99736">updateLink()</a>, <a class="el" href="classrtabmap_1_1Memory.html#a3fcaa79a33d63f7e383d05868b1316e3">removeLink()</a>) update an independent <code>_linksChanged</code> flag, not this one.</p>
<dl class="section return"><dt>Returns</dt><dd>True if the memory has changed and would need to be persisted. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00602">602</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a420ddb38a3ffefafc84d22b0dd3b3814" name="a420ddb38a3ffefafc84d22b0dd3b3814"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a420ddb38a3ffefafc84d22b0dd3b3814">&#9670;&#160;</a></span>isIncremental()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::isIncremental </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True if the memory grows on <a class="el" href="classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee">update()</a> (mapping mode), false in localization mode. </dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classrtabmap_1_1Parameters.html#acdc74cd2b096ba28d9c1e00040b69d42" title="Key of parameter Mem/IncrementalMemory : &quot;SLAM mode, otherwise it is Localization mode....">Parameters::kMemIncrementalMemory()</a> </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00607">607</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="ad6d7488b61f8bedf6c9e3f4019a6b7f4" name="ad6d7488b61f8bedf6c9e3f4019a6b7f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad6d7488b61f8bedf6c9e3f4019a6b7f4">&#9670;&#160;</a></span>isReadOnly()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::isReadOnly </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True in localization mode when database writes are disabled (i.e. <a class="el" href="classrtabmap_1_1Memory.html#a420ddb38a3ffefafc84d22b0dd3b3814">isIncremental()</a> is false and <a class="el" href="classrtabmap_1_1Parameters.html#a326e79acb5a39f7da481f9771501030c">Parameters::kMemLocalizationReadOnly()</a> is enabled). </dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classrtabmap_1_1Parameters.html#acdc74cd2b096ba28d9c1e00040b69d42" title="Key of parameter Mem/IncrementalMemory : &quot;SLAM mode, otherwise it is Localization mode....">Parameters::kMemIncrementalMemory()</a> </dd>
<dd>
<a class="el" href="classrtabmap_1_1Parameters.html#a326e79acb5a39f7da481f9771501030c" title="Key of parameter Mem/LocalizationReadOnly : uFormat(&quot;In localization mode, open the database in read-...">Parameters::kMemLocalizationReadOnly()</a> </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00614">614</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a32ed69b783e53be29fca6102ab198a4e" name="a32ed69b783e53be29fca6102ab198a4e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a32ed69b783e53be29fca6102ab198a4e">&#9670;&#160;</a></span>isLocalizationDataSaved()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::isLocalizationDataSaved </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True if data added during localization is persisted to the database. </dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classrtabmap_1_1Parameters.html#aa5a4f5d2c71072ea2896c7ae2c8dda12" title="Key of parameter Mem/LocalizationDataSaved : uFormat(&quot;Save localization data during localization sess...">Parameters::kMemLocalizationDataSaved()</a> </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00619">619</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a15ec109dd157745f69dcd4f80efaf561" name="a15ec109dd157745f69dcd4f80efaf561"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15ec109dd157745f69dcd4f80efaf561">&#9670;&#160;</a></span>getSignature()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> * rtabmap::Memory::getSignature </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>id</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classrtabmap_1_1Signature.html" title="Represents a node in RTAB-Map&#39;s pose graph.">Signature</a> with <code>id</code> in WM/STM, or null if not loaded. </dd></dl>
</div>
</div>
<a id="a19fe91598153249250ac4870db535e8e" name="a19fe91598153249250ac4870db535e8e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a19fe91598153249250ac4870db535e8e">&#9670;&#160;</a></span>isInSTM()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::isInSTM </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True if <code>signatureId</code> is in short-term memory. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00623">623</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a5058d8b44e4f76f1fedb76645087a1ac" name="a5058d8b44e4f76f1fedb76645087a1ac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5058d8b44e4f76f1fedb76645087a1ac">&#9670;&#160;</a></span>isInWM()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::isInWM </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True if <code>signatureId</code> is in working memory. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00625">625</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a2464a77e0190653e10ce9e60fb919ae9" name="a2464a77e0190653e10ce9e60fb919ae9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2464a77e0190653e10ce9e60fb919ae9">&#9670;&#160;</a></span>isInLTM()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::isInLTM </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>signatureId</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True if <code>signatureId</code> is not in STM/WM, so when it is in LTM or non-existing. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00627">627</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a6d48ff5d4dfcf085123b5dd354fae681" name="a6d48ff5d4dfcf085123b5dd354fae681"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6d48ff5d4dfcf085123b5dd354fae681">&#9670;&#160;</a></span>isIDsGenerated()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::isIDsGenerated </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True if signature ids are auto-generated, false if taken from sensor data id. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00629">629</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="ad6e8870c75b300a7d526f49467f67913" name="ad6e8870c75b300a7d526f49467f67913"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad6e8870c75b300a7d526f49467f67913">&#9670;&#160;</a></span>getLastGlobalLoopClosureId()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::getLastGlobalLoopClosureId </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Id of the last accepted global loop-closure node, or 0 if none. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00631">631</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="ab094dfa40b0fe37cb12552a6ba081d6b" name="ab094dfa40b0fe37cb12552a6ba081d6b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab094dfa40b0fe37cb12552a6ba081d6b">&#9670;&#160;</a></span>getFeature2D()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classrtabmap_1_1Feature2D.html">Feature2D</a> * rtabmap::Memory::getFeature2D </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Feature extractor used to compute visual words. </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00633">633</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a790e24b6cb0fb3ec2ed198121a6211c1" name="a790e24b6cb0fb3ec2ed198121a6211c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a790e24b6cb0fb3ec2ed198121a6211c1">&#9670;&#160;</a></span>isGraphReduced()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::isGraphReduced </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True if graph reduction is enabled (<a class="el" href="classrtabmap_1_1Parameters.html#a5b838d1204f572de9f39904de5e22ed5">Parameters::kMemReduceGraph()</a>). </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00635">635</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="ae37d02a779acb85797de25da36066829" name="ae37d02a779acb85797de25da36066829"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae37d02a779acb85797de25da36066829">&#9670;&#160;</a></span>getOdomMaxInf()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::vector&lt; double &gt; &amp; rtabmap::Memory::getOdomMaxInf </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Running per-axis maximum of the diagonal of every neighbor (odometry) link's information matrix observed so far, as a 6-vector (x, y, z, roll, pitch, yaw). Empty until at least one 6x6 neighbor link information matrix has been seen.</dd></dl>
<p>This is a runtime statistic, not a configurable parameter: it is updated on <a class="el" href="classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd">init()</a> (over all loaded neighbor links) and on every <a class="el" href="classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee">update()</a> that adds a new neighbor link.</p>
<p>It is consumed by <a class="el" href="classrtabmap_1_1Rtabmap.html#aeea47830776fe57c456ae6a673069ddc">Rtabmap::getInformation()</a> when <a class="el" href="classrtabmap_1_1Parameters.html#a2f0e34d58229d94e6368223be2dd4fc6">Parameters::kRGBDLoopCovLimited()</a> is enabled, to clip loop-closure information matrices so a loop never claims higher confidence than odometry itself ever provided.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classrtabmap_1_1Parameters.html#a2f0e34d58229d94e6368223be2dd4fc6" title="Key of parameter RGBD/LoopCovLimited : &quot;Limit covariance of non-neighbor links to minimum covariance ...">Parameters::kRGBDLoopCovLimited()</a> </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00653">653</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="ab29b6d90e79694d7fdfb56574476141f" name="ab29b6d90e79694d7fdfb56574476141f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab29b6d90e79694d7fdfb56574476141f">&#9670;&#160;</a></span>isOdomGravityUsed()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool rtabmap::Memory::isOdomGravityUsed </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>True if the odometry pose orientation is used (instead of the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> orientation) as the source of each new node's gravity link.</dd></dl>
<p>When enabled, every new node gets a self-loop <a class="el" href="classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea37d186f2447908a27d531be74a2f6983">Link::kGravity</a> holding the rotation of the odometry pose passed to <a class="el" href="classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee">update()</a>. This assumes odometry is already gravity-aligned (e.g. a VIO front-end). When disabled, the gravity link is built from the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> orientation in <a class="el" href="classrtabmap_1_1SensorData.html#a056056de80edf1bc20505fd992cdc6e7">SensorData::imu()</a> if available.</p>
<p>Gravity links are consumed by graph optimization only when <a class="el" href="classrtabmap_1_1Parameters.html#ae30f9e3d2e17c3543801cdd9fa51ffcc">Parameters::kOptimizerGravitySigma()</a> is non-zero.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classrtabmap_1_1Parameters.html#ab53fe6e9b2e23d37c6a7af8f52354848" title="Key of parameter Mem/UseOdomGravity : uFormat(&quot;Use odometry instead of IMU orientation to add gravity...">Parameters::kMemUseOdomGravity()</a> </dd>
<dd>
<a class="el" href="classrtabmap_1_1Parameters.html#ae30f9e3d2e17c3543801cdd9fa51ffcc" title="Key of parameter Optimizer/GravitySigma : uFormat(&quot;Gravity sigma value (&gt;=0, typically between 0....">Parameters::kOptimizerGravitySigma()</a> </dd></dl>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00669">669</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="ad59e8591cd04e2ecd93b4e706f198763" name="ad59e8591cd04e2ecd93b4e706f198763"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad59e8591cd04e2ecd93b4e706f198763">&#9670;&#160;</a></span>getMemoryUsed()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned long rtabmap::Memory::getMemoryUsed </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Approximate RAM usage of the in-memory state, in bytes. </dd></dl>
</div>
</div>
<a id="aebef354bb315f522b4767337a6bd1ee6" name="aebef354bb315f522b4767337a6bd1ee6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aebef354bb315f522b4767337a6bd1ee6">&#9670;&#160;</a></span>generateGraph()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::Memory::generateGraph </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>fileName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::set&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>ids</em> = <code>std::set&lt;&#160;int&#160;&gt;()</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes a Graphviz DOT file of the pose graph. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">fileName</td><td>Output path. </td></tr>
<tr><td class="paramname">ids</td><td>If non-empty, restrict the graph to these node ids. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a6e63312ada575016b583a4252dc0a70c" name="a6e63312ada575016b583a4252dc0a70c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6e63312ada575016b583a4252dc0a70c">&#9670;&#160;</a></span>cleanupLocalGrids()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int rtabmap::Memory::cleanupLocalGrids </td>
<td>(</td>
<td class="paramtype">const std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>poses</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const cv::Mat &amp;&#160;</td>
<td class="paramname"><em>map</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>xMin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>yMin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">float&#160;</td>
<td class="paramname"><em>cellSize</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>cropRadius</em> = <code>1</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>filterScans</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Removes spurious obstacle points from each node's local grid using a reference 2D map. </p>
<p>For every node in <code>poses</code>, the node's local <b>obstacle</b> grid is loaded, each obstacle point is projected with <code>poses</code> into the reference <code>map</code>, and the point is kept only if either:</p><ul>
<li>the reference <code>map</code> cell at its projection is not free space (i.e. the cell is an obstacle or unknown, value != 0), or</li>
<li>the reference <code>map</code> contains an obstacle cell (value == 100) within <code>cropRadius</code> cells of the projection.</li>
</ul>
<p>Points that fall on a free cell and have no obstacle neighbor within <code>cropRadius</code> are dropped. The filtered obstacle grid replaces the node's grid in WM/STM and (if the node is already persisted) in the database via <a class="el" href="classrtabmap_1_1DBDriver.html#a2f5e8e0b367e49cfbba7c96b28306a61">DBDriver::updateOccupancyGrid()</a>.</p>
<p><b>Ground and empty cells are not touched</b>: they are read and written back as-is.</p>
<p>When <code>filterScans</code> is true, the same projection/filtering rule is also applied to each node's raw laser scan, and the rewritten scan is saved back to the database. This is useful to remove dynamic objects from the stored scans before re-meshing or re-exporting.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">poses</td><td>Optimized poses used to project the local grids/scans into <code>map</code>. </td></tr>
<tr><td class="paramname">map</td><td>Reference 2D occupancy grid (cell values: 0 free, 100 occupied, anything else unknown). </td></tr>
<tr><td class="paramname">xMin</td><td>Reference map origin x in world coordinates (meters). </td></tr>
<tr><td class="paramname">yMin</td><td>Reference map origin y in world coordinates (meters). </td></tr>
<tr><td class="paramname">cellSize</td><td>Reference map resolution (meters/cell); must match the nodes' grid cell size. </td></tr>
<tr><td class="paramname">cropRadius</td><td>Search radius (in cells) around each projected point used to accept points near an obstacle in <code>map</code>. </td></tr>
<tr><td class="paramname">filterScans</td><td>If true, also filter and rewrite the raw laser scan attached to each node, using the same rule as for obstacle cells. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Number of (node, grid or scan) modifications performed, or -1 on error (no database loaded, empty <code>poses</code> or empty <code>map</code>). </dd></dl>
</div>
</div>
<a id="a61adae3b07b3daee32efd1abb4dac45e" name="a61adae3b07b3daee32efd1abb4dac45e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a61adae3b07b3daee32efd1abb4dac45e">&#9670;&#160;</a></span>getVWDictionary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classrtabmap_1_1VWDictionary.html">VWDictionary</a> * rtabmap::Memory::getVWDictionary </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>Visual word dictionary used for tf-idf likelihood and feature matching. </dd></dl>
</div>
</div>
<a id="ab5329c43c6b185613222d8458c049848" name="ab5329c43c6b185613222d8458c049848"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab5329c43c6b185613222d8458c049848">&#9670;&#160;</a></span>getMetricConstraints()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::Memory::getMetricConstraints </td>
<td>(</td>
<td class="paramtype">const std::set&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>ids</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>poses</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::multimap&lt; int, <a class="el" href="classrtabmap_1_1Link.html">Link</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>links</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>lookInDatabase</em> = <code>false</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>landmarksAdded</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Extracts a sub-graph (poses + links) for a set of node ids. </p>
<p>Used by graph optimization callers to retrieve constraints for a region of interest.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ids</td><td>Ids to include. </td></tr>
<tr><td class="paramname">poses</td><td>Output: odometry poses for <code>ids</code>. </td></tr>
<tr><td class="paramname">links</td><td>Output: links between the nodes (and to landmarks if <code>landmarksAdded</code>). </td></tr>
<tr><td class="paramname">lookInDatabase</td><td>If true, fetch missing data from LTM. </td></tr>
<tr><td class="paramname">landmarksAdded</td><td>If true, also include landmark constraints. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a4ae0287262c04905baab2d6f94448486" name="a4ae0287262c04905baab2d6f94448486"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4ae0287262c04905baab2d6f94448486">&#9670;&#160;</a></span>computeTransform()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a> rtabmap::Memory::computeTransform </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1Signature.html">Signature</a> &amp;&#160;</td>
<td class="paramname"><em>fromS</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1Signature.html">Signature</a> &amp;&#160;</td>
<td class="paramname"><em>toS</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a>&#160;</td>
<td class="paramname"><em>guess</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1RegistrationInfo.html">RegistrationInfo</a> *&#160;</td>
<td class="paramname"><em>info</em> = <code>0</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>useKnownCorrespondencesIfPossible</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes the relative transform from <code>fromS</code> to <code>toS</code> using the registration pipeline. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">fromS</td><td>Source signature (will be modified to cache extracted data). </td></tr>
<tr><td class="paramname">toS</td><td>Target signature. </td></tr>
<tr><td class="paramname">guess</td><td>Initial transform estimate (null if unknown). </td></tr>
<tr><td class="paramname">info</td><td>Optional output with inlier counts, variance and diagnostics. </td></tr>
<tr><td class="paramname">useKnownCorrespondencesIfPossible</td><td>If true, reuses existing word-id correspondences. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The estimated transform, or a null <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> on failure. </dd></dl>
</div>
</div>
<a id="aca66c6d1316f9d833b279104a683ee50" name="aca66c6d1316f9d833b279104a683ee50"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca66c6d1316f9d833b279104a683ee50">&#9670;&#160;</a></span>computeIcpTransform()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a> rtabmap::Memory::computeIcpTransform </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> &amp;&#160;</td>
<td class="paramname"><em>fromS</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classrtabmap_1_1Signature.html">Signature</a> &amp;&#160;</td>
<td class="paramname"><em>toS</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a>&#160;</td>
<td class="paramname"><em>guess</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1RegistrationInfo.html">RegistrationInfo</a> *&#160;</td>
<td class="paramname"><em>info</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Refines a transform using ICP alignment of laser scans only. </p>
<dl class="section return"><dt>Returns</dt><dd>The refined transform, or a null <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> on failure. </dd></dl>
</div>
</div>
<a id="a34aa7efd5f6ce0fd3136459542ad8ebb" name="a34aa7efd5f6ce0fd3136459542ad8ebb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a34aa7efd5f6ce0fd3136459542ad8ebb">&#9670;&#160;</a></span>computeIcpTransformMulti()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classrtabmap_1_1Transform.html">Transform</a> rtabmap::Memory::computeIcpTransformMulti </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>newId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>oldId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::map&lt; int, <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>poses</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classrtabmap_1_1RegistrationInfo.html">RegistrationInfo</a> *&#160;</td>
<td class="paramname"><em>info</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>ICP registration of one node against an assembled cloud from multiple neighbors. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">newId</td><td>New (query) node id. </td></tr>
<tr><td class="paramname">oldId</td><td>Reference node id. </td></tr>
<tr><td class="paramname">poses</td><td>Neighbor poses used to assemble the reference cloud. </td></tr>
<tr><td class="paramname">info</td><td>Optional output with inlier counts and diagnostics. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The estimated transform, or a null <a class="el" href="classrtabmap_1_1Transform.html">Transform</a> on failure. </dd></dl>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a12042e10017298c4dcf6e435c5a2290a" name="a12042e10017298c4dcf6e435c5a2290a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a12042e10017298c4dcf6e435c5a2290a">&#9670;&#160;</a></span>kIdStart</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const int rtabmap::Memory::kIdStart</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>First valid signature id assigned to a new signature (positive integer). </p>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00105">105</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a539ccf650a81905db46dd6d98112f603" name="a539ccf650a81905db46dd6d98112f603"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a539ccf650a81905db46dd6d98112f603">&#9670;&#160;</a></span>kIdVirtual</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const int rtabmap::Memory::kIdVirtual</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Reserved id for the "virtual place" used by the Bayes filter (negative). </p>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00107">107</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="ac78b3a9a3394eb63c50650a4b8ada68e" name="ac78b3a9a3394eb63c50650a4b8ada68e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac78b3a9a3394eb63c50650a4b8ada68e">&#9670;&#160;</a></span>kIdInvalid</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const int rtabmap::Memory::kIdInvalid</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sentinel value indicating an invalid signature id (zero). </p>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00109">109</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<a id="a6110b0ea8a7b35bae46083f2ce66e148" name="a6110b0ea8a7b35bae46083f2ce66e148"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6110b0ea8a7b35bae46083f2ce66e148">&#9670;&#160;</a></span>_dbDriver</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classrtabmap_1_1DBDriver.html">DBDriver</a>* rtabmap::Memory::_dbDriver</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Database driver owning the persistent storage (created by <a class="el" href="classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd">init()</a>). </p>
<p class="definition">Definition at line <a class="el" href="Memory_8h_source.html#l00819">819</a> of file <a class="el" href="Memory_8h_source.html">Memory.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>corelib/include/rtabmap/core/<a class="el" href="Memory_8h_source.html">Memory.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespacertabmap.html">rtabmap</a></li><li class="navelem"><a class="el" href="classrtabmap_1_1Memory.html">Memory</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>