mirror of
https://github.com/introlab/rtabmap.git
synced 2026-10-07 18:47:48 +08:00
Compare commits
8
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f2d48cb894 | ||
|
|
22766e958f | ||
|
|
8e76de7d34 | ||
|
|
abd376a44c | ||
|
|
4a3f490814 | ||
|
|
cbf348fafa | ||
|
|
e205883de5 | ||
|
|
ce04336648 |
Vendored
BIN
Binary file not shown.
@@ -150,7 +150,7 @@ IF((APPLE AND BUILD_AS_BUNDLE) OR WIN32)
|
|||||||
get_filename_component(plugin_dir ${plugin_loc} DIRECTORY)
|
get_filename_component(plugin_dir ${plugin_loc} DIRECTORY)
|
||||||
string(REPLACE "plugins" ";" loc_list ${plugin_dir})
|
string(REPLACE "plugins" ";" loc_list ${plugin_dir})
|
||||||
list(GET loc_list 1 plugin_type)
|
list(GET loc_list 1 plugin_type)
|
||||||
#MESSAGE(STATUS "Qt5 plugin "${plugin_loc}" installed in "${plugin_dest_dir}/plugins${plugin_type}"")
|
#MESSAGE(STATUS "Qt5 plugin \"${plugin_loc}\" installed in \"${plugin_dest_dir}/plugins${plugin_type}\"")
|
||||||
INSTALL(FILES ${plugin_loc}
|
INSTALL(FILES ${plugin_loc}
|
||||||
DESTINATION ${plugin_dest_dir}/plugins${plugin_type}
|
DESTINATION ${plugin_dest_dir}/plugins${plugin_type}
|
||||||
COMPONENT runtime)
|
COMPONENT runtime)
|
||||||
|
|||||||
@@ -116,14 +116,17 @@ void segmentObstaclesFromGround(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Cluster remaining stuff (obstacles)
|
//Cluster remaining stuff (obstacles)
|
||||||
std::vector<pcl::IndicesPtr> clusteredObstaclesSurfaces = util3d::extractClusters(
|
if(otherStuffIndices->size())
|
||||||
cloud,
|
{
|
||||||
otherStuffIndices,
|
std::vector<pcl::IndicesPtr> clusteredObstaclesSurfaces = util3d::extractClusters(
|
||||||
clusterRadius,
|
cloud,
|
||||||
minClusterSize);
|
otherStuffIndices,
|
||||||
|
clusterRadius,
|
||||||
|
minClusterSize);
|
||||||
|
|
||||||
// merge indices
|
// merge indices
|
||||||
obstacles = util3d::concatenate(clusteredObstaclesSurfaces);
|
obstacles = util3d::concatenate(clusteredObstaclesSurfaces);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -188,10 +188,17 @@ IF(G2O_FOUND)
|
|||||||
ENDIF(G2O_FOUND)
|
ENDIF(G2O_FOUND)
|
||||||
|
|
||||||
IF(GTSAM_FOUND)
|
IF(GTSAM_FOUND)
|
||||||
SET(INCLUDE_DIRS
|
IF(GTSAM_INCLUDE_DIR)
|
||||||
${INCLUDE_DIRS}
|
SET(INCLUDE_DIRS
|
||||||
${GTSAM_INCLUDE_DIRS}
|
${GTSAM_INCLUDE_DIR} # place it in front to use Eigen installed by GTSAM
|
||||||
)
|
${INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
ELSE()
|
||||||
|
SET(INCLUDE_DIRS
|
||||||
|
${GTSAM_INCLUDE_DIRS} # cmake standard
|
||||||
|
${INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
ENDIF()
|
||||||
SET(LIBRARIES
|
SET(LIBRARIES
|
||||||
${LIBRARIES}
|
${LIBRARIES}
|
||||||
gtsam
|
gtsam
|
||||||
|
|||||||
+6
-23
@@ -1902,6 +1902,7 @@ bool Memory::labelSignature(int id, const std::string & label)
|
|||||||
if(s)
|
if(s)
|
||||||
{
|
{
|
||||||
s->setLabel(label);
|
s->setLabel(label);
|
||||||
|
_linksChanged = s->isSaved(); // HACK to get label updated in Localization mode
|
||||||
UWARN("Label \"%s\" set to node %d", label.c_str(), id);
|
UWARN("Label \"%s\" set to node %d", label.c_str(), id);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -2123,32 +2124,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("");
|
||||||
@@ -2166,6 +2148,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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -155,6 +155,9 @@ const std::map<std::string, std::pair<bool, std::string> > & Parameters::getRemo
|
|||||||
{
|
{
|
||||||
// removed parameters
|
// removed parameters
|
||||||
|
|
||||||
|
// 0.11.8
|
||||||
|
removedParameters_.insert(std::make_pair("Reg/Force2D", std::make_pair(true, Parameters::kRegForce3DoF())));
|
||||||
|
|
||||||
// 0.11.6
|
// 0.11.6
|
||||||
removedParameters_.insert(std::make_pair("RGBD/ProximityPathScansMerged", std::make_pair(false, "")));
|
removedParameters_.insert(std::make_pair("RGBD/ProximityPathScansMerged", std::make_pair(false, "")));
|
||||||
|
|
||||||
|
|||||||
@@ -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.");
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ void ExportCloudsDialog::restoreDefaults()
|
|||||||
_ui->spinBox_filteringMinNeighbors->setValue(2);
|
_ui->spinBox_filteringMinNeighbors->setValue(2);
|
||||||
|
|
||||||
_ui->checkBox_assemble->setChecked(true);
|
_ui->checkBox_assemble->setChecked(true);
|
||||||
_ui->doubleSpinBox_voxelSize_assembled->setValue(0.01);
|
_ui->doubleSpinBox_voxelSize_assembled->setValue(0.0);
|
||||||
|
|
||||||
_ui->groupBox_subtraction->setChecked(false);
|
_ui->groupBox_subtraction->setChecked(false);
|
||||||
_ui->doubleSpinBox_subtractPointFilteringRadius->setValue(0.02);
|
_ui->doubleSpinBox_subtractPointFilteringRadius->setValue(0.02);
|
||||||
|
|||||||
Reference in New Issue
Block a user