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

相关推荐
小豆庄3 小时前
处理含车牌/人脸的隐私视频,如何做到数据不离机?
opencv·ai·云计算·视频
小徐不徐说10 小时前
C++ 机器视觉入门:从零搭建 AOI 开发环境(OpenCV + CMake)
开发语言·c++·opencv
学AI不秃头2 天前
一句话指挥两轮机器人?Jetson 跑通视觉语言导航(VLN)× MuJoCo 数字孪生闭环
数字孪生·jetson·机器人仿真·mujoco·边缘ai·视觉语言导航·vln
晨间晓3 天前
图片里的高频和低频是什么?用华为云码道开发 OpenCV 傅里叶频谱分析工具
opencv·计算机视觉·华为云
晨间晓3 天前
图片里的阴影能不能减弱?用华为云码道开发 OpenCV 光照校正工具
人工智能·opencv·华为云
晨间晓4 天前
图片里的细小噪点怎么平滑?用华为云码道开发 OpenCV 图像滤波对比工具
人工智能·opencv·华为云
偷吃米饭4 天前
图片特征怎么描述?用华为云码道开发 OpenCV ORB 特征提取工具
人工智能·opencv·华为云
晨间晓4 天前
图片里的关键点怎么找?用华为云码道开发 OpenCV FAST 特征点检测工具
人工智能·opencv·华为云
晨间晓4 天前
二值图里的噪点怎么去掉?用华为云码道开发 OpenCV 形态学操作工具
人工智能·opencv·华为云
晨间晓4 天前
图片里的角点在哪里?用华为云码道开发 OpenCV Harris 角点检测工具
人工智能·opencv·华为云