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

article/2025/6/7 0:27:33

硬件环境: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 <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>

在以下文件:

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 <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>

修改报错文件

在以下文件

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" withany of the following names:cv_bridgeConfig.cmakecv_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 hasbeen 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.hkcw.cn/article/RyhfsxoZUe.shtml

相关文章

AI网校平台开发探索:集成直播、考试题库、白板互动的教育系统源码

当下&#xff0c;如何构建一个真正符合“未来教育”形态的网校平台&#xff0c;成为越来越多教育机构与技术团队关注的焦点。本篇文章&#xff0c;笔者想对教育系统源码的理解与实践&#xff0c;尤其是围绕直播、录播、考试题库与白板互动等核心功能的整合探索。 一、教育行业…

景区停车预警系统:从检测到疏导,告别拥堵!

节假日景区门口堵成长龙&#xff0c;游客找车位难&#xff0c;管理压力大&#xff1f;一套智能停车预警疏导系统是关键。4G地磁检测技术&#xff0c;是构建这套系统的稳定基石。 一、车位实时检测&#xff1a;数据精准是基础 知道车位有没有车、有多少空位是第一步。4G地磁埋…

仓颉项目调试配置与多文件场景下的问题解析

1. 调试配置指南 在 VS Code 中配置好仓颉开发工具链后&#xff0c;只需按下 F5 或 Fn F5 即可启动调试。 在 CodeArts IDE for Cangjie 中&#xff0c;需先通过右上角的 编辑配置 -> 新增配置项 -> 选择 Cangjie (cjdb) Debug -> 选择 launch 模式 -> 点击 确认…

【北邮 操作系统】第十三章 I/O系统

最后一章啦&#xff0c;完结撒花hhh 一、I/O设备的概念和分类 【1】I/O设备的概念&#xff1a;I/0设备就是可以将数据输入到计算机&#xff0c;或者可以接收计算机输出数据的外部设备&#xff0c;属于计算机中的硬件部件。 【2】I/O设备的类型 设备按传输速率分类&#xff…

机器学习——放回抽样

为了构建树集成模型&#xff0c;需要一种叫做有放回采样的技术。 以4个标记为演示&#xff0c;分别是红色、黄色、绿色和蓝色&#xff0c;用一个黑色的袋子把这四个标记的例子放进去&#xff0c;然后从这个袋子里有放回地抽取四次&#xff0c;抽出一个标记&#xff0c;结果是绿…

组相对策略优化(GRPO):原理及源码解析

文章目录 PPO vs GRPOPPO的目标函数GRPO的目标函数KL散度约束与估计ORM监督RL的结果PRM监督RL的过程迭代RL算法流程 GRPO损失的不同版本GRPO源码解析 DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models PPO vs GRPO PPO的目标函数 J P P O…

黑马Java面试笔记之 集合篇(算法复杂度+ArrayList+)

一. 算法复杂度分析 1.1 时间复杂度 时间复杂度分析&#xff1a;来评估代码的执行耗时的 常见的复杂度表示形式 常见复杂度 1.2 空间复杂度 空间复杂度全称是渐进空间复杂度&#xff0c;表示算法占用的额外存储空间与数据规模之间的增长关系 二. 数组 数组&#xff08;Array&a…

AI数据集构建:从爬虫到标注的全流程指南

AI数据集构建&#xff1a;从爬虫到标注的全流程指南 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 AI数据集构建&#xff1a;从爬虫到标注的全流程指南摘要引言流程图&#xff1a;数据集构建全生命周期一、数据采…

飞算 JavaAI 赋能老项目重构:破旧立新的高效利器

许多企业的 Java 老项目面临着代码陈旧、架构落后、维护困难等问题。老项目重构势在必行&#xff0c;却又因庞大的代码量、复杂的业务逻辑让开发团队望而却步。 老项目重构困境重重 传统的 Java 老项目往往在长期的迭代和维护中积累了诸多问题。一方面&#xff0c;代码质量堪…

服装产品属性描述数据集(19197条),AI智能体知识库收集~

今天再来分享一个关于服装产品属性描述数据集&#xff01;可用户AI训练&#xff0c;AI智能体知识库&#xff01; 一、数据集介绍 电商文案优化 / 属性智能识别 / 服装产品描述数据训练首选资源 1、数据规模&#xff1a; 共计 19197 条 2、文件格式&#xff1a; Excel格式 3、字…

Java程序员学从0学AI(四)

一、前言 在上一篇文章中&#xff0c;我们学习了SpringAI种的Advisor组件&#xff0c;这个是一个类似AOP的&#xff0c;用于增强大模型调用的组件。今天我们继续学习新的组件提示词&#xff1a;Prompts 二、Prompts 1、简介 提示词是我们和大模型交互的入口&#xff0c;我们…

从 iPhone 备份照片: 保存iPhone图片的5种方法

随着智能手机越来越融入我们的生活&#xff0c;我们的照片已成为我们设备上最有价值的数据形式之一。然而&#xff0c;iPhone内部存储空间仍然有限&#xff0c;因此我们需要将iPhone中的照片备份到另一个地方&#xff0c;以释放空间并确保珍贵的图像记忆的安全。阅读本指南&…

AU3110 10W、7.5V至18V、无电感器、立体声D类扬声器放大器(替代TPA3110)

1.特性 ● 输出功率 - 2 x 11W 12V,6Ω,THDN 1% - 2 x 15.5W 12V,4Ω,THDN 1% - 1 x 21W 12V,4Ω,THDN 1% - THDN< 0.04% 12V,6Ω,1W, 1kHz ● 供电电压范围 - 7.5V-18V 低导通阻抗 RDs(on):140mΩ ● 固定增益&#xff1a; - 26dB ● 低静态功耗 - > 90% Class D效率 ●…

系统设计面试利器:The System Design Primer开源项目介绍

引言 在当今软件工程领域&#xff0c;系统设计能力已经成为评判一名高级工程师技术水平的重要标准。无论是顶级科技公司的技术面试&#xff0c;还是实际工作中设计大规模分布式系统&#xff0c;掌握系统设计知识都是必不可少的技能。今天我们要深入探讨的是 GitHub 上一个备受…

一周学会Pandas2之Python数据处理与分析-Pandas2数据绘图与可视化

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Pandas 集成了 Matplotlib&#xff0c;提供了简单高效的绘图接口&#xff0c;使数据可视化变得直观便捷。本指南将详…

Go语言快速入门(基础语法与面向对象OOP)

文章目录 阅读前置条件golang环境安装golang特点第一个Go程序Go语言变量声明常量Golang多返回值的三种写法go函数import匿名与别名导包方式指针defer关键字结束(defer会在结束时调用&#xff0c;类似Java的finally)slice切片数组与动态数组的定义动态数组与切片的四种声明方式s…

用AI(Deepseek)做了配色网站-功能介绍【欢迎体验】

前言 前面分享了一篇文章&#xff1a;关于用AI做了一个配色网站&#xff0c;并讲了如何“结合AI开发想法”实现作品。 以下是文章链接&#xff1a; 一天时间&#xff0c;我用AI(DeepSeek)做了一个配色网站 当时为第一版本&#xff0c;网站的很多功能和细节还有很多完善的地方…

【2025年B卷】OD-100分-斗地主之顺子

专栏订阅🔗 -> 赠送OJ在线评测 斗地主之顺子 问题描述 卢小姐喜欢玩斗地主扑克牌游戏。在这个游戏中,扑克牌由小到大的顺序为:3、4、5、6、7、8、9、10、J、Q、K、A、2。玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等多种组合。 顺子是一种常见的出牌方…

题山采玉: Day1

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…

优化 Transformer 模型:基于知识蒸馏、量化技术及 ONNX

Transformer 模型非常强大&#xff0c;但往往太大太慢&#xff0c;不适合实时应用。为了解决这个问题&#xff0c;我们来看看三种关键的优化技术&#xff1a;知识蒸馏、量化和ONNX 图优化。这些技术可以显著减少推理时间和内存使用。 为了说明每种技术的利弊&#xff0c;我们以…