ROS-3DSLAM(二)lvi-sam项目认识
2021SC@SDUSC
(二)lvi-sam项目认识
一、SLAM简介
SLAM是Simultaneous Localization and Mapping(同时定位 + 建图)。
独立的定位问题是建立在地图已知的情况下的,单独的建图问题也是建立在定位已知的情况下的。当机器人不能得到环境地图,也不知道自身位姿的时候,SLAM问题就出现了。也就是说SLAM要同时的进行机器人定位和建图,这个问题比单独的定位和单独的建图都要难得多。
SLAM算法分为在线SLAM和全SLAM问题。
在线SLAM的代表是EFK SLAM算法;全SLAM算法的代表是GraphSLAM。
EKF SLAM和GraphSLAM是两个极端。EKF SLAM需要取得每一时刻的信息,把信息分解为概率分布,计算代价很高。而GraphSLAM刚好相反,只是简单的积累每一时刻的信息并存储,然后进行离线推理计算开销较小,但是随着地图规模扩大,算法会消耗越来越多的内存直至崩溃。
有其他的SLAM算法结合了上述两种算法的优点,如SEIF SLAM、FastSLAM。SEIF SLAM算法继承了EKF SLAM信息表示的高效性,也保留了GraphSLAM计算代价小的优点,可以说SEIF SLAM是高效和可实现的SLAM算法;FastSLAM算法使用粒子滤波估计机器人的路径,基于FastSLAM的多个变种算法在机器人已经得到广泛的应用,比如gmapping等等。
现今在机器人上使用最广泛的应该算激光SLAM了,在扫地机器人、服务机器人、AGV智能车上普遍搭载了单线激光雷达SLAM算法,像无人驾驶汽车、户外机器人则普遍搭载了多线激光雷达SLAM。另一种热门的研究是视觉SLAM,视觉SLAM有配备单目、双目、深度相机的多种形态,并且根据采用视觉特征点的区别还有直接法、半直接法、稀疏法之分。然后还有就是各种复合式的SLAM算法,比如激光与视觉融合的SLAM、融合了IMU的视觉SLAM。最后,就是一些最新颖的SLAM算法,比如用深度学习来做的端到端的SLAM、基于物体识别的语义SLAM。
二、lvi-sam项目简介
LVI-SAM是一个lidar-visual-inertial里程计和建图系统,在系统级别结合了LIO-SAM和Vins-Mono的优势。
LVI-SAM是一个紧耦合的雷达视觉惯导SLAM系统,可以实时高精度鲁棒的进行状态估计和建图。
LVI-SAM构建在因子图之上,并且由两个子系统组成:一个视觉惯导系统和一个激光惯导系统。这两个子系统利用紧耦合的方法,视觉惯导的系统利用激光惯导的估计来做初始化,利用激光雷达的测量给视觉特征提供深度来提升精度。同时激光惯导系统利用视觉惯导的估计值作为初值来做帧的匹配,利用视觉做闭环检测,把检测的结果给激光惯导系统来做优化。
当激光惯导和视觉惯导子系统的一个失败的时候LVI-SAM仍然可以工作,这极大的提升了系统在缺少纹理或者特征场景中的鲁棒性。LVI-SAM系统在数据集上进行了测试,取得了很好的效果。
LIV-SAM项目是一种新型的复合式的SLAM算法,较好的实现了激光雷达+视觉+惯性导航融合,我们将首先围绕该项目进行3D-SLAM的学习。
项目包:
LIV-SAM的安装和运行在之前的工作中已经完成,以下是运行作者提供的数据包的截图:
三、lvi-sam论文阅读
介绍
单纯基于雷达或者视觉的SLAM系统都有自己的局限性,因此激光和视觉经常和惯导融合来提升他们的精度和鲁棒性。
整个项目分为3个输入端:雷达端(3D激光点云)、视觉端(单目图像)、IMU输入惯性测量值;2个可独立工作、也可耦合的子系统:雷达惯性系统和视觉惯性系统。
不懂的知识点:
点云:点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合。
点云的属性包括空间分辨率、点位精度、表面法向量等,稀疏点云或密集点云都是逆向造型的基础
feature map:在CNN的设定里,Feature Map是卷积核卷出来的,你用各种情况下的卷积核去乘以原图,会得到各种各样的feature map。你可以理解为你从多个角度去分析图片
https://blog.csdn.net/weixin_39875161/article/details/90045650
https://blog.csdn.net/dengheCSDN/article/details/77848246
https://www.cnblogs.com/freshmen/p/6021239.html
词袋模型:视觉单词袋是一种描述计算图像之间相似度的技术。常用于用于图像分类当中。
单目图像:单目摄像头需要对目标进行识别,也就是说在测距前先识别障碍物是车、人还是别的什么。在此基础上再进行测距。
残差:在数理统计中是指实际观察值与估计值(拟合值)之间的差。
bias
位置识别(Place Recognition)
里程计(视觉里程计、雷达里程计)
里程计是衡量我们从初始位姿到终点位姿的一个标准,通俗的说,我们要实现机器人的定位与导航,就需要知道机器人行进了多少距离,是往哪个方向行进的
https://blog.csdn.net/zhu751191958/article/details/79322364
https://blog.csdn.net/u013626386/article/details/70596656
完整的激光视觉惯导SLAM系统
A. 系统概述
VIS系统接收参数:图像和IMU信息,雷达点云是可选的输入。
视觉里程计:通过最小化IMU和视觉的测量残差来得到。
激光里程计:通过最小化检测到的线面特征到特征图的距离得到。
- 特征图保存在一个滑窗中来实时的执行
状态估计问题
不懂的知识点:
ISAM2:图优化
https://www.cnblogs.com/gaoxiang12/p/5244828.html
https://blog.csdn.net/fuxingyin/article/details/51854415
B. 视觉惯导系统
由上到下。
状态X:
x=[R,p,v,b]x = [R, p, v, b] x=[R,p,v,b]
VIS的初始化和特征深度估计:
1)初始化:基于优化的VIO系统,为了改善VIS初始化的鲁棒性,我们利用LIS系统来估计系统的状态X和IMU的偏置b(初始化LIS系统获得x和b。然后通过插值来把激光帧和视觉帧通过时间戳对齐,最后把LIS系统初始化得到的x和b作为VIS初始值)。
2)深度特征关联:根据VIS初始化的结果,利用视觉里程计对齐视觉帧和雷达帧。
原理:
特征深度是虚线的长度。
(a)( c)中的颜色变化代表深度变化;(b)(d)中,绿色点是成功与深度关联的视觉特征,红色是失败的。
3)失败检测:如果运动变化剧烈,光照变化或者环境缺少纹理就会导致VIS系统失败。这是由于在这种场景中跟踪的特征点会显著减少,而特征太少会导致优化失败。
一旦检测到故障,VIS将重新初始化并通知LIS。
4)闭环检测:利用DBoW2来做闭环检测。
不懂的知识点:
角点检测器 KLT算法:与跟踪有关
https://blog.csdn.net/zdyueguanyun/article/details/8535154
https://www.cnblogs.com/venicid/p/8120382.html
VINS-Mono:是基于单目视觉惯性系统的实时 SLAM 框架, 是目前非常先进的单目 VIO 算法。
高斯白噪声:高斯白噪声,幅度分布服从高斯分布,功率谱密度服从均匀分布
https://blog.csdn.net/szlcw1/article/details/41758711
深度图(depth map):深度图中的每一个像素值表示场景中某一点与摄像机之间的距离.
KD-tree:是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。
特征点:为了在不同的图像中匹配出同一个物体,在图像中选中的有特征的点。
https://www.cnblogs.com/wangguchangqing/p/8076061.html
DBoW2:https://www.cnblogs.com/luyb/p/6033196.html
闭环检测:指机器人识别曾到达某场景,使得地图闭环的能力。
https://baijiahao.baidu.com/s?id=1627227355343777871&wfr=spider&for=pc
C.雷达惯导系统
利用因子图来做全局的位姿优化。
主要有四种约束,IMU的预积分约束,视觉里程计的约束,雷达里程计的约束和闭环检测的约束加入到因子图中参与优化。
1)初始值估计
2)失败检测
不懂的知识点:
因子图:factor graph(概率论相关)
https://blog.csdn.net/wydbyxr/article/details/82384340
预积分:https://zhuanlan.zhihu.com/p/90213963
scan-match:给定Scan和map,或者给定scan和scan或者给定map和map,找到最匹配的变换
https://blog.csdn.net/m0_37350344/article/details/81159413
总结
在阅读完正片论文并查询了相关词汇和知识点后,对整个项目的机制有了初步的了解。但是文中很多专业知识可以说是完全没有接触过,如果从头完全学起压力会非常大。
所以接下来的学习将围绕代码分析展开,在代码分析的同时对其中体现出的专业知识进行相关学习。
参考资料见博客中引用的网址。
ROS-3DSLAM(二)lvi-sam项目认识相关推荐
- 从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板
标题:从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11155 ...
- JavaScript 编程精解 中文第三版 二十一、项目:技能分享网站
二十一.项目:技能分享网站 原文:Project: Skill-Sharing Website 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了<JavaScri ...
- 模拟数据解决二分类问题项目描述
模拟数据解决二分类问题项目描述: 已经发布公众号: 利用Python的numpy模块下的random类生成模拟数据集,然后对这些数据进行交叉熵最小化计算找到最合适的参数,也就完成了整个模型的调整 ...
- ekf pose使用方法 ros_【百川小课堂】第13课—ROS学习(二)
ROS学习(二) 忘记贴总的课程安排了,这里先贴一下主要的学习路线图,是基于深蓝学院的视频课程,我个人目前只会学习到第6课,后面有兴趣的同学可以自行去学习一下,后面如果有时间我学习一下,总结成推文. ...
- 二、软件项目开发计划书-模板
二.软件项目开发计划书 1.引言 1 1.1编写目的 1 1.2项目背景 1 1.3定义 2 1.4参考资料 2 2.项目概述 2 2.1工作内容 2 2.2条件与限制 2 2.3产品 2 2.4运行 ...
- 第一章:Vue3.0+Openlayers+Cesium创建二三维联动项目
Vue3.0+Openlayers+Cesium创建二三维联动项目 简介 Vue项目创建 安装依赖 框架结构 地图加载 显示效果 结语 简介 大家好!从今天开始,我将分享我在GIS开发的过程中如何利用 ...
- 201671010434王雯涵--实验二 软件工程个人项目
作业要求:实验二 软件工程个人项目 本项目完成的代码 1.软件定义 ※程序可读入任意英文文本文件,该文件中英文词数大于等于1个,统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件r ...
- 201671010412 郭佳 实验二 软件工程个人项目
作业要求:<实验二 软件工程个人项目> 本项目Github的仓库主页 1. 需求分析 本次实验要求使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发. 该程序要求实现: 要求能够 ...
- 大二暑假_SSM项目_培训教育板块
大二暑假_SSM项目_培训教育板块 一.页面搭建 1)主要内容 2)部分代码 3)遇到的困难 4)效果展示 二.管理员上传文件 1)主要内容 2)部分代码 3)遇到的困难 4)效果展示 三.用户点击按 ...
最新文章
- JS学习笔记:防止发生命名冲突
- JavaWeb--JavaEE
- 【POJ - 2631 】Roads in the North(树的直径)
- Python 并行分布式框架 Celery
- E_FAIL (0x80004005) MachineWrap
- ASP基础教程:数据库查询语言(2)
- [转]MegCup2015初赛题
- 如何为VMware创建的虚拟PC机安装Linux操作系统
- aspectjweaver.jar 下载地址
- 100%快速解决谷歌翻译无法使用的问题,附修复工具
- 第一课:ASP.NET Core入门之简单快速搭建ASP.NET Core项目结构
- C3之text属性的补充
- 永利宝与火理财涉嫌非法吸收公众存款 6名犯罪嫌疑人抓捕
- apachectl 命令详解-graceful 不中断原有连接,重新启动 Apache 服务器
- 使用jupyter做数据分析与挖掘
- 异常:could not initialize proxy - the owning Session
- 微信摇一摇插件ios_iOS开发——全局响应MotionEvent(微信摇一摇)
- 超简单集成华为HMS Core MLKit 机器学习服务银行卡识别SDK,一键实现银行卡绑定
- 令人心酸至极的100个微瞬间
- 2021爱分析・数据智能平台实践报告—重构数据智能时代的数据基础设施