Slam(即时定位与地图构建) 知识篇
Slam即时定位与地图构建
技术解释
同步定位与地图构建(SLAM或Simultaneous localization and mapping)是一种概念:希望机器人从未知环境的未知地点出发,在运动过程中通过重复观测到的地图特征(比如,墙角,柱子等)定位自身位置和姿态,再根据自身位置增量式的构建地图,从而达到同时定位和地图构建的目的。
使用情景
一个由德国达姆施塔特理工大学研发的机器人正使用激光成像探测与测距技术来给迷宫绘图。
上图的机器人描绘出的地图。
操作性定义
这里说的地图,是用来在环境中定位,以及描述当前环境以便于规划航线的一个概念;它通过记录以某种形式的感知获取的信息,用以和当前的感知结果相比较,以支撑对现实定位的评估。在定位评估方面,地图提供的帮助程度,与感知的精度和质量成反相关。地图通常反映了它被描绘出来的时刻的环境状态,所以它并不一定反映它被使用的时刻的环境状态。
在误差和噪音条件下,定位和地图构建技术上的复杂度不支持两者同时获得连续的解。即时定位与地图构建(SLAM)是这样一个概念:把两方面的进程都捆绑在一个循环之中,以此支持双方在各自进程中都求得连续解;不同进程中相互迭代的反馈对双方的连续解有改进作用。
地图构建,是研究如何把从一系列传感器收集到的信息,集成到一个一致性的模型上的问题。它可以被描述为第一核心问题:这个世界长什么样?地图构建的核心部分是环境的表达方式以及传感器数据的解释。
与之相比,定位,是在地图上估测机器人的坐标和姿势形态的问题;换而言之,机器人需要回答这里的第二核心问题,我在哪?典型的解包含以下两个方面:追踪——通常机器人的初始位置已知;全局定位——通常只给出很少,甚至不给出有关于起始位置环境特征的先验信息。
所以,同步定位与地图构建(SLAM)被定义为以下问题:在建立新地图模型或者改进已知地图的同时,在该地图模型上定位机器人。实际上,这两个核心问题如果分开解决,将毫无意义;必须同时求解。
在机器人能够根据一系列观测值回答“这个世界长什么样”之前,它需要知道的额外信息很多,比如以下:
- 它自身的运动学特征,
- 信息的自动获得需要什么样的品质,
- 附加的支持观测值能从哪些源得到。在没有地图或者方向参考的前提下,对机器人的当前位置估测是一个复杂的任务。[1]这里的"位置"可以简单指代机器人的所处方位,也可以包括它的姿势形态。
技术上的问题
同步定位与地图构建(SLAM)可以被看做是一个鸡生蛋蛋生鸡的问题:完美的定位需要用到一个无偏差的地图;但这样的地图又需要精确的位置估测来描绘。这就是一个迭代数学问题解决策略的起始条件。作为对比,原子轨道模型可以被看做一个在不精确的观测条件下说明足够多的结果的经典方法。
再者,由于多个传感器对机器人的相对运动的辨别存在固有的不确定性,上一节提到的两个“核心问题”也不像看起来的那么简单。一般来说,由于技术环境中总会考虑噪声,所以SLAM方法要考虑的不只是数学上的紧凑解,也包括与那些和结果相关的物理概念的相互作用。
如果在地图构建的下一个迭代步骤中,测得的距离和方向有可预知的一系列不精确度——通常由传感器有限的的精确度和外加的环境噪声所引起,那么附加到地图上的所有特征都将会含有相应的误差。随着时间的推移和运动的变化,定位和地图构建的误差累计增加,将会对地图本身和机器人的定位、导航等能力的精度产生很大的扭曲。
有许多技术能补偿这些误差,比如那些能再现某些特征过去的值的方法(也就是说,图像匹配法或者环路闭合检测法),或者对现有的地图进行处理——以融合该特征在不同时间的不同值。此外还有一些用于SLAM统计学的技术可起到作用,包括卡尔曼滤波、粒子滤波(实际上是一种蒙特卡罗方法)以及扫描匹配的数据范围。
地图构建
在机器人技术社区中,SLAM的地图构建通常指的是建立与环境几何一致的地图。而一般算法中建立的拓扑地图只反映了环境中的各点连接关系,并不能构建几何一致的地图。因此,这些拓扑算法不能被用于SLAM。
在实用中,SLAM通常要被剪裁至适应可获得的资源,于是可以看出它的目标不是完美,而是操作实用性。已经发布的SLAM方法已被应用于无人机、无人潜艇、行星探测车、最近大热的家政机器人、甚至人体内部。[2]
学界大致都认为,SLAM问题的“正在得到解决”是过去十年间机器人研究领域的最重大成果之一。[3] 该领域中仍有许多有待解决的难题,比如图像匹配和计算复杂度等方面的相关问题。
基于SLAM文献的最新研究进展中,有一条值得注意,就是对SLAM的概率论基础进行重新估测。这个充满了冒险家特质的方法大意如下:通过引入随机有限集的、多目标的贝叶斯滤波器,使得基于特征的SLAM算法获得卓越的性能,以此跳过对图像匹配的依赖;但作为代价,测量中的假警报率和漏检率都会被提升。[4] 这里面的算法是基于概率假设密度滤波的方法来改进的。[5]
传感
SLAM研究中经常使用许多不同型号的传感器来获得地图数据。这些数据带有统计独立的误差。[来源请求]这个统计独立是解决度量偏差和检测中的噪声的强制需求。简单来说,就是任何一个东西都很难测的准确。比如一根1米长的棍子,你第一次测量的时候可能是1.02米,第二次测量时1.05米,...。总之测量的时候多多少少都会有一些误差在里面,因此SLAM算法本身必须要有效的处理这些测量误差。
这些传感器可以是光学的,比如1D的(单波束)或者2D的(扫描)激光测距仪、3D_Flash_LIDAR、2D或3D声呐传感器以及一个或多个2D摄像头。从2005年开始,使用可视化传感器(摄像头)对SLAM的研究(可视化SLAM)如火如荼地展开,因为从那时起摄像头开始普及(比如说手机普遍带有摄像头)。[6]
新近的方法使用了准光学的无线测距法,同时把三角测距法等几何方法应用于SLAM中,用以消除微弱无线信号对测量的影响。
一种为走路者设计的SLAM应用使用了一个装在鞋头的惯性测量单元作为主要传感器,该设计依赖于走路者能自动规避墙体这一假设。这个名为FootSLAM的设计可被用于自动建立建筑物的楼面布置图,从而方便建立该建筑的室内定位系统。[7]
定位
传感器的结果会作为定位算法的输入。由几何知识可知,对于n维的定位问题,任何传感输出必须包含至少一个多点定位和(n+1)个判别方程。为了算出结果,有关于在绝对或相对的循环和镜像坐标系统下得到的结果的先验知识也是必要的。
建模
以上结果对地图构建的贡献,可以在“2D建模并分别表示”或者在“3D建模并在2D上投影表示”中工作得一样出色。作为建模的一部分,机器人本身的运动学特征也要被考虑进去,用以提高在固有背景噪声下的传感精度。构建的动态模型需平衡不同传感器、不同局部误差模型给出来的贡献值,并最终包含一个基于地图本身的锐利的可视化描述,这包括机器人的位置和方向等云概率信息。地图构建就是这样一个动态模型的最终运算结果。
相关文献
有关于SLAM的一个开创性工作是以R.C. Smith和P. Cheeseman为代表,在1986年作出的对空间不确定性的估测的研究。[8][9]其他该领域的开拓工作由Hugh_F._Durrant-Whyte的研究团队在1990年代初所作出。[10]
参见
- 机器人学主题
- 卡尔曼滤波
- 蒙特卡洛定位法
- 粒子滤波
- Stanley,一辆成功使用了SLAM技术的无人车
- 深度图像的图像配准
- 移动机器人编程工具包项目:一组开源、跨平台的SLAM资料库。
- Multi Autonomous Ground-国际机器人竞赛:一项160万美元的国际竞赛,要求参赛者让多台无人车合作给一大片区域绘制地图。
脚注资料
- ^ Definition according to OpenSLAM.org, a platform for SLAM researchers
- ^ Mountney, P.; Stoyanov, D. Davison, A. Yang, G-Z. Simultaneous Stereoscope Localization and Soft-Tissue Mapping for Minimal Invasive Surgery (PDF). MICCAI. 2006, 1: 347–354 [2010-07-30]. doi:10.1007/11866565_43.
- ^ Durrant-Whyte, H.; Bailey, T. Simultaneous Localization and Mapping (SLAM): Part I The Essential Algorithms (PDF). Robotics and Automation Magazine. 2006, 13 (2): 99–110 [2008-04-08]. doi:10.1109/MRA.2006.1638022.
- ^ J. Mullane, B.-N. Vo, M. D. Adams, and B.-T. Vo,. A random-finite-set approach to Bayesian SLAM, (PDF). IEEE Transactions on Robotics. 2011, 27 (2): 268–282. doi:10.1109/TRO.2010.2101370.
- ^ R. P. S. Mahler,. Statistical Multisource-Multitarget Information Fusion.. Artech House,. 2007.
- ^ Karlsson, N.; Di Bernardo, E.;Ostrowski, J;Goncalves, L.;Pirjanian, P.;Munich, M. The vSLAM Algorithm for Robust Localization and Mapping. Int. Conf. on Robotics and Automation (ICRA). 2005.
- ^ Robertson, P.; Angermann, M.;Krach B. Simultaneous Localization and Mapping for Pedestrians using only Foot-Mounted Inertial Sensors (PDF). Ubicomp 2009. Orlando, Florida, USA: ACM. 2009. doi:10.1145/1620545.1620560.
- ^ Smith, R.C.; Cheeseman, P. On the Representation and Estimation of Spatial Uncertainty (PDF). The International Journal of Robotics Research. 1986, 5 (4): 56–68 [2008-04-08]. doi:10.1177/027836498600500404.
- ^ Smith, R.C.; Self, M.;Cheeseman, P. Estimating Uncertain Spatial Relationships in Robotics (PDF). Proceedings of the Second Annual Conference on Uncertainty in Artificial Intelligence. UAI '86. University of Pennsylvania, Philadelphia, PA, USA: Elsevier: 435–461. 1986.
- ^ Leonard, J.J.; Durrant-whyte, H.F. Simultaneous map building and localization for an autonomous mobile robot. Intelligent Robots and Systems' 91.'Intelligence for Mechanical Systems, Proceedings IROS'91. IEEE/RSJ International Workshop on. 1991: 1442–1447 [2008-04-08]. doi:10.1109/IROS.1991.174711.
外部链接
- Probabilistic Robotics by Sebastian Thrun, Wolfram Burgard and Dieter Fox with a clear overview of SLAM.
- SLAM For Dummies (A Tutorial Approach to Simultaneous Localization and Mapping).
- Andrew Davison research page at Imperial College London about SLAM using vision.
- Autonomous and Perceptive Systems research page at University of Groningen about visual SLAM.
- openslam.org A good collection of open source code and explanations of SLAM.
- Matlab Toolbox of Kalman Filtering applied to Simultaneous Localization and Mapping Vehicle moving in 1D, 2D and 3D.
- SLAM Example using Processing.js of Feature-Based Navigation.
- FootSLAM research page at DLR including the related Wifi SLAM and PlaceSLAM approaches.
本文版权归 维基百科,摘自:https://zh.wikipedia.org/wiki/%E5%8D%B3%E6%97%B6%E5%AE%9A%E4%BD%8D%E4%B8%8E%E5%9C%B0%E5%9B%BE%E6%9E%84%E5%BB%BA
Slam(即时定位与地图构建) 知识篇的更多相关文章
- 即时定位与地图构建SLAM(Simultaneous Localization and Mapping)
SLAM 即时定位与地图构建SLAM(Simultaneous Localization and Mapping) 参考链接: 视觉SLAM漫谈,http://www.cnblogs.com/gaox ...
- 自主移动机器人同时定位与地图创建(SLAM)方法概述
1.引言: 机器人的研究越来越多的得到关注和投入,随着计算机技术和人工智能的发展,智能自主移动机器人成为机器人领域的一个重要研究方向和研究热点.移动机器人的定位和地图创建是自主移动机器人领域的热点研究 ...
- ROS 八叉树地图构建 - 安装 octomap 和 octomap_server 建图包!
项目要用到八叉树库 Octomap 来构建地图,这里记录下安装.可视化,并启用带颜色的 Octomap 的过程. 一.Apt 安装 Octomap 库 如果你不需要修改源码,可以直接安装编译好的 oc ...
- ROS 八叉树地图构建 - 使用 octomap_server 建图过程总结!
构建语义地图时,最开始用的是 octomap_server,后面换成了 semantic_slam: octomap_generator,不过还是整理下之前的学习笔记. 一.增量构建八叉树地图步骤 为 ...
- iOS之定位与地图
概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用 和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一 ...
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...
- 【Java面试】1、基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充. 源码分享:https: ...
- ROS中利用V-rep进行地图构建仿真
V-rep中显示激光扫描点 在VREP自带的场景中找到practicalPathPlanningDemo.ttt文件,删除场景中多余的物体只保留静态的地图.然后在Model browser→comp ...
- 百度地图总结第二篇--POI检索功能
简单介绍: 眼下百度地图SDK所集成的检索服务包含:POI检索.公交信息查询.线路规划.地理编码.行政区边界数据检索.在线建议查询.短串分享(包含POI搜索结果分享.驾车/公交/骑行/步行路线规划分享 ...
随机推荐
- js 与JQuery显示及隐藏方法
虽然以后两种方式都能让文本信息隐藏和显示 第一种文本隐藏以后还是会占居位置, 第二种则不会占位置. <p id="p1">这是一段文本.</p> <i ...
- C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》
C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效 ...
- JAVA 入门第一章(语法基础)
本人初学java 博客分享记录一下自己的学习历程 java我的初步学习分为六章,有c和c++的基础学起来也简便了很多. 第一章 语法基础 第二章 面向对象 第三章 常用工具类 第四章 文件操纵 第五章 ...
- Netty(四)分隔符与定长解码器的使用
TCP以流的形式进行数据传输,上层的应用协议为了对消息进行划分,往往采用如下的4种方式. (1)消息长度固定,累计读到长度总和为定长len的报文后,就认为读取到了一个完整的消息:然后重新开始读取下一个 ...
- logstash VS splunk
web 系统是典型的分布式部署,由此对其运行状况,硬件运转情况监控也显得尤为重要,这些监控数据表面上对业务运行没有多大的用处(属于基础数据),但正是这些基础数据形成了业务“流”.比如,用户搜索爱好,浏 ...
- 学习Javascript闭包(Closure)
闭包作用 1.让变量驻留在内存中 2.函数外部可以读取函数内部的私有变量 <!DOCTYPE html> <html lang="en"> <head ...
- PHP魔术常量
与J2E相比PHP没有九个内置对象,但他有八个魔术变量分别是: '__LINE__' 文件中的当前行号. '__FILE__ 文件的完整路径和文件名. '__DIR__' 文件所在的目录. '__FU ...
- Java中的常见面试题
1.sleep()和wait()的区别: 两者都可以控制线性进程,阻塞进程.区别是: -----|sleep():释放CPU,不释放资源(锁).可以通过指定时间来使它自动醒来,时间不到只能调用iter ...
- Autorelease返回值的快速释放机制
+ (instancetype)createSark { return [self new];}// callerSark *sark = [Sark createSark]; 编译器改写成了形如下面 ...
- Java暗箱操作之enum
enum,即枚举类型,在每种编程语言中都有类似的类型. 因为用得少,语法规则很难记得住,我每次看到enum都会感到害怕. 一般的enum语法是这样的: public class MyClass { p ...