Intermediate node fixes for ProximityTime and detecting more loop closures in the GUI

This commit is contained in:
matlabbe
2016-02-18 12:52:15 -05:00
parent c1c62b0738
commit 6b8ab84ba0
2 changed files with 27 additions and 20 deletions
+5 -2
View File
@@ -1153,14 +1153,17 @@ bool Rtabmap::process(
if(_proximityByTime && if(_proximityByTime &&
rehearsedId == 0 && // don't do it if rehearsal happened rehearsedId == 0 && // don't do it if rehearsal happened
signature->getWords3().size() && signature->getWords3().size() &&
_memory->isIncremental()) // don't do it in localization mode _memory->isIncremental(), // don't do it in localization mode
!signature->isBadSignature() &&
signature->getWeight()>=0)
{ {
const std::set<int> & stm = _memory->getStMem(); const std::set<int> & stm = _memory->getStMem();
for(std::set<int>::const_reverse_iterator iter = stm.rbegin(); iter!=stm.rend(); ++iter) for(std::set<int>::const_reverse_iterator iter = stm.rbegin(); iter!=stm.rend(); ++iter)
{ {
if(*iter != signature->id() && if(*iter != signature->id() &&
signature->getLinks().find(*iter) == signature->getLinks().end() && signature->getLinks().find(*iter) == signature->getLinks().end() &&
_memory->getSignature(*iter)->mapId() == signature->mapId()) _memory->getSignature(*iter)->mapId() == signature->mapId() &&
_memory->getSignature(*iter)->getWeight()>=0)
{ {
std::string rejectedMsg; std::string rejectedMsg;
UDEBUG("Check local transform between %d and %d", signature->id(), *iter); UDEBUG("Check local transform between %d and %d", signature->id(), *iter);
+4
View File
@@ -3711,6 +3711,9 @@ void MainWindow::postProcessing()
Signature signatureFrom = _cachedSignatures[from]; Signature signatureFrom = _cachedSignatures[from];
Signature signatureTo = _cachedSignatures[to]; Signature signatureTo = _cachedSignatures[to];
if(signatureFrom.getWeight() >= 0 &&
signatureTo.getWeight() >= 0) // ignore intermediate nodes
{
if(reextractFeatures) if(reextractFeatures)
{ {
signatureFrom.setWords(std::multimap<int, cv::KeyPoint>()); signatureFrom.setWords(std::multimap<int, cv::KeyPoint>());
@@ -3736,6 +3739,7 @@ void MainWindow::postProcessing()
} }
} }
} }
}
_initProgressDialog->appendText(tr("Iteration %1/%2: Detected %3 loop closures!") _initProgressDialog->appendText(tr("Iteration %1/%2: Detected %3 loop closures!")
.arg(n+1).arg(detectLoopClosureIterations).arg(addedLinks.size()/2)); .arg(n+1).arg(detectLoopClosureIterations).arg(addedLinks.size()/2));
if(addedLinks.size() == 0) if(addedLinks.size() == 0)