SuperVINS:应对挑战性成像条件的实时视觉-惯性SLAM框架【全流程配置与测试!!!】【2025最新版!!!!】
一、项目背景及意义
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.txtchange
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.bagWaiting 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系统实现。
如果有问题或者经验交流,欢迎评论区留言!!
相关文章:

SuperVINS:应对挑战性成像条件的实时视觉-惯性SLAM框架【全流程配置与测试!!!】【2025最新版!!!!】
一、项目背景及意义 SuperVINS是一个改进的视觉-惯性SLAM(同时定位与地图构建)框架,旨在解决在挑战性成像条件下的定位和地图构建问题。该项目基于经典的VINS-Fusion框架,但通过引入深度学习方法进行了显著改进。 视觉-惯性导航系…...

Node-Red通过开疆智能Profinet转ModbusTCP采集西门子PLC数据配置案例
一、内容简介 本篇内容主要介绍Node-Red通过node-red-contrib-modbus插件与开疆智能ModbusTCP转Profinet设备进行通讯,这里Profinet转ModbusTCP网关作为从站设备,Node-Red作为主站分别从0地址开始读取10个线圈状态和10个保持寄存器,分别用Mo…...
vscode连接WSL卡住
原因:打开防火墙 解决: 使用sudo ufw disable关闭防火墙...
Redis面试题全面解析:从基础到底层实现
Redis作为当今最流行的内存数据库之一,是后端开发岗位面试中的高频考点。本文将系统整理Redis面试中常见的基础、中级和底层实现问题,帮助开发者全面准备Redis相关面试。 一、Redis基础问题 1. Redis是什么?主要特点是什么? Re…...

【性能测试】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…...
PHP8.0版本导出excel失败
环境:fastadmin框架,不是原版接手的项目。PHP8.0,mysql5.7. code // 创建一个新的 Spreadsheet 对象 $spreadsheet new Spreadsheet(); $worksheet $spreadsheet->getActiveSheet();// 设置表头 $worksheet->setCellValue(A1, ID); $worksheet…...
GO语言学习(五)
GO语言学习(五) 前面我们已经学了一些关于golang的基础知识,从这一期开始,我们就来讲解一下基于golang为后端的web开发,首先这一期为一些golang为后端的web开发基础讲解,我们将会从web的工作方式、golang如…...
js不同浏览器标签页、窗口或 iframe 之间可以相互通信
一、创建一个广播通道 // 创建一个名为 vue-apps-channel 的广播通道 const channel new BroadcastChannel(vue-apps-channel);二、发送消息 channel.postMessage({type: popup, message: false}); 三、接收消息(也需要创建广播通道) // 也创建一个…...

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进阶篇:鼠标交互动画 前言获取鼠标坐标鼠标事件点击事件监听代码示例效果预览 拖动事件监听代码示例效果预览 结语 前言 在上一篇文章Canvas进阶篇:基本动画详解 中,我们讲述了在Canvas中实现动画的基本步骤和动画的绘制方法。本文将进…...
Mac下载bilibili视频
安装 安装 yt-dlp brew install yt-dlp安装FFmpeg 用于合并音视频流、转码等操作 brew install ffmpeg使用 下载单个视频 查看可用格式 yt-dlp -F --cookies-from-browser chrome "https://www.bilibili.com/video/BV15B4y1G7F3?spm_id_from333.788.recommend_more_vid…...
Unity editor文件数UI(支持勾选框)
unity editor文件数(支持勾选框) 使用的时候new一个box即可 using Sirenix.OdinInspector; using Sirenix.OdinInspector.Editor; using System; using System.Collections; using System.Collections.Generic; using UnityEngine;[Serializable] publ…...

【Node.js】Web开发框架
个人主页:Guiat 归属专栏: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. 引言 虽然现在的前端更新换代的速度很快,IDE和工具一批批的换,但是我们始终要理解一点基本的程序构建的思维,这些环境和工具都是为了帮助我们更快的发布程序。笔者还记得以前写前端代码的时候,只使用文本编辑器,然…...

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

MySQL--day5--多表查询
(以下内容全部来自上述课程) 多表查询 1. 为什么要用多表查询 # 如果不用多表查询 #查询员工名为Abel的人在哪个城市工作? SELECT* FROM employees WHERE last_name Abel;SELECT * FROM departments WHERE department_id 80;SELECT * FROM locati…...
【Redis】AOF日志的三种写回机制
目录 1、背景2、appendfsync always(同步写回)【1】工作机制【2】特点【3】实现原理 3、appendfsync everysec(每秒写回,默认配置)【1】工作机制【2】特点【3】实现原理 4、appendfsync no(操作系统控制&am…...

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

基于Spring Boot和Vue的在线考试系统架构设计与实现(源码+论文+部署讲解等)
源码项目获取联系 请文末卡片dd我获取更详细的演示视频 系统介绍 基于Spring Boot和Vue的在线考试系统。为学生和教师/管理员提供一个高效、便捷的在线学习、考试及管理平台。系统采用前后端分离的架构,后端基于成熟稳定的Spring Boot框架,负责数据处理…...
MySQL Workbench 工具导出与导入数据库:实用指南
目录 一、MySQL Workbench 简介二、导出数据库2.1 打开 MySQL Workbench2.2 数据库导出步骤三、导入数据库3.1 打开 MySQL Workbench3.2 数据库导入步骤四、注意事项五、总结MySQL Workbench 是一款强大的数据库管理和开发工具,它提供了直观的图形界面,方便用户进行数据库的设…...

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系列:https://github.com/juancarlospaco/aw…...
ubuntu22.04 卸载ESP-IDF
要在Ubuntu 22.04上完全卸载ESP-IDF,请按照以下步骤操作: 卸载ESP-IDF的步骤 删除ESP-IDF目录: # 假设ESP-IDF安装在~/esp/esp-idf目录 rm -rf ~/esp/esp-idf删除ESP-IDF工具链和下载的工具: rm -rf ~/.espressif从PATH中移除ESP…...

Spring IOCDI————(2)
DI详解 我们之前讲了控制反转IOC,也就是bean的存,那么我们还需要Bean的取,就是DI了,DI翻译过来就是依赖注入,啥意思呢,就是我们通过IOC容器,把所有的对象交给Spring管理,我们指定哪…...
80. Java 枚举类 - 使用枚举实现单例模式
文章目录 80. Java 枚举类 - 使用枚举实现单例模式**1️⃣ 为什么用枚举实现单例?****2️⃣ 枚举实现单例模式****3️⃣ 枚举单例如何防止反射攻击?****4️⃣ 枚举单例如何防止反序列化破坏?****5️⃣ 枚举单例 vs 传统单例****6️⃣ 枚举单例…...

融云 uni-app IMKit 上线,1 天集成,多端畅行
融云 uni-app IMKit 正式上线,支持一套代码同时运行在 iOS、Android、H5、小程序主流四端,集成仅需 1 天,并可确保多平台的一致性体验。 融云 uni-app IMKit 在 Vue 3 的高性能加持下开发实现,使用 Vue 3 Composition API&#x…...
Java中的集合详解
下面是文章详细介绍了 Java 集合框架的基本思路、主要接口与实现、各类集合之间的区别与各自的适用场景,以及一些常见的使用技巧和最佳实践,供你参考。 Java中的集合详解 在 Java 开发中,集合(Collection)作为存储和操…...
利用 Java 爬虫根据关键词获取某手商品列表
在电商领域,根据关键词获取商品列表是常见的需求。某手作为国内知名的电商平台,提供了丰富的商品资源。通过 Java 爬虫技术,我们可以高效地根据关键词获取某手商品列表,并提取商品的基本信息。本文将详细介绍如何利用 Java 爬虫根…...