高翔一起做RGB"/>
高翔一起做RGB
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 typestatic pcl::VoxelGrid<PointT> voxel;^~~~~~~~~
/home/sdhehv/slam/src/slamBase.cpp:188:5: error: ‘voxel’ was not declared in this scopevoxel.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帧出现问题,无法解决。
更多推荐
高翔一起做RGB
发布评论