NVIDIA Jetson Xavier NX部署VINS-fusion-GPU
一、環(huán)境配置(Ubuntu 18.04)
1、Cuda 10.2的安裝
sudo apt-get update
sudo apt-get install cuda-toolkit-10-2
安裝好之后,在 .bashrc中配置環(huán)境變量。source之后,nvcc – version 即可查看cuda版本。
export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_ROOT=/usr/local/cuda
2、Eigen(用ROS自帶的也可以)
# Remove pre-built Eigen
sudo apt-get remove libeigen3-dev
cd ~/Downloads/
wget -O eigen.zip https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.zip #check version
unzip eigen.zip
mkdir eigen-build && cd eigen-build
cmake ../eigen-3.3.7/ && sudo make install
pkg-config --modversion eigen3 # Check Eigen Version
3、Ceres solver
cd ~/Downloads/
sudo apt-get install -y cmake libgoogle-glog-dev libatlas-base-dev libsuitesparse-dev
wget http://ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar zxf ceres-solver-1.14.0.tar.gz
mkdir ceres-bin
mkdir solver && cd ceres-bin
cmake ../ceres-solver-1.14.0 -DEXPORT_BUILD_DIR=ON -DCMAKE_INSTALL_PREFIX="../solver"
#good for build without being root privileged and at wanted directory
make -j3 # 6 : number of cores
make install
bin/simple_bundle_adjuster ../ceres-solver-1.14.0/data/problem-16-22106-pre.txt # to check version
4、Opencv 安裝
關(guān)于Opencv 的安裝需要特別謹慎,不建議頻繁刪除以前的庫,因為多個項目使用的版本可能不同,所以可以將常用的版本安裝在/usr/local下,將其余版本安裝在自己Download或者home下。
如果需要刪除原來的版本,執(zhí)行以下命令:
# remove prebuilt opencv
sudo apt-get purge libopencv* python-opencv
sudo apt-get update
sudo apt-get install -y build-essential pkg-config
## libeigen3-dev # recommend to build from source
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
sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy
# To fix OpenGL related compilation problems
cd /usr/lib/aarch64-linux-gnu/
sudo ln -sf libGL.so.1.0.0 libGL.so
sudo vim /usr/local/cuda/include/cuda_gl_interop.h
# Comment (line #62~68) of cuda_gl_interop.h
//#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
安裝新的版本(因為VINS-FUSION-GPU版本需要支持CUda的OpenCV,所以選擇3.4.1版本)
Then once linking is done, go to Downloads to begin opencv installation
cd ~/Downloads/
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.1.zip # check version
unzip opencv.zip
cd opencv-3.4.1/ && mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \ #這里的/usr/local可以換成自己的安裝路徑,到時候在Cmakelist里設(shè)置自己設(shè)置的路徑即可。
-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 # running in single core is good to resolve the compilation issues
sudo make install
cd ../../ && sudo rm -rf opencv-3.4.1 # optional (can save 10GB Disk Space)
pkg-config --modversion opencv # Check opencv Version
OpenCV 在NX上的安裝比較慢,差不多需要1個小時。OpenCV安裝好以后,需要進一步編譯CV-Bridge( cv_bridge是在ROS圖像消息和OpenCV圖像之間進行轉(zhuǎn)換的一個功能包)。
5、CV-Bridge的編譯
CV-Bridge的安裝需要下載對應的版本,由于NX 是基于Ubuntu 18.04的ARM系統(tǒng),因此下載melodic版本的CV-Bridge。首先,通過以下連接進入下載頁面:
https://github.com/ros-perception/vision_opencv
如圖所示:
# 選擇下載melodic版本到catkin_ws/src目錄下,
gedit vision_opencv/cv_bridge/CMakeLists.txt
# Edit OpenCV PATHS in CMakeLists and include cmake file
# /usr/local/share/OpenCV 選擇自己安裝的OpenCV對應路徑
find_package(OpenCV 3 REQUIRED PATHS /usr/local/share/OpenCV NO_DEFAULT_PATH
COMPONENTS
opencv_core
opencv_imgproc
opencv_imgcodecs
CONFIG
)
include(/usr/local/share/OpenCV/OpenCVConfig.cmake) #under catkin_python_setup()
# Save and close CMakeLists
# Build the package
cd .. && catkin_make
二、Vins-Fusion GPU編譯安裝
1、Vins-Fusion GPU
cd ~/catkin_ws/src && git clone https://github.com/pjrambo/VINS-Fusion-gpu #GPU
sudo apt-get install ros-melodic-tf
sudo apt-get install ros-melodic-image-transport
sudo apt-get install ros-melodic-rviz
# Edit CMakeLists.txt for loop_fusion and vins_estimator
cd ~/catkin_ws/src/VINS-Fusion-gpu/loop_fusion && gedit CMakeLists.txt
##For loop_fusion : line 19
#find_package(OpenCV)
# /usr/local/share/OpenCV/ OpenCVConfig.cmake 選擇自己安裝的OpenCV對應路徑
include(/usr/local/share/OpenCV/OpenCVConfig.cmake)
cd ~/catkin_ws/src/VINS-Fusion-gpu/vins_estimator && gedit CMakeLists.txt
##For vins_estimator : line 20
#find_package(OpenCV REQUIRED)
# /usr/local/share/OpenCV/ OpenCVConfig.cmake 選擇自己安裝的OpenCV對應路徑
include(/usr/local/share/OpenCV/OpenCVConfig.cmake)
cd ~/catkin_ws/
source devel/setup.bash
catkin_make
2、數(shù)據(jù)測試。
2.1公開數(shù)據(jù)集測試【以EuRoC(Stereo cameras + IMU)為例】
roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag
數(shù)據(jù)可以通過一下鏈接下載到:
http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
如果下載慢的話,也可以通過以下連接獲取
KITTI
鏈接: https://pan.baidu.com/s/1UIoP1TgGLLWWpKYVrre9WA 密碼: dbsb
EuRoC
鏈接: https://pan.baidu.com/s/1zvxyN1KlIk28_LvC36WU5Q 密碼: f1rv
shapenet
鏈接: https://pan.baidu.com/s/1pdRk3FOxRe5YRBVGP0ACJw 密碼: 4knl
TUM
鏈接: https://pan.baidu.com/s/1GFy8MZmH4TZGakzGWudyhQ 密碼: ptga
數(shù)據(jù)來源原文鏈接:https://blog.csdn.net/weixin_43828675/article/details/117049952(感謝囂張的叉燒包同志)
2.2 測試自己的設(shè)備(D435i+阿木P450)
在配置參數(shù)文件中加入以下參數(shù),使得GPU起作用
In the config file, there are two parameters for gpu acceleration.
use_gpu: 0 for off, 1 for on
use_gpu_acc_flow: 0 for off, 1 for on
If your GPU resources is limitted or you want to use GPU for other computaion. You can set
use_gpu: 1
use_gpu_acc_flow: 0
If your other application do not require much GPU resources, I recommanded you to set
use_gpu: 1
use_gpu_acc_flow: 1
IMU和相機外參標定可以通過VINS實時在線標定或者使用Kalibr工具包進行標定,相關(guān)資料比多了,不再贅述。
下期給各位鐵子們匯報在阿木實驗室P450上部署VINS+Prometheus+Ggo-Planner的工作。
文獻參考
1、無人機自主導航(ARM架構(gòu)的vins-fusion-GPU部署)
https://blog.csdn.net/weixin_45600405/article/details/125249964?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-3-125249964-blog-119830683.pc_relevant_landingrelevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-3-125249964-blog-119830683.pc_relevant_landingrelevant&utm_relevant_index=4
2、安裝環(huán)境OpenCV
https://github.com/arjunskumar/vins-fusion-gpu-tx2-nano
3、調(diào)內(nèi)外參數(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-812038.html
https://www.bilibili.com/video/BV1WZ4y167me?p=11&vd_source=1682913523e03074db0225c9475c4c71
4、技術(shù)分享 | 帶你具體部署VINS_FUSION_GPU版本文章來源地址http://www.zghlxwxcb.cn/news/detail-812038.html
https://mp.weixin.qq.com/s/FaE05W2vAvHCZc7R39M7Pw
到了這里,關(guān)于NVIDIA Jetson Xavier NX部署VINS-fusion-GPU的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!