ORB-SLAM3 v1.0 编译问题解决(搬运自github issue)

以下解决方案搬运自oscar1780,github issue #442

系统环境 ubuntu 18.04 , melodic, opencv4.0(本地编译 仅make 未make install,考虑兼容性问题未安装)
解决办法:
1、编译ros版本,需要将Examples_old文件夹下ROS文件夹复制到Examples文件夹下。将CMakeLists中用到OpenCV4的地方,连接到你的库位置。
2、将路径添加至~/.bashrc,这部分参考官方文档,运行./build.sh ./build_ros.sh
3、提示找不到sophus库,修改CMAKELISTS, include_directories中添加 ${PROJECT_SOURCE_DIR}/…/…/…/Thirdparty/Sophus
4、Sophus::SE3f, cv::MAT,Eigen::Vector3f类型转换报错,应该是不能直接转换,不过可以换个办法,
【2022.01.11】补充:以下解决方法会引入cv中的eigen2cv方法,需要在每个修改文件的顶部包含以下文件头文件: 参考这里

#include 
#include 
  • 解决 cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec()); 报错
    引入上述两个头文件,然后删除ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc151行,由下面内容替换
cv::Mat Tcw;
Sophus::SE3f Tcw_SE3f = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
Eigen::Matrix4f Tcw_Matrix = Tcw_SE3f.matrix();
cv::eigen2cv(Tcw_Matrix, Tcw);
  • 解决 vPoints.push_back(pMP->GetWorldPos()); 报错
    引入上述两个头文件,然后删除ROS/ORB_SLAM3/src/AR/ViewerAR.cc409行,由以下内容替换
cv::Mat WorldPos;
cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
vPoints.push_back(WorldPos);
  • 解决 cv::Mat Xw = pMP->GetWorldPos();报错
    引入上述两个头文件,然后删除ROS/ORB_SLAM3/src/AR/ViewerAR.cc530行,由以下内容替换
cv::Mat Xw;
cv::eigen2cv(pMP->GetWorldPos(), Xw);

再编译,没有其他问题的话正常编译通过。
5、回到 workspace目录下面 ,source下环境,rosrun ORB_SLAM3 Stereo_Inertial ./src/ORB_SLAM3/Vocabulary/ORBvoc.txt ./src/ORB_SLAM3/Examples_old/Stereo-Inertial/EuRoC.yaml true,就可以正常运行,新版本的yaml文件不知道为啥运行会报错,暂时未研究。

2022.01.11补充

编译好ORB-SLAM3(v1.0)之后一运行就直接报段错误(核心已存储),最后搞明白是Pangolin的版本太低,应该用0.6的版本,我之前用的0.5,困扰了我两天,在这里补充下。
ORB-SLAM3 v1.0 编译问题解决(搬运自github issue)_第1张图片

你可能感兴趣的:(SLAM&VIO,github,c++,自动驾驶)