Fixed QMutex still locked on exit warning. Removing old parameters from ini file on saving. Memory: Removed completely the use of Vis/CorType (only used by F2F odom).

This commit is contained in:
matlabbe
2018-10-04 17:09:03 -04:00
parent 16309e6d18
commit b717910db8
6 changed files with 45 additions and 29 deletions
-1
View File
@@ -301,7 +301,6 @@ private:
bool _useOdometryFeatures;
bool _createOccupancyGrid;
int _visMaxFeatures;
int _visCorType;
bool _imagesAlreadyRectified;
bool _rectifyOnlyFeatures;
bool _covOffDiagonalIgnored;
+11 -18
View File
@@ -102,7 +102,6 @@ Memory::Memory(const ParametersMap & parameters) :
_useOdometryFeatures(Parameters::defaultMemUseOdomFeatures()),
_createOccupancyGrid(Parameters::defaultRGBDCreateOccupancyGrid()),
_visMaxFeatures(Parameters::defaultVisMaxFeatures()),
_visCorType(Parameters::defaultVisCorType()),
_imagesAlreadyRectified(Parameters::defaultRtabmapImagesAlreadyRectified()),
_rectifyOnlyFeatures(Parameters::defaultRtabmapRectifyOnlyFeatures()),
_covOffDiagonalIgnored(Parameters::defaultMemCovOffDiagIgnored()),
@@ -500,20 +499,10 @@ void Memory::parseParameters(const ParametersMap & parameters)
Parameters::parse(params, Parameters::kMemUseOdomFeatures(), _useOdometryFeatures);
Parameters::parse(params, Parameters::kRGBDCreateOccupancyGrid(), _createOccupancyGrid);
Parameters::parse(params, Parameters::kVisMaxFeatures(), _visMaxFeatures);
Parameters::parse(params, Parameters::kVisCorType(), _visCorType);
if(_visCorType != 0)
{
UWARN("%s is not 0 (Features Matching), the only approach supported for loop closure transformation estimation. Setting to 0...",
Parameters::kVisCorType().c_str());
_visCorType = 0;
uInsert(parameters_, ParametersPair(Parameters::kVisCorType(), "0"));
uInsert(params, ParametersPair(Parameters::kVisCorType(), "0"));
}
Parameters::parse(params, Parameters::kRtabmapImagesAlreadyRectified(), _imagesAlreadyRectified);
Parameters::parse(params, Parameters::kRtabmapRectifyOnlyFeatures(), _rectifyOnlyFeatures);
Parameters::parse(params, Parameters::kMemCovOffDiagIgnored(), _covOffDiagonalIgnored);
UASSERT_MSG(_maxStMemSize >= 0, uFormat("value=%d", _maxStMemSize).c_str());
UASSERT_MSG(_similarityThreshold >= 0.0f && _similarityThreshold <= 1.0f, uFormat("value=%f", _similarityThreshold).c_str());
UASSERT_MSG(_recentWmRatio >= 0.0f && _recentWmRatio <= 1.0f, uFormat("value=%f", _recentWmRatio).c_str());
@@ -573,6 +562,10 @@ void Memory::parseParameters(const ParametersMap & parameters)
_feature2D->parseParameters(params);
}
// Features Matching is the only correspondence approach supported for loop closure transformation estimation.
uInsert(parameters_, ParametersPair(Parameters::kVisCorType(), "0"));
uInsert(params, ParametersPair(Parameters::kVisCorType(), "0"));
Registration::Type regStrategy = Registration::kTypeUndef;
if((iter=params.find(Parameters::kRegStrategy())) != params.end())
{
@@ -2475,13 +2468,13 @@ Transform Memory::computeTransform(
// make sure we have all data needed
// load binary data from database if not in RAM (if image is already here, scan and userData should be or they are null)
if((((_reextractLoopClosureFeatures || _visCorType==1) && _registrationPipeline->isImageRequired()) && fromS.sensorData().imageCompressed().empty()) ||
if(((_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired()) && fromS.sensorData().imageCompressed().empty()) ||
(_registrationPipeline->isScanRequired() && fromS.sensorData().imageCompressed().empty() && fromS.sensorData().laserScanCompressed().isEmpty()) ||
(_registrationPipeline->isUserDataRequired() && fromS.sensorData().imageCompressed().empty() && fromS.sensorData().userDataCompressed().empty()))
{
fromS.sensorData() = getNodeData(fromS.id());
}
if((((_reextractLoopClosureFeatures || _visCorType==1) && _registrationPipeline->isImageRequired()) && toS.sensorData().imageCompressed().empty()) ||
if(((_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired()) && toS.sensorData().imageCompressed().empty()) ||
(_registrationPipeline->isScanRequired() && toS.sensorData().imageCompressed().empty() && toS.sensorData().laserScanCompressed().isEmpty()) ||
(_registrationPipeline->isUserDataRequired() && toS.sensorData().imageCompressed().empty() && toS.sensorData().userDataCompressed().empty()))
{
@@ -2491,13 +2484,13 @@ Transform Memory::computeTransform(
cv::Mat imgBuf, depthBuf, userBuf;
LaserScan laserBuf;
fromS.sensorData().uncompressData(
((_reextractLoopClosureFeatures || _visCorType==1) && _registrationPipeline->isImageRequired())?&imgBuf:0,
((_reextractLoopClosureFeatures || _visCorType==1) && _registrationPipeline->isImageRequired())?&depthBuf:0,
(_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired())?&imgBuf:0,
(_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired())?&depthBuf:0,
_registrationPipeline->isScanRequired()?&laserBuf:0,
_registrationPipeline->isUserDataRequired()?&userBuf:0);
toS.sensorData().uncompressData(
((_reextractLoopClosureFeatures || _visCorType==1) && _registrationPipeline->isImageRequired())?&imgBuf:0,
((_reextractLoopClosureFeatures || _visCorType==1) && _registrationPipeline->isImageRequired())?&depthBuf:0,
(_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired())?&imgBuf:0,
(_reextractLoopClosureFeatures && _registrationPipeline->isImageRequired())?&depthBuf:0,
_registrationPipeline->isScanRequired()?&laserBuf:0,
_registrationPipeline->isUserDataRequired()?&userBuf:0);
@@ -2530,7 +2523,7 @@ Transform Memory::computeTransform(
tmpTo.setWordsDescriptors(std::multimap<int, cv::Mat>());
}
if(guess.isNull() && (!_registrationPipeline->isImageRequired() || _visCorType==1))
if(guess.isNull() && !_registrationPipeline->isImageRequired())
{
UDEBUG("");
// no visual in the pipeline, make visual registration for guess
+29 -3
View File
@@ -1045,17 +1045,43 @@ void Parameters::writeINI(const std::string & configFile, const ParametersMap &
// Save current version
ini.SetValue("Core", "Version", RTABMAP_VERSION, NULL, true);
for(ParametersMap::const_iterator i=parameters.begin(); i!=parameters.end(); ++i)
for(ParametersMap::const_iterator iter=parameters.begin(); iter!=parameters.end(); ++iter)
{
std::string key = (*i).first;
std::string key = iter->first;
key = uReplaceChar(key, '/', '\\'); // Ini files use \ by default for separators, so replace the /
std::string value = (*i).second.c_str();
std::string value = iter->second.c_str();
value = uReplaceChar(value, '\\', '/'); // use always slash for values
ini.SetValue("Core", key.c_str(), value.c_str(), NULL, true);
}
// Delete removed parameters
if(parameters.size() == getDefaultParameters().size())
{
for(std::map<std::string, std::pair<bool, std::string> >::const_iterator iter = removedParameters_.begin();
iter!=removedParameters_.end();
++iter)
{
std::string key = iter->first;
key = uReplaceChar(key, '/', '\\'); // Ini files use \ by default for separators, so replace the /
std::string value = ini.GetValue("Core", key.c_str(), "");
if(ini.Delete("Core", key.c_str(), true))
{
if(iter->second.first && parameters.find(iter->second.second) != parameters.end())
{
UWARN("Removed deprecated parameter %s=%s (replaced by %s=%s) from \"%s\".", iter->first.c_str(), value.c_str(), iter->second.second.c_str(), parameters.at(iter->second.second).c_str(), configFile.c_str());
}
else
{
UWARN("Removed deprecated parameter %s=%s from \"%s\".", iter->first.c_str(), value.c_str(), configFile.c_str());
}
}
}
}
ini.SaveFile(configFile.c_str());
}
+1
View File
@@ -60,6 +60,7 @@ ConsoleWidget::ConsoleWidget(QWidget * parent) :
ConsoleWidget::~ConsoleWidget()
{
delete _ui;
_errorMessageMutex.unlock();
}
bool ConsoleWidget::handleEvent(UEvent * anEvent)
+2 -2
View File
@@ -4916,10 +4916,10 @@ void MainWindow::startDetection()
odomParameters.erase(Parameters::kRtabmapPublishRAMUsage()); // as odometry is in the same process than rtabmap, don't get RAM usage in odometry.
int odomStrategy = Parameters::defaultOdomStrategy();
Parameters::parse(odomParameters, Parameters::kOdomStrategy(), odomStrategy);
if(odomStrategy == 1)
if(odomStrategy != 1)
{
// Only Frame To Frame supports all VisCorType
odomParameters.insert(ParametersPair(Parameters::kVisCorType(), _preferencesDialog->getParameter(Parameters::kVisCorType())));
odomParameters.erase(Parameters::kVisCorType());
}
_imuThread = 0;
if((_preferencesDialog->getSourceDriver() == PreferencesDialog::kSrcStereoImages ||
+2 -5
View File
@@ -3242,9 +3242,6 @@ rtabmap::ParametersMap PreferencesDialog::getAllParameters() const
ParametersMap parameters = _parameters;
uInsert(parameters, _modifiedParameters);
// It will be added manually for odometry
parameters.erase(Parameters::kVisCorType());
return parameters;
}
@@ -5526,10 +5523,10 @@ void PreferencesDialog::testOdometry()
int odomStrategy = Parameters::defaultOdomStrategy();
Parameters::parse(parameters, Parameters::kOdomStrategy(), odomStrategy);
if(odomStrategy == 1)
if(odomStrategy != 1)
{
// Only Frame To Frame supports all VisCorType
parameters.insert(ParametersPair(Parameters::kVisCorType(), this->getParameter(Parameters::kVisCorType())));
parameters.erase(Parameters::kVisCorType());
}
Odometry * odometry = Odometry::create(parameters);