SLAM for Dummies SLAM初学者教程 中文翻译 1到4章
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毫米。
SLAM for Dummies SLAM初学者教程 中文翻译 1到4章的更多相关文章
- 《Introduction to Tornado》中文翻译计划——第五章:异步Web服务
http://www.pythoner.com/294.html 本文为<Introduction to Tornado>中文翻译,将在https://github.com/alioth3 ...
- Superset 官方入门教程中文翻译
本文翻译自 Superset 的官方文档:Toturial - Creating your first dashboard 最新版本的 Superset 界面与功能上与文档中提到的会有些许出入,以实际 ...
- Kubernetes tutorial - K8S 官方入门教程 中文翻译
官方教程,共 6 个小节.每一小节的第一部分是知识讲解,第二部分是在线测试环境的入口. kubectl 的命令手册 原文地址 1 创建集群 1.1 使用 Minikube 创建集群 Kubernete ...
- 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-8 Table per Type Inheritance 建模 问题 你有这样一 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (9) -----第二章 实体数据建模基础之继承关系映射TPH
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-10 Table per Hierarchy Inheritance 建模 问题 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (10) -----第二章 实体数据建模基础之两实体间Is-a和Has-a关系建模、嵌入值映射
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-11 两实体间Is-a和Has-a关系建模 问题 你有两张有Is-a和Has-a ...
- RabbitMQ学习之:(十一)AMQP.0-10规范,中文翻译1,2,3章 (转载)
From:http://blog.sina.com.cn/s/blog_4aba0c8b0100p6ho.html From: http://blog.sina.com.cn/s/blog_4aba0 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (6) -----第二章 实体数据建模基础之使用Code First建模自引用关系
2-5 使用Code First建模自引用关系 问题 你的数据库中一张自引用的表,你想使用Code First 将其建模成一个包含自关联的实体. 解决方案 我们假设你有如图2-14所示的数据库关系图的 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (7) -----第二章 实体数据建模基础之拆分实体到多表以及拆分表到多实体
2-6 拆分实体到多表 问题 你有两张或是更多的表,他们共享一样的主键,你想将他们映射到一个单独的实体. 解决方案 让我们用图2-15所示的两张表来演示这种情况. 图 2-15,两张表,Prodeuc ...
随机推荐
- linux mint 19解决 输入法问题
安装搜狗后出现 You're currently running Fcitx with GUI, but fcitx-configtool couldn't be found, the package ...
- oracle_存储过程_没有参数_根据配置自动创建申请单以及写日志事务回滚
CREATE OR REPLACE PROCEDURE A_MEAS_MIINSP_PLAN_CREATEASvs_msg VARCHAR2(4000);p_PERIODTYPE number; -- ...
- day05<Java语言基础--数组>
Java语言基础(数组概述和定义格式说明) Java语言基础(数组的初始化动态初始化) Java语言基础(Java中的内存分配以及栈和堆的区别) Java语言基础(数组的内存图解1一个数组) Java ...
- 九度 1500:出操队形(LIS变形)
题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往楼下跑了,然后身高矮的排在队伍的前面,身高较高的就要排在队尾.突然,有一天出操负责人想了一个 ...
- Effective C++ Item 15 Provide access to raw resources in resource-managing classes
In last two item, I talk about resource-managing using RAII, now comes to the practical part. Often, ...
- 在(MRv1)中JobTracker工作方式
在 Hadoop MapReduce 中,JobTracker 具有两种不同的职责: 管理集群中的计算资源,这涉及到维护活动节点列表.可用和占用的 map 和 reduce slots 列表,以及依据 ...
- NGUI屏幕自适应(转)
屏幕自适应 NGUI可以比较方便的实现屏幕自适应,但是它的官方教程里面针对这个问题没有详细的教程,所以可能在实现的时候会走比较多的弯路.以下是我在开发过程中找到的一个比较方便的实现方法. 主要组件 ...
- laravel框架容器管理的一些要点
本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...
- php学习十一:组合
我们在类当中我往往会用到一些对象,此时的继承就无法满足我们的需求,这个时候我们需要用到组合.继承如果是is..a的关系,那么组合就是has...a的关系,直接在本类里面声明即可,不过声明的是一个对象 ...
- Android App签名打包 与 SDK开发文档
Android App签名打包签名的意义1.为了保证每个程序开发者的合法权益2.放置部分人通过使用相同的Package Name来混淆替换已经安装的程序,从而出现一些恶意篡改3.保证我们每次发布的版本 ...