mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-04 08:47:45 +08:00
Intermediate node fixes for ProximityTime and detecting more loop closures in the GUI
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user