【SLAM】10.纵观SLAM,对比方案和未来方向

news/2024/10/23 5:53:30/

"天下谁人配白衣”

  • SLAM方案
  • 研究方向

SLAM方案

站在历史角度,看一下为SLAM的发展带来贡献的方案:

  1. 2007年—A.J.Davison—MonoSLAM
  • 视觉SLAM的先驱,建立在EKF基础上,此前基本无法在线运行,意义较大;
  • 应用场景窄;
    在这里插入图片描述
  1. 2007—Klein—PTAM
  • 也是SLAM重要事件:双线程结构;跟踪部分实时响应,地图优化没必要实时,第一个使用非线性优化后端,引入关键帧机制,带有AR效果;
  • 场景小跟踪容易丢失;
    图源视觉SLAM14讲
  1. 2014—J.Engle—LSD-SLAM
  • 单目直接法 用直接法构建半稠密地图(不需要特征点),半稠密:估计梯度明显的像素位置。可在CPU上进行,极线搜索做法是极线等距取5点,度量SSD,深度估计采取随机数再归一化等,减小了尺度漂移;
  • 直接法的缺点:对相机内参和曝光敏感,运动过快容易丢失,没有直接法的回环检测,依赖特征点;

在这里插入图片描述

  1. 2014—Forster—SVO
  • 半直接法 特征点与直接法混合使用,跟踪角点,没有描述子,直接根据关键点周围信息估计相机运动;4X4大小的块匹配,速度极快,SVO2.0可以达到400帧每秒,提出了深度滤波器;
  • 只要是无人机俯视相机使用,平视表现不好,单目初始化等;舍弃了后端优化和回环检测,故称一个VO而非SLAM。

在这里插入图片描述

  1. 2015—PTAM的继承者—ORB-SLAM
  • 特征点SLAM中的顶峰支持单目、双目、RGB-D模式;用ORB特征计算视觉里程计和回环检测的ORB字典,精度与效率折中;回环检测优秀,一个很大的ORB字典文件;三个线程完成SLAM,跟踪特征点、小图BA、大图全局位姿图和优化线程;
  • 必须对每个图像都计算一遍ORB特征,耗时,三线程CPU负担,没有开放存储和读取地图后重定位,无法提供导航、避障、交互等。

在这里插入图片描述

  1. RTAB-MAP 是专用RGB-D SLAM的方案,基于特征的视觉里程计,基于词袋的回环检测,后端的位姿图优化以及点云和三角网格地图,完整庞大的SLAM方案。

其他一些方案可以在官网查找

研究方向

  1. 视觉+惯导 :具有明显互补性:
  • IMU:角速度,加速度存在明显漂移,使积分两次得到的数据不可靠,但是短时间内快速运动,IMU能提供较好的估计;
  • 相机:运动过快,运动模糊,重叠区域太少,数据基本不漂移,运动过快可以依靠IMU保持位姿估计;
  • 图像变化时,不知道是相机自身运动还是外接环境变化,IMU却可以感受到;

复杂的VIO

  1. 语义SLAM

结合深度学习

  • 语义帮助SLAM:给图带标签,得到带标签的地图,有助于与回环检测和BA优化;
  • SLAM帮助语义:深度学习上,从不同视角采集物体数据标定,辛苦。而在SLAM中可以估计相机运动,自动计算物体在图像中的位置,省去人工成本。
  • 在深度学习之前,场景分割识别通过支持向量机,条件随机场等传统工具进行。使用深度学习后,很有前景
  1. 基于线/面特征的SLAM
  2. 动态场景下的SLAM
  3. 多机器人的SLAM

都有待探索。

我们正处在提出问题—寻找算法—完善算法 的第三个阶段,各位共勉!


http://www.ppmy.cn/news/1126710.html

相关文章

Docker的学习记录

Docker是一个被广泛使用的开源容器引擎,基于Go语言,遵从Apache2.0协议开源。 docker的三个概念:容器、镜像和仓库。 镜像(Image):镜像是Docker中的一个模板。通过 Docker镜像 来创建 Docker容器&#xff…

MySQL常见数据类型、特点以及使用场景

以下是一些常见的MySQL数据类型及其特点,包括数据类型的占用字节数、最大存储值和适用场景: 1. 整数类型: TINYINT:1字节,范围从-128到127(有符号),0到255(无符号&…

第38节——useId——了解

一、思考如下问题 1、这段代码在通过服务端渲染的时候会出现什么问题 const id Math.random();export default () > {return <div id{id}>哈哈哈哈</div> }2、服务端渲染的过程 1、React在服务端渲染&#xff0c;生成随机id&#xff08;假设为0.1&#xff0…

java - 数组工具类Arrays

目录 前言 一、Arrays是什么? 二、常用方法 1.toString()&#xff1a;将数组转换为字符串形式。 2. binarySearch()&#xff1a;在已排序的数组中查找指定元素的索引。 3.fill()&#xff1a;将数组的所有元素都设置为指定值。 4. copyOf()&#xff1a;将一个数组的部分或…

串口电平信号分析--一下看懂不同的串口通信信号

串口电平信号分析–一下看懂不同的串口通信信号

【编译和链接——详解】

1. 翻译环境和运行环境&#x1f4bb; 在ANSI C的任何⼀种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执⾏的机器指令。 第2种是执⾏环境&#xff0c;它⽤于实际执⾏代码。 2. 翻译环境&#x1f4bb; 那翻译环境是怎么将…

应用在手机触摸屏中的电容式触摸芯片

触控屏&#xff08;Touch panel&#xff09;又称为触控面板&#xff0c;是个可接收触头等输入讯号的感应式液晶显示装置&#xff0c;当接触了屏幕上的图形按钮时&#xff0c;屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置&#xff0c;可用以取代机械式的按钮面板&…

Redis 线程模式

Redis 是单线程吗&#xff1f; Redis 单线程指的是 [接收客户端请求 -> 解析请求 -> 进行数据读写操作 -> 发送数据给客户端] 这个过程是由一个线程 (主线程) 来完成的&#xff0c;这也是常说的 Redis 是单线程的原因。 但是 &#xff0c;Redis 程序不是单线程的&am…