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. Kotlin语言学习笔记(5)

    委托模式(Delegation) 类的委托 interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fu ...

  2. 迷你MVVM框架 avalonjs 1.3.7发布

    又到每个月的15号了,现在avalon已经固定在每个月的15号发布新版本.这次发布又带来许多新特性,让大家写码更加轻松,借助于"操作数据即操作DOM"的核心理念与双向绑定机制,现在 ...

  3. jsp页面重定向

    <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncodi ...

  4. 疯狂JAVA——第二章 理解面向对象

    面向对象的三大特征:继承.封装和多态 面向对象的方式实际上由OOA(面向对象分析).OOD(面向对象设计)和OOP(面相对象编程)三个部分组成,其中OOA和OOD的结构需要用一个描述方式来描述并记录, ...

  5. docker 配置远程访问

    系统: centos 7 Docker version 1.12.6 yum 安装的  #yum install docker docker server在192.168.111.120上 # vim ...

  6. SpringCloud 简单理解

    0.SpringCloud,微服务架构.包括 服务发现(Eureka),断路器(Hystrix),服务网关(Zuul),客户端负载均衡(Ribbon).服务跟踪(Sleuth).消息总线(Bus).消 ...

  7. linux系统分区表修复

    有些时候在系统突然断电或硬盘只读后在看机会出现报错,开机到不了登录界面,而是来到一个提示: Give root password for maintenance(or type Control-d t ...

  8. 百度Cafe原理--Android自动化测试学习历程

    主要讲解内容及笔记: 一.Cafe原理 Cafe是一款自动化测试框架,解决问题:跨进程测试.快速深度测试 官网:http://baiduqa.github.io/Cafe/ Cafe provides ...

  9. [leetcode]159. Longest Substring with At Most Two Distinct Characters至多包含两种字符的最长子串

    Given a string s , find the length of the longest substring t  that contains at most 2 distinct char ...

  10. MongoDB使用场景和局限 (转)

    MongoDB的使用场景: 1.Web应用程序.文档能表示丰富的数据结构,建模相同数据库所需的集合数量通常会比使用完全正规化关系型数据库的数据表数量要少.动态查询和二级索引能让你轻松的实现SQL开发者 ...