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

View File

@@ -149,7 +149,7 @@ private:
bool keepRawData=false); bool keepRawData=false);
//keypoint stuff //keypoint stuff
void disableWordsRef(int signatureId); void disableWordsRef(int signatureId, bool saveToDatabase = true);
void enableWordsRef(const std::list<int> & signatureIds); void enableWordsRef(const std::list<int> & signatureIds);
void cleanUnusedWords(); void cleanUnusedWords();
int getNi(int signatureId) const; int getNi(int signatureId) const;
@@ -162,6 +162,7 @@ private:
float _similarityThreshold; float _similarityThreshold;
bool _rehearsalOnlyWithLast; bool _rehearsalOnlyWithLast;
bool _rawDataKept; bool _rawDataKept;
bool _keepRehearsedNodesInDb;
bool _incrementalMemory; bool _incrementalMemory;
int _maxStMemSize; int _maxStMemSize;
float _recentWmRatio; float _recentWmRatio;

View File

@@ -131,6 +131,7 @@ class RTABMAP_EXP Parameters
RTABMAP_PARAM(Rtabmap, MaxRetrieved, unsigned int, 2); // Maximum locations retrieved at the same time from LTM RTABMAP_PARAM(Rtabmap, MaxRetrieved, unsigned int, 2); // Maximum locations retrieved at the same time from LTM
RTABMAP_PARAM(Rtabmap, LikelihoodNullValuesIgnored, bool, true); // Ignore null values on likelihood normalization RTABMAP_PARAM(Rtabmap, LikelihoodNullValuesIgnored, bool, true); // Ignore null values on likelihood normalization
RTABMAP_PARAM(Rtabmap, StatisticLogsBufferedInRAM, bool, true); // Statistic logs buffered in RAM instead of written to hard drive after each iteration. RTABMAP_PARAM(Rtabmap, StatisticLogsBufferedInRAM, bool, true); // Statistic logs buffered in RAM instead of written to hard drive after each iteration.
RTABMAP_PARAM(Rtabmap, StatisticLogged, bool, true); // Logging enabled
// Hypotheses selection // Hypotheses selection
RTABMAP_PARAM(Rtabmap, LoopThr, float, 0.15); // Loop closing threshold RTABMAP_PARAM(Rtabmap, LoopThr, float, 0.15); // Loop closing threshold
@@ -139,7 +140,8 @@ class RTABMAP_EXP Parameters
// Memory // Memory
RTABMAP_PARAM(Mem, RehearsalSimilarity, float, 0.2); // Rehearsal mean for each sensor RTABMAP_PARAM(Mem, RehearsalSimilarity, float, 0.2); // Rehearsal mean for each sensor
RTABMAP_PARAM(Mem, RehearsalOnlyWithLast, bool, true); // Only compare to the last signature in STM, otherwise it compares to all signatures in STM RTABMAP_PARAM(Mem, RehearsalOnlyWithLast, bool, true); // Only compare to the last signature in STM, otherwise it compares to all signatures in STM
RTABMAP_PARAM(Mem, ImageKept, bool, true); // Keep image RTABMAP_PARAM(Mem, ImageKept, bool, true); // Keep images in db
RTABMAP_PARAM(Mem, RehearsedNodesKept, bool, true); // Keep rehearsed ndoes in db
RTABMAP_PARAM(Mem, STMSize, unsigned int, 30); // Short-term memory size RTABMAP_PARAM(Mem, STMSize, unsigned int, 30); // Short-term memory size
RTABMAP_PARAM(Mem, IncrementalMemory, bool, true); RTABMAP_PARAM(Mem, IncrementalMemory, bool, true);
RTABMAP_PARAM(Mem, RecentWmRatio, float, 0.2); // Ratio of locations after the last loop closure in WM that cannot be transferred RTABMAP_PARAM(Mem, RecentWmRatio, float, 0.2); // Ratio of locations after the last loop closure in WM that cannot be transferred

View File

@@ -111,6 +111,7 @@ private:
unsigned int _maxRetrieved; unsigned int _maxRetrieved;
bool _likelihoodNullValuesIgnored; bool _likelihoodNullValuesIgnored;
bool _statisticLogsBufferedInRAM; bool _statisticLogsBufferedInRAM;
bool _statisticLogged;
int _lcHypothesisId; int _lcHypothesisId;
float _lcHypothesisValue; float _lcHypothesisValue;

View File

@@ -60,7 +60,7 @@ public:
void addWordRef(int wordId, int signatureId); void addWordRef(int wordId, int signatureId);
void removeAllWordRef(int wordId, int signatureId); void removeAllWordRef(int wordId, int signatureId);
const VisualWord * getWord(int id) const; const VisualWord * getWord(int id) const;
const VisualWord * getUnusedWord(int id) const; VisualWord * getUnusedWord(int id) const;
void setLastWordId(int id) {_lastWordId = id;} void setLastWordId(int id) {_lastWordId = id;}
void getCommonWords(unsigned int nbCommonWords, int totalSign, std::list<int> & commonWords) const; void getCommonWords(unsigned int nbCommonWords, int totalSign, std::list<int> & commonWords) const;
const std::map<int, VisualWord *> & getVisualWords() const {return _visualWords;} const std::map<int, VisualWord *> & getVisualWords() const {return _visualWords;}

View File

@@ -44,6 +44,7 @@ Memory::Memory(const ParametersMap & parameters) :
_similarityThreshold(Parameters::defaultMemRehearsalSimilarity()), _similarityThreshold(Parameters::defaultMemRehearsalSimilarity()),
_rehearsalOnlyWithLast(Parameters::defaultMemRehearsalOnlyWithLast()), _rehearsalOnlyWithLast(Parameters::defaultMemRehearsalOnlyWithLast()),
_rawDataKept(Parameters::defaultMemImageKept()), _rawDataKept(Parameters::defaultMemImageKept()),
_keepRehearsedNodesInDb(Parameters::defaultMemRehearsedNodesKept()),
_incrementalMemory(Parameters::defaultMemIncrementalMemory()), _incrementalMemory(Parameters::defaultMemIncrementalMemory()),
_maxStMemSize(Parameters::defaultMemSTMSize()), _maxStMemSize(Parameters::defaultMemSTMSize()),
_recentWmRatio(Parameters::defaultMemRecentWmRatio()), _recentWmRatio(Parameters::defaultMemRecentWmRatio()),
@@ -251,6 +252,10 @@ void Memory::parseParameters(const ParametersMap & parameters)
{ {
_rawDataKept = uStr2Bool((*iter).second.c_str()); _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()) if((iter=parameters.find(Parameters::kMemIncrementalMemory())) != parameters.end())
{ {
_incrementalMemory = uStr2Bool((*iter).second.c_str()); _incrementalMemory = uStr2Bool((*iter).second.c_str());
@@ -1341,7 +1346,7 @@ void Memory::moveToTrash(Signature * s, bool saveToDatabase)
UINFO("id=%d", s?s->id():0); UINFO("id=%d", s?s->id():0);
if(s) if(s)
{ {
this->disableWordsRef(s->id()); this->disableWordsRef(s->id(), saveToDatabase);
_workingMem.erase(s->id()); _workingMem.erase(s->id());
_stMem.erase(s->id()); _stMem.erase(s->id());
@@ -1590,8 +1595,10 @@ bool Memory::addLoopClosureLink(int oldId, int newId)
this->copyData(newS, oldS); this->copyData(newS, oldS);
} }
bool saveToDb = !onRehearsal || _keepRehearsedNodesInDb;
// remove location // remove location
moveToTrash(_idUpdatedToNewOneRehearsal?oldS:newS); moveToTrash(_idUpdatedToNewOneRehearsal?oldS:newS, saveToDb);
return true; return true;
} }
@@ -2327,7 +2334,7 @@ Signature * Memory::createSignature(const Image & image, bool keepRawData)
return ks; return ks;
} }
void Memory::disableWordsRef(int signatureId) void Memory::disableWordsRef(int signatureId, bool saveToDatabase)
{ {
ULOGGER_DEBUG("id=%d", signatureId); 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) for(std::list<int>::const_iterator i=keys.begin(); i!=keys.end(); ++i)
{ {
_vwd->removeAllWordRef(*i, signatureId); _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(); count -= _vwd->getTotalActiveReferences();

View File

@@ -71,6 +71,7 @@ Rtabmap::Rtabmap() :
_maxRetrieved(Parameters::defaultRtabmapMaxRetrieved()), _maxRetrieved(Parameters::defaultRtabmapMaxRetrieved()),
_likelihoodNullValuesIgnored(Parameters::defaultRtabmapLikelihoodNullValuesIgnored()), _likelihoodNullValuesIgnored(Parameters::defaultRtabmapLikelihoodNullValuesIgnored()),
_statisticLogsBufferedInRAM(Parameters::defaultRtabmapStatisticLogsBufferedInRAM()), _statisticLogsBufferedInRAM(Parameters::defaultRtabmapStatisticLogsBufferedInRAM()),
_statisticLogged(Parameters::defaultRtabmapStatisticLogged()),
_lcHypothesisId(0), _lcHypothesisId(0),
_lcHypothesisValue(0), _lcHypothesisValue(0),
_retrievedId(0), _retrievedId(0),
@@ -109,74 +110,81 @@ void Rtabmap::setupLogFiles(bool overwrite)
_foutInt = 0; _foutInt = 0;
} }
std::string attributes = "a+"; // append to log files if(_statisticLogged)
if(overwrite)
{ {
// If a file with the same name already exists std::string attributes = "a+"; // append to log files
// its content is erased and the file is treated if(overwrite)
// as a new empty file. {
attributes = "w"; // If a file with the same name already exists
// its content is erased and the file is treated
// as a new empty file.
attributes = "w";
}
bool addLogFHeader = overwrite || !UFile::exists(_wDir+LOG_F);
bool addLogIHeader = overwrite || !UFile::exists(_wDir+LOG_I);
#ifdef _MSC_VER
fopen_s(&_foutFloat, (_wDir+LOG_F).toStdString().c_str(), attributes.c_str());
fopen_s(&_foutInt, (_wDir+LOG_I).toStdString().c_str(), attributes.c_str());
#else
_foutFloat = fopen((_wDir+LOG_F).c_str(), attributes.c_str());
_foutInt = fopen((_wDir+LOG_I).c_str(), attributes.c_str());
#endif
// add header (column identification)
if(addLogFHeader && _foutFloat)
{
fprintf(_foutFloat, "Column headers:\n");
fprintf(_foutFloat, " 1-Total iteration time (s)\n");
fprintf(_foutFloat, " 2-Memory update time (s)\n");
fprintf(_foutFloat, " 3-Retrieval time (s)\n");
fprintf(_foutFloat, " 4-Likelihood time (s)\n");
fprintf(_foutFloat, " 5-Posterior time (s)\n");
fprintf(_foutFloat, " 6-Hypothesis selection time (s)\n");
fprintf(_foutFloat, " 7-Transfer time (s)\n");
fprintf(_foutFloat, " 8-Statistics creation time (s)\n");
fprintf(_foutFloat, " 9-Loop closure hypothesis value\n");
fprintf(_foutFloat, " 10-NAN\n");
fprintf(_foutFloat, " 11-Maximum likelihood\n");
fprintf(_foutFloat, " 12-Sum likelihood\n");
fprintf(_foutFloat, " 13-Mean likelihood\n");
fprintf(_foutFloat, " 14-Std dev likelihood\n");
fprintf(_foutFloat, " 15-Virtual place hypothesis\n");
fprintf(_foutFloat, " 16-Join trash time (s)\n");
fprintf(_foutFloat, " 17-Weight Update (rehearsal) similarity\n");
fprintf(_foutFloat, " 18-Empty trash time (s)\n");
fprintf(_foutFloat, " 19-Retrieval database access time (s)\n");
fprintf(_foutFloat, " 20-Add loop closure link time (s)\n");
}
if(addLogIHeader && _foutInt)
{
fprintf(_foutInt, "Column headers:\n");
fprintf(_foutInt, " 1-Loop closure ID\n");
fprintf(_foutInt, " 2-Highest loop closure hypothesis\n");
fprintf(_foutInt, " 3-Locations transferred\n");
fprintf(_foutInt, " 4-NAN\n");
fprintf(_foutInt, " 5-Words extracted from the last image\n");
fprintf(_foutInt, " 6-Vocabulary size\n");
fprintf(_foutInt, " 7-Working memory size\n");
fprintf(_foutInt, " 8-Is loop closure hypothesis rejected?\n");
fprintf(_foutInt, " 9-NAN\n");
fprintf(_foutInt, " 10-NAN\n");
fprintf(_foutInt, " 11-Locations retrieved\n");
fprintf(_foutInt, " 12-Retrieval location ID\n");
fprintf(_foutInt, " 13-Unique words extraced from last image\n");
fprintf(_foutInt, " 14-Retrieval ID\n");
fprintf(_foutInt, " 15-Non-null likelihood values\n");
fprintf(_foutInt, " 16-Weight Update ID\n");
fprintf(_foutInt, " 17-Is last location merged through Weight Update?\n");
}
ULOGGER_DEBUG("Log file (int)=%s", (_wDir+LOG_I).c_str());
ULOGGER_DEBUG("Log file (float)=%s", (_wDir+LOG_F).c_str());
} }
else
bool addLogFHeader = overwrite || !UFile::exists(_wDir+LOG_F);
bool addLogIHeader = overwrite || !UFile::exists(_wDir+LOG_I);
#ifdef _MSC_VER
fopen_s(&_foutFloat, (_wDir+LOG_F).toStdString().c_str(), attributes.c_str());
fopen_s(&_foutInt, (_wDir+LOG_I).toStdString().c_str(), attributes.c_str());
#else
_foutFloat = fopen((_wDir+LOG_F).c_str(), attributes.c_str());
_foutInt = fopen((_wDir+LOG_I).c_str(), attributes.c_str());
#endif
// add header (column identification)
if(addLogFHeader && _foutFloat)
{ {
fprintf(_foutFloat, "Column headers:\n"); UDEBUG("Log disabled!");
fprintf(_foutFloat, " 1-Total iteration time (s)\n");
fprintf(_foutFloat, " 2-Memory update time (s)\n");
fprintf(_foutFloat, " 3-Retrieval time (s)\n");
fprintf(_foutFloat, " 4-Likelihood time (s)\n");
fprintf(_foutFloat, " 5-Posterior time (s)\n");
fprintf(_foutFloat, " 6-Hypothesis selection time (s)\n");
fprintf(_foutFloat, " 7-Transfer time (s)\n");
fprintf(_foutFloat, " 8-Statistics creation time (s)\n");
fprintf(_foutFloat, " 9-Loop closure hypothesis value\n");
fprintf(_foutFloat, " 10-NAN\n");
fprintf(_foutFloat, " 11-Maximum likelihood\n");
fprintf(_foutFloat, " 12-Sum likelihood\n");
fprintf(_foutFloat, " 13-Mean likelihood\n");
fprintf(_foutFloat, " 14-Std dev likelihood\n");
fprintf(_foutFloat, " 15-Virtual place hypothesis\n");
fprintf(_foutFloat, " 16-Join trash time (s)\n");
fprintf(_foutFloat, " 17-Weight Update (rehearsal) similarity\n");
fprintf(_foutFloat, " 18-Empty trash time (s)\n");
fprintf(_foutFloat, " 19-Retrieval database access time (s)\n");
fprintf(_foutFloat, " 20-Add loop closure link time (s)\n");
} }
if(addLogIHeader && _foutInt)
{
fprintf(_foutInt, "Column headers:\n");
fprintf(_foutInt, " 1-Loop closure ID\n");
fprintf(_foutInt, " 2-Highest loop closure hypothesis\n");
fprintf(_foutInt, " 3-Locations transferred\n");
fprintf(_foutInt, " 4-NAN\n");
fprintf(_foutInt, " 5-Words extracted from the last image\n");
fprintf(_foutInt, " 6-Vocabulary size\n");
fprintf(_foutInt, " 7-Working memory size\n");
fprintf(_foutInt, " 8-Is loop closure hypothesis rejected?\n");
fprintf(_foutInt, " 9-NAN\n");
fprintf(_foutInt, " 10-NAN\n");
fprintf(_foutInt, " 11-Locations retrieved\n");
fprintf(_foutInt, " 12-Retrieval location ID\n");
fprintf(_foutInt, " 13-Unique words extraced from last image\n");
fprintf(_foutInt, " 14-Retrieval ID\n");
fprintf(_foutInt, " 15-Non-null likelihood values\n");
fprintf(_foutInt, " 16-Weight Update ID\n");
fprintf(_foutInt, " 17-Is last location merged through Weight Update?\n");
}
ULOGGER_DEBUG("Log file (int)=%s", (_wDir+LOG_I).c_str());
ULOGGER_DEBUG("Log file (float)=%s", (_wDir+LOG_F).c_str());
} }
void Rtabmap::flushStatisticLogs() void Rtabmap::flushStatisticLogs()
@@ -211,6 +219,10 @@ void Rtabmap::init(const ParametersMap & parameters, bool deleteMemory)
{ {
this->setWorkingDirectory(iter->second.c_str()); this->setWorkingDirectory(iter->second.c_str());
} }
if((iter=parameters.find(Parameters::kRtabmapStatisticLogged())) != parameters.end())
{
_statisticLogged = uStr2Bool(iter->second.c_str());
}
this->resetMemory(true); this->resetMemory(true);
} }
@@ -320,6 +332,10 @@ void Rtabmap::parseParameters(const ParametersMap & parameters)
{ {
_statisticLogsBufferedInRAM = uStr2Bool(iter->second.c_str()); _statisticLogsBufferedInRAM = uStr2Bool(iter->second.c_str());
} }
if((iter=parameters.find(Parameters::kRtabmapStatisticLogged())) != parameters.end())
{
_statisticLogged = uStr2Bool(iter->second.c_str());
}
// By default, we create our strategies if they are not already created. // By default, we create our strategies if they are not already created.
// If they already exists, we check the parameters if a change is requested // If they already exists, we check the parameters if a change is requested

View File

@@ -1012,7 +1012,7 @@ const VisualWord * VWDictionary::getWord(int id) const
return uValue(_visualWords, id, (VisualWord *)0); return uValue(_visualWords, id, (VisualWord *)0);
} }
const VisualWord * VWDictionary::getUnusedWord(int id) const VisualWord * VWDictionary::getUnusedWord(int id) const
{ {
return uValue(_unusedWords, id, (VisualWord *)0); return uValue(_unusedWords, id, (VisualWord *)0);
} }

View File

@@ -140,6 +140,7 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) :
_ui->general_checkBox_publishPdf->setObjectName(Parameters::kRtabmapPublishPdf().c_str()); _ui->general_checkBox_publishPdf->setObjectName(Parameters::kRtabmapPublishPdf().c_str());
_ui->general_checkBox_publishLikelihood->setObjectName(Parameters::kRtabmapPublishLikelihood().c_str()); _ui->general_checkBox_publishLikelihood->setObjectName(Parameters::kRtabmapPublishLikelihood().c_str());
_ui->general_checkBox_statisticLogsBufferedInRAM->setObjectName(Parameters::kRtabmapStatisticLogsBufferedInRAM().c_str()); _ui->general_checkBox_statisticLogsBufferedInRAM->setObjectName(Parameters::kRtabmapStatisticLogsBufferedInRAM().c_str());
_ui->general_checkBox_statisticLogged->setObjectName(Parameters::kRtabmapStatisticLogged().c_str());
_ui->general_doubleSpinBox_timeThr->setObjectName(Parameters::kRtabmapTimeThr().c_str()); _ui->general_doubleSpinBox_timeThr->setObjectName(Parameters::kRtabmapTimeThr().c_str());
_ui->general_spinBox_memoryThr->setObjectName(Parameters::kRtabmapMemoryThr().c_str()); _ui->general_spinBox_memoryThr->setObjectName(Parameters::kRtabmapMemoryThr().c_str());
_ui->general_spinBox_imagesBufferSize->setObjectName(Parameters::kRtabmapImageBufferSize().c_str()); _ui->general_spinBox_imagesBufferSize->setObjectName(Parameters::kRtabmapImageBufferSize().c_str());
@@ -150,6 +151,7 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) :
// Memory // Memory
_ui->general_checkBox_keepRawData->setObjectName(Parameters::kMemImageKept().c_str()); _ui->general_checkBox_keepRawData->setObjectName(Parameters::kMemImageKept().c_str());
_ui->general_checkBox_keepRehearsedNodes->setObjectName(Parameters::kMemRehearsedNodesKept().c_str());
_ui->general_spinBox_maxStMemSize->setObjectName(Parameters::kMemSTMSize().c_str()); _ui->general_spinBox_maxStMemSize->setObjectName(Parameters::kMemSTMSize().c_str());
_ui->general_checkBox_similarityOnlyLast->setObjectName(Parameters::kMemRehearsalOnlyWithLast().c_str()); _ui->general_checkBox_similarityOnlyLast->setObjectName(Parameters::kMemRehearsalOnlyWithLast().c_str());
_ui->doubleSpinBox_similarityThreshold->setObjectName(Parameters::kMemRehearsalSimilarity().c_str()); _ui->doubleSpinBox_similarityThreshold->setObjectName(Parameters::kMemRehearsalSimilarity().c_str());

View File

@@ -86,7 +86,7 @@
<enum>QFrame::Raised</enum> <enum>QFrame::Raised</enum>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>7</number> <number>3</number>
</property> </property>
<widget class="QWidget" name="page_22"> <widget class="QWidget" name="page_22">
<layout class="QVBoxLayout" name="verticalLayout_29"> <layout class="QVBoxLayout" name="verticalLayout_29">
@@ -1086,14 +1086,14 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
<string>RTAB-Map settings</string> <string>RTAB-Map settings</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_4" columnstretch="0,0,1"> <layout class="QGridLayout" name="gridLayout_4" columnstretch="0,0,1">
<item row="12" column="0"> <item row="13" column="0">
<widget class="QLineEdit" name="lineEdit_workingDirectory"> <widget class="QLineEdit" name="lineEdit_workingDirectory">
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0"> <item row="8" column="0">
<widget class="QSpinBox" name="general_spinBox_imagesBufferSize"> <widget class="QSpinBox" name="general_spinBox_imagesBufferSize">
<property name="maximum"> <property name="maximum">
<number>999</number> <number>999</number>
@@ -1103,7 +1103,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="2"> <item row="13" column="2">
<widget class="QLabel" name="label_87"> <widget class="QLabel" name="label_87">
<property name="text"> <property name="text">
<string>Working directory (where the database is saved/loaded).</string> <string>Working directory (where the database is saved/loaded).</string>
@@ -1133,7 +1133,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="2"> <item row="6" column="2">
<widget class="QLabel" name="label_18"> <widget class="QLabel" name="label_18">
<property name="text"> <property name="text">
<string>T_time : Max time (ms) allowed (0 means inf).</string> <string>T_time : Max time (ms) allowed (0 means inf).</string>
@@ -1143,7 +1143,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="2"> <item row="8" column="2">
<widget class="QLabel" name="label_84"> <widget class="QLabel" name="label_84">
<property name="text"> <property name="text">
<string>Images buffer size (0 means inf).</string> <string>Images buffer size (0 means inf).</string>
@@ -1153,7 +1153,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="0"> <item row="9" column="0">
<widget class="QDoubleSpinBox" name="general_doubleSpinBox_hardThr"> <widget class="QDoubleSpinBox" name="general_doubleSpinBox_hardThr">
<property name="maximum"> <property name="maximum">
<double>1.000000000000000</double> <double>1.000000000000000</double>
@@ -1166,7 +1166,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="2"> <item row="9" column="2">
<widget class="QLabel" name="label_93"> <widget class="QLabel" name="label_93">
<property name="text"> <property name="text">
<string>T_loop : Loop closure threshold. Setting to 0 means that the new place hypothesis is used as threshold.</string> <string>T_loop : Loop closure threshold. Setting to 0 means that the new place hypothesis is used as threshold.</string>
@@ -1176,7 +1176,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="2"> <item row="10" column="2">
<widget class="QLabel" name="label_96"> <widget class="QLabel" name="label_96">
<property name="text"> <property name="text">
<string>T_ratio : The loop closure hypothesis must be over T_ratio x lastHypothesisValue.</string> <string>T_ratio : The loop closure hypothesis must be over T_ratio x lastHypothesisValue.</string>
@@ -1186,7 +1186,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="0"> <item row="10" column="0">
<widget class="QDoubleSpinBox" name="general_doubleSpinBox_loopRatio"> <widget class="QDoubleSpinBox" name="general_doubleSpinBox_loopRatio">
<property name="maximum"> <property name="maximum">
<double>1.000000000000000</double> <double>1.000000000000000</double>
@@ -1199,14 +1199,14 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="1"> <item row="13" column="1">
<widget class="QToolButton" name="toolButton_workingDirectory"> <widget class="QToolButton" name="toolButton_workingDirectory">
<property name="text"> <property name="text">
<string>...</string> <string>...</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="0"> <item row="11" column="0">
<widget class="QSpinBox" name="general_spinBox_maxRetrieved"> <widget class="QSpinBox" name="general_spinBox_maxRetrieved">
<property name="maximum"> <property name="maximum">
<number>999</number> <number>999</number>
@@ -1219,7 +1219,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="2"> <item row="11" column="2">
<widget class="QLabel" name="label_103"> <widget class="QLabel" name="label_103">
<property name="text"> <property name="text">
<string>Maximum locations retrieved at the same time from LTM to WM.</string> <string>Maximum locations retrieved at the same time from LTM to WM.</string>
@@ -1229,7 +1229,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="6" column="0">
<widget class="QDoubleSpinBox" name="general_doubleSpinBox_timeThr"> <widget class="QDoubleSpinBox" name="general_doubleSpinBox_timeThr">
<property name="decimals"> <property name="decimals">
<number>0</number> <number>0</number>
@@ -1245,7 +1245,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0"> <item row="7" column="0">
<widget class="QSpinBox" name="general_spinBox_memoryThr"> <widget class="QSpinBox" name="general_spinBox_memoryThr">
<property name="maximum"> <property name="maximum">
<number>99999</number> <number>99999</number>
@@ -1255,7 +1255,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="2"> <item row="7" column="2">
<widget class="QLabel" name="label_111"> <widget class="QLabel" name="label_111">
<property name="text"> <property name="text">
<string>Maximum signatures allowed in Working Memory (0 means inf).</string> <string>Maximum signatures allowed in Working Memory (0 means inf).</string>
@@ -1316,7 +1316,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="11" column="2"> <item row="12" column="2">
<widget class="QLabel" name="label_132"> <widget class="QLabel" name="label_132">
<property name="text"> <property name="text">
<string>Ignore null values on likelihood normalization.</string> <string>Ignore null values on likelihood normalization.</string>
@@ -1326,7 +1326,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="11" column="0"> <item row="12" column="0">
<widget class="QCheckBox" name="general_checkBox_likelihoodNullValuesIgnored"> <widget class="QCheckBox" name="general_checkBox_likelihoodNullValuesIgnored">
<property name="text"> <property name="text">
<string/> <string/>
@@ -1339,7 +1339,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
<item row="4" column="2"> <item row="4" column="2">
<widget class="QLabel" name="label_143"> <widget class="QLabel" name="label_143">
<property name="text"> <property name="text">
<string>Statistics logs buffered in RAM and written to hard drive on exit (otherwise logs are written at each iteration on hard drive)</string> <string>Statistics logs buffered in RAM and written to hard drive on exit (otherwise logs are written at each iteration on hard drive).</string>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
@@ -1356,6 +1356,26 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="2">
<widget class="QLabel" name="label_144">
<property name="text">
<string>Log statistics (in LogI.txt and LogF.txt in the working directory).</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="general_checkBox_statisticLogged">
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@@ -1660,14 +1680,14 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="3" column="0">
<widget class="QCheckBox" name="checkBox_dbInMemory"> <widget class="QCheckBox" name="checkBox_dbInMemory">
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="4" column="0">
<widget class="QSpinBox" name="spinBox_dbCacheSize"> <widget class="QSpinBox" name="spinBox_dbCacheSize">
<property name="minimum"> <property name="minimum">
<number>10</number> <number>10</number>
@@ -1683,7 +1703,7 @@ when using the file type, logs are saved in Logrtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="4" column="1">
<widget class="QLabel" name="label_75"> <widget class="QLabel" name="label_75">
<property name="text"> <property name="text">
<string>Sqlite3 cache size, <string>Sqlite3 cache size,
@@ -1694,7 +1714,7 @@ see Sqlite3 doc 'PRAGMA cache_size'.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="5" column="0">
<widget class="QComboBox" name="comboBox_dbJournalMode"> <widget class="QComboBox" name="comboBox_dbJournalMode">
<item> <item>
<property name="text"> <property name="text">
@@ -1723,7 +1743,7 @@ see Sqlite3 doc 'PRAGMA cache_size'.</string>
</item> </item>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="5" column="1">
<widget class="QLabel" name="label_77"> <widget class="QLabel" name="label_77">
<property name="text"> <property name="text">
<string>Sqlite3 journal mode, <string>Sqlite3 journal mode,
@@ -1734,7 +1754,7 @@ see Sqlite3 doc 'PRAGMA journal_mode'.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="3" column="1">
<widget class="QLabel" name="label_74"> <widget class="QLabel" name="label_74">
<property name="text"> <property name="text">
<string>Using database in the memory instead of a file on the hard disk (this greatly improve database access performance but it requires more RAM memory).</string> <string>Using database in the memory instead of a file on the hard disk (this greatly improve database access performance but it requires more RAM memory).</string>
@@ -1744,7 +1764,7 @@ see Sqlite3 doc 'PRAGMA journal_mode'.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="2" column="1">
<widget class="QLabel" name="label_110"> <widget class="QLabel" name="label_110">
<property name="text"> <property name="text">
<string>Compress images when saving to database.</string> <string>Compress images when saving to database.</string>
@@ -1754,7 +1774,7 @@ see Sqlite3 doc 'PRAGMA journal_mode'.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="2" column="0">
<widget class="QCheckBox" name="general_checkBox_imagesCompressed"> <widget class="QCheckBox" name="general_checkBox_imagesCompressed">
<property name="text"> <property name="text">
<string/> <string/>
@@ -1764,7 +1784,7 @@ see Sqlite3 doc 'PRAGMA journal_mode'.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1"> <item row="6" column="1">
<widget class="QLabel" name="label_89"> <widget class="QLabel" name="label_89">
<property name="text"> <property name="text">
<string>Sqlite3 synchronous, <string>Sqlite3 synchronous,
@@ -1775,7 +1795,7 @@ see Sqlite3 doc 'PRAGMA synchronous'.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="1"> <item row="7" column="1">
<widget class="QLabel" name="label_120"> <widget class="QLabel" name="label_120">
<property name="text"> <property name="text">
<string>Sqlite3 temp store, <string>Sqlite3 temp store,
@@ -1786,7 +1806,7 @@ see Sqlite3 doc 'PRAGMA temp_store'.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="6" column="0">
<widget class="QComboBox" name="comboBox_dbSynchronous"> <widget class="QComboBox" name="comboBox_dbSynchronous">
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>2</number>
@@ -1808,7 +1828,7 @@ see Sqlite3 doc 'PRAGMA temp_store'.</string>
</item> </item>
</widget> </widget>
</item> </item>
<item row="6" column="0"> <item row="7" column="0">
<widget class="QComboBox" name="comboBox_dbTempStore"> <widget class="QComboBox" name="comboBox_dbTempStore">
<item> <item>
<property name="text"> <property name="text">
@@ -1827,6 +1847,26 @@ see Sqlite3 doc 'PRAGMA temp_store'.</string>
</item> </item>
</widget> </widget>
</item> </item>
<item row="1" column="1">
<widget class="QLabel" name="label_86">
<property name="text">
<string>Keep rehearsed nodes.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="general_checkBox_keepRehearsedNodes">
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>