VIO开源代码总结

前言

转载自:https://zhuanlan.zhihu.com/p/497942945
作者:无偏估计

掌握经典SLAM系统是SLAM研究生的必备课题。然而,如何改进经典SLAM系统却令刚入门的研究生十分困扰。凭空想象常常是非常困难的,一种简单的方法是利用谷歌学术查找经典论文的被引文章,参考别人是如何修改的。不过对于小白来说,看文章都困难,别说了复现论文了[手动狗头]。

为了解决以上问题,本文对开源的VIO代码进行了调研,以方便研究者们在其基础上进行改动,应用到自身实际项目里,甚至创新,发表论文。值得注意的是,虽然本文忽略了那些优秀但是没有开源代码的工作,但我们相信,本文的读者或许对那些工作也不感兴趣[二次手动狗头]。

正文

前言纯属整活,让我们开始列举开源工作吧!笔者大致按照论文的主要贡献点进行了大致但不完全严谨地划分。

初始化

  1. VINS-Mono-QPEP(TRO 2022),将初始化中的PnP建模成QPEP(Quadratic Pose Estimation Problems)来解决在先前版本的VINS Mono中,初始化SFM框架中的PnP算法可能不能获得全局最优解的问题。

前端相关

  1. rpg_svo_pro_open,半直接视觉惯性里程计
  2. Anticipated-VINS-Mono(ICRA 2017),通过更巧妙地选择用于优化的特征来减少特征轨迹的丢失。
  3. CNN_VINS,使用superpoint视觉前端特征提取,取代VINS的光流跟踪。
  4. orbvins_fusion,在VINS基础上加入ORB特征。
  5. VINS-YOLO,将目标检测与VINS Mono相结合,提升了机器人在加速时的检测效果。

线特征

  1. PL-VINS,加入线特征,并且在低功耗的情况下,PL-VINS在相同的运行速度下可以产生比VINS Mon更高的精度。
  2. VINS-Mono-Optimization,主要内容是在VINS-Mono的基础上加入了线特征,实现了点线的紧耦合优化,具体的说明文档可以参考博客。

新传感器

  1. VINS-Fisheye,该代码是带有GPU和Visionworks加速的VINS Fusion的鱼眼版(双目超大FoV)。它可以在Nvidia TX2上实时运行(添加了一些加速策略,有对应知乎博客可以参考),还可以提供基于鱼眼的深度估计。原实验室出品。
  2. VIW-Fusion,当前(2022.04)最好的,功能超全的加轮速计版本。
  3. GVINS(TRO 2022),将GNSS原始测量值与视觉和惯性信息紧密融合,用于实时无漂移的状态估计。原实验室出品。
  4. VINS-RGBD(Sensors2019),可支持单目、双目、RGB-D与IMU的融合定位;使用RGB-D时可实现基于八叉树的稠密建图;支持栅格图导入。
  5. R2DIO(RAL2021),RGBD-Inertial SLAM算法
  6. IC-GVINS(RAL2022),融合轮速计,IMU,GNSS,视觉的VINS系统。
  7. VINS-RGBD-FAST(RAL 2022),动态环境下VINS-RGBD里程计,可用于计算资源受限的设备上,比如AGX

后端优化

  1. vins_so,VINS-Fusion的早期版本
  2. DynaVINS(RAL2022),动态环境下的VINS-Fusion系统
  3. VID-Fusion(ICRA 2021),VID-Fusion是一项通过紧密耦合的视觉惯性动力学状态估计器同时估计多转子里程计和外力的工作。高飞老师的工作。
  4. VINS-Fusion with Cerebro(RAS 2021),原实验室出品的闭环检测算法。
  5. Basalt(RAL 2019),TUM的工作,后端非线性因子恢复。虽然不是基于VINS修改,但其改进可以尝试在VINS上移植。
  6. DM-VIO(RAL 2022),TUM的工作,延迟边缘化里程计。虽然不是基于VINS修改,但其改进可以尝试在VINS上移植。
  7. ROSEFusion(SIGGRAPH 2021),能抵御快速运动的深度图+IMU里程计;利用随机优化理论克服帧间位姿过大的问题。
  8. spline_vio(ICRA2022),基于DSO的连续时间VIO

基于滤波器

  1. open-vins(ICRA),基于MSCKF的优秀VIO库,并持续更新
  2. envio(TRO2022),基于迭代扩展卡尔曼滤波的VIO,集成了光度误差和随机线性化技术

多机器人

  1. Omni-swarm,分布式全向视觉惯性UWB状态估计系统。原实验室出品
  2. Kimera(IJRR 2021),MIT的工作,Kimeta是一个用于实时度量语义同时定位和映射的C++库,它使用摄像机图像和惯性数据来构建环境语义标注的3D网格。
  3. vins_client_server,它基于最初的VINS Mono实现,具有将多个机器人的感官数据融合后发送回服务器的额外能力。

代码封装

  1. VINS-Course,深蓝学院的VIO课程代码,从0写VIO
  2. vins-mono-self-improved,主要是结构上的调整与封装,增强代码的可读性;
  3. VINS-simplified,主要基于VINS-MONO,但带有简化的后端算法(自己用eigen实现的)。
  4. My_VINS,本项目的工作基于VINS Mono。但不使用ROS、Ceres和G2o。用Eigen实现后端,使用LM算法、滑动窗口算法、鲁棒核函数等。

用于其他平台

  1. Android-VINS,该代码是VINS-Mono在Android OS的运行版本;
  2. VINS-Fusion-gpu,该代码是GPU加速的VINS Fusion版本。它可以在Nvidia TX2上实时运行。.
  3. ros2-VINS-Fusion,This is a ROS2 version of VINS-Fusion
  4. VINS-Mono-Windows,VINS-MONO Windows/non-ROS Version
  5. 紫川Purple River的文章,优秀的VINS落地经验

你可能感兴趣的:(SLAM进阶之路,计算机视觉,深度学习,人工智能)