视觉SLAM十四讲笔记一(第二讲)

1 引言

最近定了方向为视觉SLAM,买了高翔的视觉SLAM这本书,寥寥草草看完一遍,一头雾水,感叹视觉SLAM入门太难,今天来到博客,再学一边,顺便记录下自己第一次写博客。

2 总结:

2.1小萝卜需要做什么?

在此引用“小萝卜”机器人,小萝卜为了探索一个房间需知道两件事:

1、我在什么地方?(定位)

2、周围环境是什么样?(建图)

SLAM="定位+建图";视觉SLAM=“用摄像头作为传感器的SLAM”

2.2小萝卜的眼睛:

单目相机(一个摄像头):

优点:结构简单、成本低。

缺点:照片本质上是以二维的形式记录了三维的世界=>缺失了深 度信 息(无法知道物体的距离)=>需要通过移动单目,获得视差来判断物体的距离。总的来说就是单目SLAM无法凭借图像知道图像里面物体的真实尺度,又称为尺度不确定性。

双目相机(由两个在一条直线上的单目相机组成,两个相机之间的距离称为基线)

优点:通过左右眼的差异可以判断物体与相机之间的距离。

缺点:计算量巨大,且深度和基线的长度有关系

深度相机(RGB-D相机)

优点:带有红外,可以直接测量物体距离相机的深度。

缺点:红外受光影响较大,应用场景很局限。

2.3 经典SLAM框架

视觉SLAM十四讲笔记一(第二讲)_第1张图片

1. 传感器信息读取。在视觉 SLAM 中主要为相机图像信息的读取和预处理。如果在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。

2. 视觉里程计 (Visual Odometry, VO)。视觉里程计任务是估算相邻图像间相机的运动, 以及局部地图的样子。VO 又称为前端(Front End)工作=>(图像的特征提取与匹配等)。问题=>会出现累积漂移=>解决办法(后端优化和回环检测)

3. 后端优化(Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回 环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后, 又称为后端(Back End)工作=>(滤波与非线性优化算法(很重要,需要拥有基础的状态估计理论)基本理论)。

4. 回环检测(Loop Closing)。回环检测判断机器人是否曾经到达过先前的位置。如果 检测到回环,它会把信息提供给后端进行处理 工作(解决位置估计随时间漂移问题)=>可通过图片的相似性来完成回环检测=>可向深度学习方向扩展(语义SLAM)

5. 建图(Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。稀疏地图:不需要表达地图里面所有的物体,选择一些具有标志性的物体,作为路标,由所有路标组成的地图成为稀疏地图,稠密地图:用于导航。

2.4 SLAM 问题的数学表达

运动:k-1 时刻到 k 时刻,小萝卜的位置 x 是如何变化的。(x:小萝卜自身的位置,各个时刻则记为 x_{1},...x_{k}

\large x_{k} = f(x_{k-1},u_{k},w_{k})

        这里 u_{k}是运动传感器的读数(有时也叫输入),w_{k}为噪声。注意到,我们用一个一 般函数 f 来描述这个过程,而不具体指明 f 的作用方式。这使得整个函数可以指代任意 的运动传感器,成为一个通用的方程,而不必限定于某个特殊的传感器上。我们把它称为运动方程。

观测:当小萝卜在x_{k}位置上 看到某个路标点y_{j},产生了一个观测数据z_{k,j}。同样,我们用一个抽象的函数 h 来描述这 个关系:

\large z_{k,j} = \large h(y_{j},x_{k},v_{k,j})

这里v_{k,j}是这次观测里的噪声。由于观测所用的传感器形式更多,这里的观测数据 z 以及观测方程 h 也许多不同的形式.

状态估计问题:上面两个方程描述了SLAM的基本问题,即如何求解定位(估计x)和建图(估计)问题,这就转换成了状态估计问题=>如何通过带有噪声的测量数据,估计内部的,隐藏着的状态变量

状态估计的问题可用滤波器和非线性优化来求解,现在主流以图优化来进行状态估计。

编程

mkdir build
cd build
cmake ..
make
./cpp文件名

你可能感兴趣的:(视觉SLAM,c++,计算机视觉,视觉检测,算法)