NVIDIA Jetson Xavier NX开发板部署VINS-fusion-GPU

前言

NVIDIA Jetson Xavier NX卡的CPU性能拉胯,但是GPU性能不错,因此可以部署GPU版本的VINS-fusion,加快运行速度,本贴记录部署的一些坑和过程。

参考

参考文档

一、安装opencv GPU版本

关于Opencv 的安装需要特别谨慎,不建议频繁删除以前的库,因为多个项目使用的版本可能不同,所以可以将常用的版本安装在/usr/local下,将其余版本安装在自己home下
我的NX卡已经在/usr/local目录下安装了opencv3.3版本了,这次安装的3.4版本的opencv不会安装到系统目录下,怕不同版本的文件覆盖冲突了。

(1)安装依赖

sudo apt-get install -y cmake libavcodec-dev libavformat-dev libavutil-dev \
    libglew-dev libgtk2.0-dev libgtk-3-dev libjpeg-dev libpng-dev libpostproc-dev \
    libswscale-dev libtbb-dev libtiff5-dev libv4l-dev libxvidcore-dev \
    libx264-dev qt5-default zlib1g-dev libgl1 libglvnd-dev pkg-config \
    libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev mesa-utils  

(2)下载opencv源码

wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.1.zip # check version
unzip opencv.zip

(3)编译GPU版本的opencv

我安装的路径为:/home/nvidia/opencv/opencv-3.4.1,也就是说上一步解压的源码文件路径在/home/nvidia/opencv/opencv-3.4.1

cd opencv-3.4.1/ && mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
        -D CMAKE_INSTALL_PREFIX=/usr/local \ #设置安装路径,不过由于我已经有其他opencv版本了,该版本并不会安装,因此这里路径无所谓了,只要后面不运行make install
        -D WITH_CUDA=ON \
        -D CUDA_ARCH_BIN=7.2 \ #对于NX和AGX,选7.2,Nano,TX2选6.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 \
         ../
make
# 建议不要install,避免不同版本的opencv文件覆盖了,以后要使用该cv就设置路径到build文件夹中
# sudo make install

Q1: error Please include the appropriate gl headers before including cuda_gl_interop.h

A1:

sudo vim /usr/local/cuda/include/cuda_gl_interop.h
# 修改cuda_gl_interop.h的62行到68行,如下:
//#if defined(__arm__) || defined(__aarch64__)
//#ifndef GL_VERSION
//#error Please include the appropriate gl headers before including cuda_gl_interop.h
//#endif
//#else
 
 #include <GL/gl.h>

//#endif

二、安装对应的CV-Bridge

我们需要自己源码编译一个CV-Bridge,且指定opencv为刚才安装的GPU版本的CV

(1)下载源码

点击进入官网,选择自己ROS的版本下载:

image-20230720182440930

(2)修改为自己的opencv

gedit vision_opencv/cv_bridge/CMakeLists.txt
# 在find_package(OpenCV 3 REQUIRED前面添加自己的cv路径:
set(OpenCV_DIR "/home/nvidia/opencv/opencv-3.4.1/build")

(3)编译源码

cd vision_opencv/cv_bridge
mkdir build
cd build
cmake ..
make
sudo make install

3.编译安装Vin-fusion GPU

(1)下载源码

cd ~/catkin_ws/src 
git clone https://github.com/pjrambo/VINS-Fusion-gpu

(2)修改CMakeLists.txt,指定为GPU版本的CV和CV-Bridge
其实就是以后编译ROS包,只要有包导入了opencv,就自行指定opencv和cv bridge的路径为自己前面安装的路径

gedit VINS-Fusion-gpu/camera_models/CMakeLists.txt
# 在最前面添加
set(OpenCV_DIR "/home/nvidia/opencv/opencv-3.4.1/build")

gedit VINS-Fusion-gpu/loop_fusion/CMakeLists.txt
# 在最前面添加
set(OpenCV_DIR "/home/nvidia/opencv/opencv-3.4.1/build")
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)  

gedit VINS-Fusion-gpu/vins_estimator/CMakeLists.txt
# 在最前面添加
set(OpenCV_DIR "/home/nvidia/opencv/opencv-3.4.1/build")
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)  

(3)编译源码

cd ~/catkin_ws
# 由于其他库会依赖camera_models,所以用catkin build编译得先单独编译该模块
catkin build camera_models
catkin build

Q2:

double free or corruption (out)
已放弃 (核心已转储)

A2:

经调试,发现是cv::FileStorage fsSettings读取yaml配置文件中的矩阵时就会报错(读取其他的数据类型如字符串和数值不会报错),可能原因是混用了不同版本的cv,暂时解决方法是直接在代码中输入yaml配置文件中的矩阵:
# 手动输入矩阵数据
cv::Mat cv_T = (cv::Mat_<double>(3, 3)<< 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);

猜你喜欢

转载自blog.csdn.net/caiqidong321/article/details/131837221