下面主要是对书籍《视觉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
软件平台搭建:
(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
视觉里程计VO是应用于视觉SLAM的前端。分为两种方式,基于特征点法的前端和直接法。其中前者是主流方法。
特征点:在视觉SLAM中又被称作路标,其中比较著名的是SIFT,SURF和ORB三种。ORB是质量和性能之间较好的折中,所以ORB在视觉SLAM中使用最为广泛。特征点由关键点和描述子两部分组成。关键点是位置,描述子是用于匹配的向量。
ORB特征:Oriented FAST BRIEF。关键点是FAST角点,描述子是BRIEF。
特征匹配:通过描述子进行匹配。暴力匹配方法,快速近似最近邻(FLANN)算法。后者应用比较广泛。
希望根据匹配的特征点来估计相机的运动,根据相机的配置情况有以下三种情况:
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的求法如下:
单应矩阵的作用:
未完待续。。。。。。