视觉SLAM14讲的学习笔记

下面主要是对书籍《视觉SLAM14讲》的一个学习笔记,只是前面7章的笔记,后面几张后续再更新。。。

第一讲 前言

C++ STL的基本用法:http://blog.csdn.net/piaoxuezhong/article/details/54348787

STL叫做Standard Template Library ,标准模板库。

 本书的所有代码在:

https://github.com/gaoxiang12/slambook

 VisualBox中虚拟机和PC机之间的共享文件夹方法:

https://jingyan.baidu.com/article/656db918cca831e381249cce.html

  

第二讲 初始SLAM

软件平台搭建:

(1) Ubuntu 14.04,可以直接在电脑安装双系统,也可以采用虚拟机的形式,虚拟机安装的Ubuntu需要至少8G的内存。VirtualBox虚拟机下安装Ubuntu 14.04的步骤如下:

http://blog.csdn.net/EAIBOT/article/details/53641027

Ubuntu中打开终端的方法:Alt+Ctrl+T

Virtual Box 虚拟机安装Ubuntu 14.02,如何上网?

 

 

Ubuntu 中的Vi的使用:

http://blog.csdn.net/w383117613/article/details/47611179

Ubuntu中安装g++:https://www.cnblogs.com/LQLin168/p/6844593.html

CMake的相关学习资料:https://github.com/TheErk/Cmake-tutorial

第三讲 三维空间中的刚体运动

刚体运动---欧式变换

旋转矩阵R,平移向量t,变换矩阵T

R=SO(3)

T=SE(3)

R和T的表述不够紧凑,具有冗余性,所以需要采用旋转向量来描述;

R和旋转向量不够直观,所以有欧拉角来表述;

R具有冗余性,旋转向量很紧凑但不直观,欧拉角直观紧凑,但是具有奇异行,所以诞生了采用四元数来表述一个旋转。

旋转矩阵,旋转向量,欧拉角,四元数都可以表示一个旋转,他们之间可以相互转化:

 

Pangolin的安装和使用:

http://blog.csdn.net/c602273091/article/details/65441315

http://blog.csdn.net/u012986684/article/details/52860849

 

Pangolin是对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的库。可以用于3D视觉和3D导航的视觉图,可以输入各种类型的视频、并且可以保留视频和输入数据用于debug。

第四讲 李群和李代数

偏理论,第一遍没看懂

 

第五讲 相机与图像

相机模型一般使用针孔相机模型。

相机的内参K和外参R,t

世界坐标系,相机坐标系,相机归一化平面坐标系,图像坐标系

相机的畸变:主要是由于添加了透镜。径向畸变和切向畸变。去畸变方法。

单目相机的成像过程:

1. 世界坐标系下有一个固定的点P,世界坐标为Pw;

2. P的相机坐标为P=Pw*R+t

3. 把P投影到归一化平面Z=1上,得到P的归一化相机坐标:Pc

4. Pc经过内参后得到图像坐标系下的像素坐标,Puv=Pc*K

 

双目相机:试用与所有的场景,但是计算量和精度都是问题

RGB-D相机:使用场景比较限制,比如红外的RGB-D相机只能用于室内

 

拼接点云的过程:

1. 获取每个像素点对应的rgb和depth值

2. 已知相机的内参矩阵K和相机的位姿Twc(相机到世界坐标系下的变换)

3. 根据图像坐标系下的点Puv和内参K,求出相机坐标系下的点的坐标Pc

4. 通过Twc将Pc转换为世界坐标系下的点Pw

5. 将该点的rgb值渲染到Pw上就可以看到点云的效果。

 

第六讲 非线性优化

运动方程和观测方程其实可以建模成一个非线性的最小二乘问题。

求解方法有一阶梯度法和二阶梯度法,其中一阶梯度又称为最速下降法,二阶梯度法又称为牛顿法。这两种方法存在自身的问题,最速下降法过于贪心,容易走锯齿路,导致迭代次数多。而牛顿法需要计算目标函数的H矩阵,计算量大且困难。所以有两种更为实用的方法:

高斯牛顿法(GN)和列文伯格-马夸尔特方法(LM)。

GN方法:

 

 

LM方法:

 

 

实践:

Ceres库和g2o库。

 

编译g2o遇到问题:

 

解决方法:

http://blog.csdn.net/hitfangyu/article/details/72665455

 

第七讲 视觉里程计 1

视觉里程计VO是应用于视觉SLAM的前端。分为两种方式,基于特征点法的前端和直接法。其中前者是主流方法。

特征点:在视觉SLAM中又被称作路标,其中比较著名的是SIFT,SURF和ORB三种。ORB是质量和性能之间较好的折中,所以ORB在视觉SLAM中使用最为广泛。特征点由关键点和描述子两部分组成。关键点是位置,描述子是用于匹配的向量。

ORB特征:Oriented FAST BRIEF。关键点是FAST角点,描述子是BRIEF。

特征匹配:通过描述子进行匹配。暴力匹配方法,快速近似最近邻(FLANN)算法。后者应用比较广泛。

希望根据匹配的特征点来估计相机的运动,根据相机的配置情况有以下三种情况:

  1. 当相机为单目时,我们只知道2D的像素坐标,因而问题是根据两组2D点来估计运动,该问题用对极几何来解决;
  2. 当相机为双目、RGB-D时,或者我们通过某种方法得到距离信息,那么问题就是根据两组3D点来估计运动,该问题通常用ICP来解决;
  3. 如果我们有3D点和他们在相机的投影位置,也能估计相机运动,该问题通过PnP解决。

 

2D-2D:对极几何

对极约束公式:

 

其中E称为本质矩阵Essential Matrix,F称为基础矩阵Fundamental Matrix,x1和x2是归一化平面的点坐标,p1和p2是图像坐标系下的像素坐标。E和F差了一个相机内参矩阵K。相机位姿问题变为如下:

 

一般采用经典的8点法来计算E或者F。比如,求E的公式如下:

 

根据求出的E,来恢复相机的R和t的公式如下:

 

通常的做法如下:

 

 

单应矩阵:Homography Matrix  H   它描述了两个平面之间的映射关系。若场景中的特征点都落到同一平面上(墙,地面),那么可以通过H来估计运动。

H的求法如下:

 

单应矩阵的作用:

 

 

 

未完待续。。。。。。

 

猜你喜欢

转载自blog.csdn.net/stevedish_xiaojia/article/details/83065228
今日推荐