ORB-SLAM3 Ubuntu ros melodic 编译的坑

先啰嗦一下,网上很多方法都是自己试了之后才知道网上说的方法都是参考或者叫药引子,只是起到启发作用,最后解决问题还是要靠自己。
解决过的问题,还是要积累一下,不然总感觉在重复做轮子,这辈子不是做轮子就是在赶去做轮子的路上。

一、
回归主题,在编译orb-slam过程出现这个问题,

Error: package 'ORB_SLAM' depends on non-existent package 'opencv2' and rosdep claims that it is not

怎么说?
原因,其实很明确,

opencv 库冲突了

怎么解决?
有说:

sudo apt-get install ros-kinetic-cv-bridge

搞定的

有说重新安装opencv
我试过都不行,我的方法是:

1.打开ORB-SLAM文件夹中的manifest.xml文件
gedit manifest.xml
2.注释掉depend package="opencv2"
  <!--depend package="opencv2"/-->

提醒一个细节,重要的事情说3遍:

删除原来ORB-SLAM路径下的build文件夹下的东西然后重新cmake!!!
删除原来ORB-SLAM路径下的build文件夹下的东西然后重新cmake!!!
删除原来ORB-SLAM路径下的build文件夹下的东西然后重新cmake!!!

二、
出现问题

error: static assertion failed: YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY

原因是Eigen3中修改了一些东西没有同步
解决方法:

打开Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h
将56行的

typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::Index> PermutationMatrix;

改成

typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, int> PermutationMatrix;

再提醒一个细节,重要的事情说3遍:

删除原来g2o路径下的build文件夹下的东西然后重新cmake!!!
删除原来g2o路径下的build文件夹下的东西然后重新cmake!!!
删除原来g2o路径下的build文件夹下的东西然后重新cmake!!!

三、
问题:

ORB_SLAM error: ‘FAST’ was not declared in this scope

原因出在opencv库文件链接上
解决方法:

#include <opencv2/opencv.hpp>

添加到ORB_SLAM/src/ORBextractor.cc文件的头部
提醒一个细节,重要的事情说3遍:

删除原来ORB-SLAM路径下的build文件夹下的东西然后重新cmake!!!
删除原来ORB-SLAM路径下的build文件夹下的东西然后重新cmake!!!
删除原来ORB-SLAM路径下的build文件夹下的东西然后重新cmake!!!

四、
问题:

/usr/bin/ld: CMakeFiles/ORB_SLAM.dir/src/main.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/ORB_SLAM.dir/build.make:1587: recipe for target '../bin/ORB_SLAM' failed
make[2]: *** [../bin/ORB_SLAM] Error 1
CMakeFiles/Makefile2:419: recipe for target 'CMakeFiles/ORB_SLAM.dir/all' failed
make[1]: *** [CMakeFiles/ORB_SLAM.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

原因找不到系统ibboost_system.so 与libboost_filesystem.so链接目录
解决方法:
找到ORB-SLAM路径下的CMakeList.txt,添加-lboost_system项。

把原来的target_link_libraries

target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
${EIGEN3_LIBS}
${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so
)

改成:

target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
${EIGEN3_LIBS}
${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so
-lboost_system
)

提醒一个细节,重要的事情说3遍:

这里只修改了CMakeList.txt,所以重新make即可!!!
这里只修改了CMakeList.txt,所以重新make即可!!!
这里只修改了CMakeList.txt,所以重新make即可!!!

最后上一张成功的截图,祝大家都最快时间完成这个工作,好好地舔代码。
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚餐男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值