mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-03 01:50:24 +08:00
updating words have changed with getNodeWordsAndGlobalDescriptors()
This commit is contained in:
@@ -4276,6 +4276,29 @@ void Memory::getNodeWordsAndGlobalDescriptors(int nodeId,
|
||||
words3 = s->getWords3();
|
||||
wordsDescriptors = s->getWordsDescriptors();
|
||||
globalDescriptors = s->sensorData().globalDescriptors();
|
||||
|
||||
if(!words.empty() && wordsKpts.empty() && _dbDriver)
|
||||
{
|
||||
std::multimap<int, int> tmpWords;
|
||||
_dbDriver->getLocalFeatures(nodeId, tmpWords, wordsKpts, words3, wordsDescriptors);
|
||||
if(!tmpWords.empty() && !wordsKpts.empty())
|
||||
{
|
||||
UASSERT(tmpWords.size() == words.size());
|
||||
std::map<int, int> wordsChanged = s->getWordsChanged();
|
||||
for(const auto & iter: wordsChanged) {
|
||||
std::list<int> subwords = uValues(tmpWords, iter.first); // old id
|
||||
if(subwords.size())
|
||||
{
|
||||
tmpWords.erase(iter.first);
|
||||
for(std::list<int>::const_iterator jter=subwords.begin(); jter!=subwords.end(); ++jter)
|
||||
{
|
||||
tmpWords.insert(std::pair<int, int>(iter.second, (*jter))); // new id
|
||||
}
|
||||
}
|
||||
}
|
||||
words = tmpWords;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(_dbDriver)
|
||||
{
|
||||
@@ -4303,10 +4326,6 @@ void Memory::getNodeWordsAndGlobalDescriptors(int nodeId,
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!words.empty() && wordsKpts.empty() && _dbDriver)
|
||||
{
|
||||
_dbDriver->getLocalFeatures(nodeId, words, wordsKpts, words3, wordsDescriptors);
|
||||
}
|
||||
}
|
||||
|
||||
void Memory::getNodeCalibration(int nodeId,
|
||||
|
||||
Reference in New Issue
Block a user