磨蹭了好久终于开始写本行SLAM系列了。鄙人目前水平一般,但接下来的几年也都会在这个方向继续深入下去,所以打算尽我所能地写一个完整的SLAM从入门到精(fang)通(qi)的系列。文章的内容大概会分为三个大部分 基本要求理论上你需要有一些基本的高数知识,比如怎么求积分怎么求偏导数什么的,基本线性代数知识,比如矩阵的初级操作,求逆什么的,以及概率论的基本知识,高斯分布,多变量高斯分布,全概率公式,贝叶斯法则什么的,编程上你需要对C++有基本的了解,知道并能编写简单的函数,类。不了解也不用担心,稍微深入的地方我都会讲到。 基本概念SLAM全称Simultaneous Localization and Mapping,即同时定位与制图。定位的概念很好理解,如果一个机器人来到陌生的环境,它需要知道自己在哪儿,数学上来说就是知道自己的坐标,机器人如果在移动,就需要时刻的坐标更新。制图的意思是指对周围环境的了解,对周围环境的了解能帮助你更好地定位自己。制图分为稀疏制图(sparse mapping)和稠密建图(dense mapping)。稀疏制图表示你对周围的环境只有部分的了解,而稠密建图则表示你对周围的环境的每一个点都清楚。打个比方,你和父母一起出游,结果走散了,你给父母打电话,他们问你在哪儿,这时候你需要定位了(咳咳假设你不能直接发定位给他们),你告诉他们:'我在xx路上,后面有一个xx楼,上面写着xxx。'你说的内容,提取了当前环境比较特征的部分,而这些比较特征的部分,这些就足够帮住确定你的位置了,这就属于稀疏建图。如果你告诉父母:'我在xx路上,前面是xx,后面是xx,左边是xx,右边是xx,斜前方是xx,斜后方是xx.....'总之你把你周围的一切东西都描述了出来,这就就是稠密建图。稠密建图当然能帮助你定位,但很显然,如果你只是想单纯地定位,你给出的信息就太冗余了。所以SLAM中的定位只需要稀疏建图就可以了,你了解周围环境的一些特征,就足够能确定你的坐标了。 basic_idea.png
基本原理这儿我用一个不算非常恰当但非常简单的例子帮助初学者对同时定位制图的计算原理有一个直观的了解。请参考上面basic_idea.png的图。 符号约定在理论讲解时,会涉及到很多符号描述。符号这个东西,有些统一了有些没统一还真是麻烦。我们讲解的符号约定如下,普通没加粗的希腊字母表示一个数字,或者英语数学里常说scalar,比如;加粗的小写字符表示向量;大写加粗表示矩阵;空心的加粗大写表示集合,比如实数集。 |
|