stvo_pl编译问题记录
源码下载链接
编译过程
官方编译说明
opencv和opencv-contrib安装步骤
版本一定要一样的,这里推荐3.30版本的。
opencv下载链接(opencv3.30)
opencv-contrib下载链接(3.30)
将解压后的opencv-contrib文件放在opencv文件夾下。
- 安装依赖;
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
- 编译
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_GTK_2_X=ON -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.x.x/modules -D OPENCV_ENABLE_NONFREE:BOOL=ON ..
make -j12
- 安装
sudo make install
- 环境配置
sudo gedit /etc/ld.so.conf.d/opencv.conf
将/usr/local/lib 复制到打开的文件中。
sudo ldconfig
sudo gedit /etc/bash.bashrc
文件末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
source /etc/bash.bashrc
sudo updatedb
- 测试
# 进入opencv的安装目录
cd opencv/samples/cpp/example_cmake
cmake .
make
./opencv_example
opencv安装过程可能遇到的问题以及解决方案
- opencv_contrib安装出现无法打开包括文件: “opencv2/xfeatures2d/cuda.hpp”: 解决方法
在opencv/modules/stitching/CMakeLists.txt文件中加入一条语句使其include opencv_contrib/modules/xfeatures2d/include,可以是绝对路径,如
INCLUDE_DIRECTORIES("/home/zhang/AllLib/Opencv/opencv/opencv_contrib/modules/xfeatures2d/include")
- 当在执行100%进度之后出现上述的问题时,将对应报错文件中的引用地址改成绝对地址(我的是在/opencv/modules/stitching/include/opencv2/stitching/detail/matchers.hpp文件中的头文件件引用中对opencv2/xfeatures2d/cuda.hpp的引用改为绝对地址(/home/—/opencv_contrib/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp));
- fatal error: vgg_generated_80.i: 没有那个文件或目录;fatal error: boostdesc_bgm.i: 没有那个文件或目录将该文件中的boost和vgg文件复制到/home/***/opencv_contrib/modules/xfeatures2d/src中并将文件前的数字和“-”去掉,继续进行编译。
Eigen3安装
参考该博客中的安装方式,记得最后将Engin复制一份,避免Eigen/Dense找不到。
ubuntu常用库安装
Boost安装
sudo apt-get install libboost-dev
Boost安装过程可能遇到的问题以及解决方案
CMake Error at /usr/share/cmake-3.5/Modules/FindBoost.cmake:1677 (message):
Unable to find the requested Boost libraries.
Boost version: 1.58.0
Boost include path: /usr/include
Could not find the following Boost libraries:
boost_regex
boost_thread
boost_system
boost_filesystem
Some (but not all) of the required Boost libraries were found. You may
need to install these additional Boost libraries. Alternatively, set
BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
to the location of Boost.
在终端执行sudo apt install libboost-all-dev
如果在安装时发生下载失败提示更换源,我用的是阿里源。继续执行上述命令。
Could not find the following static Boost libraries:
YAML安装
sudo apt install libyaml-cpp-dev
MRPT安装
下载链接
https://github.com/MRPT/mrpt/tree/0c3d605c3cbf5f2ffb8137089e43ebdae5a55de3
没有安装libwxgtk2.8-dev的系统一定要先安装该库,安装方式在下方。
//安装依赖库,其中有些库如果已经安装,不必重复安装. 如果按照我上篇帖子的OpenCV安装方法,可以发现前几个都安装过了.而且有些库是可选择性安装的,详见上述标准安装过程网址.
$ sudo apt-get install build-essential pkg-config libdc1394-22-dev libjpeg-dev libsuitesparse-dev libftdi-dev freeglut3-dev zlib1g-dev libusb-1.0-0-dev libudev-dev libfreenect-dev libavformat-dev libswscale-dev libassimp-dev libgtest-dev libpcap-dev
//进入MRPT码包
$ mkdir build
$ cd build
$ cmake ..
$ make -j12
$ sudo make install
MRPT安装过程可能遇到的问题以及解决方案
- 找不到MRPTConfig.cmake mrpt-config.cmake
- **MRPT compiled without wxWidgets!**需要安装libwxgtk2.8-dev,ubuntu1604 libwxgtk2.8-dev安装出错,提示未定位包
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install libwxgtk2.8-dev
运行
- 在stvo_pl文件夹下创建kitti文件夹,将kitti 数据集中的00数据集复制到该文件夹中;
- 将config/dataset_params/kittixxx.yalm配置文件复制到对应的数据集文件中并将文件名称改为dataset_params.yaml,注意gray数集需要将其中的image2/_image3/改为image0/_image1/;
- 在.bashrc文件最后添加数据集文件位置,该操作只是用于执行程序时定位数据集的。
gedit ~/.bashrc
export DATASETS_DIR=/××××/stvo-pl
source ~/.bashrc
- 在执行命令中注意…/config/config/config_kitti.yaml,文件的具体位置。
运行过程可能遇到的问题以及解决方案
- terminate called after throwing an instance of ‘std::logic_error’ what(): basic_string::_M_construct null not valid Aborted (core dumped)—在.bashrc文件中输入``
gedit ~/.bashrc
export LC_ALL="en_US.utf8"
source ~/.bashrc
- 在运行Demo时输入运行指令后发生段错误(核心已转存)
解决办法是修改stvo_pl中的Cmakelist.txt编译命令,在整个程序运行的过程中出可能会莫名其妙的出现很多这种错误提示,按照下面的方法修改源码可以解决大部分段错误的问题。
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -mtune=native -march=native")
改成
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -mtune=native")
结果
EuRoC 数据集运行
例MH_01_easy
gedit ~/.bashrc
export DATASETS_DIR=<path-to-euroc>
source ~/.bashrc
- 复制stvo_pl/config/dataset_params/euroc_params.yaml 到 <path-to-MH_01_easy>/mav0/中。
- 重命名 the yaml file to dataset_params.yaml and change it if necessary
- 运行
./imagesStVO /MH_01_easy/mav0 -c ../config/config/config_euroc.yaml