高翔一起做RGB-D问题汇总

1.安装pcl库:

2021/7/27 Ubuntu18.04 安装 PCL记录_仝嶋的博客-CSDN博客

采用了方法二,但导致ros被大量卸载。

2.编译出错。

/home/slam/src/slambase.cpp:45:17: error: ‘FeatureDetector’ is not a member of ‘cv’ cv::Ptrcv::FeatureDetector _detector;

问题原因:缺少相应头文件,导致找不到函数。

解决方法:在/include/slamBase.h中添加引用头文件。

#include <opencv2/calib3d/calib3d.hpp>

3.可编译,运行可执行文件时出错。

terminate called after throwing an instance of 'pcl::IOException'
  what():  : [pcl::PCDWriter::writeASCII] Could not open file for writing!
已放弃 (核心已转储)

问题原因:找不到代码中文件路径。

解决方法:代码中所有涉及到路径问题,要么全写成绝对路径,要么全写成相对路径,不可混用,同时路径中不可出现中文。

4.可编译,运行可执行文件时出错。

terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(3.4.15) /home/sdhehv/opencv-3.4.15/modules/calib3d/src/ptsetreg.cpp:172: error: (-215:Assertion failed) confidence > 0 && confidence < 1 in function 'run'

已放弃 (核心已转储)

问题原因:因为opencv版本问题,3.0以上使用solvepnpransac函数时要修改置信度。

解决方法:将

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 );

5.可编译,运行可执行文件时出错。

extracting features
solving pnp
find total 0 matches.
good matches: 0
solving pnp
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(3.4.15) /home/sdhehv/opencv-3.4.15/modules/calib3d/src/solvepnp.cpp:218: error: (-215:Assertion failed) npoints >= 4 && npoints == std::max(ipoints.checkVector(2, CV_32F), ipoints.checkVector(2, CV_64F)) in function 'solvePnPRansac'

已放弃 (核心已转储)

问题原因:原路径格式下,找不到图片文件,导致无匹配项且报错。

解决方法:采用相对路径,如笔者图片文件放于slam/data,可执行文件位于slam/bin,故导入文件时采用:

frame1.rgb = cv::imread( "../data/rgb1.png" );

6.接下来是PART(5)部分,make出现的一连串问题。

/home/sdhehv/slam/src/slamBase.cpp: In function ‘Eigen::Isometry3d cvMat2Eigen(cv::Mat&, cv::Mat&)’:
/home/sdhehv/slam/src/slamBase.cpp:157:9: error: ‘cv2eigen’ is not a member of ‘cv’
     cv::cv2eigen(R, r);
         ^~~~~~~~
/home/sdhehv/slam/src/slamBase.cpp:157:9: note: suggested alternative: ‘eigen’
     cv::cv2eigen(R, r);

问题原因:没有正确引用eigen头文件。

解决方法:将头文件

#include <opencv2/core/eigen.hpp>加到src/slamBase.h里的#include <Eigen/Core>后面才行,因为eigen.hpp是基于Eigen/Core的,若顺序颠倒则会出现Eigen类未声明。

7.

/home/sdhehv/slam/src/slamBase.cpp:181:10: error: ‘transformPointCloud’ is not a member of ‘pcl’
     pcl::transformPointCloud( *original, *output, T.matrix() );

问题原因:... is not a member of ...,多为缺少头文件。

解决方法:添加相应头文件,在src/slamBase.h内添加

#include <pcl/common/transforms.h>

8.

/home/sdhehv/slam/src/slamBase.cpp:185:17: error: ‘VoxelGrid’ in namespace ‘pcl’ does not name a template type
     static pcl::VoxelGrid<PointT> voxel;
                 ^~~~~~~~~
/home/sdhehv/slam/src/slamBase.cpp:188:5: error: ‘voxel’ was not declared in this scope
     voxel.setLeafSize( gridsize, gridsize, gridsize );
     ^~~~~
src/CMakeFiles/slambase.dir/build.make:62: recipe for target 'src/CMakeFiles/slambase.dir/slamBase.cpp.o' failed

问题原因:依旧缺少头文件。

解决方法:添加头文件

#include <pcl/filters/voxel_grid.h>

9.

/home/sdhehv/slam/src/visualOdometry.cpp:33:42: error: ‘getDefaultCamera’ was not declared in this scopeCAMERA_INTRINSIC_PARAMETERS camera = getDefaultCamera();

问题原因:忘了写读取相机内参的内联函数,在src/slamBase.h里加上即可。

解决方法:

inline static CAMERA_INTRINSIC_PARAMETERS getDefaultCamera()
{
    ParameterReader pd;
    CAMERA_INTRINSIC_PARAMETERS camera;
    camera.fx = atof( pd.getData( "camera.fx" ).c_str());
    camera.fy = atof( pd.getData( "camera.fy" ).c_str());
    camera.cx = atof( pd.getData( "camera.cx" ).c_str());
    camera.cy = atof( pd.getData( "camera.cy" ).c_str());
    camera.scale = atof( pd.getData( "camera.scale" ).c_str() );
    return camera;
}

10.

/home/sdhehv/slam/src/visualOdometry.cpp:37:10: error: ‘pcl::visualization’ has not been declaredpcl::visualization::CloudViewer viewer(“viewer”);

问题原因:缺少头文件。

解决方法:

#include <pcl/visualization/cloud_viewer.h>

11.

error: #error PCL requires C++14 or above

问题原因:第六节出现pcl库问题。

解决方法:在/src/CMakeLists.txt中添加

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

12.

同在第六节,编译出现大量错误,各种未声明、未包含于库等各类错误,网上查了一整天仍未解决,因复现高翔博士的RGB-D不可避免的出现一些版本问题,笔者优先考虑g2o的版本问题,先后下载了不同链接下的四种版本,直到下载了作者g站的文件,仍解决不了。无奈浏览时,发现如下一条错误:

error : expected unqualified-id before return

多为括号的问题,非常低端,复查代码,发现{}出现问题。

解决方法:痛骂自己,并修改大括号。自此,成功编译。

13.

error: no matching function for call to ‘g2o::BlockSolver<g2o::BlockSolverTraits<6, 3> >::BlockSolver(SlamLinearSolver*&)’
     SlamBlockSolver* blockSolver = new SlamBlockSolver( linearSolver );

解决方法:将slamEnd.cpp中

    // 初始化求解
    SlamLinearSolver* linearSolver = new SlamLinearSolver();
    linearSolver->setBlockOrdering( false );
    SlamBlockSolver* blockSolver = new SlamBlockSolver( linearSolver );
    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( blockSolver );

改为:

      unique_ptr<SlamBlockSolver::LinearSolverType> linearSolver (new SlamLinearSolver());
      unique_ptr<SlamBlockSolver> blockSolver (new SlamBlockSolver(move(linearSolver)));
      g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(move(blockSolver));

14.值得一提的是,直到最后也没有完全跑出高翔博士的程序,最终在216帧出现问题,无法解决。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值