先啰嗦一下,网上很多方法都是自己试了之后才知道网上说的方法都是参考或者叫药引子,只是起到启发作用,最后解决问题还是要靠自己。
解决过的问题,还是要积累一下,不然总感觉在重复做轮子,这辈子不是做轮子就是在赶去做轮子的路上。
一、
回归主题,在编译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即可!!!
最后上一张成功的截图,祝大家都最快时间完成这个工作,好好地舔代码。