序文
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 バージョンを選択します。
(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);