ROS-3DSLAM(二)lvi-sam项目认识

2023-05-16

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

总结

在阅读完正片论文并查询了相关词汇和知识点后,对整个项目的机制有了初步的了解。但是文中很多专业知识可以说是完全没有接触过,如果从头完全学起压力会非常大。

所以接下来的学习将围绕代码分析展开,在代码分析的同时对其中体现出的专业知识进行相关学习。

参考资料见博客中引用的网址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS-3DSLAM(二)lvi-sam项目认识 的相关文章

随机推荐

  • C语言网络编程(1)— UDP通信

    C语言网络编程 xff08 1 xff09 UDP通信 一 socket 我们要进行网络通信 xff0c 那么就要用到socket xff0c socket即网络套接字 xff0c 应用程序可以通过它发送或接收数据 xff0c 可对其进行像
  • C语言网络编程(2)— TCP通信

    C语言网络编程 xff08 2 xff09 TCP通信 一 TCP客户端 1 建立连接 我们要使用到socket xff0c 首先首先我们添加要使用的头文件 span class token macro property span clas
  • 搭建kubernetes v1.21.5 和 kubesphere v3.2.1

    一 准备一台干净的centos7 6机器 二 关闭防火墙打上相关补丁和相关系统软件 systemctl stop firewalld yum span class token function install span openssh op
  • js定时器

    一 定时器概述 开发时用到的js定时器主要分为两种 xff1a 1 一次性的定时器setTimeOut方法 xff0c 通过设置一定的时间 xff0c 时间到就执行 var timer 61 setTimeout fun 毫秒数 清除的方法
  • UNIX 环境高级编程

    与你共享 xff0c 与你共舞 xff01 UNIX环境高级编程 xff08 第3版 xff09 是被誉为UNIX编程 圣经 xff1b 书中除了介绍UNIX文件和目录 标准I O库 系统数据文件和信息 进程环境 进程控制 进程关系 信号
  • ROS的CMakeList编写

    参考这位博主 我的cmakelist包 在 home xxx catkin Drone src Flight Control ROS CMakeLists txt cmake minimum required span class toke
  • Ubuntu18.04 NX下用ZED2 双目立体相机进行SLAM

    NX下的ZED2开发 安装流程问题开始了看效果安装ZED2 ROS工具 新故事篇章 zed2测距开始实现 安装流程 了解zed参数 因为网上的安装流程还是不太完整 xff0c 我补充一下 希望对其他人也有帮助 部分流程参考这位 xff1a
  • ubuntu16.04备份和迁移

    ubuntu16 04备份和迁移 背景实践1 备份整个系统2 重装Ubuntu16 043 恢复系统 题外话 xff1a 修改主机名参考文章 背景 此文用来快速记录备份和恢复的过程步骤 xff0c 具体命令意思不做过多介绍 因为不想新设备重
  • Ubuntu apt-get报错

    昨天晚上更新源 xff0c 居然报错了 zcidcs 64 ubuntu sudo apt get upgrade sudo password for zcidcs Reading package lists Done Building d
  • 2014阿里巴巴面试总结

    刚结束的一面 xff0c 可能昨天笔试题目做得还行 xff0c 今天中午电话我叫我1 30去面试 xff0c 时间紧急 xff0c 我吃完饭赶紧回宿舍小休息一会儿 xff0c 然后奔赴文三路的华星时代大厦 人太多了 xff0c 等到了2 2
  • 基类指针,子类指针,虚函数,override与final

    一 xff1a 基类指针与子类指针 span class token macro property span class token directive keyword include span span class token strin
  • web开发中实现页面记忆的几种方式

    一 前言 在前段时间公司有个需求是对前一个页面的操作进行记忆 xff0c 例如分页的样式 xff0c 选中的条件等 之前是用的session去存储记忆数据 xff0c 老大让我调研一下目前比较合理的方式然后分析一下 xff0c 这里以本篇博
  • 基于VINS与FastPlanner的无人机自主飞行Gazebo仿真

    项目来源及展示 xff1a https www bilibili com video BV1WK4y1V7um from 61 search amp seid 61 12548150687335659873 基本思路 xff1a 采用Gaz
  • RGB-D SLAM 相关总结

    目录 一 RGB D SLAM是什么 xff1f 二 D435i说明 三 RGB D SLAM研究现状 1 现有的RGB D SLAM方法 1 1 前端 1 2 后端 1 3 闭环检测 1 4 制图 2 优秀RGB D SLAM介绍 2 1
  • VINS-Mono学习(一)——数据预处理

    void push back double dt const Eigen Vector3d amp acc const Eigen Vector3d amp gyr dt buf push back dt acc buf push back
  • VINS-Mono学习(四)——回环检测与重定位

    目录 1 闭环检测常用方法有哪些 xff1f 2 ORB SLAM2中Loop Closing的具体实现流程是怎样的 xff1f 3 VINS回环检测与重定位 四自由度位姿图优化 3 1 第一部分 xff1a 回环检测与重定位 3 1 1
  • LADRC的学习——总概

    作者 xff1a 墨心 日期 xff1a 2019 7 25 xff1b 学习LADRC结构 xff1a 1 学习PID的相关知识 xff0c 作为学习ADRC的基础铺垫 xff0c 在simulink中搭建模块 xff0c 通过调节参数
  • LADRC的学习——PID的学习

    PID部分的学习 上文介绍了ADRC的理论 xff0c 并试着按照自己的理解用Matab编程实现韩老师论文中的算法 xff0c 但是对调节参数和一些地方还不太懂 xff0c 因此我打算从头开始理解 xff0c 从PID的好坏开始学习理解 x
  • LADRC的学习——换被控对象进行仿真测试

    LADRC控制器的检验 用不同的被控对象测验 一 前文总结 这篇文章主要根据清华大学的硕士陈星写的论文 xff1a 自抗扰控制器参数整定方法及其热工过程中的应用 进行学习 参考文献为 xff1a 1 Zhiqiang Gao Scaling
  • ROS-3DSLAM(二)lvi-sam项目认识

    2021SC 64 SDUSC xff08 二 xff09 lvi sam项目认识 一 SLAM简介 SLAM是Simultaneous Localization and Mapping xff08 同时定位 43 建图 xff09 独立的