SLAM初探-SLAM for Dummies
SLAM综述性特别是原理讲述比较浅显易懂的的资料比较少,相对比较知名的是《SLAM for Dummies》,但中文资料相对较少,这里就简单概述一下《SLAM for Dummies》的核心内容。
(一) SLAM for Dummies中SLAM的基本模块
SLAM的基本组成包括:地标(Landmark)抽取、数据关联、系统状态变量估计、基于观测值得系统状态变量更新,以及地标更新。SLAM for Dummies主要描述了2D场景下的地图构建与机器人定位,这里的状态变量主要是指机器人x,y坐标位置与方向角以及地标x,y坐标位置,而系统状态变量估计、基于观测值的系统状态变量更新主要使用EKF算法。
(二) SLAM for Dummies中SLAM硬件组成
机器人采用了轮式室内机器人Evolution Robotics ER1 robot,使用里程计(odometry )预测下一时刻机器人的系统状态变量,里程计的误差要求是每移动1米的误差小于2cm,每转动45度的误差小于2度。测距模块采用Sick公司的激光雷达,其参数为角度分辨率为0.25度或0.5度,扫描范围100度或180度,测距误差正负5厘米。
(三) SLAM for Dummies中SLAM流程
SLAM流程如下图所示,基于里程计的变化使用EKF更新系统状态变量,基于激光扫描数据抽取地标,并进行数据关联完成本次观测的地标与以前观察到地标的关联,根据数据关联的结果,即观测过程,使用EKF更新和修订基于里程计预测的系统状态变量,同时更新地标信息,增加以前没有观测到地标。

(四) SLAM for Dummies中地标的抽取
地标的选取原则:(1)地标容易重新观测到;(2)地标相互之间区分度高;(3)环境中地标数量充足;(4)地标是稳定不动的。
基于激光雷达观测数据进行地标抽取的算法:
(1)Spike地标:基于激光雷达测距结果,抽取出“点”型地标。如果2个相邻的扫描点的测距距离大于一个距离门限,认为是一个Spike地标。在平滑的环境中,Spike无法正常工作,也无法处理像人这样在环境中移动的情况
(2)RANSAC地标:基于雷达测距结果,抽取出“线”型地标。通过随机采样角度差在D度以内的激光测距结果,并通过最小均方LS近似拟合成一条直线,如果距离该直线很近的激光测距结果的样点数量大于一个指定的门限,则认为该直线为一个地标。
在EKF算法中,地标有一个相对机器人位置的距离和方向角,对于“线”型地标,通常以机器人位置到“线”型地标的垂直线长度作为地标相对机器人的距离,垂直线的夹角作为方向角。
相对而言,以上两种基于地标的算法在准确性和稳定性方面差于基于scan匹配的算法。
(五) SLAM for Dummies中地标的关联
地标关联是指完成两个不同扫描观测到的地标之间的匹配。在《SLAM for Dummies》中,使用数据库维护以前观测到的地标及其被观测到的次数。只有该地标被观测到N次,才认为是合格的地标。 对于新的扫描,基于最近邻居规则,与数据库中的一个地标关联,并计算两者之间的欧式距离或者Mahalanobis距离,当距离小于一个门限(该门限是EKF不确定参数的函数)时,认为两者是同一个地标,否则认为是新地标,被观测到的次数设为1。
(六) SLAM for Dummies中核心算法EKF的设计
EKF的主要流程如下:(1)使用里程计数据更新当前系统状态;(2)基于地标关联或者说是地标的重观察修订更新的系统状态;(3)在当前系统状态中增加新的地标。
EKF算法的核心是系统状态变量(通常是由机器人位置的X,Y坐标、方向角,各个地标位置的X,Y坐标等3+2N个元素组成的列向量,N为合格地标的数量)、系统状态协方差((3+2N)*(3+2N)矩阵,初始化时,因为没有地标信息,也没有里程计数据,协方差矩阵仅为3*3的对角矩阵,对角矩阵的值为接近0 的一个非0值)的维护和更新,以及Kalman增益的计算。
(1)基于里程计数据更新当前系统状态
(a)更新由机器人位置的X,Y坐标、方向角,即系统状态变量的前三个元素
(b)更新预测模型(方程)的雅克布矩阵
(c)更新预测模型(方程)的高斯噪声方差
(d)计算系统状态协方差
(2)基于地标关联修订系统状态
针对每一个匹配的地标,执行以下处理过程:
(a)计算观测模型(方程)的雅克布矩阵
(b)更新观测模型(方程)的高斯噪声方差
(c)基于观测模型高斯噪声方差、观测模型(方程)的雅克布矩阵,系统状态协方差矩阵,计算Kalman增益
(d)基于Kalman增益,更新系统状态变量
(3)在当前系统状态中增加新的地标
针对每一个匹配的地标,执行以下处理过程:
(a)在系统状态变量中增加新的地标,元素个数从3+2N拓展到3+2N+2M,M为新增地标个数
(b)在系统状态变量协方差矩阵中增加新地标对应的项
SLAM初探-SLAM for Dummies的更多相关文章
- 从零开始一起学习SLAM | 学习SLAM到底需要学什么?
SLAM涉及的知识面很广,我简单总结了 “SLAM知识树” 如下所示: (公众号菜单栏回复 “树” 可获得清晰版) 可以看到涉及的知识面还是比较广的.这里放出一张SLAM圈子里喜闻乐见的表达悲喜交加心 ...
- [SLAM]Karto SLAM算法学习(草稿)
Karto_slam算法是一个Graph based SLAM算法.包括前端和后端.关于代码要分成两块内容来看. 一类是OpenKarto项目,是最初的开源代码,包括算法的核心内容: https:// ...
- SLAM: 单目视觉SLAM的方案分类《机器人手册》
摘抄知乎上一段有趣的话: 如果你出门问别人『学习SLAM需要哪些基础?』之类的问题,一定会有很热心的大哥大姐过来摸摸你的头,肩或者腰(不重要),一脸神秘地从怀里拿出一本比馒头还厚的<Mu ...
- [SLAM] GMapping SLAM源码阅读(草稿)
目前可以从很多地方得到RBPF的代码,主要看的是Cyrill Stachniss的代码,据此进行理解. Author:Giorgio Grisetti; Cyrill Stachniss http: ...
- 《SLAM for Dummies》中文版《SLAM初学者教程》
SLAM for Dummies SLAM初学者教程A Tutorial Approach to Simultaneous Localization and Mapping 一本关于实时定位及绘图 ...
- SLAM for Dummies SLAM初学者教程 中文翻译 1到4章
SLAM for Dummies SLAM初学者教程A Tutorial Approach to Simultaneous Localization and Mapping 一本关于实时定位及绘图 ...
- [SLAM] 01 "Simultaneous Localization and Mapping" basic knowledge
发信人: leecty (Terry), 信区: ParttimeJobPost标 题: 创业公司招SLAM 算法工程师发信站: 水木社区 (Thu Jun 16 19:18:24 2016), 站内 ...
- [SLAM] Studying Guidance
Books from Zhihu: 幽默一把 看完Gonzalez:嗯,好像很好玩的样子,我也来搞一搞.看完Price:什么鬼,怎么这么多公式,公式看不懂肿么破.看完Szeliski:原来用一千页的书 ...
- SLAM学习笔记(1)基本概念
SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建 ...
随机推荐
- Java实现选择排序
选择排序思想就是选出最小或最大的数与第一个数交换,然后在剩下的数列中重复完成该动作. package Sort; import java.util.Arrays; public class Selec ...
- Object转数组
int length = Array.getLength(value);String[] newarray = new String[length];for (int i = 0; i < le ...
- 【转】Linux下apache/httpd服务启动与停止
apache服务,或者说httpd服务,如何启动,如何开机启动. 转来转去,找不到原文.. 操作系统环境:红帽5,具体如下:# uname -a Linux machine1 2.6.18-164.e ...
- 关于baseflight cleanflight naze32不能解锁的办法
需要修改源代码,重新编译.. mcfg.mincheck = 1150; mcfg.maxcheck = 1850; 当然,这是笨方法.还有个办法设置解锁检查的最大最小油门 在控制台,也就是 CLI那 ...
- hduoj 1455 && uva 243 E - Sticks
http://acm.hdu.edu.cn/showproblem.php?pid=1455 http://uva.onlinejudge.org/index.php?option=com_onlin ...
- 箭头函数 Arrow Functions/////////////////////zzz
箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教程曾建议在HTML注释内包裹行内脚本,这样可以避免不支持JS的浏览器误将JS代码显示为文本.你会写这样的代码: < ...
- JAVA基本类库介绍
我们曾经讲过,Java已经为编程者编制了许多类,这些类已经经过测试,基本上不存在错误,这些类都是我们编程的基础.如果不利用这些已存在的类,我们的 编程工作将变得异常复杂,所以我们应尽可能多的掌握Jav ...
- 校内通知-Notifications表增加老师,家长,学生发送范围字段
老师发送范围:TReceiveRange 家长发送范围:PReceiveRange 学生发送范围:SReceiveRange alter table Notifications add TReceiv ...
- CSS中的overflow属性
导读:overflow属性一般用来隐藏超过div范围的元素,包括不隐藏(visible),直接隐藏(hidden),用滚动条隐藏(scroll),自动(aotu)这四个属性.当然overflow的用法 ...
- Python字符串格式化
一.使用格式化符来格式化字符串: Python支持的所有格式化符 格式化符 意义 'd' 返回要格式化对象的十进制表示,如果可以 'i' 返回要格式化对象的十进制表示,如果可以 'o' 返回要格式化对 ...