Kinect跑自己的ORB-SLAM2遇到的坑

首先,怎么下载和安装ORB-SLAM2就不说了,网上一大堆教程,这里贴两个:

https://www.ncnynl.com/archives/201807/2501.html

https://github.com/raulmur/ORB_SLAM2

需要注意的是,Kinect自己带了一个opencv3.3.1,我以前安了一个3.4.0,后来又安了一个2.4.16.6,这样opencv就比较乱,在执行./build.sh的时候就会报错,大概是这种类型的错误

于是我就把opencv2.4.16.6给卸载了,没想到它把3.4.0也卸了一部分相同的部分,导致的结果是3.4.0的测试程序能跑,但是系统检测不到安装了opencv,输入

pkg-config --modversion opencv

会显示没有安装opencv,于是我就是所有opencv相关的都卸了想重新安装,重装的过程中,cmake的时候竟然出错了,查了半天看大体的意思是以前装过,哪里有了错误怎样怎样,反正解决办法是https://blog.csdn.net/midi666/article/details/95522211

到现在就安装好了opencv,

./build.sh 在这里可能报错,应该sudo一下可以通过了,跑了下数据集也没问题。

然后就想跑下自己的turtlebot,然而在./build_ros.sh时,又出现了最开始那个错误,我很一脸懵逼,又查,结果是因为这次编译的时候用的是ROS,所以编译的时候就指到了Kinect自带的opencv3.3.1,就会报那个错误。经过我的不懈努力,最终很遗憾,也没找到方法。。。下面把试过的方法总结一下吧。。

一、在/opt/ros/kinetic/share/OpenCV-3.1.0-dev/OpenCVConfig.cmake里面的第144行和116行

# Extract the directory where *this* file has been installed (determined at cmake run-time)
if(CMAKE_VERSION VERSION_LESS "2.8.12")
  get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH CACHE)
else()
  get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY CACHE)
endif()

说是把CACHE去掉就行,上面这个程序是网上的,我把我的打开一看,是下面这样的:

if(CMAKE_VERSION VERSION_LESS "2.8.3")
  get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
endif()

# Extract the directory where *this* file has been installed (determined at cmake run-time)
# Get the absolute path with no ../.. relative marks, to eliminate implicit linker warnings
set(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_DIR}")
get_filename_component(OpenCV_INSTALL_PATH "${OpenCV_CONFIG_PATH}/../../" REALPATH)

首先人家就没有CACHE,而且人家直接set(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_DIR}"),我就把set这一句注释掉了,再把上面的那一段复制过来。结果。。没啥用。

二、在ORB-SLAM2的CMakelist里

find_package(OpenCV 3.3.1 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 3.3.1 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
   endif()
endif()

就把3.3.1和2.4.16.6换来换去,如果先是2.4.16.6的话,./build.sh倒是能编译过去,./build_ros.sh还是不行。

又说在target-link-library()里面加入:

/usr/lib/x86_64-linux-gnu/libboost_system.so
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so12

还是没啥用。

三、把./build_ros.sh里面的make -j的-j去掉,说是避免多线程运行的错误,我感觉没啥用,事实证明,确实没啥用。。

四、在ORB-SLAM2/Examples/ROS/ORB-SLAM2/Cmakelists中,加入下面的部分:

set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system
)

也没啥用。

五、在ORB-SLAM2的src的ORBextractor.cc中加入:

#include <opencv2/features2d/features2d.hpp>
#include <opencv2/imgproc/imgproc.hpp>12

没啥用。

总结:没找到合适的办法,猜测可能有用的方法是:

1.把Kinect自带的opencv卸了。。感觉风险有点大,不想这么做。

2.把自己安装的opencv卸了,用Kinect自带的。但是感觉也够呛。

补充:试过了,也不行。而且卸载了后,./build.sh也编译不过去了,,心累。

3.Kinect跑自己的ORB-SLAM2不适合。。还是14.04把。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值