视觉SLAM十四讲(一)——SLAM基础概念(笔记+个人理解+代码)
一、SLAM: Simultaneous Localization and Mapping, 同时定位与地图构建
-
解释
搭建特定传感器的主体(机器人等),在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。
-
本质
对运动主体自身和周围环境空间不确定性的估计
-
个人理解
SLAM主要是希望机器人本体具备自主运动能力,而且不需要破坏环境,即不需要主动在环境中安装导轨、二维码等特殊标记,而只需要被动接受环境中的信息,这也意味着传感器不需要安装在环境中,而是安装在机器人本体上。主要让机器人明白两件事:
- 定位——我在什么地方
- 建图——周围环境是什么样?
有了以上两点信息后,机器人就可以在已经“熟知”的环境下进行导航作业,并且可以实时知道自己此刻在哪,距离目的地还有多远等信息。
-
传感器的选择
- 相机:视觉SLAM
- 激光:激光SLAM
-
相关经典书籍
- 《概率机器人》
- 《计算机视觉中的多视图几何》
- 《机器人学中的状态估计》
二、经典视觉SLAM框架
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ou4wnF7o-1636978308536)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e81d9141-8b5a-4129-8ad0-2424132a0334/Untitled.png)]
-
传感器信息读取。
- 相机图像信息的读取和预处理
- 激光
- 码盘
- 惯性传感器
-
前端视觉里程计(Visual Odometry, VO)
-
估算相邻图像间相机的运动,以及局部地图的样子
-
VO又称为前端(Front End)
-
个人理解
通过传感器我们可以获得机器人运动前后信息的变化,比如相机,我们可以获得前后两帧图片,和人眼类似。但是人类可以轻易地根据图片判断运动变化,旋转还是平移了?左转还是右转?等等。但是处理器是不能明白这些变化的,需要特定的算法去估计,我们也不可能得到准确的变化值。所以,将不可避免的产生**累积漂移(Accumulating Drift),**这些误差就需要后面的步骤去消除,相当于一个闭环过程。
-
-
后端(非线性)优化(Optimization)
- 后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。又称为后端(Back End)
- 主要处理SLAM过程中的噪声问题
-
回环检测(Loop Closure Detection)
- 回环检测判断机器人是否到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
- 主要解决位置估计随时间漂移的问题
- 通过某种手段,让机器人知道“回到了原点”
- 扫描二维码、判断图像间的相似性等等
-
建图(Mapping)
- 它根据估计的轨迹,建立与任务要求对应的地图。
- 地图
-
度量地图(Metric Map)
-
稀疏(Sparse)
选择一部分具有代表意义的东西,称之为路标(Landmark),满足定位需求
-
稠密(Dense)
着重于建模所有看到的东西,适用于导航
-
-
拓扑地图
相比于度量地图的精确性,拓扑地图更强调地图元素之间的关系。拓扑地图是一个图(Graph),由节点和边组成,只考虑节点间的连通性。
-
三、SLAM问题的数学表述
-
运动
-
意义:机器人在运动过程中,从k−1k-1k−1时刻到kkk时刻,其位置xxx是如何变化的。
-
运动方程
xk=f(xk−1,uk,wk)x_k = f(x_{k-1},u_k,w_k)xk=f(xk−1,uk,wk)
uku_kuk是运动传感器的读数或者输入,wkw_kwk为该过程中加入的噪声
-
-
观测
-
意义:机器人在xkx_kxk位置上看到一个路标点yjy_jyj时,产生了一个观测数据zk,jz_{k,j}zk,j
-
观测方程
zk,j=h(yj,xk,vk,j)z_{k,j}=h(y_j,x_k,v_{k,j})zk,j=h(yj,xk,vk,j)
vk,jv_{k,j}vk,j是这次观测里的噪声
-
-
SLAM问题——>状态估计问题
如何求解定位问题(估计xxx)?如何解决建图问题(估计yyy)?
- 滤波器:卡尔曼滤波器、粒子滤波器… …
- 非线性优化:图优化… …
更多推荐
所有评论(0)