rtabmap: Added parameter to disable logs of the statistics

rtabmap: Added parameter to avoid saving to database nodes/words of rehearsed nodes

git-svn-id: http://rtabmap.googlecode.com/svn/trunk/rtabmap@834 f169173b-cf89-36c8-b27e-44dbe73f0c83
This commit is contained in:
matlabbe
2013-03-02 21:53:47 +00:00
parent 3d05294663
commit ff6e6f84c5
9 changed files with 183 additions and 102 deletions
+22 -3
View File
@@ -44,6 +44,7 @@ Memory::Memory(const ParametersMap & parameters) :
_similarityThreshold(Parameters::defaultMemRehearsalSimilarity()),
_rehearsalOnlyWithLast(Parameters::defaultMemRehearsalOnlyWithLast()),
_rawDataKept(Parameters::defaultMemImageKept()),
_keepRehearsedNodesInDb(Parameters::defaultMemRehearsedNodesKept()),
_incrementalMemory(Parameters::defaultMemIncrementalMemory()),
_maxStMemSize(Parameters::defaultMemSTMSize()),
_recentWmRatio(Parameters::defaultMemRecentWmRatio()),
@@ -251,6 +252,10 @@ void Memory::parseParameters(const ParametersMap & parameters)
{
_rawDataKept = uStr2Bool((*iter).second.c_str());
}
if((iter=parameters.find(Parameters::kMemRehearsedNodesKept())) != parameters.end())
{
_keepRehearsedNodesInDb = uStr2Bool((*iter).second.c_str());
}
if((iter=parameters.find(Parameters::kMemIncrementalMemory())) != parameters.end())
{
_incrementalMemory = uStr2Bool((*iter).second.c_str());
@@ -1341,7 +1346,7 @@ void Memory::moveToTrash(Signature * s, bool saveToDatabase)
UINFO("id=%d", s?s->id():0);
if(s)
{
this->disableWordsRef(s->id());
this->disableWordsRef(s->id(), saveToDatabase);
_workingMem.erase(s->id());
_stMem.erase(s->id());
@@ -1590,8 +1595,10 @@ bool Memory::addLoopClosureLink(int oldId, int newId)
this->copyData(newS, oldS);
}
bool saveToDb = !onRehearsal || _keepRehearsedNodesInDb;
// remove location
moveToTrash(_idUpdatedToNewOneRehearsal?oldS:newS);
moveToTrash(_idUpdatedToNewOneRehearsal?oldS:newS, saveToDb);
return true;
}
@@ -2327,7 +2334,7 @@ Signature * Memory::createSignature(const Image & image, bool keepRawData)
return ks;
}
void Memory::disableWordsRef(int signatureId)
void Memory::disableWordsRef(int signatureId, bool saveToDatabase)
{
ULOGGER_DEBUG("id=%d", signatureId);
@@ -2341,6 +2348,18 @@ void Memory::disableWordsRef(int signatureId)
for(std::list<int>::const_iterator i=keys.begin(); i!=keys.end(); ++i)
{
_vwd->removeAllWordRef(*i, signatureId);
if(!saveToDatabase)
{
// assume just removed word doesn't have any other references
VisualWord * w = _vwd->getUnusedWord(*i);
if(w)
{
std::vector<VisualWord*> wordToDelete;
wordToDelete.push_back(w);
_vwd->removeWords(wordToDelete);
delete w;
}
}
}
count -= _vwd->getTotalActiveReferences();