Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0

news/2024/11/29 10:52:49/

准备工作:

(1)电脑装有 NVIDIA 显卡

(2)安装 ROS noetic/Installation/Ubuntu - ROS Wiki

(4)安装 cuda Ubuntu安装cuda_GXU_Wang的博客-CSDN博客

一、安装OpenCV 4.6.0

下载 opencv 源码,选择所需要的版本 opencv 4.6.0,相应的扩展opencv_contrib 4.6.0,以及用于桥接 ROS 和 opencv 的 cv_bridge

Release OpenCV 4.6.0 · opencv/opencv · GitHub

Release 4.6.0 · opencv/opencv_contrib · GitHub

https://github.com/ros-perception/vision_opencv/tree/noetic

考虑将 opencv 安装在 /usr/local/opencv-4.6.0下,移动opencv及其扩展模块并进入工作目录

sudo mv ./opencv-4.6.0 /usr/local/
sudo mv ./opencv_contirb-4.6.0 /usr/local/
cd /usr/local/opencv-4.6.0/

编译前现确定 opencv 的安装路径,我的安装路径是

CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.6.0

确定自己显卡的算力

CUDA GPUs - Compute Capability | NVIDIA Developer

注意 cuda 要根据自己的需求安装,不要装 cuda 12 编译会报错,可以装稍微低一点,可以参考

不同版本CUDA支持的算力_WenZhaoYang123468的博客-CSDN博客

编译 opencv 4.6.0,

sudo mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.6.0 \-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.6.0/modules \-D WITH_CUDA=ON \-D CUDA_ARCH_BIN=8.6 \-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 -j8,如果出现兼容性错误的花建议用 make,速度慢一点

make -j8
sudo make install

这里编译会很慢,耐心等待,只要一开始没有什么报错后面就不会报错。

二、配置cv_bridge 功能包

因为 opencv 的数据和 ROS 的数据需要转化,因此需要通过 cv_bridge 这个桥接工具,接下来我们介绍怎么自己下载安装并配置一个自己的 cv_bridge 功能包。

首先,创建一个 ROS 的工作空间

mkdir -r ~/cv_bridge_460/src/
cd ~/cv_bridge_460/src/

然后,下载对应版本的源码,因为是 Ubuntu 20.04 因此下载 noetic 版本

GitHub - ros-perception/vision_opencv at noetic

下载完成后解压到 ~/cv_bridge-4.6.0/src/ 目录下,因为我们只需要 cv_bridge,所以只需保留 cv_bridge 文件夹,并将其放在 ~/cv_bridge-4.6.0/src/,然后修改一下 cv_bridge 的配置文件。

(1)CMakeLists.txt 文件

在 set(_opencv_version 4) 前面添加你的 opencv 安装路径,大概在第 20 行

set(OpenCV_DIR /usr/local/opencv-4.6.0)
set(_opencv_version 4)
find_package(OpenCV 4 QUIET)

另外由于是自己制作的 cv_bridge,因此最好将包名该一下,我这里是改成 cv_bridge-4.6.0

# project(cv_bridge)
project(cv_bridge_460)

(2)package.xml

同理在 package.xml 中也改一下报名

<package format="2">
#  <name>cv_bridge</name><name>cv_bridge_460</name>

然后编译这个功能包

cd ~/cv_bridge_460/
catkin_make

如果编译成功,则功能包制作就完成了,这也说明 opencv 4.6.0 已经正确安装了,并且这个cv_bridge-4.6.0 可以正确连接上自己安装的 opencv 版本

三、编译vins-fusion-gpu

创建 vins-fusion-gpu 工作空间,拷贝一份前面自己的 cv_bridge-4.6.0 到当前目录

mkdir ~/catkin_ws_gpu/src
cd ~/catkin_ws_gpu/src
sudo cp -r ~/catkin_ws/src/cv_bridge ./

编译

cd .. && catkin_make

然后 source 一下

source ./setup.bash

然后下载 vins-fusion-gpu 包到 catkin_ws/src 工作目录下

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

根据作者提示修改 vins_estimator/CMakeLists.txt 文件在第 20 行插入

include(/usr/local/opencv-4.6.0/build/OpenCVConfig.cmake)

以及将 cv_bridge 改成 cv_bridge-460

find_package(catkin REQUIRED COMPONENTSroscppstd_msgsgeometry_msgsnav_msgstfcv_bridgecamera_modelsimage_transport)

以及 loop_fusion/CMakeLists.txt 文件第 21 行插入

include(/usr/local/opencv-4.6.0/build/OpenCVConfig.cmake)

以及将中 cv_bridge 改成 cv_bridge-460

find_package(catkin REQUIRED COMPONENTSroscppstd_msgsnav_msgscamera_modelscv_bridgecv_bridge-460roslib)

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

cd ./VINS-Fusion-gpu/

终端输入下面代码使得 VINS-Fusion-gpu 自动匹配 OpenCV4 版本

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 '5a #include <opencv2/imgproc/types_c.h> \
#include <opencv2/calib3d/calib3d_c.h>' ./camera_models/include/camodocal/chessboard/Chessboard.h
sed -i '5i #include <opencv2/imgproc/types_c.h> \
#include <opencv2/imgproc/imgproc_c.h>' ./camera_models/include/camodocal/calib/CameraCalibration.h

解释参考 Docker 制作各 ROS 版本 VINS-Fusion 镜像_想要个小姑娘的博客-CSDN博客

然后进入 catkin_ws/ 工作目录,进行编译

cd ~/catkin_ws/
catkin_make

编译成功后 VINS-Fusion-gpu 就可以成功运行啦!


http://www.ppmy.cn/news/657761.html

相关文章

bootstrap table格式化字符串_Python基础入门之字符串(str)

1. 字符串的定义 Python 支持使用成对的 单引号 或 双引号。 print(5 "8") 58 Python 的常用转义字符 print(C:now) C:ow 输入不对劲呀&#xff0c;解决方式有如下两种: 使用转义字符或在原字符前加r&#xff08;好像更简单y( •̀ ω •́ )y&#xff09; print(C:…

相见恨晚的编程学习词典!谁还不是南极滑冰的那个崽儿?!

real-time search service .savedsearchs Gambit 开场白&#xff0c;话题&#xff1b;开始&#xff1b;以取得优势的开棋局法&#xff0c;开局栏局法 primary language 主要语言 restarted subject 主语 verb 动词 object 宾语 SVO 主动宾 SOV 主宾动 polling 投票&#xff0…

pythonstr使用方法_Python基础入门之字符串(str)

1. 字符串的定义 Python 支持使用成对的 单引号 或 双引号。 print(5 "8") 58Python 的常用转义字符 print(C:\now) C: ow 输入不对劲呀&#xff0c;解决方式有如下两种: 使用转义字符或在原字符前加r(好像更简单y( •̀ ω •́ )y) print(C:\\now) print(rC:\now)…

如何基于深度学习实现图像的智能审核?

背景 美团每天有百万级的图片产生量&#xff0c;运营人员负责相关图片的内容审核&#xff0c;对涉及法律风险及不符合平台规定的图片进行删除操作。由于图片数量巨大&#xff0c;人工审核耗时耗力且审核能力有限。另外对于不同审核人员来讲&#xff0c;审核标准难以统一且实时变…

【论文翻译】跨异构网络学习挖掘竞争关系

跨异构网络学习挖掘竞争关系 跨异构网络学习挖掘竞争关系 摘要 发现和监控竞争对手是公司在全球市场保持领先地位的根本。现有的研究主要集中在挖掘单个数据源中的竞争关系&#xff0c;而竞争信息通常分布在多个网络中。在这个问题中&#xff0c;如何发现潜在的模式并利用异…

T-LESS: An RGB-D Dataset for 6D Pose Estimation of Texture-less Objects

T-LESS: An RGB-D Dataset for 6D Pose Estimation of Texture-less Objects 如有错误&#xff0c;欢迎指正摘要1 介绍2. Related Datasets2.1. RGB-D Datasets2.2. Depth-only and RGB-only Datasets2.3. Datasets for Similar Problems 3. The T-LESS Dataset3.1.Acquisition…

JPEG压缩如何工作?

转译自&#xff1a;https://www.impulseadventure.com/photo/jpeg-compression.html 当试图重新保存数码照片时&#xff0c;人们经常会面临使用“质量设置”&#xff08;压缩级别&#xff09;的决定。 JPEG文件格式&#xff08;更恰当的是JFIF&#xff09;允许选择文件大小和图…

跨模态检索研究进展综述【跨模态检索的核心工作在于:①不同模态数据的特征提取、②不同模态数据之间内容的相关性度量】【主流研究方法:基于传统统计分析的技术、基于深度学习的技术】【哈希编码提高检索速度】

随着互联网上多媒体数据的爆炸式增长,单一模态的检索已经无法满足用户需求,跨模态检索应运而生. 跨模态检索旨在以一种模态的数据去检索另一种模态的相关数据。 跨模态检索的核心任务是&#xff1a;数据特征提取 和 不同模态数据之间内容的相关性度量。 文中梳理了跨模态检索…