SLAM for Dummies  SLAM初学者教程
A Tutorial Approach to Simultaneous Localization and Mapping  一本关于实时定位及绘图(SLAM)的入门指导教程

目录

1. 目录

2. 简介

3. 关于SLAM

4. 硬件

    -机器人

    -距离量测设备

5. SLAM处理过程

6. 雷达数据

7. 里程计数据

8. 地标

9. 地标提取

  SPIKE地标

  RANSAC

  多种策略

10. 数据结合

11. EKF扩展科尔曼滤波

   过程简介

   矩阵(系统状态:X,协方差矩阵:P,卡尔曼增益:K,测量模型的雅克比矩阵:H,预测模型的雅克比矩阵:A,SLAM特殊雅克比矩阵:Jxr和Jz,处理过程噪声:Q和W,测量噪声:R和V)

   第一步:使用里程计数据更新当前状态

   第二步:通过重观测地标更新状态

   第三步:添加新的地标到当然状态

12. 最终评语

13. 参考

14. 附录A:坐标转换

15. 附录B:SICK LMS 200 接口代码

16. 附录C:ER1 接口代码

17. 附录D:地标提取代码

 

 

2. 简介

本文档的目的是为了简要介绍移动机器人的SLAM。读了本文章你应该能够实施SLAM了。SLAM可以通过许多方式得到实施。有很多的硬件可供选择。SLAM更像是一个概念而非一个单独的算法。SLAM涉及很多步骤,而这些步骤又可以使用不同的算法得到实施。在大多数情况下我们针对各个步骤各自只解释一个方法,但隐含地读者可以通过更多的阅读得到还有其他可能的方法来实现它们。

写这篇文章的目的是帮助我们自己理解它。一个人能够通过讲解更好地理解这个知识。而且当前的SLAM文章大都太理论化而且大多数只集中在SLAM的各个小领域,不够总结性。因此,本文的目的便是实用而且集中在一个小的而且是基本的SLAM算法上,从而可以作为一个出发点更好地理解SLAM这个概念。对于在SLAM方面有一些背景知识的人来说,我们这里提供了一个完整基于EKF(扩展卡尔曼滤波器)算法的解决方案。当然我们并不能保证这个解决方案完美,我们只是说能够覆盖所有所需要的基本步骤,从而使实施能够启动并且运行。另一方面需要注意的是SLAM还没有被完全解决,在该领域还有很多研究在进行。

为了更容易实现所有的代码均提供了下载,所以只需要下载下来,编译,安装到硬件上(SICK牌雷达扫描器,ER1牌机器人),然后执行程序;即插即用。我们使用了Microsoft Visual Studio C#语言编写的代码,在.net framework v.1.1下编译的。大部分代码都是非常直观的,几乎可以当成伪代码阅读,所以转换成其他的语言或平台应该来说是非常容易的。

 

3. 关于SLAM

术语SLAM是Simultaneous Localization And Mapping的缩略词。它是关于解决使用移动机器人创建一个未知环境的地图,同时使用该地图在该环境中导航。

SLAM包括多个组成部分;地标提取,数据融合,状态估计,状态更新,和地标更新。每个小部分都有多种方法来解决。我们将展示各个部分的实例。这也意味着某些部分是可以使用新方法替代它们的。作为一个实例我们将展示两种不同的方法来解决地标提取问题,并对不同的方法进行评论。观点就是你能够使用我们的方法并且使用你针对这些算法自己的新奇方法扩展它。我们决定集中精力在一个室内环境移动机器人上。你可以选择改变这些算法以使得它可以用在不同的环境中。

SLAM可以使用在2D和3D运动中。我们这里只考虑2D运动。

 如果读者已经熟悉了SLAM的话这将是有用的。有很多好的简介比如参考[6][4]。知道一点EKF算法也很有帮助。有很多介绍比如参考[3][5]。有一点背景知识总是有帮助的,因为这会让你更容易地理解本教程,但是并不严格要求你去理解这些。

 

4. 硬件

 机器人的硬件是非常重要的。要做SLAM需要一个移动机器人和一个距离测量器。我们这里使用的移动机器人是滚轮室内机器人。该文档集中主要在SLAM的软件使用,并不探究机器人复杂的运动模型(比如机器人是如何运动的)比如人型机器人,自动水下设备,无人机,奇怪的滚轮构造机器人等。

我们这里介绍一些常用的用于移动机器人SLAM的基本的测量设备。

机器人

需要考虑的重要的参数有易用、可量距和价格适中。

可量距性决定了机器人能否通过滚轮的转动很好地估计它的自身位置。机器人不应该有超过2cm/米、2度/45度的误差。典型的机器人驱动器允许机器人报告它的笛卡尔坐标系统下的(x,y)位置,并且报告机器人当前的轴承/航向。

当然可以从头开始建机器人。但是这将会是很耗时的,但也是一个学习的过程。但是很可以买一个现成的机器人了,像Real World Interface或者像Evolution Robotics ER1 robot。RW1并不在各处售卖,但是通常在世界各地的许多计算机实验室中可以见到。但RW1机器人有众所周知的测距差的毛病。这增加了预测当前位置的困难,让SLAM更加难做。这里我们使用了ER1。这个又小又便宜。它作科研使用只需要200美元,做私人使用需要300美元。它带有一个摄像头和一个机器人控制系统。我们已经在附录以及网站上提供了非常基本的驱动器。

目前使用的测距装置通常是激光扫描仪。它们非常精确、高效,并且输出不需要太多的计算。缺点是,它们也非常昂贵,一个SICK的扫描器需要花费5000美元。激光扫描仪遇到一些问题包括玻璃环境下,它们的数据输出是非常的糟糕的。激光扫描仪也不能在水下使用,因为水会破坏光线,而且范围会大大减少。

其次是声纳的选择。几年前,声纳被广泛使用。它们比激光扫描仪便宜。与激光扫描仪相比,他们的测量结果不是很好,而且他们的读数往往很差。在激光扫描仪中,只有一条测量直线,宽度只有0.25度,声纳很容易将声波束宽度提高到30度。但在水下,它们是最好的选择,就像海豚航行的方式一样。通常使用的类型是偏振声纳。它最初是用来测量拍立得相机拍照时的距离。声纳已成功地应用于各种测距需求。

第三个选择是使用视觉。传统上,使用视觉对计算的要求是非常高的,而且由于光线的变化也容易出错。如果一个房间没有灯光,视觉系统肯定无法工作。然而,在最近几年,这一领域有了一些有趣的进展。通常情况下,系统会使用一个立体照片或漫反射系统来测量距离。使用视觉与人类看待世界的方式相似,因此可能比激光或声纳更具有直觉吸引力。此外,与激光和声纳扫描相比,照片中包含的信息要多得多。这曾经是瓶颈,因为所有这些信息数据都需要处理,但是随着算法和计算能力的进步,这已经不再是问题了。基于视觉的距离测量已成功应用。

我们选择使用来自SICK的激光测距仪。它的用途非常广泛,对眼睛无害,在SLAM项目中有很好的性能。测量误差是+- 50mm,这看起来很大,但在实践中误差会更小。最新的SICK激光扫描仪测量误差可以做到+- 5毫米。

版权声明:本文为agvcfy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/agvcfy/p/9373126.html