Jetson Orin NX 开发指南(6): VINS-Fusion-gpu 的编译和运行

一、前言

由于 Jetson 系列的开发板 CPU 性能不是很好,因此在处理图像数据时往往需要 GPU 加速,而 VINS-Fusion 是针对同步定位与建图(SLAM)问题中十分出色的视觉算法,但是其在图像处理过程中资源消耗较大,仅仅依靠 Jetson 开发板的 CPU 往往很难实现事实效果。

本文在此背景下介绍如何配置带有 GPU 加速的 VINS-Fusion,主要参考以下文献

https://github.com/pjrambo/VINS-Fusion-gpu

Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0-CSDN博客

并且需要一些必要的准备工作,如 CUDA 的安装,带有 GPU 加速的 OpenCV 的安装,cv_bridge 功能包的安装,这些工作在上一期内容中已经介绍,详见

Jetson Orin NX 开发指南(5): 安装 OpenCV 4.6.0 并配置 CUDA 以支持 GPU 加速-CSDN博客

接下来我们开始介绍如何在 Jetson Orin NX 开发板上运行 VINS-Fusion-gpu

二、编译安装 ceres-solver-1.14.0

首先安装依赖

sudo apt-get install liblapack-dev libsuitesparse-dev libgflags-dev libgoogle-glog-dev libgtest-dev libcxsparse3 -y

然后将安装包下载在 ~/Documents/ 目录下并解压

wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar -zxvf ceres-solver-1.14.0.tar.gz

进入 ceres-solver-1.14.0 文件夹

cd ~/Documents/ceres-solver-1.14.0

创建 build 并编译生成 Makefile 文件

mkdir build & cd build
cmake ..

最终编译并安装 ceres-solver-1.14.0

sudo make install -j8

最终结果如下

至此,ceres-solver-1.14.0 就编译安装完成了!

三、编译 VINS-Fusion-gpu

首先创建 VINS-Fusion-gpu 工作空间,

mkdir -p ~/catkin_ws/src/vinsgpu/src/
cd ~/catkin_ws/src/vinsgpu/src/

然后从 Github 上下载 VINS-Fusion-gpu 源码

git clone https://github.com/pjrambo/VINS-Fusion-gpu.git

下载完成后进入 VINS-Fusion-gpu 文件夹

(1)修改 vins_estimator/CMakeLists.txt 文件

注释一行

#include(/home/dji/opencv/build/OpenCVConfig.cmake)

设置 OpenCV 路径为带有 GPU 加速的 opencv 4.6.0 (安装方式见上一期内容)

set(OpenCV_DIR "~/Documents/opencv-4.6.0/build")

(2)修改 loop_fusion/CMakeLists.txt 文件

注释一行

#include(/home/dji/opencv/build/OpenCVConfig.cmake)

设置 OpenCV 路径为带有 GPU 加速的 opencv 4.6.0 (安装方式见上一期内容)

set(OpenCV_DIR "~/Documents/opencv-4.6.0/build")

保存并退出,最后进入 VINS-Fusion-gpu 文件夹

cd ~/catkin_ws/src/vinsgpu/

接下来开始编译,终端输入

catkin_make

出现报错

错误内容举例:

(1)编译报错 error: 'CV_FONT_HERSHEY_SIMPLEX' was not declared in this scope

(2)编译报错 error: 'CV_LOAD_IMAGE_GRAYSCALE' was not declared in this scope

(3)编译报错 error: 'CV_BGR2GRAY' was not declared in this scope

解决办法:

进入 VINS-Fusion-gpu 文件夹下

cd ~/catkin_ws/src/vinsgpu/src/VINS-Fusion-gpu

然后输入以下内容

sed -i 's/CV_FONT_HERSHEY_SIMPLEX/cv::FONT_HERSHEY_SIMPLEX/g' `grep CV_FONT_HERSHEY_SIMPLEX -rl ./`
sed -i 's/CV_LOAD_IMAGE_GRAYSCALE/cv::IMREAD_GRAYSCALE/g' `grep CV_LOAD_IMAGE_GRAYSCALE -rl ./`
sed -i 's/CV_BGR2GRAY/cv::COLOR_BGR2GRAY/g' `grep CV_BGR2GRAY -rl ./`
sed -i 's/CV_RGB2GRAY/cv::COLOR_RGB2GRAY/g' `grep CV_RGB2GRAY -rl ./`
sed -i 's/CV_GRAY2RGB/cv::COLOR_GRAY2RGB/g' `grep CV_GRAY2RGB -rl ./`
sed -i 's/CV_GRAY2BGR/cv::COLOR_GRAY2BGR/g' `grep CV_GRAY2BGR -rl ./`
sed -i 's/CV_CALIB_CB_ADAPTIVE_THRESH/cv::CALIB_CB_ADAPTIVE_THRESH/g' `grep CV_CALIB_CB_ADAPTIVE_THRESH -rl ./`
sed -i 's/CV_CALIB_CB_NORMALIZE_IMAGE/cv::CALIB_CB_NORMALIZE_IMAGE/g' `grep CV_CALIB_CB_NORMALIZE_IMAGE -rl ./`
sed -i 's/CV_CALIB_CB_FILTER_QUADS/cv::CALIB_CB_FILTER_QUADS/g' `grep CV_CALIB_CB_FILTER_QUADS -rl ./`
sed -i 's/CV_CALIB_CB_FAST_CHECK/cv::CALIB_CB_FAST_CHECK/g' `grep CV_CALIB_CB_FAST_CHECK -rl ./`
sed -i 's/CV_ADAPTIVE_THRESH_MEAN_C/cv::ADAPTIVE_THRESH_MEAN_C/g' `grep CV_ADAPTIVE_THRESH_MEAN_C -rl ./`
sed -i 's/CV_THRESH_BINARY/cv::THRESH_BINARY/g' `grep CV_THRESH_BINARY -rl ./`
sed -i 's/CV_SHAPE_CROSS/cv::MORPH_CROSS/g' `grep CV_SHAPE_CROSS -rl ./`
sed -i 's/CV_SHAPE_RECT/cv::MORPH_RECT/g' `grep CV_SHAPE_RECT -rl ./`
sed -i 's/CV_TERMCRIT_EPS/cv::TermCriteria::EPS/g' `grep CV_TERMCRIT_EPS -rl ./`
sed -i 's/CV_TERMCRIT_ITER/cv::TermCriteria::MAX_ITER/g' `grep CV_TERMCRIT_ITER -rl ./`
sed -i 's/CV_RETR_CCOMP/cv::RETR_CCOMP/g' `grep CV_RETR_CCOMP -rl ./`
sed -i 's/CV_CHAIN_APPROX_SIMPLE/cv::CHAIN_APPROX_SIMPLE/g' `grep CV_CHAIN_APPROX_SIMPLE -rl ./`
sed -i 's/CV_AA/cv::LINE_AA/g' `grep CV_AA -rl ./`
sed -i 's/CV_LOAD_IMAGE_UNCHANGED/cv::IMREAD_UNCHANGED/g' `grep CV_LOAD_IMAGE_UNCHANGED -rl ./`
sed -i 's/CV_MINMAX/cv::NORM_MINMAX/g' `grep CV_MINMAX -rl ./`

具体过程如下

其原理解释详见

Docker 制作各 ROS 版本 VINS-Fusion 镜像_docker ros 镜像_想要个小姑娘的博客-CSDN博客

简要总结:

VINS-Fusion-gpu 是在 Ubuntu 18.04 环境下写的,其对应的 ROS 版本为 melodic,对应的 OpenCV 是 3.2.0,

而 Jetson Orin NX 对应的是 Ubuntu 20.04,其对应的 ROS 版本为 noetic,对应的 OpenCV 版本为 4.2.0,

报错的关键原因就是 OpenCV 4 系列和 OpenCV 3 系列有一些变量的名称发生了改变,因此我们这里只要将相应的变量名称进行修正,就能顺利通过编译!(OpenCV 4.6.0 和 OpenCV 4.2.0 差别不大)

上面的语句通过 sed 命令和 grep 正则表达式的方式一键修改所有变量名称!

修改完成后进入工作空间,并编译

cd ~/catkin_ws/src/vinsgpu/
catkin_make

最终显示如下结果

这表明 VINS-Fusion-gpu 通过编译!

四、运行 VINS-Fusion-gpu

相关推荐
菜狗woc6 小时前
opencv-python的简单练习
人工智能·python·opencv
西猫雷婶8 小时前
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
开发语言·python·opencv
云空9 小时前
《QT 5.14.1 搭建 opencv 环境全攻略》
开发语言·qt·opencv
编码小哥9 小时前
opencv中的色彩空间
opencv·计算机视觉
吃个糖糖9 小时前
34 Opencv 自定义角点检测
人工智能·opencv·计算机视觉
花花少年9 小时前
【Windows版】opencv 和opencv_contrib配置
opencv·opencv_contrib
YRr YRr9 小时前
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
linux·opencv·ubuntu
葡萄爱11 小时前
OpenCV图像分割
人工智能·opencv·计算机视觉
编码小哥13 小时前
通过opencv加载、保存视频
人工智能·opencv
发呆小天才O.oᯅ13 小时前
YOLOv8目标检测——详细记录使用OpenCV的DNN模块进行推理部署C++实现
c++·图像处理·人工智能·opencv·yolo·目标检测·dnn