激光SLAM笔记(1)——激光SLAM框架和基本数学理论

  • 1、SLAM分类
    • 1.1、基于传感器的分类
    • 1.2、基于后端的分类
    • 13、基于图的SLAM
  • 2、激光SLAM算法(基于优化的算法)
    • 2.1、激光SLAM算法的流程
    • 2.2、激光SLAM常用算法
    • 2.3、激光SLAM在实际环境中的问题
  • 3、激光SLAM算法介绍
    • 3.1、2D激光SLAM
    • 3.2、3D激光SLAM
  • 4、激光SLAM的数学基础
    • 4.1、位姿表示
    • 4.2、2D位姿变换

1、SLAM分类

1.1、基于传感器的分类

1.2、基于后端的分类


  基于图优化方法的激光SLAM有cartographer,基于滤波器的方法有GMapping。

13、基于图的SLAM


  基于图优化方法的激光SLAM,分为前端后端
  前端负责实现激光里程计,包括帧间匹配、回环检测等,旨在根据激光雷达的观测,构建误差函数,用于后端优化
  后端则负责进行优化,如根据前端建立的约束,优化位姿;根据回环检测的结果,优化位姿图;发布地图等。后端的作用是修正位姿和地图等

2、激光SLAM算法(基于优化的算法)

2.1、激光SLAM算法的流程

  基于图优化方法的激光SLAM和视觉SLAM的流程相同,只是其中用到的算法不同

2.2、激光SLAM常用算法

一、数据预处理

  1. 里程计标定
      轮式里程计的机械标称值并不代表真实值,实际误差可能较大。所以需要标定后才能使用。 里程计的精度对于机器人定位和建图至关重要
  2. 激光雷达运动畸变去除
      每一帧激光数据的采集需要时间,在采集期间如果机器人运动会使测量值产生畸变。运动产生的畸变会让数据严重失真,影响匹配精度。
  3. 不同系统之间的时间同步

二、帧间匹配算法(激光SLAM核心部分)
  帧间匹配算法直接影响激光SLAM的效果,后端优化只是消除该过程所积累的误差,帧间匹配估计的位姿越准确,后期建图效果越好。常用算法如下图所示:

  作者笔记:
  不同的激光slam算法使用的帧间匹配算法也不相同。
  如gmapping利用粒子滤波的方法,将当前观测的激光数据,建立Likelihood模型,利用粒子滤波,在已知地图中实现精确定位,再根据位姿将当前观测进行建图。其算法的里程计是一个scan-to-map类型的。
  cartographer是一个集成度很高的算法,其帧间匹配算法类似于Karto SLAM。其先根据最近几帧的观测,构建一个submap,然后将当前帧于构建的submap进行匹配。在匹配算法上,其先利用CSM分支定界的方法,快速实现初步定位,然后利用基于概率地图得分的优化方法,实现精确的位姿求解。
  在2D激光SLAM中,几乎不会用到 ICP 类和 NDT 类的帧间匹配算法。因为2D激光雷达的返回数据只有单线数据,测量结果中的结构信息过于简单,且重复度高,利用此类算法很容易出现误匹配,导致历程计精度低。且此类算法遇到纯旋转问题时,位姿估计会产生很大的旋转误差,几乎是无解的。所以此类算法,可以在结构信息丰富的3D激光SLAM中常见到,效果也非常好。

三、回环检测方法

  实际应用中实际多使用 Map-to-Map 来进行回环检测。

  作者笔记:
  激光SLAM的回环检测不如视觉SLAM的回环检测容易,哪怕是基于特征的方法,由于环境中的三维结构存在重复,所以激光SLAM的回环检测并不简单。目前本人所知的,有基于结构特征直方图的,基于聚类思想的,基于深度学习的,也有基于图像辅助的回环检测。
  后续我可能会列出具有回环检测的激光SLAM算法,以及其所使用的方法。

四、后端优化方法
  后端算法的实现大同小异,不同的库的使用方法都不太相同,但是核心思想都是相同的,即根据前端构建的残差函数,计算每个测量的残差,构建最小二乘问题,然后利用高斯牛顿、LM方法等,求解构建的最小二乘问题,实现位姿变换的求解。常使用的库有Ceres,G2O、gstam等。

2.3、激光SLAM在实际环境中的问题

  四大类问题:
1、退化环境(Degeneration Environment):走廊问题、空旷环境
2、地图的动态更新(Map Update):地图的变更到时定位出错
3、全局定位(Global Localization):绑架问题
4、动态环境定位(Dynamic Localization):人、车和其他物体影响
  具体问题如下:

  这些问题都是很工程话的问题,有兴趣的读者可以选择一些具有学术价值的方向进行研究,如退化环境问题、全局定位问题、动态环境问题。这些问题在SLAM落地中是非常令人头疼的问题,一般在SLAM研究中,我们会假设这些问题是很少遇到的,即外界环境是静态且相对简单的。

3、激光SLAM算法介绍

3.1、2D激光SLAM

一、2D激光SLAM的输入和输出:
输入:IMU数据、里程计数据、2D激光雷达数据
输出:覆盖栅格地图、机器人的运动轨迹或PoseGraph
二、2D激光SLAM常用帧间匹配方法

三、2D激光SLAM的回环检测方法

四、2D激光SLAM经典算法

  1. 基于滤波器的方法:
    Gmapping :基于粒子滤波,每一个粒子都带有一个地图
    Optimal RBPF:Gmapping的进一步优化
  2. 基于图优化的方法:
    Cartographer:算法与Karto-SLAM原理类似,更完整,使用CSM+SBA
    Viny-SLAM:作者也没有仔细看过这篇论文,但是论文中的实验结果精度是要高于Cartographer的。算法利用IMU+2D激光雷达,实现了精度和速度都高于Cartographer的算法。

  作者笔记:
  个人人为,2D激光SLAM算法已经非常成熟了,其已经有一套完整的实现流程,读者可以查看相关算法的代码来提高自己。其外,我还人为Cartographer算法的代码集成度极高,利用了很多C++的特性,新手研读起来比较费劲,且比较难做二次开发。所以建议阅读一些简单的代码,如Gmapping、Karto,进行入门学习。然后再阅读Cartographer。

五、2D激光SLAM的发展趋势——与视觉融合

3.2、3D激光SLAM

一、3D激光SLAM的输入和输出
输入:IMU数据、里程计数据、3D激光雷达数据
输出:3D点云地图、机器人轨迹或PoseGraph
二、3D激光SLAM常用帧间匹配方法

三、3D激光SLAM与激光进行融合

4、激光SLAM的数学基础

4.1、位姿表示

  此处可以参考两个内容,在此不做展开(关键是自己重写太麻烦):
1. 视觉SLAM中的数学基础 第一篇 3D空间的位置表示
https://www.cnblogs.com/gaoxiang12/p/5113334.html
2. 视频演示讲解:
https://www.youtube.com/watch?v=8XRvpDhTJpw

4.2、2D位姿变换


  从4.1的资料1中,我们知道了2D机器人的位姿表示和坐标变换的概念,不同坐标系之间2D位姿变换关系如上图所示。
  设机器人坐标系B中一坐标点PBP_BPB​,其在世界坐标系O中的坐标为PO=TOB⋅PBP_O = T_{OB} · P_BPO​=TOB​⋅PB​,反过来就有PB=TOB−1⋅PO=TBO⋅POP_B = {T_{OB}}^{-1} · P_O=T_{BO}·P_OPB​=TOB​−1⋅PO​=TBO​⋅PO​。
  如上图右边,由机器人A在O中的位姿(xA,yA,θA)(x_A,y_A,\theta_A)(xA​,yA​,θA​),得到坐标系A到坐标系O的变换TOAT_{OA}TOA​,同理有TOBT_{OB}TOB​。设坐标系A到坐标系B之间的变换矩阵为TBAT_{BA}TBA​,则有TBA=TBO⋅TOA=TOB−1⋅TOAT_{BA} = T_{BO} · T_{OA} = {T_{OB}}^{-1} · T_{OA}TBA​=TBO​⋅TOA​=TOB​−1⋅TOA​(先将坐标系A转换到坐标系O,再由坐标系O转换到坐标系B)。
  2D坐标系中,变换矩阵无法传递角度,则最后的坐标由下式表示:

激光SLAM基础(1) —— 激光SLAM框架和基本数学理论相关推荐

  1. SLAM 入门之《SLAM 14讲》笔记

    Simon's<SLAM 14讲>笔记 2. 第二讲:初识SLAM 2.1. SLAM框架 2.2. Linux下程序的编译 3. 第三讲:三维空间刚体运动 3.1. 刚体在三维空间里的旋 ...

  2. SLAM学习--2D激光SLAM--入门学习

    一.学习心得记录(不一定对):转载了很多博主的网站,若侵权,告知必删 1. 激光slam 和视觉slam 实际在实现的时候完全是两码事,可能根本思想差不多,特别是非线性优化方面,但是实现方案差距较大, ...

  3. 激光slam坐标系和视觉slam坐标系对齐,两个slam系统之间坐标对齐,轨迹对齐,时间戳对齐

    1. 面临的问题 两个独立的SLAM系统中,常常面临一个问题,那就是一个系统上的某一个pose,对应到另一个系统中是在哪里? 紧耦合的SLAM系统,不存在这个问题,比如激光雷达和相机融合的SLAM系统 ...

  4. SLAM综述(4)激光与视觉融合SLAM

    分享 SLAM包含了两个主要的任务:定位与构图,在移动机器人或者自动驾驶中,这是一个十分重要的问题:机器人要精确的移动,就必须要有一个环境的地图,那么要构建环境的地图就需要知道机器人的位置. 本系列文 ...

  5. SLAM算法总结——经典SLAM算法框架总结

    SLAM算法总结--经典SLAM算法框架总结 SLAM算法总结--经典SLAM算法框架总结 SLAM算法总结--经典SLAM算法框架总结 从研究生接触SLAM算法到现在也有两三年了,期间学习了很多经典 ...

  6. SLAM基础环境配置

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转自知乎作者:佳浩 原文链接: https://zhuanlan. ...

  7. ROS系统SLAM基础学习:gazebo仿真机器人自主导航

    ROS系统SLAM基础学习:gazebo仿真机器人自主导航 move_base节点配置 amcl节点配置 导航仿真 导航SLAM仿真 自主探索SLAM仿真 自主导航:避障 遇到的问题及解决方法和总结 ...

  8. 一文读懂单目视觉SLAM分类方法~基于概率框架和非概率框架

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 联盟成员读书笔记带你深入理解单目SLAM SLAM最先由Smith Self 和 Cheeseman于1987年提出 ...

  9. 超硬核直播课 | 自主旋翼无人机主流算法、视觉SLAM基础

    视觉SLAM是通过两帧或多帧图像来估计自身的位姿变化,再通过累积位姿变化计算当前位置.视觉SLAM不仅解决了移动机器人"我在哪里"的关键问题,而且在传感器自身定位.路径规划及场景理 ...

最新文章

  1. mysql comment
  2. MYSQL数据库备份还原,并还原到最新状态(mysqldump,xtrabackup)
  3. cac会议投稿难度大吗_发表 SCI 论文有多难?
  4. centos7 minimal运行vue项目npm run serve时报错:Error: spawn xdg-open ENOENT --解决办法:yum install xdg-utils
  5. Spring MVC 源码-运行调用阶段
  6. GloVe: Global Vectors for Word Representation-学习笔记
  7. 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
  8. ios开发之--UIDocumentInteractionController的使用(实现更多分享服务)
  9. python实现录音小程序 界面_小程序如何实现录音 播放功能
  10. 华为鸿蒙os2.0系统何时搭载手机,鸿蒙OS 2.0系统正式发布!余承东:明年华为系手机将会搭载...
  11. SQL Server登录名,用户和安全标识符(SID)
  12. 在线XML美化格式化工具
  13. python vtk实时更新点云_Python-VTK:点云和颜色b
  14. 使用ssh公钥密钥自动登陆linux服务器
  15. 一段有趣的python小代码(将numpy中的数组转化为可哈希的字典)
  16. Qt Quick核心编程
  17. 计算机如何共享桌面,怎么共享电脑屏幕?
  18. Kaspersky Security Center部署
  19. 计算机组成原理6-20,计算机组成原理课后题6.20PPT课件
  20. 马克·扎克伯格(Mark Zuckerberg)的第一幅作品成交价为30,201美元

热门文章

  1. GBase 8c 存储技术---内存引擎(三)
  2. windbg+virtualbox+win10双机调试
  3. APP测试内容 -- 流量测试常见测试方法
  4. 自然语言处理中的中文词性、标记规范及其应用
  5. UOS系统工程师第十期真题
  6. mui与vue结合 功能网址
  7. Linear Algebra Done Right (undone)
  8. python打开图片的方式
  9. Sql server 连接 MySQL
  10. 亚马逊测评现在还能做吗?水深不深?