一起做RGB-D SLAM(3)BUG笔记

跟做高博的《一起做RGB-D SLAM》系列时,出现了挺多bug的(主要因为自己还是个小白),在此记录下解决过程。(ubuntu18.04,opencv3.4.9)

一起做RGB-D SLAM(3):

1./home/max/slam0.1/src/detectFeatures.cpp:9:5: error: stray ‘#’ in program

出现这个错误,真的要反思下自己太粗心了,低级到不能再低级的错误。这里把高博src/detectFeatures.cpp的代码直接复制粘贴过来,需要把代码前面的序号都删掉(其他代码片段都没问题,是可以直接复制粘贴的)。
在这里插入图片描述
删除前面序号有个简便方法,用sublime txt编辑器(很好用,实力推荐,下载好后用命令subl “文件名”,打开文件进行操作),先安装emmet插件(不会的同学百度下),再选中要编辑的代码行(我们全选就行),按下 Ctrl+Shift+L或者Command+Shift+L ,最后键盘方向键把光标移到序号后面再删除即可。
在这里插入图片描述

2./home/max/slam0.1/src/detectFeatures.cpp:15:11: fatal error: opencv2/nonfree/nonfree.hpp: 没有那个文件或目录

出现这个错误是因为nonfree模块在opencv3.0以上的release版本中被移除了,其中我们主要用到的SIFT算法现在被放到了xfeacture模块里,此时有两条路可以走:

  1. 安装contrib模块(扩展模块)——不稳定,不建议安装:
    这个可以参照Ubuntu18.04安装OpenCV4.0.0和OpenCV-contrib模块

  2. 换用其他特征提取匹配算法(ORB算法):
    可以先看看几种算法的差别:特征检测和特征匹配方法opencv 特征点提取算法 SIFT SURF ORB FAST LBP学习(一),SURF和SIFT算法一样都在扩展模块里,用不了,综合比较下还是选用ORB好一点。

首先把src/detectFeatures.cpp里的nonfree引用和初始化部分(下图第一、第二白框处的内容)删去,然后将算法改为ORB即下图第三白框处的内容改为:

_detector = cv::ORB::create();
_descriptor = cv::ORB::create();

需要注意的是,这是opencv3.0以上版本的写法,如果是2.**版本的话则改为:

_detector = cv::FeatureDetector::create("ORB");
_descriptor = cv::DescriptorExtractor::create("ORB");

在这里插入图片描述

ORB特征描述子是uchar类型,只能使用BruteForce匹配法。因此我们还要将FLANN匹配法改为BF(暴力)法,即将下图白框处改为:

cv::BFMatcher matcher;

在这里插入图片描述

3.CMakeFiles/detectFeatures.dir/detectFeatures.cpp.o:在函数‘main’中:detectFeatures.cpp:(.text+0x1090):对‘point2dTo3d(cv::Point3_&, CAMERA_INTRINSIC_PARAMETERS&)’未定义的引用collect2: error: ld returned 1 exit status

这里出错是因为没有链接slambase的静态库文件,在src/CMakeLists.txt里加上libslambase.a或slambase即可(如下图)。
在这里插入图片描述

在这里插入图片描述

如果出现:
/usr/bin/ld: 找不到 -lslambase,
先看看主目录下的CMakeLists.txt里,库文件的输出目录是否正确(如下图)。
在这里插入图片描述

如果正确,则先把src/CMakeLists.txt里的detectFeatures部分注释掉(如下图)。
在这里插入图片描述

然后再编译一遍,看看主目录的lib文件夹里是否有libslambase.a文件,如果有的话再把刚才的注释部分恢复,重新编译下即可。

4.terminate called after throwing an instance of 'cv::Exception’what(): OpenCV(3.4.9) /home/max/SLAM-env/opencv-3.4.9/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cvtColor’ 已放弃 (核心已转储)

在主目录里执行bin/detectFeatures即可

5.terminate called after throwing an instance of 'cv::Exception’what(): OpenCV(3.4.9) /home/max/SLAM-env/opencv-3.4.9/modules/calib3d/src/ptsetreg.cpp:172: error: (-215:Assertion failed) confidence > 0 && confidence < 1 in function ‘run’ 已放弃 (核心已转储)

这个错误是因为opencv3.0以上版本里的solvePnPRansac()函数参数有更改,把置信度改为0.99即可,详情可以参考官方文档:Camera Calibration and 3D Reconstruction

把src/detectFeatures.cpp里的:

cv::solvePnPRansac( pts_obj, pts_img, cameraMatrix, cv::Mat(), rvec, tvec, false, 100, 1.0, 100, inliers );

改为:

cv::solvePnPRansac(pts_obj, pts_img, cameraMatrix, cv::Mat(), rvec,  tvec, false, 100, 1.0, 0.99, inliers);

重新编译下,运行成功,奶斯!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
RGB-D SLAM是一种同时定位与地图构建(Simultaneous Localization and Mapping)的技术,它利用RGB-D图像来实现对环境的感知和建模。RGB-D图像由RGB图像和深度图像组成,其中RGB图像提供了颜色信息,深度图像则提供了物体距离传感器的实际距离信息。通过将RGB图像和深度图像进行配准,可以实现像素级别的对应关系。RGB-D SLAM可以通过对连续的RGB-D图像进行处理,实时地估计相机的运动轨迹,并同时构建环境的三维地图。 在RGB-D SLAM中,有多种算法和系统可供选择。例如,RGBDSLAM2是一个非常全面优秀的系统,它将SLAM领域的图像特征、优化、闭环检测、点云等技术融为一体,适合初学者使用并可以进行二次开发。然而,RGBDSLAM2的实时性较差,相机必须以较慢的速度运动,并且使用点云来表示三维地图会消耗较多的内存。此外,还有其他的RGB-D SLAM算法和系统可供选择,具体选择哪种算法和系统取决于具体的应用需求和硬件条件。 引用\[1\]中提到了RGB-D图像的组成和配准过程,引用\[2\]中提到了RGB双目相机的特点和限制,引用\[3\]中提到了RGBDSLAM2系统的特点和缺点。这些引用内容提供了关于RGB-D SLAM的基本概念和相关技术的信息。 #### 引用[.reference_title] - *1* [SLAM(二)——RGB-D的含义](https://blog.csdn.net/u013401766/article/details/78671939)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [RGBD-SLAM总结](https://blog.csdn.net/YOULANSHENGMENG/article/details/124141028)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [RGB-D SLAM 相关总结](https://blog.csdn.net/qq_38167930/article/details/118879187)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值