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