La placa de desarrollo NVIDIA Jetson Xavier NX implementa VINS-fusion-GPU

prefacio

El rendimiento de la CPU de la tarjeta NVIDIA Jetson Xavier NX es bajo, pero el rendimiento de la GPU es bueno, por lo que se puede implementar la versión GPU de VINS-fusion para acelerar la operación.Esta publicación registra algunos errores y procesos de implementación.

referencia

documentos de referencia

1. Instale la versión de GPU opencv

La instalación de Opencv debe ser especialmente cuidadosa . No se recomienda eliminar la biblioteca anterior con frecuencia, ya que las versiones utilizadas por varios proyectos pueden ser diferentes, por lo que puede instalar la versión de uso común en /usr/local e instalar el resto. de las versiones bajo su propia casa .
Mi tarjeta NX ya tiene instalada la versión opencv3.3 en el directorio /usr/local.La versión 3.4 de opencv instalada esta vez no se instalará en el directorio del sistema, por temor a que diferentes versiones de archivos sobrescriban conflictos.

(1) Dependencias de instalación

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) Descargar el código fuente de opencv

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

(3) Compile la versión GPU de opencv

La ruta que instalé es: /home/nvidia/opencv/opencv-3.4.1, es decir, la ruta del archivo de código fuente descomprimido en el paso anterior está en/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

P1: error Incluya los encabezados gl apropiados antes de incluir 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

2. Instale el CV-Bridge correspondiente

Necesitamos compilar un CV-Bridge a partir de nuestro propio código fuente y especificar opencv como el CV de la versión de GPU que acabamos de instalar.

(1) Descarga el código fuente

Haga clic para ingresar al sitio web oficial , elija su propia versión de ROS para descargar:

imagen-20230720182440930

(2) Modifique a su propio 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) compilar el código fuente

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

3. Compile e instale la GPU Vin-fusion

(1) Descarga el código fuente

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

(2) Modifique CMakeLists.txt, especificando el CV y ​​CV-Bridge de la versión GPU
es en realidad para compilar el paquete ROS más tarde, siempre que haya un paquete importado en opencv, puede especificar la ruta de opencv y cv bridge como la ruta que instaló anteriormente

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) compilar el código fuente

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

P2:

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);

Supongo que te gusta

Origin blog.csdn.net/caiqidong321/article/details/131837221
Recomendado
Clasificación