背景
本人的环境:使用ubuntu20.04,opencv4
问题
进行Build DBoW2. Go into Thirdparty/DBoW2/ and execute:时,运行make时出错
我安装的opencv4,在 OpenCV 3 和更高版本中,头文件的路径可能已更改。例如,在 OpenCV 4 中,应该使用:
#include <opencv2/opencv.hpp>
就将出现错误的地方均改为
#include <opencv2/opencv.hpp>
包括DBoW2中的FClass.h,FOEB.h,TemplatedVocabulary.h,如有其他文件出现这样的错误也进行修改
Build ORB_SLAM. In the ORB_SLAM root execute:时,执行cmake … -DROS_BUILD_TYPE=Release报错:
在ORB_SLAM 的 manifest.xml文件中,将
<depend package="opencv2"/>
修改为
<build_depend>opencv4</build_depend>
<exec_depend>opencv4</exec_depend>
成功
然后再make时又遇到opencv的同样的问题,在ORB_SLAM/include/ORBextractor.h,PnPsolver.h中进行修改
继续make时报错
解决办法
先卸载之前下载的eigen3:
sudo apt remove libeigen3-dev
然后安装低版本的:
ORB_SLAM installation on Ubuntu Xenial 16.04
网页里的教程如下:
1、
Install eigen form here
https://launchpad.net/ubuntu/trusty/amd64/libeigen3-dev/3.2.0-8
2、
Download the .deb file and install using
sudo dpkg -i libeigen3-dev_3.2.0-8_all.deb
继续make,出现同样的opencv头文件错误
在src/PnPsolver.cc,中进行修改
修改后继续make出现这样的错误
经查看在 src/PnPsolver.cc 和 include/PnPsolver.h文件中,只出现了 像
CvMat
这样的东西,
在较新的 OpenCV 版本中,CvMat 被 cv::Mat 替代。因此,如果您的代码仍在使用旧有的 C API,您可能需要更新为 C++ API。
正确形式为:
cv::Mat
还有很多版本问题造成的错误,一一修改后完成
修改后继续make出现:
[ 5%] Linking CXX executable …/bin/ORB_SLAM
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.410
/usr/bin/ld: warning: libopencv_imgproc.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.410
/usr/bin/ld: CMakeFiles/ORB_SLAM.dir/src/Tracking.cc.o: undefined reference to symbol ‘_ZN2cv8cvtColorERKNS_11_InputArrayERKNS_12_OutputArrayEii’
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.4.2.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/ORB_SLAM.dir/build.make:1387:…/bin/ORB_SLAM] 错误 1
make[1]: *** [CMakeFiles/Makefile2:209:CMakeFiles/ORB_SLAM.dir/all] 错误 2
make: *** [Makefile:130:all] 错误 2
asus@asus-X556UB:~/slam_reproduction/
解决办法:我系统中安装了两个不同版本的opencv,一个是安装ros时安装的opencv4.2,后面我手动安装了4.10,,这个报错是因为版本冲突,卸载4.10版本即可成功。
运行 rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true时出错
显示Frame无响应,查看发送的数据时也有问题,都是0,
可能是之前在改代码时出现问题,暂时放弃复现,准备先学习docker再复现,避免环境问题。