完整教程:无人机避障——感知部分(Ubuntu 20.04 复现Vins Fusion跑数据集)胎教级教程

news/2025/10/7 16:00:07/文章来源:https://www.cnblogs.com/lxjshuju/p/19128576

硬件环境:NVIDIA Jeston Orin nx

系统:Ubuntu 20.04

任务:跑通 EuRoC MAV Dataset 数据集

展示结果:

编译Vins Fusion

创建工作空间vins_ws

# 创建目录结构
mkdir -p ~/vins_ws/srccd ~/vins_ws/src# 初始化工作空间(生成 CMakeLists.txt)
catkin_init_workspace# 克隆官网的代码
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.gitcd ..catkin_make

遇到了不少报错,参考以下内容可以基本解决前期的编译问题。

将c++11 修改为c++14

用VScode搜索set(CMAKE_CXX_FLAGS "-std=c++11"),全部替换为set(CMAKE_CXX_FLAGS "-std=c++14"),图中我已经全部替换过了。

指定find_package中的OpenCV的版本

用VScode搜索find_package(OpenCV REQUIRED),全部替换为find_package(OpenCV 4 REQUIRED),图中我已经全部替换过了。

添加头文件

camera_models>include>camodocal>chessboard>Chessboard.h中添加

#include 
#include 

在以下文件:

camera_models/include/camodocal/calib/CameraCalibration.h
loop_fusion/src/pose_graph.h
vins_estimator/src/featureTracker/feature_tracker.h
loop_fusion/src/ThirdParty/DVision/BRIEF.h

加入以下的头文件:

#include 
#include 

修改报错文件

在以下文件

VINS-Fusion/vins_estimator/src/KITTIGPSTest.cpp

VINS-Fusion/vins_estimator/src/KITTIOdomTest.cpp

其中,将 CV_LOAD_IMAGE_GRAYSCALE修改为cv::IMREAD_GRAYSCALE,同样的直接用VScode搜索 CV_LOAD_IMAGE_GRAYSCALE将其替换即可。

然后编译

usr/bin/ld: warning: libopencv_video.so.4.2, needed by /home/nvidia/vins_ws/devel/lib/libvins_lib.so, may conflict with libopencv_video.so.405
/usr/bin/ld: warning: libopencv_imgcodecs.so.405, needed by /home/nvidia/vins_ws/devel/lib/libvins_lib.so, may conflict with libopencv_imgcodecs.so.4.2
/usr/bin/ld: warning: libopencv_core.so.405, needed by /usr/local/lib/libopencv_video.so.4.5.5, may conflict with libopencv_core.so.4.2
/usr/bin/ld: warning: libopencv_video.so.4.2, needed by /home/nvidia/vins_ws/devel/lib/libvins_lib.so, may conflict with libopencv_video.so.405
/usr/bin/ld: warning: libopencv_imgcodecs.so.405, needed by /home/nvidia/vins_ws/devel/lib/libvins_lib.so, may conflict with libopencv_imgcodecs.so.4.2
/usr/bin/ld: warning: libopencv_core.so.405, needed by /usr/local/lib/libopencv_video.so.4.5.5, may conflict with libopencv_core.so.4.2
[ 98%] Built target kitti_odom_test
[ 98%] Built target kitti_gps_test
[100%] Linking CXX executable /home/nvidia/vins_ws/devel/lib/vins/vins_node
/usr/bin/ld: warning: libopencv_video.so.4.2, needed by /home/nvidia/vins_ws/devel/lib/libvins_lib.so, may conflict with libopencv_video.so.405
/usr/bin/ld: warning: libopencv_core.so.405, needed by /usr/local/lib/libopencv_video.so.4.5.5, may conflict with libopencv_core.so.4.2

编译虽然通过了,但是有警告,这里是因为在链接过程中存在 OpenCV 库版本冲突。系统检测到两个不同版本的 OpenCV 库(4.2 和 4.5.5)被同时链接 。

段错误

如果不解决上述OpenCV 库版本冲突问题,后续运行vins_node将会出现段错误:

解决OpenCV 库版本冲突问题。

最好的解决方法就是全部统一成一个OpenCV 4.5.5。

# 卸载通过 apt 安装的 OpenCV
sudo apt purge -y '^libopencv.*' '^opencv.*'# 清除残留配置文件
sudo rm -rf /usr/local/include/opencv* /usr/local/lib/libopencv* /usr/local/share/opencv* \
/usr/include/opencv* /usr/lib/x86_64-linux-gnu/libopencv* \
~/.local/lib/python*/*/site-packages/cv2*# 更新系统库缓存
sudo ldconfig# 更新下
sudo apt-get updatesudo apt-get upgrade# 下载Opencv 4.5.5源码
wget https://github.com/opencv/opencv/archive/refs/tags/4.5.5.zip# 解压
unzip opencv-4.5.5.zip# 安装依赖
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config# 编译安装
mkdir buildcd buildcmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=O -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..make -j8
sudo make install# 环境配置
sudo gedit /etc/ld.so.conf.d/opencv.conf# 添加以下路径
/usr/local/lib# 保存后,终端执行
sudo ldconfig# 更新路径
sudo gedit /etc/bash.bashrc# 最后添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH# 保存后,终端执行
source /etc/bash.bashrc
sudo updatedb

然后编译Vins Fusion 发现没有 cv_bridge

ither need to install the package with the same name or change your environment so that it can be found.
CMake Error at /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by "cv_bridge" with
any of the following names:cv_bridgeConfig.cmake
cv_bridge-config.cmakeAdd the installation prefix of "cv_bridge" to CMAKE_PREFIX_PATH or set
"cv_bridge_DIR" to a directory containing one of the above files. If
"cv_bridge" provides a separate development package or SDK, be sure it has
been installed.
Call Stack (most recent call first):
VINS-Fusion/loop_fusion/CMakeLists.txt:9 (find_package)-- Configuring incomplete, errors occurred!
See also "/home/nvidia/vins_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/nvidia/vins_ws/build/CMakeFiles/CMakeError.log".
Invoking "cmake" failed

如果用这条ROS相关的安装cv_bridge的指令还会报错:

# 安装 ROS Noetic 的 cv_bridge
sudo apt-get install ros-noetic-cv-bridge

 原因是系统安装了OpenCV 4.5.5,但通过ROS官方源安装的cv_bridge是针对OpenCV 4.2编译的。而我们的代码需要OpenCV 4.5.5,因此可能需要重新编译cv_bridge以匹配我们安装的OpenCV版本。

重新编译cv_bridge以匹配OpenCV 4.5.5版本

# 1. 卸载旧版本(重要!)
sudo apt remove ros-noetic-cv-bridge# 2. 创建工作空间
mkdir -p ~/cv_bridge_ws/src
cd ~/cv_bridge_ws/src# 3. 获取vision_opencv源码(noetic分支)
git clone -b noetic https://github.com/ros-perception/vision_opencv.git# 4. 关键:修改编译配置
sed -i 's/find_package(OpenCV 3 REQUIRED)/find_package(OpenCV 4.5 REQUIRED)/g' vision_opencv/cv_bridge/CMakeLists.txt# 5. 编译安装
cd ~/cv_bridge_ws
catkin config -DCMAKE_BUILD_TYPE=Release -DOpenCV_DIR=/path/to/opencv4.5.5/build
catkin build cv_bridge# 6. 添加环境变量(永久生效)
echo "source ~/cv_bridge_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

如果安装完还是报错:

# 查找 cv_bridge 的实际安装位置
find / -name "*cv_bridge*Config.cmake" 2>/dev/null

得到下面这个路径

/home/nvidia/cv_bridge_ws/devel/share/cv_bridge/cmake/cv_bridgeConfig.cmake 

在VINS-Fusion的CMakeLists.txt中(具体是loop_fusion/CMakeLists.txt)的find_package(cv_bridge)之前加入:

set(cv_bridge_DIR "/home/nvidia/cv_bridge_ws/devel/share/cv_bridge/cmake")

最后编译成功,没有warning也没有报错:

最后结果:

roslaunch vins vins_rviz.launchrosrun vins vins_node src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yamlrosrun loop_fusion loop_fusion_node src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml# 数据集去Vins-Fusion github官网上进行下载
rosbag play MH_01_easy.bag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

姑苏区网站建设广州专业网站改版方案

企业们正在寻找新的方式来吸引和保持观众的注意力,一种新兴的解决方案就是使用Avatar虚拟形象技术,这种技术可以让用户在视频拍摄或直播场景中,以自定义的数字人形象出现,同时保持所有的表情和脸部驱动。美摄科技正是这个领域的领军者&#x…

我真的博了

其实标题指的是博弈论。 [AGC002E] Candy Piles 桌子上有 \(N\) 堆糖果。每堆糖果有 \(a_i\) 颗糖果。 Snuke 和 Ciel 正在玩游戏。他们轮流走。Snuke 先走。在每个回合中,当前玩家必须执行以下两个操作之一:选择剩余…

深入解析:人工智能-Chain of Thought Prompting(思维链提示,简称CoT)

深入解析:人工智能-Chain of Thought Prompting(思维链提示,简称CoT)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

2025.10.6——1绿1蓝

普及+/提高- P3388 【模板】割点(割顶) Tarjan算法的模板题,但是代码不是我写的。 老师写的代码,有问题,我找出问题了。 提高+/省选- P1073 [NOIP 2009 提高组] 最优贸易 听完老师讲解后感觉这道题真的不难,很快…

红色网站呢网站备案查询 api

前言:预处理是我们的c语言源代码成为可执行程序的第一个步骤。而宏和预处理指令都是在这个阶段完成。本节内容就是关于宏和预处理指令相关知识点的解析。 目录 宏 预定义符号 #define定义常量 #define定义符号 #define定义宏 带副作用的宏参数 宏的替换规则…

深入解析:OpenCV CUDA模块图像处理------双边滤波的GPU版本函数bilateralFilter()

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

年龄排序

题目:样例:代码部分: include<stdio.h> int main() { int n; //人数 scanf_s("%d", &n); //结构体信息采集 struct patient { long id; int age; }; struct patient s1[10]; for (int i = 0;…

深入解析:Spring框架学习day3--Spring数据访问层管理(IOC)

深入解析:Spring框架学习day3--Spring数据访问层管理(IOC)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

转战web3远程工作的英语学习的路线规划 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

二分图最大匹配 输出具体方案

洛谷P2756 匈牙利算法: #include<bits/stdc++.h> using namespace std; const int N=110; int match[N],vis[N]; int n,m; vector<int> edges[N]; bool dfs(int u){for(int &v:edges[u]){if(vis[v])c…

我的联想小新潮7000笔记本的优化

500块钱,买了个笔记本,很卡。 优化一下: 1。内存升级,4G+16G=20G 2.硬盘升级:2G的固态+1G的机械 3.系统安装的时候,使用win10或者其他版本的纯净的版本 4.cpu频率增加。 注意:如果你不注意散热,这样可能电脑烧…

网站网页?问?高端营销网站定制

SHAP库概述 SHAP&#xff08;SHapley Additive exPlanations&#xff09;是一个Python库,用于解释任何机器学习模型的预测.它基于博弈论中的Shapley值概念,可以帮助用户理解模型预测中各个特征的贡献度. 安装与使用 # 命令安装SHAP库&#xff1a;pip install shap使用SHAP库…

Go语言之接口与多态 -《Go语言实战指南》 - 指南

Go语言之接口与多态 -《Go语言实战指南》 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

厦门网站建设费用嘉祥县建设局网站

阿里云服务器配置怎么选择&#xff1f;CPU内存、公网带宽和系统盘怎么选择&#xff1f;个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例&#xff0c;企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com整…

加强网站建设的请示英文建站平台

本专栏内容为&#xff1a;八大排序汇总 通过本专栏的深入学习&#xff0c;你可以了解并掌握八大排序以及相关的排序算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;八大排序汇总 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库…

网站开发 调试天津建设工程信息网怎么登录

转自&#xff1a;http://www.blogjava.net/lukangping/archive/2010/08/01/327693.html 记得在当时学习uml总是不好分清聚合与组合的关系&#xff0c;找工作时特地复习了这块的内容&#xff0c;结果正巧被面试官问道&#xff0c;这两天又在搞这块的内容&#xff0c;对聚合与组合…

网站备案网站前置审批网站建设中的安全问题

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

Success of Europa

The Success of Europa dues to her geographic diversity and its close to the largest land, Asia so it can "pirate".and its a \(\Delta\) just like India, not the ☽ like Arabs or J.The major ci…

2025多校冲刺CSP模拟赛4 总结

比赛:2025多校冲刺CSP模拟赛4 日期:\(25.10.07\),场地:\(\text{accoder}\),排名:\(42/114\) 估分:\(100+100+28+25=253\) 终分:\(100 + 100+28+29 =257\) 应该得分:\(100+100+28+71=299\) 失分 \(T_4\) 纯暴力…