一种解耦非线性优化的高效VI-SLAM系统-Snake-SLAM
摘要
Snake-SLAM 是一种可在低功率航空设备上稳定运行的VI SLAM 自主导航系统。跟踪前端具有地图复用、闭环、重定位功能,并支持单目、立体和 RGBD 输入。该系统通过图论算法来减少关键帧并提出一种“延时地图”的方法来确保生成准确的全局地图,优化后端将 IMU 状态估计与从视觉光束法平差中进行解耦,将有约束的优化问题拆分为两个子问题,大大降低的计算复杂度,并使得Snake-SLAM 相比于现有的SLAM系统可以使用更大滑窗。我们的系统实现了一种先进的多模式VI 初始化方案,该方案使用陀螺仪数据检测视觉异常值并恢复速度、重力和尺度。我们在 EuRoC 数据集上评估 Snake-SLAM ,结果表明它在效率方面优于所有其他方法,并且实现最先进的跟踪精度。
主要工作
1.解耦优化
为了减少非线性优化的复杂度。将状态估计分为两个子问题,首先将IMU估计出来的的速度、偏差、重力方向、尺度用来构建连续帧i和i+1的误差方程,如下:
然后使用IMU估计的参数去计算i到i+1帧的变换关系,并将这个变换关系添加到视觉BA中,如下:
- 鲁棒性初始化
一个好的初始化对于camera tracking 和准确的尺度恢复起到至关重要的作用,目前一些方案通过将imu静止15妙来进行初始化,但是这种操作是没有必要的,重力偏差可以通过一些关键帧计算得到,无非是尺度和重力方向初始化花费一些时间而已。在 Snake-SLAM 中,跟踪以仅视觉模式开始,当一旦有8个关键帧已插入到地图,陀螺仪偏置初始化启动。为了计算全局偏差,本系统构建旋转最小化误差,如下:
- 地图简化
为了减少冗余计算,将关键帧作为图的节点,图的边为关键帧之间的匹配内点个数;这样就构建了历史关键帧和候选关键帧的图,一旦有新的关键帧插入,取图的最大生成树的最小边作为地图的质量,如果质量大于一定的阈值,丢弃该关键帧,如下图:
4.延时地图(deferred mapper)
利用了colmap post-triangulation 的思想,local ba 结束后再次三角化,增加地图愁密度,提高稳定性,同时避免gba 漂移。在Snake-SLAM local mapper中,延时10帧,即是当ki插入的时候,ki-10被处理
高效率和低功耗的特点使得Snake-SLAM 可以在各种移动设备,例如无人机、机器人、手机或头戴式AR设备上运行
代码运行效果
源代码地址:https://github.com/darglein/Snake-SLAM
作者上传的代码存在很多bug(不知道他是不是故意的),且Snake-SLAM 的环境及其及其难配置。自己折腾了很久才将环境和代码的bug解决掉(目前可视化还没解决,只能看到最终结果),但是不可否认的是,作者的代码和colmap有异曲同工之处,都具备很好的阅读性,是一款非常推荐的VIO-SLAM系统。同时Snake-SLAM的后端优化和可视化平台与是其作者自己开发的saiga平台(一款轻量级的渲染框架),代码地址:https://github.com/darglein/saiga ,saiga可视化平台可视化效果如下:
本来是打算在运行Snake-SLAM的时候,看看saiga可视化slam 地图和轨迹的效果有多惊艳,遗憾的是这个bug自己还没解决(如果哪位想和我一起研究可以联系我,我可以将现在已经debug完后的代码共享于你)。
Snake-SLAM 运行效果如下:
机器配置:i5-9300H CPU ,24G
数据集:euroc / MH_05_difficult
图像分辨率:752*480
利用evo 评估轨迹如下:
一种解耦非线性优化的高效VI-SLAM系统-Snake-SLAM相关推荐
- 一种视觉惯性+激光传感器的SLAM系统
一种视觉惯性+激光传感器的SLAM系统 这篇博客 论文摘要 一些假设和标注 系统总览 VI 里程计 扫描匹配(scan matching)优化 提高系统鲁棒性的措施 闭环检测和临近检测 全局位姿图优化 ...
- 【开源分享】VIDO-SLAM:一种视觉惯性动态物体SLAM系统
文章:Inertial-Only Optimization for Visual-Inertial Initialization 作者:Carlos Campos, Jose M.M. Montiel ...
- 论文简述 | CamVox: 一种低成本、高精度的激光雷达辅助视觉SLAM系统
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 摘要 将激光雷达与基于相机的同步定位和建图(SLAM)相结合是提高整体精度的有效方法,尤其是在大规模室 ...
- VDO-SLAM :一种动态目标感知的视觉SLAM系统
VDO-SLAM :一种动态目标感知的视觉SLAM系统 (VDO-SLAM :A Visual Dynamic Object-aware SLAM System) 论文地址:https://arxiv ...
- 翻译 | ORB-SLAM: a Versatile and Accurate Monocular SLAM System(ORB-SLAM:一种通用的(全能的)精确的单目SLAM系统)
博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 ORB-SLAM:一种通用的(全能 ...
- CamVox:一种低成本、高精度的激光雷达辅助视觉SLAM系统
标题:VCamVox: A Low-cost and Accurate Lidar-assisted Visual SLAM System 作者:Yuewen Zhu, Chunran Zheng, ...
- 网格自适应_网格自适应的 2 种方法——实现更高效的计算
网格自适应的目标是修正网格以更有效地解决问题. 通常,我们希望使用尽可能少的单元来获得精确的解:并希望在不太重要的区域使用较粗糙的网格,而在感兴趣的区域使用较精细的网格.有时,我们甚至可能会考虑各向异 ...
- 视觉SLAM总结——视觉SLAM十四讲笔记整理
视觉SLAM总结--视觉SLAM十四讲笔记整理 说明 基础知识点 1. 特征提取.特征匹配 (1)Harris (2)SIFT (3)SUFT (4)ORB (5)特征匹配 2. 2D-2D:对极约束 ...
- 3D Vision、SLAM求职宝典 | SLAM知识篇(D1,重点 )
今日得空,开始愉快的解答!各位看官请指教. 第一部分,先来完成该专题最重要的内容,即笔试面试中所考察的SLAM专业知识. SLAM知识篇所准备的这些问题不一定全面,但是问题都是基于三位求职者的总结回忆 ...
- 经典激光雷达SLAM系统:LOAM-Livox
作者 | 密斯特李 编辑 | 汽车人 原文链接:https://zhuanlan.zhihu.com/p/515732721 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨 ...
最新文章
- 在GitHub上管理项目
- Spring Boot开始
- of type std::bad_cast: std::bad_cast
- stm32之TIM-高级定时器应用实例二(测量频率和占空比)
- C语言中static用法大全
- figma设计_Figma与Adobe XD:我们如何选择下一个设计工具
- python代码控制机械臂_选用什么样的系统或平台开发机器人/机器臂?
- 使用JAVA爬取网页图片
- linux 安装启动ssh服务
- Qt调用jrtplib实现单播、多播和广播
- 关于php的梗儿_抖音上的梗,你知道哪些?
- PS笔刷素材套装:81种自定义树叶水彩/水粉画
- 什么是磁盘列阵技术?
- 论文写作 之 Related work
- 视频教程-Scratch趣味编程课堂-L1-其他
- 智能感知与学习(六):识别系统
- uint与int区别
- 厂工数据结构Anyview(C语言版)第二章答案
- Go : 与切片类型处理相关的代码(附完整源码)
- 给我讲解一下傅里叶变换与衍射的关系
热门文章
- 合同能源管理服务认证要求有哪些?
- 巨人网络总裁史玉柱简介
- MySQL——行格式介绍
- 一种改进的条形码定位方案,基于openCV实现,附完整源代码
- md5 结合 crypt =无敌密码
- python神秘的魔法函数_Python神秘的魔法函数
- win10树莓派改ip_如何为你的树莓派安装一个WIN10系统?(非iot)
- css 根据屏幕宽度控制样式
- 编程判断俩个链表是否相交
- Python不重复批量随机抽样 random.sample() 和 numpy.random.choice() 的优缺点