文章目录

  • 1. SLAM概述
    • 1.1 定位
    • 1.2 地图构建
  • 2. SLAM使用的传感器
    • 2.1 激光雷达
    • 2.2 视觉传感器
      • 2.2.1 单目相机
      • 2.2.2 双目相机
      • 2.2.3 RGBD
  • 3. 视觉SLAM系统
  • 4. SLAM典型应用领域
  • 5. SLAM的一些好链接

1. SLAM概述

SLAM(Simultaneous Localization and Mapping)同时定位与地图创建。将机器人从一个未知环境里的未知地点出发,在移动过程中通过传感器(比如激光雷达,或是摄像头)观测定位自身位置、姿态、运动轨迹,再根据自身位置进行增量式的地图构建,从而达到同时定位和地图构建的目的。SLAM技术正是为了实现这个目标涉及到的诸多技术的总和。

定位和建图是两个相辅相成的过程,地图可以提供更好的定位,而定位可以进一步扩建地图。为了更好理解SLAM,下面借助扫地机器人来解释SLAM:
我们知道现在有不少家用的扫地机器人(如下图所示),可以代替人对室内进行自动清扫。但早期的扫地机器人并不智能,它只是具有简单的避障功能,在室内随机游走,遇到障碍物就转弯,这样会导致有很多地方会漏掉,扫地效率非常低。

要想真正实现智能的清扫,扫地机器人至少需要知道以下几件事情:
(1) 、我在哪里?也就是扫地机器人在工作过程中要知道自己在房间的具体位置。对应的术语叫:定位(Localization)。
(2)、我周围的环境是什么样子?也就是扫地机器人需要知道整个房间的地面结构信息。对应的术语叫:建图(Mapping)。
(3)、我怎样到达指定地点(充电器)?当扫地机器人电量不足时,如何以最短的路径到达充电器所在位置进行自动充电。对应的术语叫:路径规划(Route Planning)。

有了以上的几个能力,扫地机器人就立马变的智能了,不再像无头苍蝇一样在室内乱跑,而是可以从任意位置出发,一边清扫一边对周围的环境(房屋结构、障碍物)建立地图,同时根据地图定位自己当前在地图中的位置,并实时调整规划路线。随着使用时间的增长,扫地机器人建立的地图会越来越准确,规划的清扫路线越来越高效,变的越来越智能。这也不难理解断点续扫(一次扫不完,回到充电地点重合点,回到原位置继续清扫)的功能是如何实现的了。

下面是对SLAM技术的另一种直观描述


1.1 定位

在已经建好的地图上,在地图中行走,行走过程根据传感器获取的数据,匹配自己周围的环境和在地图中的位置。

1.2 地图构建

机器人在行走的过程中,根据传感器获取的数据,画地图。

2. SLAM使用的传感器

SLAM使用的传感器分为激光和视觉两大类,视觉又分为三小方向。

2.1 激光雷达

激光雷达是目前研究和使用最多的SLAM传感器,它们提供了机器人本体与周围环境障碍物的距离信息。常见的激光雷达厂家有sick、倍加福、镭神等。激光雷达能以很高精度测出机器人周围障碍点的角度和距离,从而很方便地实现SLAM、避障等功能。

激光雷达分为单线程和多线程,其中单线程激光雷达智能实时导航,二维成像缺乏高度信息,无法成像,如下图:

多线程激光雷达,可以三维动态实时成像,能实时成像,并且还能还原物体形状大小,还原空间的三维信息。所以自动驾驶都用多线程激光雷达。

使用激光雷达建图,多数使用滤波器方法,例如卡尔曼滤波器与粒子滤波器。

激光雷达的技术特点:
(1) 精度很高,也比较稳定
(2) 速度快,计算量也不大,容易做成实时SLAM
(3) 理论研究成熟,激光雷达用于SLAM的技术方案(EKF-SLAM)因为研究较早,现在已经非常成熟。当然人们也对EKF-SLAM的缺点也有较清楚的认识,例如不易表示回环、线性化误差严重、必须维护路标点的协方差矩阵等。
(4) 价格高,价格相对摄像头偏高,一般一千多起,贵的有上万。
(5) 体积大,相对于摄像头,体积大不少。

激光SLAM和视觉SLAM的对比

2.2 视觉传感器

视觉SLAM是最近几年SLAM研究热点之一,逐步应用起来,像特斯拉的新能源汽车就采用了4个摄像头,前后左右各一个。随着CPU、GPU处理速度的增长,NPU的广泛应用,使得许多以前被认为无法实时化的视觉算法,得以在10Hz以上的速度运行。

视觉传感器主要分为:单目、双目、RGBD。此外还有鱼眼、全景等特殊相机,由于在研究和产品中都属于少数在此不做介绍。就实现的难度而言,依次排序为:单目视觉>双目视觉>RGBD。

2.2.1 单目相机

单目SLAM简称MonoSLAM,即只用一个摄像头实现SLAM。优势是触感器特别的简单、成本特别的低,所以单目SLAM非常手研究者关注。但单目有个最大的问题,就是无法确切得到深度。

单目相机有一下一些主要特点
(1) 单目SLAM只能估计一个相对深度,由于绝对深度未知,单目SLAM没法得到机器人运动轨迹以及地图的真实大小。直观地说,如果把轨迹和房间同时放大两边,单目看到的像是一样的。

(2) 单目相机必须通过运动才能获取深度。它无法仅根据一张图像获得图像中物体离自己的相对距离。为了估计这个相对深度,单目SLAM要靠运动中的三角测量,来求解相机运动并估计像素的空间位置。也就是说,它的轨迹和地图,只有在相机运动之后才能收敛,如果相机不进行运动时,就无法得知像素的位置。

(3) 相机必须进行旋转和平移。相机运动还不能是纯粹的旋转,这就给单目SLAM的应用带来了一些麻烦,好在日常使用SLAM时,相机都会发生旋转和平移。

(4) 既可以用于室内,又可以用于室外。

2.2.2 双目相机

与单目不同的是,双目立体视觉既可以在运动时估计深度,也可在静止时估计,消除了单目视觉的许多麻烦。不过,双目或多目相机配置与标定均较为复杂,其深度量程也受双目的基线与分辨率限制。此外,通过双目图像计算深度计算量也非常大。

2.2.3 RGBD

RGBD = RGB + Depth Map

RGB :
RGB色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

Depth Map:
在3D计算机图形中,Depth Map(深度图)是包含与视点的场景对象的表面的距离有关的信息的图像或图像通道。其中,Depth Map 类似于灰度图像,只是它的每个像素值是传感器距离物体的实际距离。通常RGB图像和Depth图像是配准的,因而像素点之间具有一对一的对应关系。

RGBD相机是一种可以获得彩色图并测量深度的相机。RGBD相机有一下特点:
(1) 一般通过结构光或Time-of-Flight原理,直接测出物体离摄像头的距离。相对于双目立体视觉,它的速度非常快,可以用于实时应用。
(2) 、它比单目或双目相机能够提供更丰富的信息。
(3)、现在多数RGBD相机还存在视场角小、分辨率低等诸多问题。主要用于室内SLAM。

3. 视觉SLAM系统

SLAM系统一般分为五个模块,包括传感器数据、视觉里程计、后端、建图及回环检测。

传感器数据:主要用于采集实际环境中的各类型原始数据。包括激光扫描数据、视频图像数据、点云数据等。

视觉里程计:主要用于不同时刻间移动目标相对位置的估算。包括特征匹配、直接配准等算法的应用。

后端:主要用于优化视觉里程计带来的累计误差。包括滤波器、图优化等算法应用。

建图:用于三维地图构建。

回环检测:主要用于空间累积误差消除

其工作流程大致为:

传感器读取数据后,视觉里程计估计两个时刻的相对运动(Ego-motion),后端处理视觉里程计估计结果的累积误差,建图则根据前端与后端得到的运动轨迹来建立地图,回环检测考虑了同一场景不同时刻的图像,提供了空间上约束来消除累积误差。

ALAM回环检测

在视觉SLAM问题中,位姿的估计往往是一个递推的过程,即由上一帧位姿解算当前帧位姿,因此其中的误差便这样一帧一帧的传递下去,也就是我们所说的累计误差。

我们的位姿约束都是与上一帧建立的,第五帧的位姿误差中便已经积累了前面四个约束中的误差。但如果我们发现第五帧位姿不一定要由第四帧推出来,还可以由第二帧推算出来,显然这样计算误差会小很多,因为只存在两个约束的误差了。像这样与之前的某一帧建立位姿约束关系就叫做回环。回环通过减少约束数,起到了减小累计误差的作用。

那如何判断两帧图片的相似度?最直观的做法是特征匹配。由于特征匹配非常耗时,回环检测需要与过去所有关键帧匹配,这个运算量是绝对无法承受的,因此提出了词袋模型来加速特征匹配。

词袋模型就是把特征看成是一个个单词,通过比较两张图片中单词的一致性,来判断两张图片是否属于同一场景。为了能够把特征归类为单词,我们需要训练一个字典。字典包含了所有可能的单词的集合,为了提高通用性,需要使用海量的数据训练。

4. SLAM典型应用领域

(1) 主要应用于机器人定位导航领域:地图建模。
SLAM可以辅助机器人执行路径规划、自主探索、导航等任务。国内的科沃斯、塔米以及最新面世的岚豹扫地机器人都可以通过用SLAM算法结合激光雷达或者摄像头的方法,让扫地机高效绘制室内地图,智能分析和规划扫地环境,从而成功让自己步入了智能导航的阵列。

(2) VR/AR方面:辅助增强视觉效果。SLAM技术能够构建视觉效果更为真实的地图,从而针对当前视角渲染虚拟物体的叠加效果,使之更真实没有违和感。VR/AR代表性产品中微软Hololens、谷歌ProjectTango以及MagicLeap都应用了SLAM作为视觉增强手段。

(3) 无人机领域:地图建模。SLAM可以快速构建局部3D地图,并与地理信息系统(GIS)、视觉对象识别技术相结合,可以辅助无人机识别路障并自动避障规划路径,曾经刷爆美国朋友圈的Hovercamera无人机,就应用到了SLAM技术。

(4) 无人驾驶领域:视觉里程计。SLAM技术可以提供视觉里程计功能,并与GPS等其他定位方式相融合,从而满足无人驾驶精准定位的需求。例如,应用了基于激光雷达技术Google无人驾驶车以及牛津大学MobileRoboticsGroup11年改装的无人驾驶汽车野猫(Wildcat)均已成功路测。

5. SLAM的一些好链接

(1) 古月居的SLAM入门介绍,添加链接描述

SLAM---初识SLAM相关推荐

  1. 视觉SLAM②--初识SLAM

    目录 2.0 本章主要内容 2.1 引子:小萝卜的例子 2.2 经典视觉SLAM框架 2.2.1 视觉里程计 2.2.2 后端优化 2.2.3 回环检测 2.2.4 建图 2.3 SLAM的数学问题描 ...

  2. 视觉SLAM笔记(1) 初识SLAM

    视觉SLAM笔记(1) 初识SLAM 1. 小萝卜的例子 2. 状态环境 3. 传感器比较 1. 小萝卜的例子 假设组装了一台叫做"小萝卜"的机器人,大概长的下图这个样子 作为机器 ...

  3. 视觉SLAM十四讲 第1-2讲 初识SLAM

    视觉SLAM十四讲 第1-2讲 初识SLAM 1. slam 是什么 2. SLAM基本模块 3. 相机的种类 4. 视觉slam基本流程 5. 非/线性系统.非/高斯系统 6. CMake 1. s ...

  4. 初识SLAM到认识李群学习笔记

    本文为学习高翔.张涛等著的<视觉SLAM十四讲>的学习笔记,通过研究视觉SLAM,从三维空间刚体运动引出群论和李代数. 1. 初识SLAM 单目相机以二维的形式记录了三维的世界,缺少场景的 ...

  5. 初识slam 即时定位与地图构建

    simultaneous localization and mapping 参考文章1:SLAM (同步定位与建图) 参考文章2:从零开始一起学习SLAM | 学习SLAM到底需要学什么?

  6. SLAM:SLAM相机简介、SLAM五步流程简介(VO+BEO+LCD+M)之详细攻略

    SLAM:SLAM相机简介.SLAM五步流程简介(VO+BEO+LCD+M)之详细攻略 目录 SLAM相机 1.单目相机 2.双目Stereo相机 3.深度相机/RGB-D相机 SLAM五步流程

  7. SLAM:SLAM(即时定位与地图构建)的简介、发展、案例应用之详细攻略

    SLAM:SLAM(即时定位与地图构建)的简介.发展.案例应用之详细攻略 目录 SLAM的简介 1.我在什么地方?-定位,自身状态. 周围环境是什么样?-建图,外在环境. 2.SLAM的问题描述 3. ...

  8. SLAM:SLAM之VSLAM的简介

    SLAM:SLAM之VSLAM的简介 目录 SLAM VSLAM-传感器为相机 1.传感器数据读取 2.VO-前端视觉里程计

  9. 视觉SLAM十四讲(2):初识SLAM

    这一讲主要介绍视觉SLAM的结构,并完成第一个SLAM程序:HelloSLAM. 目录 2.1 小萝卜的例子 单目相机 双目相机 深度相机 2.2 经典视觉SLAM框架 2.3 SLAM问题的数学表述 ...

  10. 视觉SLAM十四讲学习笔记-第二讲-初识SLAM

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 "定位"和"建图",可以看成感知的"内外之分". ...

最新文章

  1. 2022-2028年中国油气勘探工程产业研究及前瞻分析报告
  2. java mysql 删除 博客园_mysql的增删改查
  3. Mac-连接Windows远程桌面软件
  4. 一种简单又有效的设置虚拟机网络的方法
  5. 【Python】Python爬虫快速入门,BeautifulSoup基本使用及实践
  6. RocketMQ快速入门之手动创建topic
  7. mysql unix_timestamp 格式化_FROM_UNIXTIME 格式化MYSQL时间戳函数_MySQL
  8. 计算机网络发展第二阶段 兴起于,计算机辅助开始于计算机发展第几阶段
  9. 一分钟了解四层/七层反向代理
  10. python和控制流程_Python基础之:Python中的流程控制
  11. python 图像的拉普拉斯变换中的数值问题_数字图像处理(第十章)
  12. 从《觉醒年代》看如何用Python来绘制可视化仪表盘
  13. 【Oracle】权限
  14. 挂载、卸载、free查看内存情况、创建交换分区、回环设备、dd命令、自动挂载、fuser...
  15. java动态代理_Java核心 -- 动态代理
  16. pdo调用mysql存储过程_获取out参数值问题_调用Oracle存储过程并获取out参数值-阿里云开发者社区...
  17. 学成在线案例(开发具体步骤)
  18. nyoj-34-韩信点兵
  19. 快手科技2020年总收入人民币588亿元,同比增长50.2%
  20. Vue 项目使用 又拍云 云存储服务

热门文章

  1. Anaconda安装老版本tensorflow
  2. B站翻车了? B站面试官:我身家过亿!被指炫富歧视北邮学生上知乎热榜!
  3. 2021年SEO战略权威指南
  4. 第十四届蓝桥杯b组c/c++
  5. Java 性能笔记:自动装箱/拆箱
  6. ibm 关闭小型机橙色告警灯
  7. 怎么才能用阿尔法狗,来个网址,要付费多少
  8. 词根venge/vent/ver/verb/vers等衍生单词
  9. java一个byte字节可以存2个16进制字符
  10. Android学习笔记——关于Intent