一、项目背景及意义
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系统实现。