代码:https://github.com/gaoxiang12/rgbd-slam-tutorial-gx
教程:https://www.cnblogs.com/gaoxiang12/p/4633316.html
一起做RGB-SLAM(1)(2)
无问题
一起做RGB-SLAM(3)特征提取与配准
首先感谢这篇博客
- 增加可执行二进制及其依赖
在CmakeLists文件里面添加:
ADD_EXECUTABLE( detectFeatures detectFeatures.cpp )
TARGET_LINK_LIBRARIES( detectFeatures
slambase
${OpenCV_LIBS}
${PCL_LIBRARIES} )
- 特征提取
detectFeatures.cpp:37:16: error: ‘create’ is not a member of ‘cv::FeatureDetector {aka cv::Feature2D}’
detector = cv::FeatureDetector::create("ORB");
出现这个问题的主要原因是opencv版本不同,针对3.0以后的版本,特征提取器的声明方式有变化:
将
detector = cv::FeatureDetector::create("ORB"); descriptor = cv::DescriptorExtractor::create("ORB");
改为
detector = cv::ORB::create(); descriptor = cv::ORB::create();
- solvePnPRansac函数修改(感谢)
OpenCV Error: Assertion failed (confidence > 0 && confidence < 1) in run, file /home/limz/Cmake_module/opencv-3.4.1/modules/calib3d/src/ptsetreg.cpp, line 178
terminate called after throwing an instance of 'cv::Exception'
what(): /home/limz/Cmake_module/opencv-3.4.1/modules/calib3d/src/ptsetreg.cpp:178: error: (-215) confidence > 0 && confidence < 1 in function run
cv::solvePnPRansac( pts_obj, pts_img, cameraMatrix, cv::Mat(), rvec, tvec, false, 100, 1.0, 100, inliers );
在opencv3.4.1下需要改为:
cv::solvePnPRansac( pts_obj, pts_img, cameraMatrix, cv::Mat(), rvec, tvec, false, 100, 1.0, 0.99, inliers );
才能正常运行。
原因:opencvcv3.4.1中cv::solvePnPRansac限定参数confidence大小在(0,1).
一起做RGB-SLAM(4)点云拼接
- slamBase.cpp
这里和第三讲的第二个问题解决一样,将 cv::FeatureDetector和cv::DescriptorExtractor改成cv::ORB
和第三讲第三个问题一样,修改cv::solvePnPRansac函数 - error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
感谢该博客
在CMakeLists.txt中添加:
SET(CMAKE_CXX_FLAGS " -fpermissive ${SSE_FLAGS_STR}")
- 这一讲高博士的github代码中CMakeLists.txt进行了修改,做的时候容易忽视
#增加PCL库的依赖 FIND_PACKAGE( PCL REQUIRED COMPONENTS common io )
改为
#增加PCL库的依赖 FIND_PACKAGE( PCL REQUIRED COMPONENTS common io visualization)