1 卸载原有opencv
首先卸载之前已有的opencv,指卸载opencv3,opencv4可以保留,不需要像以前那么下面命令暴力地卸载opencv,这虽然会把opencv删掉(之前二进制安装的cv_bridge会被一起删了),但是也会把一些没必要删掉的东西也都删了。rqt相关的也都删了。
sudo apt-get purge libopencv*
sudo apt autoremove
如果是之前源码编译安装的opencv,只需要在opencv的build文件夹下运行sudo make uninstall
进行卸载即可。是否卸载成功可以通过pkg-config --modversion opencv
命令查看opencv版本来判断,如果查找不到opencv了,代表OK。有opencv4没有关系。
2 源码编译安装opencv3.4.1和opencv_contrib3.4.1
单纯的vinsfusiongpu不需要装opencv_contrib,因为我相同的环境下还需要跑aruco二维码检测,所以把opencv_contrib也一起装上 新建一个opencv341文件夹,在里面下载3.4.1的opencv和opencv_contrib,使得opencv和opencv_contrib同在opencv341文件下。
git clone -b 3.4.1 https://github.com/opencv/opencv.git
git clone -b 3.4.1 https://github.com/opencv/opencv_contrib
然后在opencv文件夹下新建一个build文件夹,并运行下面命令
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D CUDA_ARCH_BIN=7.2 \
-D CUDA_ARCH_PTX="" \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON \
-D WITH_LIBV4L=ON \
-D WITH_GSTREAMER=ON \
-D WITH_GSTREAMER_0_10=OFF \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" \
-D WITH_TBB=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
../
OPENCV_EXTRA_MODULES_PATH参数后面的路径要和实际opencv_contrib的路径对应 在NX上 CUDA_ARCH_BIN=7.2 ,在其他平台上这个参数值需要改 CMAKE_INSTALL_PREFIX对应sudo make install
的时候实际的安装路径,修改后面的路径可以opencv所安装的文件夹。
上面命令运行完后接着运行下面命令
make -j8
会遇到一些报错,基本是一些常见的报错,可以通过百度解决,基本都是xfeatures2d这个模块在报错,具体报错和解决方法如下所示。
报错一
解决方法,把对应cpp里的头文件路径改为绝对路径,也可以在cmakelists里面加入头文件所在的路径,让其可以找到此头文件,比如在cmakelists里面加上这句。
INCLUDE_DIRECTORIES("/home/nvidia/opencv341/opencv_contrib/modules/xfeatures2d/include")
报错二
解决方法 参照 ubuntu安装OpenCV 及遇到的问题_libopencv_imgcodecs.so.3.4.5: undefined reference -CSDN博客
由上图改为下图这样
报错三
解决方法,里面所需要拷贝的文件我也有保存到百度网盘里 fatal error: boostdesc_bgm.i:No such file or directory_fatal error: boostdesc_bgm.i: no such file or dire-CSDN博客
我是直接把这几个文件拷贝到opencv_contrib/modules/xfeatures2d/src/目录下,不是把整个boostdescetc文件夹拷贝到opencv_contrib/modules/xfeatures2d/src/目录下,是拷贝文件不是拷贝目录
报错四
我按照这篇文章的方法对于opencv2/xfeatures2d/cuda.hpp: No such file or directory 类问题的解决方法-CSDN博客 把对应头文件的路径改为绝对路径
由上图改为下图这样
报错五
我还是想试一下加绝对路径的方法,这么弄是OK的,把头文件的路径改为绝对路径
报错六
还是继续把对应头文件路径改为绝对路径,都摸索出规律出来了
由上图改为下图这样
依次解决完上面六个报错,就可以最后百分之百编译通过了,每次解决完报错,继续运行make -j8
即可,不用清零从头开始编译。
make完了之后可以运行下面命令安装到系统目录
sudo make install
通过pkg-config --modversion opencv
命令查看opencv版本是不是3.4.1来判断是否安装成功
3 源码编译安装cv_bridge
先卸载之前二进制安装的cv_bridge(会导致二进制安装的realsense2_camera功能包也跟着被自动卸载)
sudo apt-get purge ros-melodic-cv-bridge
下源码编译安装cv_bridge
mkdir -p cv_bridge_ws/src
cd cv_bridge_ws/src
git clone https://gitee.com/bingobinlw/cv_bridge //这个仓库已经fork
cd ..
将opencv编译生成的build文件路径加入到CMakeLists.txt,个人感觉这步不加也可以应该,因为系统可以自动找到opemcv3.4.1了,保险起见还是加上。
set(OpenCV_DIR "your-path/opencv/build")
catkin_make
把cv_bridge的功能包路径添加到bashrc里面,使得系统可以自动找到cv_bridge功能包
echo "source ~/cv_bridge_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
4 部署vins-fusion-gpu
前提需要先装好ceres 1.14.0 code_utils 不需要改vins-fusion-gpu里面的cmakelists,因为现在系统是可以自动找到opencv3.4.1的,包括使用其他功能包或者库编译的时候,不需要特地修改cmakelists指定opencv的路径。
安装1.14.0的ceres
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libeigen3-dev libgtest-dev
git clone -b 1.14.0 https://github.com/ceres-solver/ceres-solver.git //官方仓库
cd ceres-solver/
mkdir build
cd build
cmake ..
make
sudo make install
安装code_utils功能包
在和vinsfusiongpu通一个工作空间的src文件夹下下载
git clone https://github.com/gaowenliang/code_utils.git //这是官方仓库
sudo apt-get install libdw-dev
不装编译会有这个报错
在code_utils下面找到sumpixel_test.cpp,修改#include "backward.hpp"
为 #include “code_utils/backward.hpp”
不然编译会有下面这个报错
然后在工作空间根目录下用catkin_make
编译 再在工作空间根目录下下vinsfusiongpu,可以去vinsfusiongpu官方仓库下,下speed_opti分支GitHub - pjrambo/VINS-Fusion-gpu: This repository is a version of VINS-Fusion with gpu acceleration. It can run on the Nvidia TX2 in realtime
git clone b speed_opti https://github.com/pjrambo/VINS-Fusion-gpu/tree/speed_opti
下面命令是克隆个人的仓库,建议用上面官方vinsfusiongpu仓库。
git clone -b 对应分支 https://gitee.com/maxibooksiyi/vins-fusion-gpu-speed_opti.git
然后再在工作空间根目录下用catkin_make
编译,按照上面配置好的环境,编译通过是没有问题的。