Added FastCV support (see FAST/CV parameter). VWDictionary: loading fixed dictionary only on updates (to avoid loading it multiple times when memory is reset).

This commit is contained in:
matlabbe
2019-08-14 12:09:56 -04:00
parent d5b4b25287
commit 4b118ae660
15 changed files with 612 additions and 329 deletions
+18
View File
@@ -192,6 +192,7 @@ option(WITH_OKVIS "Include OKVIS support" ON)
option(WITH_MSCKF_VIO "Include MSCKF_VIO support" OFF) option(WITH_MSCKF_VIO "Include MSCKF_VIO support" OFF)
option(WITH_VINS "Include VINS-Fusion support" ON) option(WITH_VINS "Include VINS-Fusion support" ON)
option(WITH_MADGWICK "Include Madgwick IMU filtering support" ON) option(WITH_MADGWICK "Include Madgwick IMU filtering support" ON)
option(WITH_FASTCV "Include FastCV support" ON)
option(PCL_OMP "With PCL OMP implementations" ON) option(PCL_OMP "With PCL OMP implementations" ON)
set(RTABMAP_QT_VERSION AUTO CACHE STRING "Force a specific Qt version.") set(RTABMAP_QT_VERSION AUTO CACHE STRING "Force a specific Qt version.")
@@ -517,6 +518,12 @@ IF(WITH_VINS)
ENDIF(vins_FOUND) ENDIF(vins_FOUND)
ENDIF(WITH_VINS) ENDIF(WITH_VINS)
IF(WITH_FASTCV)
FIND_PACKAGE(FastCV QUIET)
IF(FastCV_FOUND)
MESSAGE(STATUS "Found FastCV: ${FastCV_INCLUDE_DIRS}")
ENDIF(FastCV_FOUND)
ENDIF(WITH_FASTCV)
IF(WITH_ORB_SLAM2 AND NOT G2O_FOUND) IF(WITH_ORB_SLAM2 AND NOT G2O_FOUND)
FIND_PACKAGE(ORB_SLAM2 QUIET) FIND_PACKAGE(ORB_SLAM2 QUIET)
@@ -645,6 +652,9 @@ ENDIF()
IF(NOT libpointmatcher_FOUND) IF(NOT libpointmatcher_FOUND)
SET(POINTMATCHER "//") SET(POINTMATCHER "//")
ENDIF(NOT libpointmatcher_FOUND) ENDIF(NOT libpointmatcher_FOUND)
IF(NOT FastCV_FOUND)
SET(FASTCV "//")
ENDIF(NOT FastCV_FOUND)
IF(NOT loam_velodyne_FOUND) IF(NOT loam_velodyne_FOUND)
SET(LOAM "//") SET(LOAM "//")
ENDIF(NOT loam_velodyne_FOUND) ENDIF(NOT loam_velodyne_FOUND)
@@ -977,6 +987,14 @@ IF(OpenCV_FOUND)
ENDIF() ENDIF()
ENDIF(OpenCV_FOUND) ENDIF(OpenCV_FOUND)
IF(FastCV_FOUND)
MESSAGE(STATUS " With FastCV = YES (License: Apache v2)")
ELSEIF(NOT WITH_FASTCV)
MESSAGE(STATUS " With FastCV = NO (WITH_FASTCV=OFF)")
ELSE()
MESSAGE(STATUS " With FastCV = NO (FastCV not found)")
ENDIF()
IF(Sqlite3_FOUND) IF(Sqlite3_FOUND)
MESSAGE(STATUS " With external SQLite3 = YES (License: Public Domain)") MESSAGE(STATUS " With external SQLite3 = YES (License: Public Domain)")
ELSE() ELSE()
+1
View File
@@ -51,6 +51,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@K4A@#define RTABMAP_K4A @K4A@#define RTABMAP_K4A
@CVSBA@#define RTABMAP_CVSBA @CVSBA@#define RTABMAP_CVSBA
@POINTMATCHER@#define RTABMAP_POINTMATCHER @POINTMATCHER@#define RTABMAP_POINTMATCHER
@FASTCV@#define RTABMAP_FASTCV
@LOAM@#define RTABMAP_LOAM @LOAM@#define RTABMAP_LOAM
@DC1394@#define RTABMAP_DC1394 @DC1394@#define RTABMAP_DC1394
@FLYCAPTURE2@#define RTABMAP_FLYCAPTURE2 @FLYCAPTURE2@#define RTABMAP_FLYCAPTURE2
+37
View File
@@ -0,0 +1,37 @@
# - Find FastCV (https://developer.qualcomm.com/software/fastcv-sdk)
#
# It sets the following variables:
# FastCV_FOUND - Set to false, or undefined, if FastCV isn't found.
# FastCV_INCLUDE_DIRS - The FastCV include directory.
# FastCV_LIBRARIES - The FastCV library to link against.
IF(NOT WIN32 AND NOT APPLE)
EXECUTE_PROCESS( COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE )
MESSAGE( STATUS "Architecture: ${ARCHITECTURE}" )
# Currently only tested on aarch64!
IF(${ARCHITECTURE} STREQUAL "aarch64")
find_path(FastCV_INCLUDE_DIRS NAMES fastcv.h PATH_SUFFIXES fastcv)
find_library(FastCV_LIBRARY NAMES fastcvopt fastcv)
ENDIF(${ARCHITECTURE} STREQUAL "aarch64")
ENDIF(NOT WIN32 AND NOT APPLE)
IF (FastCV_INCLUDE_DIRS AND FastCV_LIBRARY)
SET(FastCV_FOUND TRUE)
ENDIF (FastCV_INCLUDE_DIRS AND FastCV_LIBRARY)
IF (FastCV_FOUND)
SET(FastCV_LIBRARIES ${FastCV_LIBRARY})
# show which RealSense was found only if not quiet
IF (NOT FastCV_FIND_QUIETLY)
MESSAGE(STATUS "Found FastCV: ${FastCV_LIBRARIES}")
ENDIF (NOT FastCV_FIND_QUIETLY)
ELSE (FastCV_FOUND)
# fatal error if RealSense is required but not found
IF (FastCV_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find FastCV")
ENDIF (FastCV_FIND_REQUIRED)
ENDIF (FastCV_FOUND)
@@ -289,6 +289,14 @@ private:
int maxThreshold_; int maxThreshold_;
int gridRows_; int gridRows_;
int gridCols_; int gridCols_;
int fastCV_;
bool fastCVinit_;
int fastCVMaxFeatures_;
int fastCVLastImageHeight_;
uint32_t* fastCVCorners_= NULL;
uint32_t* fastCVCornerScores_ = NULL;
void* fastCVTempBuf_ = NULL;
cv::Ptr<cv::FeatureDetector> _fast; cv::Ptr<cv::FeatureDetector> _fast;
cv::Ptr<CV_FAST_GPU> _gpuFast; cv::Ptr<CV_FAST_GPU> _gpuFast;
@@ -290,6 +290,7 @@ class RTABMAP_EXP Parameters
RTABMAP_PARAM(FAST, MaxThreshold, int, 200, "Maximum threshold. Used only when FAST/GridRows and FAST/GridCols are set."); RTABMAP_PARAM(FAST, MaxThreshold, int, 200, "Maximum threshold. Used only when FAST/GridRows and FAST/GridCols are set.");
RTABMAP_PARAM(FAST, GridRows, int, 0, "Grid rows (0 to disable). Adapts the detector to partition the source image into a grid and detect points in each cell."); RTABMAP_PARAM(FAST, GridRows, int, 0, "Grid rows (0 to disable). Adapts the detector to partition the source image into a grid and detect points in each cell.");
RTABMAP_PARAM(FAST, GridCols, int, 0, "Grid cols (0 to disable). Adapts the detector to partition the source image into a grid and detect points in each cell."); RTABMAP_PARAM(FAST, GridCols, int, 0, "Grid cols (0 to disable). Adapts the detector to partition the source image into a grid and detect points in each cell.");
RTABMAP_PARAM(FAST, CV, int, 0, "Enable FastCV implementation if non-zero (and RTAB-Map is built with FastCV support). Values should be 9 and 10.");
RTABMAP_PARAM(GFTT, QualityLevel, double, 0.001, ""); RTABMAP_PARAM(GFTT, QualityLevel, double, 0.001, "");
RTABMAP_PARAM(GFTT, MinDistance, double, 3, ""); RTABMAP_PARAM(GFTT, MinDistance, double, 3, "");
+2 -1
View File
@@ -115,7 +115,8 @@ private:
bool _incrementalFlann; bool _incrementalFlann;
float _rebalancingFactor; float _rebalancingFactor;
float _nndrRatio; float _nndrRatio;
std::string _dictionaryPath; // a pre-computed dictionary (.txt) std::string _dictionaryPath; // a pre-computed dictionary (.txt or .db)
std::string _newDictionaryPath; // a pre-computed dictionary (.txt or .db)
bool _newWordsComparedTogether; bool _newWordsComparedTogether;
int _lastWordId; int _lastWordId;
bool useDistanceL1_; bool useDistanceL1_;
+83 -72
View File
@@ -1,17 +1,17 @@
SET(SRC_FILES SET(SRC_FILES
Rtabmap.cpp Rtabmap.cpp
RtabmapThread.cpp RtabmapThread.cpp
Statistics.cpp Statistics.cpp
Memory.cpp Memory.cpp
DBDriver.cpp DBDriver.cpp
DBDriverSqlite3.cpp DBDriverSqlite3.cpp
DBReader.cpp DBReader.cpp
Recovery.cpp Recovery.cpp
Camera.cpp Camera.cpp
CameraThread.cpp CameraThread.cpp
@@ -33,88 +33,88 @@ SET(SRC_FILES
camera/CameraStereoImages.cpp camera/CameraStereoImages.cpp
camera/CameraStereoVideo.cpp camera/CameraStereoVideo.cpp
camera/CameraStereoZed.cpp camera/CameraStereoZed.cpp
camera/CameraStereoTara.cpp camera/CameraStereoTara.cpp
camera/CameraVideo.cpp camera/CameraVideo.cpp
EpipolarGeometry.cpp EpipolarGeometry.cpp
VisualWord.cpp VisualWord.cpp
VWDictionary.cpp VWDictionary.cpp
BayesFilter.cpp BayesFilter.cpp
Parameters.cpp Parameters.cpp
Signature.cpp Signature.cpp
Features2d.cpp Features2d.cpp
Transform.cpp Transform.cpp
GeodeticCoords.cpp GeodeticCoords.cpp
util2d.cpp util2d.cpp
util3d.cpp util3d.cpp
util3d_filtering.cpp util3d_filtering.cpp
util3d_mapping.cpp util3d_mapping.cpp
util3d_transforms.cpp util3d_transforms.cpp
util3d_registration.cpp util3d_registration.cpp
util3d_surface.cpp util3d_surface.cpp
util3d_features.cpp util3d_features.cpp
util3d_correspondences.cpp util3d_correspondences.cpp
util3d_motion_estimation.cpp util3d_motion_estimation.cpp
SensorData.cpp SensorData.cpp
Graph.cpp Graph.cpp
Compression.cpp Compression.cpp
Link.cpp Link.cpp
LaserScan.cpp LaserScan.cpp
Optimizer.cpp Optimizer.cpp
optimizer/OptimizerTORO.cpp optimizer/OptimizerTORO.cpp
optimizer/OptimizerG2O.cpp optimizer/OptimizerG2O.cpp
optimizer/OptimizerGTSAM.cpp optimizer/OptimizerGTSAM.cpp
optimizer/OptimizerCVSBA.cpp optimizer/OptimizerCVSBA.cpp
Registration.cpp Registration.cpp
RegistrationIcp.cpp RegistrationIcp.cpp
RegistrationVis.cpp RegistrationVis.cpp
Odometry.cpp Odometry.cpp
OdometryThread.cpp OdometryThread.cpp
odometry/OdometryF2M.cpp odometry/OdometryF2M.cpp
odometry/OdometryMono.cpp odometry/OdometryMono.cpp
odometry/OdometryF2F.cpp odometry/OdometryF2F.cpp
odometry/OdometryFovis.cpp odometry/OdometryFovis.cpp
odometry/OdometryViso2.cpp odometry/OdometryViso2.cpp
odometry/OdometryDVO.cpp odometry/OdometryDVO.cpp
odometry/OdometryOkvis.cpp odometry/OdometryOkvis.cpp
odometry/OdometryORBSLAM2.cpp odometry/OdometryORBSLAM2.cpp
odometry/OdometryLOAM.cpp odometry/OdometryLOAM.cpp
odometry/OdometryMSCKF.cpp odometry/OdometryMSCKF.cpp
odometry/OdometryVINS.cpp odometry/OdometryVINS.cpp
IMUThread.cpp IMUThread.cpp
IMUFilter.cpp IMUFilter.cpp
imufilter/ComplementaryFilter.cpp imufilter/ComplementaryFilter.cpp
Stereo.cpp Stereo.cpp
StereoDense.cpp StereoDense.cpp
StereoCameraModel.cpp StereoCameraModel.cpp
stereo/StereoBM.cpp stereo/StereoBM.cpp
stereo/StereoSGBM.cpp stereo/StereoSGBM.cpp
OccupancyGrid.cpp OccupancyGrid.cpp
MarkerDetector.cpp MarkerDetector.cpp
GainCompensator.cpp GainCompensator.cpp
rtflann/ext/lz4.c rtflann/ext/lz4.c
rtflann/ext/lz4hc.c rtflann/ext/lz4hc.c
FlannIndex.cpp FlannIndex.cpp
#clams stuff #clams stuff
clams/discrete_depth_distortion_model_helpers.cpp clams/discrete_depth_distortion_model_helpers.cpp
clams/discrete_depth_distortion_model.cpp clams/discrete_depth_distortion_model.cpp
clams/frame_projector.cpp clams/frame_projector.cpp
clams/slam_calibrator.cpp clams/slam_calibrator.cpp
opencv/ORBextractor.cc opencv/ORBextractor.cc
) )
IF(OpenCV_VERSION_MAJOR EQUAL 2) IF(OpenCV_VERSION_MAJOR EQUAL 2)
@@ -348,6 +348,17 @@ IF(libpointmatcher_FOUND)
) )
ENDIF(libpointmatcher_FOUND) ENDIF(libpointmatcher_FOUND)
IF(FastCV_FOUND)
SET(INCLUDE_DIRS
${INCLUDE_DIRS}
${FastCV_INCLUDE_DIRS}
)
SET(LIBRARIES
${LIBRARIES}
${FastCV_LIBRARIES}
)
ENDIF(FastCV_FOUND)
IF(loam_velodyne_FOUND) IF(loam_velodyne_FOUND)
SET(INCLUDE_DIRS SET(INCLUDE_DIRS
${INCLUDE_DIRS} ${INCLUDE_DIRS}
+124 -1
View File
@@ -65,6 +65,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <opencv2/xfeatures2d/cuda.hpp> #include <opencv2/xfeatures2d/cuda.hpp>
#endif #endif
#ifdef RTABMAP_FASTCV
#include <fastcv.h>
#endif
namespace rtabmap { namespace rtabmap {
void Feature2D::filterKeypointsByDepth( void Feature2D::filterKeypointsByDepth(
@@ -1081,13 +1085,66 @@ FAST::FAST(const ParametersMap & parameters) :
minThreshold_(Parameters::defaultFASTMinThreshold()), minThreshold_(Parameters::defaultFASTMinThreshold()),
maxThreshold_(Parameters::defaultFASTMaxThreshold()), maxThreshold_(Parameters::defaultFASTMaxThreshold()),
gridRows_(Parameters::defaultFASTGridRows()), gridRows_(Parameters::defaultFASTGridRows()),
gridCols_(Parameters::defaultFASTGridCols()) gridCols_(Parameters::defaultFASTGridCols()),
fastCV_(Parameters::defaultFASTCV()),
fastCVinit_(false),
fastCVMaxFeatures_(10000),
fastCVLastImageHeight_(0)
{ {
#ifdef RTABMAP_FASTCV
char sVersion[128] = { 0 };
fcvGetVersion(sVersion, 128);
UINFO("fastcv version = %s", sVersion);
int ix;
if ((ix = fcvSetOperationMode(FASTCV_OP_PERFORMANCE)))
{
UERROR("fcvSetOperationMode return=%d, OpenCV FAST will be used instead!", ix);
fastCV_ = 0;
}
else
{
fcvMemInit();
if (!(fastCVCorners_ = (uint32_t*)fcvMemAlloc(fastCVMaxFeatures_ * sizeof(uint32_t) * 2, 16)) ||
!(fastCVCornerScores_ = (uint32_t*)fcvMemAlloc( fastCVMaxFeatures_ * sizeof(uint32_t), 16 )))
{
UERROR("could not alloc fastcv mem, using opencv fast instead!");
if (fastCVCorners_)
{
fcvMemFree(fastCVCorners_);
fastCVCorners_ = NULL;
}
if (fastCVCornerScores_)
{
fcvMemFree(fastCVCornerScores_);
fastCVCornerScores_ = NULL;
}
}
else
{
fastCVinit_ = true;
}
}
#endif
parseParameters(parameters); parseParameters(parameters);
} }
FAST::~FAST() FAST::~FAST()
{ {
#ifdef RTABMAP_FASTCV
if(fastCVinit_)
{
fcvMemDeInit();
if (fastCVCorners_)
fcvMemFree(fastCVCorners_);
if (fastCVCornerScores_)
fcvMemFree(fastCVCornerScores_);
if (fastCVTempBuf_)
fcvMemFree(fastCVTempBuf_);
}
#endif
} }
void FAST::parseParameters(const ParametersMap & parameters) void FAST::parseParameters(const ParametersMap & parameters)
@@ -1104,6 +1161,9 @@ void FAST::parseParameters(const ParametersMap & parameters)
Parameters::parse(parameters, Parameters::kFASTGridRows(), gridRows_); Parameters::parse(parameters, Parameters::kFASTGridRows(), gridRows_);
Parameters::parse(parameters, Parameters::kFASTGridCols(), gridCols_); Parameters::parse(parameters, Parameters::kFASTGridCols(), gridCols_);
Parameters::parse(parameters, Parameters::kFASTCV(), fastCV_);
UASSERT(fastCV_ == 0 || fastCV_ == 9 || fastCV_ == 10);
UASSERT_MSG(threshold_ >= minThreshold_, uFormat("%d vs %d", threshold_, minThreshold_).c_str()); UASSERT_MSG(threshold_ >= minThreshold_, uFormat("%d vs %d", threshold_, minThreshold_).c_str());
UASSERT_MSG(threshold_ <= maxThreshold_, uFormat("%d vs %d", threshold_, maxThreshold_).c_str()); UASSERT_MSG(threshold_ <= maxThreshold_, uFormat("%d vs %d", threshold_, maxThreshold_).c_str());
@@ -1183,6 +1243,69 @@ std::vector<cv::KeyPoint> FAST::generateKeypointsImpl(const cv::Mat & image, con
{ {
UASSERT(!image.empty() && image.channels() == 1 && image.depth() == CV_8U); UASSERT(!image.empty() && image.channels() == 1 && image.depth() == CV_8U);
std::vector<cv::KeyPoint> keypoints; std::vector<cv::KeyPoint> keypoints;
#ifdef RTABMAP_FASTCV
if(fastCV_>0)
{
// Note: mask not supported, it should be the inverse of the current mask used (0=where to extract)
uint32_t nCorners = 0;
UASSERT(fastCVCorners_ != NULL && fastCVCornerScores_ != NULL);
if (nonmaxSuppression_)
{
if(fastCVTempBuf_==NULL || (fastCVTempBuf_!= NULL && fastCVLastImageHeight_!= image.rows))
{
if (fastCVTempBuf_)
{
fcvMemFree(fastCVTempBuf_);
fastCVTempBuf_ = NULL;
}
if(!(fastCVTempBuf_ = (uint32_t*)fcvMemAlloc( (3*fastCVMaxFeatures_+image.rows+1)*4, 16 )))
{
UERROR("could not alloc fastcv mem for temp buf (%s=true)", Parameters::kFASTNonmaxSuppression().c_str());
fastCVLastImageHeight_ = 0;
return keypoints;
}
fastCVLastImageHeight_ = image.rows;
}
}
// image.data should be 128 bits aligned
UDEBUG("%dx%d (step=%d) thr=%d maxFeatures=%d", image.cols, image.rows, image.step1(), threshold_, fastCVMaxFeatures_);
if(fastCV_ == 10)
{
fcvCornerFast10Scoreu8(image.data, image.cols, image.rows, 0, threshold_, 0, fastCVCorners_, fastCVCornerScores_, fastCVMaxFeatures_, &nCorners, nonmaxSuppression_?1:0, fastCVTempBuf_);
}
else
{
fcvCornerFast9Scoreu8_v2(image.data, image.cols, image.rows, image.step1(), threshold_, 0, fastCVCorners_, fastCVCornerScores_, fastCVMaxFeatures_, &nCorners, nonmaxSuppression_?1:0, fastCVTempBuf_);
}
UDEBUG("number of corners found = %d:", nCorners);
keypoints.resize(nCorners);
for (uint32_t i = 0; i < nCorners; i++)
{
keypoints[i].pt.x = fastCVCorners_[i * 2];
keypoints[i].pt.y = fastCVCorners_[(i * 2) + 1];
keypoints[i].size = 3;
keypoints[i].response = fastCVCornerScores_[i];
}
if(this->getMaxFeatures() > 0)
{
this->limitKeypoints(keypoints, this->getMaxFeatures());
}
return keypoints;
}
#endif
if(fastCV_>0)
{
UWARN( "RTAB-Map is not built with FastCV support. OpenCV's FAST is used instead. "
"Please set %s to 0. This message will only appear once.",
Parameters::kFASTCV().c_str());
fastCV_ = 0;
}
cv::Mat imgRoi(image, roi); cv::Mat imgRoi(image, roi);
cv::Mat maskRoi; cv::Mat maskRoi;
if(!mask.empty()) if(!mask.empty())
+10
View File
@@ -49,6 +49,7 @@ FlannIndex::~FlannIndex()
void FlannIndex::release() void FlannIndex::release()
{ {
UDEBUG("");
if(index_) if(index_)
{ {
if(featuresType_ == CV_8UC1) if(featuresType_ == CV_8UC1)
@@ -76,6 +77,7 @@ void FlannIndex::release()
isLSH_ = false; isLSH_ = false;
addedDescriptors_.clear(); addedDescriptors_.clear();
removedIndexes_.clear(); removedIndexes_.clear();
UDEBUG("");
} }
unsigned int FlannIndex::indexedFeatures() const unsigned int FlannIndex::indexedFeatures() const
@@ -138,6 +140,7 @@ void FlannIndex::buildLinearIndex(
bool useDistanceL1, bool useDistanceL1,
float rebalancingFactor) float rebalancingFactor)
{ {
UDEBUG("");
this->release(); this->release();
UASSERT(index_ == 0); UASSERT(index_ == 0);
UASSERT(features.type() == CV_32FC1 || features.type() == CV_8UC1); UASSERT(features.type() == CV_32FC1 || features.type() == CV_8UC1);
@@ -178,6 +181,7 @@ void FlannIndex::buildLinearIndex(
addedDescriptors_.insert(std::make_pair(nextIndex_, features)); addedDescriptors_.insert(std::make_pair(nextIndex_, features));
nextIndex_ = features.rows; nextIndex_ = features.rows;
UDEBUG("");
} }
void FlannIndex::buildKDTreeIndex( void FlannIndex::buildKDTreeIndex(
@@ -186,6 +190,7 @@ void FlannIndex::buildKDTreeIndex(
bool useDistanceL1, bool useDistanceL1,
float rebalancingFactor) float rebalancingFactor)
{ {
UDEBUG("");
this->release(); this->release();
UASSERT(index_ == 0); UASSERT(index_ == 0);
UASSERT(features.type() == CV_32FC1 || features.type() == CV_8UC1); UASSERT(features.type() == CV_32FC1 || features.type() == CV_8UC1);
@@ -226,6 +231,7 @@ void FlannIndex::buildKDTreeIndex(
addedDescriptors_.insert(std::make_pair(nextIndex_, features)); addedDescriptors_.insert(std::make_pair(nextIndex_, features));
nextIndex_ = features.rows; nextIndex_ = features.rows;
UDEBUG("");
} }
void FlannIndex::buildKDTreeSingleIndex( void FlannIndex::buildKDTreeSingleIndex(
@@ -235,6 +241,7 @@ void FlannIndex::buildKDTreeSingleIndex(
bool useDistanceL1, bool useDistanceL1,
float rebalancingFactor) float rebalancingFactor)
{ {
UDEBUG("");
this->release(); this->release();
UASSERT(index_ == 0); UASSERT(index_ == 0);
UASSERT(features.type() == CV_32FC1 || features.type() == CV_8UC1); UASSERT(features.type() == CV_32FC1 || features.type() == CV_8UC1);
@@ -275,6 +282,7 @@ void FlannIndex::buildKDTreeSingleIndex(
addedDescriptors_.insert(std::make_pair(nextIndex_, features)); addedDescriptors_.insert(std::make_pair(nextIndex_, features));
nextIndex_ = features.rows; nextIndex_ = features.rows;
UDEBUG("");
} }
void FlannIndex::buildLSHIndex( void FlannIndex::buildLSHIndex(
@@ -284,6 +292,7 @@ void FlannIndex::buildLSHIndex(
unsigned int multi_probe_level, unsigned int multi_probe_level,
float rebalancingFactor) float rebalancingFactor)
{ {
UDEBUG("");
this->release(); this->release();
UASSERT(index_ == 0); UASSERT(index_ == 0);
UASSERT(features.type() == CV_8UC1); UASSERT(features.type() == CV_8UC1);
@@ -300,6 +309,7 @@ void FlannIndex::buildLSHIndex(
addedDescriptors_.insert(std::make_pair(nextIndex_, features)); addedDescriptors_.insert(std::make_pair(nextIndex_, features));
nextIndex_ = features.rows; nextIndex_ = features.rows;
UDEBUG("");
} }
bool FlannIndex::isBuilt() bool FlannIndex::isBuilt()
+6
View File
@@ -605,6 +605,12 @@ ParametersMap Parameters::parseArguments(int argc, char * argv[], bool onlyParam
std::cout << str << std::setw(spacing - str.size()) << "true" << std::endl; std::cout << str << std::setw(spacing - str.size()) << "true" << std::endl;
#else #else
std::cout << str << std::setw(spacing - str.size()) << "false" << std::endl; std::cout << str << std::setw(spacing - str.size()) << "false" << std::endl;
#endif
str = "With FastCV:";
#ifdef RTABMAP_FASTCV
std::cout << str << std::setw(spacing - str.size()) << "true" << std::endl;
#else
std::cout << str << std::setw(spacing - str.size()) << "false" << std::endl;
#endif #endif
str = "With Madgwick:"; str = "With Madgwick:";
#ifdef RTABMAP_MADGWICK #ifdef RTABMAP_MADGWICK
+24 -24
View File
@@ -66,7 +66,7 @@ VWDictionary::VWDictionary(const ParametersMap & parameters) :
_incrementalFlann(Parameters::defaultKpIncrementalFlann()), _incrementalFlann(Parameters::defaultKpIncrementalFlann()),
_rebalancingFactor(Parameters::defaultKpFlannRebalancingFactor()), _rebalancingFactor(Parameters::defaultKpFlannRebalancingFactor()),
_nndrRatio(Parameters::defaultKpNndrRatio()), _nndrRatio(Parameters::defaultKpNndrRatio()),
_dictionaryPath(Parameters::defaultKpDictionaryPath()), _newDictionaryPath(Parameters::defaultKpDictionaryPath()),
_newWordsComparedTogether(Parameters::defaultKpNewWordsComparedTogether()), _newWordsComparedTogether(Parameters::defaultKpNewWordsComparedTogether()),
_lastWordId(0), _lastWordId(0),
useDistanceL1_(false), useDistanceL1_(false),
@@ -93,11 +93,10 @@ void VWDictionary::parseParameters(const ParametersMap & parameters)
UASSERT_MSG(_nndrRatio > 0.0f, uFormat("String=%s value=%f", uContains(parameters, Parameters::kKpNndrRatio())?parameters.at(Parameters::kKpNndrRatio()).c_str():"", _nndrRatio).c_str()); UASSERT_MSG(_nndrRatio > 0.0f, uFormat("String=%s value=%f", uContains(parameters, Parameters::kKpNndrRatio())?parameters.at(Parameters::kKpNndrRatio()).c_str():"", _nndrRatio).c_str());
std::string dictionaryPath = _dictionaryPath;
bool incrementalDictionary = _incrementalDictionary; bool incrementalDictionary = _incrementalDictionary;
if((iter=parameters.find(Parameters::kKpDictionaryPath())) != parameters.end()) if((iter=parameters.find(Parameters::kKpDictionaryPath())) != parameters.end())
{ {
dictionaryPath = (*iter).second.c_str(); _newDictionaryPath = (*iter).second.c_str();
} }
if((iter=parameters.find(Parameters::kKpIncrementalDictionary())) != parameters.end()) if((iter=parameters.find(Parameters::kKpIncrementalDictionary())) != parameters.end())
{ {
@@ -115,11 +114,7 @@ void VWDictionary::parseParameters(const ParametersMap & parameters)
{ {
this->setIncrementalDictionary(); this->setIncrementalDictionary();
} }
else _incrementalDictionary = incrementalDictionary;
{
this->setFixedDictionary(dictionaryPath);
}
} }
void VWDictionary::setIncrementalDictionary() void VWDictionary::setIncrementalDictionary()
@@ -133,21 +128,23 @@ void VWDictionary::setIncrementalDictionary()
} }
} }
_dictionaryPath = ""; _dictionaryPath = "";
_newDictionaryPath = "";
} }
void VWDictionary::setFixedDictionary(const std::string & dictionaryPath) void VWDictionary::setFixedDictionary(const std::string & dictionaryPath)
{ {
UDEBUG("");
if(!dictionaryPath.empty()) if(!dictionaryPath.empty())
{ {
if((!_incrementalDictionary && _dictionaryPath.compare(dictionaryPath) != 0) || if((!_incrementalDictionary && _dictionaryPath.compare(dictionaryPath) != 0) ||
_visualWords.size() == 0) _visualWords.size() == 0)
{ {
UDEBUG("incremental=%d, oldPath=%s newPath=%s, visual words=%d", UINFO("incremental=%d, oldPath=%s newPath=%s, visual words=%d",
_incrementalDictionary?1:0, _dictionaryPath.c_str(), dictionaryPath.c_str(), (int)_visualWords.size()); _incrementalDictionary?1:0, _dictionaryPath.c_str(), dictionaryPath.c_str(), (int)_visualWords.size());
if(UFile::getExtension(dictionaryPath).compare("db") == 0) if(UFile::getExtension(dictionaryPath).compare("db") == 0)
{ {
UDEBUG("Loading fixed vocabulary \"%s\", this may take a while...", dictionaryPath.c_str()); UWARN("Loading fixed vocabulary \"%s\", this may take a while...", dictionaryPath.c_str());
DBDriver * driver = DBDriver::create(); DBDriver * driver = DBDriver::create();
if(driver->openConnection(dictionaryPath, false)) if(driver->openConnection(dictionaryPath, false))
{ {
@@ -252,9 +249,11 @@ void VWDictionary::setFixedDictionary(const std::string & dictionaryPath)
} }
else else
{ {
this->update(); _dictionaryPath = dictionaryPath;
_newDictionaryPath = dictionaryPath;
_incrementalDictionary = false; _incrementalDictionary = false;
UDEBUG("Loaded %d words!", (int)_visualWords.size()); this->update();
UWARN("Loaded %d words!", (int)_visualWords.size());
} }
} }
else if(!_incrementalDictionary) else if(!_incrementalDictionary)
@@ -275,6 +274,7 @@ void VWDictionary::setFixedDictionary(const std::string & dictionaryPath)
_incrementalDictionary = false; _incrementalDictionary = false;
} }
_dictionaryPath = dictionaryPath; _dictionaryPath = dictionaryPath;
_newDictionaryPath = dictionaryPath;
} }
void VWDictionary::setNNStrategy(NNStrategy strategy) void VWDictionary::setNNStrategy(NNStrategy strategy)
@@ -402,13 +402,19 @@ cv::Mat VWDictionary::convert32FToBin(const cv::Mat & descriptorsIn)
void VWDictionary::update() void VWDictionary::update()
{ {
ULOGGER_DEBUG(""); ULOGGER_DEBUG("incremental=%d", _incrementalDictionary?1:0);
if(!_incrementalDictionary && !_notIndexedWords.size()) if(!_incrementalDictionary)
{ {
// No need to update the search index if we // reload the fixed dictionary if it has been cleared or not yet initialized
// use a fixed dictionary and the index is this->setFixedDictionary(_newDictionaryPath);
// already built
return; if(!_incrementalDictionary && !_notIndexedWords.size())
{
// No need to update the search index if we
// use a fixed dictionary and the index is
// already built
return;
}
} }
if(_notIndexedWords.size() || _visualWords.size() == 0 || _removedIndexedWords.size()) if(_notIndexedWords.size() || _visualWords.size() == 0 || _removedIndexedWords.size())
@@ -643,12 +649,6 @@ void VWDictionary::clear(bool printWarningsIfNotEmpty)
_unusedWords.clear(); _unusedWords.clear();
_flannIndex->release(); _flannIndex->release();
useDistanceL1_ = false; useDistanceL1_ = false;
if(!_incrementalDictionary)
{
// reload the fixed dictionary
this->setFixedDictionary(_dictionaryPath);
}
} }
int VWDictionary::getNextId() int VWDictionary::getNextId()
+7
View File
@@ -66,6 +66,13 @@ AboutDialog::AboutDialog(QWidget * parent) :
_ui->label_orboctree->setText("No"); _ui->label_orboctree->setText("No");
_ui->label_orboctree_license->setEnabled(false); _ui->label_orboctree_license->setEnabled(false);
#endif #endif
#ifdef RTABMAP_FASTCV
_ui->label_fastcv->setText("Yes");
_ui->label_fastcv_license->setEnabled(true);
#else
_ui->label_fastcv->setText("No");
_ui->label_fastcv_license->setEnabled(false);
#endif
#ifdef RTABMAP_OCTOMAP #ifdef RTABMAP_OCTOMAP
_ui->label_octomap->setText("Yes"); _ui->label_octomap->setText("Yes");
_ui->label_octomap_license->setEnabled(true); _ui->label_octomap_license->setEnabled(true);
+1
View File
@@ -869,6 +869,7 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) :
_ui->fastGridCols->setObjectName(Parameters::kFASTGridCols().c_str()); _ui->fastGridCols->setObjectName(Parameters::kFASTGridCols().c_str());
_ui->fastGpu->setObjectName(Parameters::kFASTGpu().c_str()); _ui->fastGpu->setObjectName(Parameters::kFASTGpu().c_str());
_ui->fastKeypointRatio->setObjectName(Parameters::kFASTGpuKeypointsRatio().c_str()); _ui->fastKeypointRatio->setObjectName(Parameters::kFASTGpuKeypointsRatio().c_str());
_ui->fastCV->setObjectName(Parameters::kFASTCV().c_str());
//ORB detector //ORB detector
_ui->doubleSpinBox_ORBScaleFactor->setObjectName(Parameters::kORBScaleFactor().c_str()); _ui->doubleSpinBox_ORBScaleFactor->setObjectName(Parameters::kORBScaleFactor().c_str());
+242 -209
View File
@@ -162,9 +162,9 @@ p, li { white-space: pre-wrap; }
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>-124</y> <y>0</y>
<width>593</width> <width>597</width>
<height>652</height> <height>751</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
@@ -185,6 +185,26 @@ p, li { white-space: pre-wrap; }
</property> </property>
<item> <item>
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,0,1"> <layout class="QGridLayout" name="gridLayout_2" columnstretch="0,0,1">
<item row="25" column="2">
<widget class="QLabel" name="label_fovis_license">
<property name="text">
<string>GPLv2</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>OpenCV version :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="1"> <item row="2" column="1">
<widget class="QLabel" name="label_pcl_version"> <widget class="QLabel" name="label_pcl_version">
<property name="text"> <property name="text">
@@ -198,7 +218,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="1"> <item row="11" column="1">
<widget class="QLabel" name="label_realsense2"> <widget class="QLabel" name="label_realsense2">
<property name="text"> <property name="text">
<string/> <string/>
@@ -211,7 +231,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="28" column="0"> <item row="29" column="0">
<widget class="QLabel" name="label_35"> <widget class="QLabel" name="label_35">
<property name="text"> <property name="text">
<string>With OKVIS :</string> <string>With OKVIS :</string>
@@ -221,7 +241,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="26" column="1"> <item row="27" column="1">
<widget class="QLabel" name="label_dvo"> <widget class="QLabel" name="label_dvo">
<property name="text"> <property name="text">
<string/> <string/>
@@ -234,7 +254,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="1"> <item row="8" column="1">
<widget class="QLabel" name="label_openni2"> <widget class="QLabel" name="label_openni2">
<property name="text"> <property name="text">
<string/> <string/>
@@ -257,7 +277,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="2"> <item row="11" column="2">
<widget class="QLabel" name="label_realsense2_license"> <widget class="QLabel" name="label_realsense2_license">
<property name="text"> <property name="text">
<string>Apache-2</string> <string>Apache-2</string>
@@ -267,7 +287,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="28" column="1"> <item row="29" column="1">
<widget class="QLabel" name="label_okvis"> <widget class="QLabel" name="label_okvis">
<property name="text"> <property name="text">
<string/> <string/>
@@ -280,7 +300,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="30" column="0"> <item row="31" column="0">
<widget class="QLabel" name="label_34"> <widget class="QLabel" name="label_34">
<property name="text"> <property name="text">
<string>With MSCKF :</string> <string>With MSCKF :</string>
@@ -290,7 +310,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="21" column="1"> <item row="22" column="1">
<widget class="QLabel" name="label_octomap"> <widget class="QLabel" name="label_octomap">
<property name="text"> <property name="text">
<string/> <string/>
@@ -303,7 +323,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="30" column="1"> <item row="31" column="1">
<widget class="QLabel" name="label_msckf"> <widget class="QLabel" name="label_msckf">
<property name="text"> <property name="text">
<string/> <string/>
@@ -326,7 +346,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="14" column="0"> <item row="15" column="0">
<widget class="QLabel" name="label_38"> <widget class="QLabel" name="label_38">
<property name="text"> <property name="text">
<string>With K4W2 :</string> <string>With K4W2 :</string>
@@ -336,7 +356,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="1"> <item row="14" column="1">
<widget class="QLabel" name="label_zed"> <widget class="QLabel" name="label_zed">
<property name="text"> <property name="text">
<string/> <string/>
@@ -349,7 +369,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="22" column="0"> <item row="23" column="0">
<widget class="QLabel" name="label_24"> <widget class="QLabel" name="label_24">
<property name="text"> <property name="text">
<string>With CPU-TSDF :</string> <string>With CPU-TSDF :</string>
@@ -359,7 +379,17 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="25" column="0"> <item row="12" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>With stereo dc1394 :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="26" column="0">
<widget class="QLabel" name="label_26"> <widget class="QLabel" name="label_26">
<property name="text"> <property name="text">
<string>With Viso2 :</string> <string>With Viso2 :</string>
@@ -369,7 +399,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="27" column="0"> <item row="28" column="0">
<widget class="QLabel" name="label_28"> <widget class="QLabel" name="label_28">
<property name="text"> <property name="text">
<string>With ORB SLAM 2 :</string> <string>With ORB SLAM 2 :</string>
@@ -389,7 +419,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="24" column="0"> <item row="25" column="0">
<widget class="QLabel" name="label_25"> <widget class="QLabel" name="label_25">
<property name="text"> <property name="text">
<string>With FOVIS :</string> <string>With FOVIS :</string>
@@ -399,7 +429,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="0"> <item row="14" column="0">
<widget class="QLabel" name="label_21"> <widget class="QLabel" name="label_21">
<property name="text"> <property name="text">
<string>With stereo Zed :</string> <string>With stereo Zed :</string>
@@ -409,7 +439,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="27" column="1"> <item row="28" column="1">
<widget class="QLabel" name="label_orbslam2"> <widget class="QLabel" name="label_orbslam2">
<property name="text"> <property name="text">
<string/> <string/>
@@ -422,7 +452,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="11" column="2"> <item row="12" column="2">
<widget class="QLabel" name="label_dc1394_license"> <widget class="QLabel" name="label_dc1394_license">
<property name="text"> <property name="text">
<string>LGPL</string> <string>LGPL</string>
@@ -432,27 +462,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="26" column="2">
<widget class="QLabel" name="label_7">
<property name="text">
<string>OpenCV version :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="24" column="2">
<widget class="QLabel" name="label_fovis_license">
<property name="text">
<string>GPLv2</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="25" column="2">
<widget class="QLabel" name="label_viso2_license"> <widget class="QLabel" name="label_viso2_license">
<property name="text"> <property name="text">
<string>GPLv3</string> <string>GPLv3</string>
@@ -462,7 +472,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="0"> <item row="13" column="0">
<widget class="QLabel" name="label_17"> <widget class="QLabel" name="label_17">
<property name="text"> <property name="text">
<string>With stereo FlyCapture2 :</string> <string>With stereo FlyCapture2 :</string>
@@ -472,7 +482,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="16" column="0"> <item row="17" column="0">
<widget class="QLabel" name="label_77"> <widget class="QLabel" name="label_77">
<property name="text"> <property name="text">
<string>With TORO :</string> <string>With TORO :</string>
@@ -482,7 +492,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="24" column="1"> <item row="25" column="1">
<widget class="QLabel" name="label_fovis"> <widget class="QLabel" name="label_fovis">
<property name="text"> <property name="text">
<string/> <string/>
@@ -495,7 +505,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="21" column="0"> <item row="22" column="0">
<widget class="QLabel" name="label_20"> <widget class="QLabel" name="label_20">
<property name="text"> <property name="text">
<string>With Octomap :</string> <string>With Octomap :</string>
@@ -505,7 +515,17 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="1"> <item row="22" column="2">
<widget class="QLabel" name="label_octomap_license">
<property name="text">
<string>BSD</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="13" column="1">
<widget class="QLabel" name="label_flycapture2"> <widget class="QLabel" name="label_flycapture2">
<property name="text"> <property name="text">
<string/> <string/>
@@ -518,7 +538,17 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="22" column="1"> <item row="9" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>With Freenect2 :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="23" column="1">
<widget class="QLabel" name="label_cputsdf"> <widget class="QLabel" name="label_cputsdf">
<property name="text"> <property name="text">
<string/> <string/>
@@ -531,26 +561,6 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="21" column="2">
<widget class="QLabel" name="label_octomap_license">
<property name="text">
<string>BSD</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>With Freenect2 :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_11"> <widget class="QLabel" name="label_11">
<property name="text"> <property name="text">
@@ -561,7 +571,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="2"> <item row="9" column="2">
<widget class="QLabel" name="label_freenect2_license"> <widget class="QLabel" name="label_freenect2_license">
<property name="text"> <property name="text">
<string>Apache v2 and/or GPLv2</string> <string>Apache v2 and/or GPLv2</string>
@@ -571,7 +581,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="0"> <item row="10" column="0">
<widget class="QLabel" name="label_22"> <widget class="QLabel" name="label_22">
<property name="text"> <property name="text">
<string>With RealSense :</string> <string>With RealSense :</string>
@@ -581,7 +591,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="19" column="0"> <item row="20" column="0">
<widget class="QLabel" name="label_18"> <widget class="QLabel" name="label_18">
<property name="text"> <property name="text">
<string>With cvsba :</string> <string>With cvsba :</string>
@@ -591,7 +601,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="19" column="1"> <item row="20" column="1">
<widget class="QLabel" name="label_cvsba"> <widget class="QLabel" name="label_cvsba">
<property name="text"> <property name="text">
<string/> <string/>
@@ -604,7 +614,17 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="18" column="1"> <item row="18" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>With g2o :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="19" column="1">
<widget class="QLabel" name="label_gtsam"> <widget class="QLabel" name="label_gtsam">
<property name="text"> <property name="text">
<string/> <string/>
@@ -630,17 +650,17 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="17" column="0"> <item row="7" column="2">
<widget class="QLabel" name="label_14"> <widget class="QLabel" name="label_freenect_license">
<property name="text"> <property name="text">
<string>With g2o :</string> <string>Apache v2 and/or GPLv2</string>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="11" column="1"> <item row="12" column="1">
<widget class="QLabel" name="label_dc1394"> <widget class="QLabel" name="label_dc1394">
<property name="text"> <property name="text">
<string/> <string/>
@@ -653,27 +673,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="2"> <item row="19" column="0">
<widget class="QLabel" name="label_freenect_license">
<property name="text">
<string>Apache v2 and/or GPLv2</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="7" column="2">
<widget class="QLabel" name="label_openni2_license">
<property name="text">
<string>Apache v2</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="18" column="0">
<widget class="QLabel" name="label_19"> <widget class="QLabel" name="label_19">
<property name="text"> <property name="text">
<string>With GTSAM :</string> <string>With GTSAM :</string>
@@ -683,7 +683,27 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="1"> <item row="8" column="2">
<widget class="QLabel" name="label_openni2_license">
<property name="text">
<string>Apache v2</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_opencv_license">
<property name="text">
<string>BSD</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLabel" name="label_freenect"> <widget class="QLabel" name="label_freenect">
<property name="text"> <property name="text">
<string/> <string/>
@@ -706,27 +726,17 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2"> <item row="7" column="0">
<widget class="QLabel" name="label_opencv_license"> <widget class="QLabel" name="label_12">
<property name="text"> <property name="text">
<string>BSD</string> <string>With Freenect :</string>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="11" column="0"> <item row="18" column="1">
<widget class="QLabel" name="label_16">
<property name="text">
<string>With stereo dc1394 :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="17" column="1">
<widget class="QLabel" name="label_g2o"> <widget class="QLabel" name="label_g2o">
<property name="text"> <property name="text">
<string/> <string/>
@@ -739,16 +749,6 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>With Freenect :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="1"> <item row="3" column="1">
<widget class="QLabel" name="label_vtk_version"> <widget class="QLabel" name="label_vtk_version">
<property name="text"> <property name="text">
@@ -762,7 +762,17 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="1"> <item row="21" column="0">
<widget class="QLabel" name="label_29">
<property name="text">
<string>With libpointmatcher :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLabel" name="label_freenect2"> <widget class="QLabel" name="label_freenect2">
<property name="text"> <property name="text">
<string/> <string/>
@@ -775,7 +785,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="1"> <item row="10" column="1">
<widget class="QLabel" name="label_realsense"> <widget class="QLabel" name="label_realsense">
<property name="text"> <property name="text">
<string/> <string/>
@@ -788,20 +798,30 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="20" column="0"> <item row="11" column="0">
<widget class="QLabel" name="label_29"> <widget class="QLabel" name="label_33">
<property name="text"> <property name="text">
<string>With libpointmatcher :</string> <string>With RealSense2 :</string>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="0"> <item row="31" column="2">
<widget class="QLabel" name="label_33"> <widget class="QLabel" name="label_msckf_license">
<property name="text"> <property name="text">
<string>With RealSense2 :</string> <string>Penn Software License</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="27" column="2">
<widget class="QLabel" name="label_dvo_license">
<property name="text">
<string>GPLv3</string>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
@@ -821,40 +841,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="30" column="2"> <item row="30" column="0">
<widget class="QLabel" name="label_msckf_license">
<property name="text">
<string>Penn Software License</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="26" column="2">
<widget class="QLabel" name="label_dvo_license">
<property name="text">
<string>GPLv3</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="23" column="1">
<widget class="QLabel" name="label_openchisel">
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="29" column="0">
<widget class="QLabel" name="label_36"> <widget class="QLabel" name="label_36">
<property name="text"> <property name="text">
<string>With loam_velodyne :</string> <string>With loam_velodyne :</string>
@@ -874,17 +861,20 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="18" column="2"> <item row="24" column="1">
<widget class="QLabel" name="label_gtsam_license"> <widget class="QLabel" name="label_openchisel">
<property name="text"> <property name="text">
<string>BSD</string> <string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="20" column="1"> <item row="21" column="1">
<widget class="QLabel" name="label_libpointmatcher"> <widget class="QLabel" name="label_libpointmatcher">
<property name="text"> <property name="text">
<string/> <string/>
@@ -897,7 +887,17 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="29" column="1"> <item row="19" column="2">
<widget class="QLabel" name="label_gtsam_license">
<property name="text">
<string>BSD</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="30" column="1">
<widget class="QLabel" name="label_loam"> <widget class="QLabel" name="label_loam">
<property name="text"> <property name="text">
<string/> <string/>
@@ -910,7 +910,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0"> <item row="8" column="0">
<widget class="QLabel" name="label_13"> <widget class="QLabel" name="label_13">
<property name="text"> <property name="text">
<string>With OpenNI2 :</string> <string>With OpenNI2 :</string>
@@ -920,6 +920,29 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="27" column="0">
<widget class="QLabel" name="label_27">
<property name="text">
<string>With DVO :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="26" column="1">
<widget class="QLabel" name="label_viso2">
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_32"> <widget class="QLabel" name="label_32">
<property name="text"> <property name="text">
@@ -933,30 +956,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="26" column="0"> <item row="28" column="2">
<widget class="QLabel" name="label_27">
<property name="text">
<string>With DVO :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="25" column="1">
<widget class="QLabel" name="label_viso2">
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="27" column="2">
<widget class="QLabel" name="label_orbslam2_license"> <widget class="QLabel" name="label_orbslam2_license">
<property name="text"> <property name="text">
<string>GPLv3</string> <string>GPLv3</string>
@@ -966,7 +966,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="23" column="0"> <item row="24" column="0">
<widget class="QLabel" name="label_30"> <widget class="QLabel" name="label_30">
<property name="text"> <property name="text">
<string>With OpenChisel :</string> <string>With OpenChisel :</string>
@@ -976,7 +976,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="16" column="1"> <item row="17" column="1">
<widget class="QLabel" name="label_toro"> <widget class="QLabel" name="label_toro">
<property name="text"> <property name="text">
<string/> <string/>
@@ -989,7 +989,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="17" column="2"> <item row="18" column="2">
<widget class="QLabel" name="label_g2o_license"> <widget class="QLabel" name="label_g2o_license">
<property name="text"> <property name="text">
<string>BSD</string> <string>BSD</string>
@@ -999,7 +999,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="28" column="2"> <item row="29" column="2">
<widget class="QLabel" name="label_okvis_license"> <widget class="QLabel" name="label_okvis_license">
<property name="text"> <property name="text">
<string>BSD</string> <string>BSD</string>
@@ -1009,7 +1009,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="29" column="2"> <item row="30" column="2">
<widget class="QLabel" name="label_loam_license"> <widget class="QLabel" name="label_loam_license">
<property name="text"> <property name="text">
<string>BSD</string> <string>BSD</string>
@@ -1039,7 +1039,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="20" column="2"> <item row="21" column="2">
<widget class="QLabel" name="label_libpointmatcher_license"> <widget class="QLabel" name="label_libpointmatcher_license">
<property name="text"> <property name="text">
<string>BSD</string> <string>BSD</string>
@@ -1049,7 +1049,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="22" column="2"> <item row="23" column="2">
<widget class="QLabel" name="label_cputsdf_license"> <widget class="QLabel" name="label_cputsdf_license">
<property name="text"> <property name="text">
<string>BSD</string> <string>BSD</string>
@@ -1069,7 +1069,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="19" column="2"> <item row="20" column="2">
<widget class="QLabel" name="label_cvsba_license"> <widget class="QLabel" name="label_cvsba_license">
<property name="text"> <property name="text">
<string>GPLv2</string> <string>GPLv2</string>
@@ -1079,7 +1079,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="16" column="2"> <item row="17" column="2">
<widget class="QLabel" name="label_toro_license"> <widget class="QLabel" name="label_toro_license">
<property name="text"> <property name="text">
<string>Creative Commons [Attribution-NonCommercial-ShareAlike]</string> <string>Creative Commons [Attribution-NonCommercial-ShareAlike]</string>
@@ -1089,7 +1089,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="2"> <item row="10" column="2">
<widget class="QLabel" name="label_realsense_license"> <widget class="QLabel" name="label_realsense_license">
<property name="text"> <property name="text">
<string>Apache-2</string> <string>Apache-2</string>
@@ -1112,7 +1112,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="15" column="0"> <item row="16" column="0">
<widget class="QLabel" name="label_68"> <widget class="QLabel" name="label_68">
<property name="text"> <property name="text">
<string>With K4A :</string> <string>With K4A :</string>
@@ -1122,7 +1122,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="14" column="1"> <item row="15" column="1">
<widget class="QLabel" name="label_k4w2"> <widget class="QLabel" name="label_k4w2">
<property name="text"> <property name="text">
<string/> <string/>
@@ -1135,7 +1135,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="15" column="1"> <item row="16" column="1">
<widget class="QLabel" name="label_k4a"> <widget class="QLabel" name="label_k4a">
<property name="text"> <property name="text">
<string/> <string/>
@@ -1148,7 +1148,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="15" column="2"> <item row="16" column="2">
<widget class="QLabel" name="label_g2o_license_3"> <widget class="QLabel" name="label_g2o_license_3">
<property name="text"> <property name="text">
<string>MIT</string> <string>MIT</string>
@@ -1158,6 +1158,39 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0">
<widget class="QLabel" name="label_39">
<property name="text">
<string>With FastCV :</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="label_fastcv">
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QLabel" name="label_fastcv_license">
<property name="text">
<string>Apache v2</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
</layout> </layout>
+29 -3
View File
@@ -64,8 +64,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>680</width> <width>681</width>
<height>3082</height> <height>3071</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_16"> <layout class="QVBoxLayout" name="verticalLayout_16">
@@ -95,7 +95,7 @@
<enum>QFrame::Raised</enum> <enum>QFrame::Raised</enum>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>22</number> <number>29</number>
</property> </property>
<widget class="QWidget" name="page_22"> <widget class="QWidget" name="page_22">
<layout class="QVBoxLayout" name="verticalLayout_29" stretch="0,1"> <layout class="QVBoxLayout" name="verticalLayout_29" stretch="0,1">
@@ -19857,6 +19857,32 @@ Lower the ratio -&gt; higher the precision.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1">
<widget class="QLabel" name="label_561">
<property name="text">
<string>Enable FastCV implementation if non-zero. Values should be 9 and 10 to choose which FastCV approach is used..</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QSpinBox" name="fastCV">
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>10</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
<item> <item>