SuperVINS:应对挑战性成像条件的实时视觉-惯性SLAM框架【全流程配置与测试!!!】【2025最新版!!!!】

news2025/5/22 22:35:25

一、项目背景及意义

SuperVINS是一个改进的视觉-惯性SLAM(同时定位与地图构建)框架,旨在解决在挑战性成像条件下的定位和地图构建问题。该项目基于经典的VINS-Fusion框架,但通过引入深度学习方法进行了显著改进。
视觉-惯性导航系统(VINS)在机器人、自动驾驶、增强现实等领域具有广泛应用前景。然而,传统的SLAM系统在光照变化、模糊、快速运动等挑战性环境下性能会显著下降。SuperVINS通过深度学习方法增强了SLAM系统的鲁棒性,特别是在这些困难环境下的表现。

二、解决的问题

SuperVINS主要解决了以下几个问题:

  • 挑战性成像条件下的特征检测与匹配:传统特征点检测方法在光照变化、模糊等条件下容易失败。
  • 前端追踪稳定性问题:常规光流法在快速运动或视角变化时容易丢失跟踪。
  • 回环检测能力有限:传统回环检测方法对环境变化不够鲁棒。
  • 实时性和精度的平衡:深度学习方法通常计算量大,如何在保证性能的同时实现实时运行。

三、使用的方法

SuperVINS的核心改进在于将深度学习特征与传统视觉-惯性融合算法结合:

1、前端特征处理:

  • 替换了原VINS-Fusion基于光流追踪的前端,采用SuperPoint网络进行特征点提取和描述
  • 使用LightGlue网络进行特征匹配,提高匹配的准确性和鲁棒性

2、回环检测:

  • 将原DBoW2替换为DBoW3词袋系统
  • 使用SuperPoint深度学习描述子进行回环检测,提高了回环检测的准确性

3.后端优化:

  • 保留了VINS-Fusion优秀的后端优化框架,结合了视觉和IMU数据进行多传感器融合

4、加速策略:

  • 使用ONNX Runtime进行模型推理加速,保证系统实时性

四、效果与性能

根据项目信息,SuperVINS在以下方面表现出色:

  • 鲁棒性增强:在光照变化、运动模糊等挑战性条件下具有更强的稳定性
  • 实时性能:尽管引入了深度学习方法,但通过优化实现了实时运行能力
  • 回环检测能力提升:基于深度学习描述子的回环检测在环境变化时有更好的表现

论文已于2025年3月发表在IEEE Sensors Journal上,表明其研究价值和技术水平得到了认可。

五、创新点

  • 深度学习与传统SLAM融合:巧妙地将SuperPoint和LightGlue等深度学习方法与经典VINS-Fusion框架结合
  • 全流程深度学习特征:使用SuperPoint特征贯穿前端和回环检测全过程,保持特征描述的一致性
  • 实时性与高精度平衡:通过ONNX Runtime等优化手段,在保证深度学习模型性能的同时实现实时运行
  • 系统集成与工程实现:将多个先进组件有机集成为完整系统并开源,具有实用价值

六、主要工作流程

SuperVINS的工作流程可以概括为:

  • 图像预处理:对输入图像进行基本处理
  • 特征提取:使用SuperPoint网络提取特征点和描述子
  • 特征匹配:使用LightGlue网络匹配当前帧与前一帧的特征点
  • 视觉-惯性融合:结合匹配的视觉特征和IMU数据进行状态估计
  • 后端优化:基于滑动窗口的非线性优化
  • 回环检测与闭环:基于SuperPoint描述子和DBoW3进行回环检测,闭环优化地图

七、开源状态

SuperVINS是完全开源的项目,代码托管在GitHub上:https://github.com/luohongk/SuperVINS,使用GPL 3.0开源许可证。

八、工作优缺点分析

1、优点:

  • 鲁棒性提升:在挑战性环境下表现优于传统方法
  • 实时性能:成功实现了深度学习特征与实时SLAM的结合
  • 开源共享:完整开源代码和详细文档,有利于学术交流和技术推广
  • 系统完整性:提供了从前端到后端再到回环检测的完整解决方案

2、缺点:

  • 依赖性:需要依赖多个第三方库和深度学习框架,部署和编译可能较为复杂
  • 计算资源需求:相比传统方法,对硬件资源要求更高
  • 版本状态:项目仍在更新中,当前SuperVINS 1.0版本尚未支持回环检测功能
  • 泛化能力:对于未见过的极端环境可能仍有挑战

九、推荐测试数据集

SuperVINS主要在EuRoC MAV数据集上进行了测试。EuRoC是一个广泛用于视觉-惯性SLAM评估的标准数据集,包含了多个不同难度的序列。项目提供的下载脚本会自动下载V2_01_easy序列:

./download_data.sh  # 这会下载EuRoC V2_01_easy.bag数据

其他推荐的测试数据集:

  • EuRoC完整数据集:其他难度序列如MH_01_easy、MH_05_difficult等
  • TUM VI数据集:提供更多样化的场景和运动模式
  • KITTI数据集:适合测试户外场景性能

十、使用自有数据集

如果要使用自己的数据集测试SuperVINS,需要将数据转换为ROS bag格式,并确保包含以下内容:

  • 单目或双目图像:发布为标准ROS图像消息
  • IMU数据:发布为标准的IMU消息

需要配置适合你的数据集的参数文件:

  • 相机内参:包括焦距、主点和畸变参数
  • IMU参数:噪声、随机游走等参数
  • 外参:相机与IMU之间的相对位姿

十一、环境配置与测试

我测试的环境是Ubuntu 20.04,CUDA 11.8,RTX 4090

1、安装ros

作者推荐 Ros1 noetic,具体安装方法可以参考ROS官方教程
安装好了之后,可以运行roscore进行测试
在这里插入图片描述
出现上述信息就代表ros安装好了!!

2、安装依赖库

# 安装Ceres Solver
mkdir -p ~/Thirdparty
cd ~/Thirdparty
git clone https://github.com/ceres-solver/ceres-solver.git -b 2.1.0
cd ceres-solver
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=~/Thirdparty/Ceres
make -j8
make install

# 安装ONNX Runtime
cd ~/Thirdparty
wget https://github.com/microsoft/onnxruntime/releases/download/v1.16.3/onnxruntime-linux-x64-gpu-1.16.3.tgz
tar -zxvf onnxruntime-linux-x64-gpu-1.16.3.tgz
mv onnxruntime-linux-x64-gpu-1.16.3 onnxruntime

3、创建工作区

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/
catkin_init_workspace
cd ~/catkin_ws
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bash
source ~/.bashrc

4、修改CMakeLists.txt中的路径

# 打开文件vins_estimator/CMakeLists.txt, supervins_loop_fusion/CMakeLists.txt, camera_models/CMakeLists.txt

change
set(ONNXRUNTIME_ROOTDIR "/home/lhk/Thirdparty/onnxruntime")
find_package(Ceres REQUIRED PATHS "/home/lhk/Thirdparty/Ceres")
to
set(ONNXRUNTIME_ROOTDIR "your onnxruntime path")
find_package(Ceres REQUIRED PATHS "you Ceres path")

我修改完的CMakeLists.txt内容如下:

  • vins_estimator/CMakeLists.txt
    在这里插入图片描述
  • supervins_loop_fusion/CMakeLists.txt
    在这里插入图片描述
  • camera_models\CMakeLists.txt
    在这里插入图片描述

5、编译SuperVINS


# 克隆SuperVINS
git clone https://github.com/luohongk/SuperVINS.git

# 下载数据集
cd SuperVINS
chmod +x download_data.sh
./download_data.sh

# 编译项目
cd ~/catkin_ws
catkin_make -j8

# 添加到环境变量
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

六、运行EuRoC数据集测试

# 终端1:启动RViz可视化界面
roslaunch supervins supervins_rviz.launch

# 终端2:启动SuperVINS
rosrun supervins supervins_node ~/catkin_ws/src/SuperVINS/config/euroc/euroc_mono_imu_config.yaml

# 终端3:(当前版本不支持回环检测,未来版本可用)
# rosrun supervins_loop_fusion supervins_loop_fusion_node ~/catkin_ws/src/SuperVINS/config/euroc/euroc_mono_imu_config.yaml

# 终端4:播放数据集
rosbag play ~/catkin_ws/src/SuperVINS/data/V2_01_easy.bag

我自己实际测试的路径及命令如下所示:

sun@sun:~/Project/SurperVINS/catkin_ws$ roslaunch supervins supervins_rviz.launch
sun@sun:~/Project/SurperVINS/catkin_ws$ rosrun supervins supervins_node src/SuperVINS/config/euroc/euroc_mono_imu_config.yaml 
sun@sun:~/Project/SurperVINS/catkin_ws/src/SuperVINS/data$ rosbag play V2_01_easy.bag 
[INFO] [1747842367.015657289]: Opening V2_01_easy.bag

Waiting 0.2 seconds after advertising topics... done.

Hit space to toggle paused, or 's' to step.
 [RUNNING]  Bag Time: 1413393235.057626   Duration: 23.120455 / 113.974481  

RVIZ界面如下:
在这里插入图片描述

十二、自有数据集测试

假设你已经准备好了符合ROS标准的bag文件(包含图像和IMU数据),步骤如下:

1、创建配置文件:

# 复制并修改配置文件
cp ~/catkin_ws/src/SuperVINS/config/euroc/euroc_mono_imu_config.yaml ~/catkin_ws/src/SuperVINS/config/custom_config.yaml

# 使用文本编辑器修改配置参数,主要包括:
# - 相机内参和畸变参数
# - IMU噪声参数
# - 话题名称,确保与你的bag文件中的话题一致

2、运行测试

# 终端1:启动RViz
roslaunch supervins supervins_rviz.launch

# 终端2:启动SuperVINS,使用自定义配置
rosrun supervins supervins_node ~/catkin_ws/src/SuperVINS/config/custom_config.yaml

# 终端3:播放自定义数据集
rosbag play 你的数据集.bag

十三、总结

SuperVINS是一个创新性地将深度学习特征与经典视觉-惯性SLAM融合的开源项目,特别适合解决挑战性成像条件下的定位问题。该项目基于VINS-Fusion的优秀框架,通过引入SuperPoint特征点和LightGlue匹配网络,显著提高了系统在复杂环境下的鲁棒性。
项目由武汉大学BRAIN实验室开发,已发表于IEEE Sensors Journal,代码完全开源。通过本文提供的详细安装和测试方案,可以在自己的环境中成功运了SuperVINS,并使用自定义数据集进行测试和性能评估。
对于计算机视觉、SLAM和机器人领域的研究者和工程师来说,SuperVINS提供了一个值得参考的深度学习增强SLAM系统实现。

如果有问题或者经验交流,欢迎评论区留言!!

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

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

相关文章

Node-Red通过开疆智能Profinet转ModbusTCP采集西门子PLC数据配置案例

一、内容简介 本篇内容主要介绍Node-Red通过node-red-contrib-modbus插件与开疆智能ModbusTCP转Profinet设备进行通讯,这里Profinet转ModbusTCP网关作为从站设备,Node-Red作为主站分别从0地址开始读取10个线圈状态和10个保持寄存器,分别用Mo…

【性能测试】jvm监控

使用本地jvisualvm远程监控服务器 参考文章:https://blog.csdn.net/yeyuningzi/article/details/140261411 jvisualvm工具默认是监控本地jvm,如果需要监控远程就要修改配置参数 1、先查看是否打开 ps -ef|java 如果打开杀掉进程 2、进入项目服务路径下…

Uniapp开发鸿蒙应用时如何运行和调试项目

经过前几天的分享,大家应该应该对uniapp开发鸿蒙应用的开发语法有了一定的了解,可以进行一些简单的应用开发,今天分享一下在使用uniapp开发鸿蒙应用时怎么运行到鸿蒙设备,并且在开发中怎么调试程序。 运行 Uniapp项目支持运行到…

QT+RSVisa控制LXI仪器

1.下载并安装visa R&SVISA - Rohde & Schwarz China 2.安装后的目录说明 安装了64位visa会默认把32位的安装上; 64位库和头文件目录为:C:\Program Files\IVI Foundation 32位库和头文件目录为:C:\Program Files (x86)\IVI Foundation…

springboot3+vue3融合项目实战-大事件文章管理系统-文章分类也表查询(条件分页)

在pojo实体类中增加pagebean实体类 Data NoArgsConstructor AllArgsConstructor public class PageBean <T>{private Long total;//总条数private List<T> items;//当前页数据集合 }articlecontroller增加代码 GetMappingpublic Result<PageBean<Article&g…

Canvas进阶篇:鼠标交互动画

Canvas进阶篇&#xff1a;鼠标交互动画 前言获取鼠标坐标鼠标事件点击事件监听代码示例效果预览 拖动事件监听代码示例效果预览 结语 前言 在上一篇文章Canvas进阶篇&#xff1a;基本动画详解 中&#xff0c;我们讲述了在Canvas中实现动画的基本步骤和动画的绘制方法。本文将进…

【Node.js】Web开发框架

个人主页&#xff1a;Guiat 归属专栏&#xff1a;node.js 文章目录 1. Node.js Web框架概述1.1 Web框架的作用1.2 Node.js主要Web框架生态1.3 框架选择考虑因素 2. Express.js2.1 Express.js概述2.2 基本用法2.2.1 安装Express2.2.2 创建基本服务器 2.3 路由2.4 中间件2.5 请求…

使用Vite创建一个动态网页的前端项目

1. 引言 虽然现在的前端更新换代的速度很快&#xff0c;IDE和工具一批批的换&#xff0c;但是我们始终要理解一点基本的程序构建的思维&#xff0c;这些环境和工具都是为了帮助我们更快的发布程序。笔者还记得以前写前端代码的时候&#xff0c;只使用文本编辑器&#xff0c;然…

系统架构设计师案例分析题——web篇

软考高项系统架构设计师&#xff0c;其中的科二案例分析题为5选3&#xff0c;总分75达到45分即合格。本贴来归纳web设计题目中常见的知识点即细节&#xff1a; 目录 一.核心知识 1.常见英文名词 2.私有云 3.面向对象三模型 4.计网相关——TCP和UDP的差异 5.MQTT和AMQP协…

MySQL--day5--多表查询

&#xff08;以下内容全部来自上述课程&#xff09; 多表查询 1. 为什么要用多表查询 # 如果不用多表查询 #查询员工名为Abel的人在哪个城市工作? SELECT* FROM employees WHERE last_name Abel;SELECT * FROM departments WHERE department_id 80;SELECT * FROM locati…

leetcode hot100刷题日记——7.最大子数组和

class Solution { public:int maxSubArray(vector<int>& nums) {//方法一&#xff1a;动态规划//dp[i]表示以i下标结尾的数组的最大子数组和//那么在i0时&#xff0c;dp[0]nums[0]//之后要考虑的就是我们要不要把下一个数加进来&#xff0c;如果下一个数加进来会使结…

基于Spring Boot和Vue的在线考试系统架构设计与实现(源码+论文+部署讲解等)

源码项目获取联系 请文末卡片dd我获取更详细的演示视频 系统介绍 基于Spring Boot和Vue的在线考试系统。为学生和教师/管理员提供一个高效、便捷的在线学习、考试及管理平台。系统采用前后端分离的架构&#xff0c;后端基于成熟稳定的Spring Boot框架&#xff0c;负责数据处理…

Android 绘制折线图

用了一段时间的 Jetpack Compose ,感觉写 UI 的效率确实会提升不少 。 配合 AI 编程绘制了一个折线图。供大家学习参考! @Composable fun TemperatureChart() {val timeLabels = listOf("7:00", "8:00", "9:00", "10:00", "11:…

自建srs实时视频服务器支持RTMP推流和拉流

文章目录 一、整体示意图二、服务器端1.srs简介及架构2.docker方式安装3.k8s方式安装4.端口 三、推流端1.OBS Studio2.ffmpeg推流3.streamlabs苹果手机4.twire安卓手机5.网络推流摄像头 四、拉流端1.vlc2.srs 参考awesome系列&#xff1a;https://github.com/juancarlospaco/aw…

Spring IOCDI————(2)

DI详解 我们之前讲了控制反转IOC&#xff0c;也就是bean的存&#xff0c;那么我们还需要Bean的取&#xff0c;就是DI了&#xff0c;DI翻译过来就是依赖注入&#xff0c;啥意思呢&#xff0c;就是我们通过IOC容器&#xff0c;把所有的对象交给Spring管理&#xff0c;我们指定哪…

融云 uni-app IMKit 上线,1 天集成,多端畅行

融云 uni-app IMKit 正式上线&#xff0c;支持一套代码同时运行在 iOS、Android、H5、小程序主流四端&#xff0c;集成仅需 1 天&#xff0c;并可确保多平台的一致性体验。 融云 uni-app IMKit 在 Vue 3 的高性能加持下开发实现&#xff0c;使用 Vue 3 Composition API&#x…

篇章五 项目创建

目录 1.创建一个SpringBoot项目 2.创建核心类 2.1 Exchange类 2.2 MessageQueue类 2.3 Binding类 2.4 Message类 1.Message的组成 2.逻辑删除 3.工厂方法 4.序列化与反序列化 5.offsetBeg和offsetEnd 1.创建一个SpringBoot项目 1.点击 2.填写表单 3.添加依赖 2.创建…

aws平台s3存储桶夸域问题处理

当我们收到开发反馈s3存在跨域问题 解决步骤&#xff1a; 配置 S3 存储桶的 CORS 设置&#xff1a; 登录到 AWS 管理控制台。转到 S3 服务。选择你存储文件的 存储桶。点击 权限 标签页。在 跨域资源共享&#xff08;CORS&#xff09;配置 部分&#xff0c;点击 编辑。 登陆…

【vue-text-highlight】在vue2的使用教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载二、使用步骤1.引入库2.用法 效果速通 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发…

pycharm无法正常调试问题

pycharm无法正常调试问题 1.错误代码 已连接到 pydev 调试器(内部版本号 231.8109.197)Traceback (most recent call last):File "E:\Python\pycharm\PyCharm 2023.1\plugins\python\helpers\pydev\_pydevd_bundle\pydevd_comm.py", line 304, in _on_runr r.deco…