mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-03 10:00:23 +08:00
Rtabmap: reset all parameters to default on close()
This commit is contained in:
@@ -197,7 +197,7 @@ private:
|
|||||||
EpipolarGeometry * _epipolarGeometry;
|
EpipolarGeometry * _epipolarGeometry;
|
||||||
BayesFilter * _bayesFilter;
|
BayesFilter * _bayesFilter;
|
||||||
graph::Optimizer * _graphOptimizer;
|
graph::Optimizer * _graphOptimizer;
|
||||||
ParametersMap _lastParameters;
|
ParametersMap _modifiedParameters;
|
||||||
|
|
||||||
Memory * _memory;
|
Memory * _memory;
|
||||||
|
|
||||||
|
|||||||
@@ -265,6 +265,8 @@ void Rtabmap::init(const ParametersMap & parameters, const std::string & databas
|
|||||||
{
|
{
|
||||||
_databasePath = _wDir + "/" + Parameters::getDefaultDatabaseName();
|
_databasePath = _wDir + "/" + Parameters::getDefaultDatabaseName();
|
||||||
}
|
}
|
||||||
|
UASSERT(UFile::getExtension(_databasePath).compare("db") == 0);
|
||||||
|
|
||||||
UINFO("Using database \"%s\".", _databasePath.c_str());
|
UINFO("Using database \"%s\".", _databasePath.c_str());
|
||||||
bool newDatabase = !UFile::exists(_databasePath);
|
bool newDatabase = !UFile::exists(_databasePath);
|
||||||
this->parseParameters(parameters);
|
this->parseParameters(parameters);
|
||||||
@@ -330,16 +332,12 @@ void Rtabmap::close()
|
|||||||
_graphOptimizer = 0;
|
_graphOptimizer = 0;
|
||||||
}
|
}
|
||||||
_databasePath.clear();
|
_databasePath.clear();
|
||||||
|
parseParameters(Parameters::getDefaultParameters()); // reset to default parameters
|
||||||
|
_modifiedParameters.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Rtabmap::parseParameters(const ParametersMap & parameters)
|
void Rtabmap::parseParameters(const ParametersMap & parameters)
|
||||||
{
|
{
|
||||||
if(_databasePath.empty())
|
|
||||||
{
|
|
||||||
UERROR("RTAB-Map is not initialized. Call rtabmap::init() instead.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ULOGGER_DEBUG("");
|
ULOGGER_DEBUG("");
|
||||||
ParametersMap::const_iterator iter;
|
ParametersMap::const_iterator iter;
|
||||||
if((iter=parameters.find(Parameters::kRtabmapWorkingDirectory())) != parameters.end())
|
if((iter=parameters.find(Parameters::kRtabmapWorkingDirectory())) != parameters.end())
|
||||||
@@ -421,10 +419,13 @@ void Rtabmap::parseParameters(const ParametersMap & parameters)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!_memory)
|
if(!_memory)
|
||||||
|
{
|
||||||
|
if(!_databasePath.empty())
|
||||||
{
|
{
|
||||||
_memory = new Memory(parameters);
|
_memory = new Memory(parameters);
|
||||||
_memory->init(_databasePath, false, parameters, true);
|
_memory->init(_databasePath, false, parameters, true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_memory->parseParameters(parameters);
|
_memory->parseParameters(parameters);
|
||||||
@@ -462,7 +463,7 @@ void Rtabmap::parseParameters(const ParametersMap & 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(_modifiedParameters, ParametersPair(iter->first, iter->second));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -700,10 +701,11 @@ void Rtabmap::resetMemory()
|
|||||||
_constraints.clear();
|
_constraints.clear();
|
||||||
_mapCorrection.setIdentity();
|
_mapCorrection.setIdentity();
|
||||||
_mapTransform.setIdentity();
|
_mapTransform.setIdentity();
|
||||||
|
this->clearPath();
|
||||||
|
|
||||||
if(_memory)
|
if(_memory)
|
||||||
{
|
{
|
||||||
_memory->init(_databasePath, true, ParametersMap(), true);
|
_memory->init(_databasePath, true, _modifiedParameters, true);
|
||||||
if(_memory->getLastWorkingSignature())
|
if(_memory->getLastWorkingSignature())
|
||||||
{
|
{
|
||||||
optimizeCurrentMap(_memory->getLastWorkingSignature()->id(), false, _optimizedPoses, &_constraints);
|
optimizeCurrentMap(_memory->getLastWorkingSignature()->id(), false, _optimizedPoses, &_constraints);
|
||||||
@@ -1378,7 +1380,7 @@ bool Rtabmap::process(const SensorData & data)
|
|||||||
std::string rejectedMsg;
|
std::string rejectedMsg;
|
||||||
if(_reextractLoopClosureFeatures)
|
if(_reextractLoopClosureFeatures)
|
||||||
{
|
{
|
||||||
ParametersMap customParameters = _lastParameters; // get BOW LCC parameters
|
ParametersMap customParameters = _modifiedParameters; // get BOW LCC parameters
|
||||||
// override some parameters
|
// override some parameters
|
||||||
uInsert(customParameters, ParametersPair(Parameters::kMemIncrementalMemory(), "true")); // make sure it is incremental
|
uInsert(customParameters, ParametersPair(Parameters::kMemIncrementalMemory(), "true")); // make sure it is incremental
|
||||||
uInsert(customParameters, ParametersPair(Parameters::kMemRehearsalSimilarity(), "1.0")); // desactivate rehearsal
|
uInsert(customParameters, ParametersPair(Parameters::kMemRehearsalSimilarity(), "1.0")); // desactivate rehearsal
|
||||||
@@ -2052,6 +2054,9 @@ std::map<int, Transform> Rtabmap::getWMPosesInRadius(
|
|||||||
float radius,
|
float radius,
|
||||||
int maxDiffID, // 0 means ignore
|
int maxDiffID, // 0 means ignore
|
||||||
int & nearestId) const
|
int & nearestId) const
|
||||||
|
{
|
||||||
|
std::map<int, Transform> poses;
|
||||||
|
if(_memory && fromId > 0)
|
||||||
{
|
{
|
||||||
UDEBUG("");
|
UDEBUG("");
|
||||||
const Signature * fromS = _memory->getSignature(fromId);
|
const Signature * fromS = _memory->getSignature(fromId);
|
||||||
@@ -2086,7 +2091,6 @@ std::map<int, Transform> Rtabmap::getWMPosesInRadius(
|
|||||||
Transform fromT = _optimizedPoses.at(fromId);
|
Transform fromT = _optimizedPoses.at(fromId);
|
||||||
|
|
||||||
nearestId = 0;
|
nearestId = 0;
|
||||||
std::map<int, Transform> poses;
|
|
||||||
float minDistance = -1;
|
float minDistance = -1;
|
||||||
if(cloud->size())
|
if(cloud->size())
|
||||||
{
|
{
|
||||||
@@ -2162,6 +2166,7 @@ std::map<int, Transform> Rtabmap::getWMPosesInRadius(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
UDEBUG("nearestId = %d, minDistance=%f poses=%d", nearestId, minDistance, (int)poses.size());
|
UDEBUG("nearestId = %d, minDistance=%f poses=%d", nearestId, minDistance, (int)poses.size());
|
||||||
|
}
|
||||||
return poses;
|
return poses;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2460,6 +2465,8 @@ bool Rtabmap::computePath(
|
|||||||
int targetNode,
|
int targetNode,
|
||||||
const std::map<int, Transform> & nodes,
|
const std::map<int, Transform> & nodes,
|
||||||
const std::multimap<int, rtabmap::Link> & constraints)
|
const std::multimap<int, rtabmap::Link> & constraints)
|
||||||
|
{
|
||||||
|
if(_memory)
|
||||||
{
|
{
|
||||||
if(!_memory->getLastWorkingSignature())
|
if(!_memory->getLastWorkingSignature())
|
||||||
{
|
{
|
||||||
@@ -2523,6 +2530,8 @@ bool Rtabmap::computePath(
|
|||||||
|
|
||||||
return _path.size()>0;
|
return _path.size()>0;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// return true if path is updated
|
// return true if path is updated
|
||||||
bool Rtabmap::computePath(int targetNode, bool global)
|
bool Rtabmap::computePath(int targetNode, bool global)
|
||||||
@@ -2670,7 +2679,7 @@ void Rtabmap::updateGoalIndex()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_path.size())
|
if( _memory && _path.size())
|
||||||
{
|
{
|
||||||
// Make sure the next signatures on the path are linked together
|
// Make sure the next signatures on the path are linked together
|
||||||
float distanceSoFar = 0.0f;
|
float distanceSoFar = 0.0f;
|
||||||
|
|||||||
Reference in New Issue
Block a user