mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-04 00:37:46 +08:00
Merge branch 'master' of https://github.com/introlab/rtabmap into devel
This commit is contained in:
+5
-23
@@ -2125,32 +2125,13 @@ Transform Memory::computeTransform(
|
|||||||
|
|
||||||
// compute transform fromId -> toId
|
// compute transform fromId -> toId
|
||||||
std::vector<int> inliersV;
|
std::vector<int> inliersV;
|
||||||
if(_reextractLoopClosureFeatures || (fromS.getWords().size() && toS.getWords().size()))
|
if(_reextractLoopClosureFeatures ||
|
||||||
|
(fromS.getWords().size() && toS.getWords().size()) ||
|
||||||
|
(!guess.isNull() && !_registrationPipeline->isImageRequired()))
|
||||||
{
|
{
|
||||||
Signature tmpFrom = fromS;
|
Signature tmpFrom = fromS;
|
||||||
Signature tmpTo = toS;
|
Signature tmpTo = toS;
|
||||||
|
|
||||||
// make a guess fast with known correspondences (if there are)
|
|
||||||
RegistrationVis regVis(parameters_);
|
|
||||||
if(tmpFrom.getWords().size() &&
|
|
||||||
tmpTo.getWords().size() &&
|
|
||||||
tmpFrom.getWords3().size() &&
|
|
||||||
tmpTo.getWords3().size())
|
|
||||||
{
|
|
||||||
UDEBUG("");
|
|
||||||
// Remove descriptors, this will avoid recomputation of the correspondences in regVis
|
|
||||||
tmpFrom.setWordsDescriptors(std::multimap<int, cv::Mat>());
|
|
||||||
tmpTo.setWordsDescriptors(std::multimap<int, cv::Mat>());
|
|
||||||
Transform t = regVis.computeTransformation(tmpFrom, tmpTo, guess, info);
|
|
||||||
// set back descriptors
|
|
||||||
tmpFrom.setWordsDescriptors(fromS.getWordsDescriptors());
|
|
||||||
tmpTo.setWordsDescriptors(toS.getWordsDescriptors());
|
|
||||||
if(!t.isNull())
|
|
||||||
{
|
|
||||||
guess = t;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_reextractLoopClosureFeatures)
|
if(_reextractLoopClosureFeatures)
|
||||||
{
|
{
|
||||||
UDEBUG("");
|
UDEBUG("");
|
||||||
@@ -2168,6 +2149,7 @@ Transform Memory::computeTransform(
|
|||||||
{
|
{
|
||||||
UDEBUG("");
|
UDEBUG("");
|
||||||
// no visual in the pipeline, make visual registration for guess
|
// no visual in the pipeline, make visual registration for guess
|
||||||
|
RegistrationVis regVis(parameters_);
|
||||||
guess = regVis.computeTransformation(tmpFrom, tmpTo, guess, info);
|
guess = regVis.computeTransformation(tmpFrom, tmpTo, guess, info);
|
||||||
if(!guess.isNull())
|
if(!guess.isNull())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1834,7 +1834,8 @@ bool Rtabmap::process(
|
|||||||
_optimizedPoses.at(signature->id()).getDistanceSquared(_optimizedPoses.at(nearestId)) < _proximityFilteringRadius*_proximityFilteringRadius))
|
_optimizedPoses.at(signature->id()).getDistanceSquared(_optimizedPoses.at(nearestId)) < _proximityFilteringRadius*_proximityFilteringRadius))
|
||||||
{
|
{
|
||||||
RegistrationInfo info;
|
RegistrationInfo info;
|
||||||
Transform transform = _memory->computeTransform(signature->id(), nearestId, Transform(), &info);
|
Transform guess = _optimizedPoses.at(signature->id()).inverse() * _optimizedPoses.at(nearestId);
|
||||||
|
Transform transform = _memory->computeTransform(signature->id(), nearestId, guess, &info);
|
||||||
if(!transform.isNull())
|
if(!transform.isNull())
|
||||||
{
|
{
|
||||||
if(_proximityFilteringRadius <= 0 || transform.getNormSquared() <= _proximityFilteringRadius*_proximityFilteringRadius)
|
if(_proximityFilteringRadius <= 0 || transform.getNormSquared() <= _proximityFilteringRadius*_proximityFilteringRadius)
|
||||||
|
|||||||
@@ -542,7 +542,7 @@ void VWDictionary::setNNStrategy(NNStrategy strategy)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#if HAVE_OPENCV_CUDAFEATURES2D
|
#ifdef HAVE_OPENCV_CUDAFEATURES2D
|
||||||
if(strategy == kNNBruteForceGPU && !cv::cuda::getCudaEnabledDeviceCount())
|
if(strategy == kNNBruteForceGPU && !cv::cuda::getCudaEnabledDeviceCount())
|
||||||
{
|
{
|
||||||
UERROR("Nearest neighobr strategy \"kNNBruteForceGPU\" chosen but no CUDA devices found! Doing \"kNNBruteForce\" instead.");
|
UERROR("Nearest neighobr strategy \"kNNBruteForceGPU\" chosen but no CUDA devices found! Doing \"kNNBruteForce\" instead.");
|
||||||
|
|||||||
Reference in New Issue
Block a user