NVIDIA Jetson Xavier NX 開発ボードは VINS-fusion-GPU を導入

序文

NVIDIA Jetson Xavier NX カードの CPU パフォーマンスは低いですが、GPU パフォーマンスは良好であるため、GPU バージョンの VINS-fusion をデプロイして動作を高速化できます。この投稿では、いくつかの落とし穴とデプロイのプロセスを記録します。

参考

参照文書

1.opencv GPU バージョンをインストールします

Opencv のインストールは特に注意が必要です。複数のプロジェクトで使用されているバージョンが異なる可能性があるため、以前のライブラリを頻繁に削除することはお勧めできません。そのため、よく使用されるバージョンを /usr/local にインストールし、残りをインストールすることができます。自分のホームの下にあるバージョンの
私の NX カードは、opencv3.3 バージョンを /usr/local ディレクトリにすでにインストールしていますが、今回インストールされる opencv 3.4 バージョンは、異なるバージョンのファイルが競合を上書きすることを恐れて、システム ディレクトリにはインストールされません。

(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:エラー cuda_gl_interop.h をインクルードする前に適切な gl ヘッダーをインクルードしてください

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. 対応する CV ブリッジをインストールします

独自のソース コードから CV ブリッジをコンパイルし、インストールしたばかりの GPU バージョンの CV として opencv を指定する必要があります。

(1) ソースコードをダウンロードする

クリックして公式 Web サイトに入り、ダウンロードする独自の ROS バージョンを選択します。

画像-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