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美元。它带有一个摄像头和一个机器人控制系统。我们已经在附录以及网站上提供了非常基本的驱动器。

《SLAM for Dummies》中文版《SLAM初学者教程》的更多相关文章

  1. SLAM初探-SLAM for Dummies

    SLAM综述性特别是原理讲述比较浅显易懂的的资料比较少,相对比较知名的是<SLAM for Dummies>,但中文资料相对较少,这里就简单概述一下<SLAM for Dummies ...

  2. SLAM for Dummies SLAM初学者教程 中文翻译 1到4章

    SLAM for Dummies  SLAM初学者教程A Tutorial Approach to Simultaneous Localization and Mapping  一本关于实时定位及绘图 ...

  3. SLAM for dummies中文翻译

    1.简介 本文的主要目的是简单介绍移动机器人领域中广泛应用的技术SLAM(同步定位与地图绘制)的理论基础以及应用细节.虽然目前存在很多关于SLAM技术的方方面面的论文,但是对于一个新手来说,仍然需要花 ...

  4. SLAM FOR DUMMIES 第5-8章 中文翻译

    5,SLAM的处理过程 SLAM过程包括许多步骤,该过程的目标是使用环境更新机器人的位置.由于机器人的里程计通常是存在误差的,我们不能直接依赖于里程计.我们可以用激光扫描环境来校正机器人的位置,这是通 ...

  5. PANDAS 数据分析初学者教程

    Pandas 初学者教程       2018-05-19 六尺巷人 对于数据科学家,无论是数据分析还是数据挖掘来说,Pandas是一个非常重要的Python包.它不仅提供了很多方法,使得数据处理非常 ...

  6. Go GraphQL初学者教程

    Go GraphQL初学者教程 https://tutorialedge.net/golang/go-graphql-beginners-tutorial/ https://tutorialedge. ...

  7. 从零开始一起学习SLAM | 为什么要学SLAM?

    在<零基础小白,如何入门计算机视觉?>中我提到过,计算机视觉的研究目前主要分为两大方向:基于学习的方法和基于几何的方法.其中基于学习的方法最火的就是深度学习,而基于几何方法最火的就是视觉S ...

  8. SLAM学习笔记 - 视觉SLAM方法资源汇总

    工具类: ros框架 linux系列教程     vim Eigen     Eigen快速入门 Pangolin  Pangolin安装与使用 数据集: TUM         数据格式 提供pyt ...

  9. Github初学者教程(一)

    如果你是一名程序员,或者是相关专业的学生,那么Github你不应不知道.很多开源组织和大神,会选择在Github这个平台上,发布他们的开源项目,学会使用Github将能够给你的学习和工作带来巨大帮助! ...

随机推荐

  1. ssh 免密码登录,以及 本地和远端用户名不一致 问题

    ssh 远程登录 ssh -l u1 u1@192.168.0.7 ssh u1@192.168.0.7 每次远程都要输入 用户名,密码 比较麻烦.所以比较好的是免密码登录 1.安装ssh服务器 su ...

  2. a,b = b,a 换值问题

    a = "hello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhe ...

  3. 组队打代码 !!! ——Alpha项目冲刺

    Alpha阶段 - 博客链接合集 队伍名称: 代码那些事儿 学号 姓名 211606320 刘佳 211606313 李佳 211606303 陈水莲 211606302 曾丽丽 211606338 ...

  4. 树莓派Zero W GPIO控制

    作者:陈拓 chentuo@ms.xab.ac.cn 2018.06.09/2018.07.05 0.  概述 本文介绍树莓派 Zero W的GPIO控制,并用LED看效果. 0.1 树莓派GPIO编 ...

  5. 第六章 图(c)广度优先搜索

  6. cin中函数的作用

    cin是istream类的对象,它是从标准输入设备(键盘)获取数据,程序中的变量通过流提取符">>"从流中提取数据.流提取符">>"从流 ...

  7. C++,坑...

    如果使用const全局变量,记得声明处的引用处都加extern. uint32_t等,t代表是typedef的,在stdint.h头文件里,C99后引入,记得先测试再用. accept函数的参数,记得 ...

  8. C++中纯虚函数

    1.纯虚函数 virtual ReturnType Function()= 0; 纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义.凡是含有纯虚函数的类叫做抽象类 ...

  9. day1:vcp考试

    Q1. An administrator wants to provide users restricted access. The users should only be able to perf ...

  10. MD5加密获得文件的MD5码

    哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串.加密哈希函数有这样一个属性:在计算不大可能找到散列为相同的值的两个不同的输入:也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配 ...