mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-03 01:50:24 +08:00
fixed a graph optimization startup crash when a database is already created
This commit is contained in:
@@ -398,6 +398,28 @@ void Rtabmap::parseParameters(const ParametersMap & parameters)
|
|||||||
// 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
|
||||||
|
|
||||||
|
// Graph optimizer
|
||||||
|
graph::Optimizer::Type optimizerType = graph::Optimizer::kTypeUndef;
|
||||||
|
if((iter=parameters.find(Parameters::kRGBDOptimizeStrategy())) != parameters.end())
|
||||||
|
{
|
||||||
|
optimizerType = (graph::Optimizer::Type)std::atoi((*iter).second.c_str());
|
||||||
|
}
|
||||||
|
if(optimizerType!=graph::Optimizer::kTypeUndef)
|
||||||
|
{
|
||||||
|
UDEBUG("new detector strategy %d", int(optimizerType));
|
||||||
|
if(_graphOptimizer)
|
||||||
|
{
|
||||||
|
delete _graphOptimizer;
|
||||||
|
_graphOptimizer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
_graphOptimizer = graph::Optimizer::create(optimizerType, parameters);
|
||||||
|
}
|
||||||
|
else if(_graphOptimizer)
|
||||||
|
{
|
||||||
|
_graphOptimizer->parseParameters(parameters);
|
||||||
|
}
|
||||||
|
|
||||||
if(!_memory)
|
if(!_memory)
|
||||||
{
|
{
|
||||||
_memory = new Memory(parameters);
|
_memory = new Memory(parameters);
|
||||||
@@ -444,29 +466,6 @@ void Rtabmap::parseParameters(const ParametersMap & parameters)
|
|||||||
_bayesFilter->parseParameters(parameters);
|
_bayesFilter->parseParameters(parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Graph optimizer
|
|
||||||
graph::Optimizer::Type optimizerType = graph::Optimizer::kTypeUndef;
|
|
||||||
if((iter=parameters.find(Parameters::kRGBDOptimizeStrategy())) != parameters.end())
|
|
||||||
{
|
|
||||||
optimizerType = (graph::Optimizer::Type)std::atoi((*iter).second.c_str());
|
|
||||||
}
|
|
||||||
if(optimizerType!=graph::Optimizer::kTypeUndef)
|
|
||||||
{
|
|
||||||
UDEBUG("new detector strategy %d", int(optimizerType));
|
|
||||||
if(_graphOptimizer)
|
|
||||||
{
|
|
||||||
delete _graphOptimizer;
|
|
||||||
_graphOptimizer = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
_graphOptimizer = graph::Optimizer::create(optimizerType, parameters);
|
|
||||||
}
|
|
||||||
else if(_graphOptimizer)
|
|
||||||
{
|
|
||||||
_graphOptimizer->parseParameters(parameters);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
for(ParametersMap::const_iterator iter = parameters.begin(); iter!=parameters.end(); ++iter)
|
for(ParametersMap::const_iterator iter = parameters.begin(); iter!=parameters.end(); ++iter)
|
||||||
{
|
{
|
||||||
uInsert(_lastParameters, ParametersPair(iter->first, iter->second));
|
uInsert(_lastParameters, ParametersPair(iter->first, iter->second));
|
||||||
@@ -2189,6 +2188,7 @@ void Rtabmap::optimizeCurrentMap(
|
|||||||
*constraints = edgeConstraints;
|
*constraints = edgeConstraints;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UASSERT(_graphOptimizer!=0);
|
||||||
if(_graphOptimizer->iterations() == 0)
|
if(_graphOptimizer->iterations() == 0)
|
||||||
{
|
{
|
||||||
// Optimization desactivated! Return not optimized poses.
|
// Optimization desactivated! Return not optimized poses.
|
||||||
|
|||||||
Reference in New Issue
Block a user