第2讲 初始SLAM
经典视觉SLAM框架:
视觉里程计:根据传感器采集到的数据信息(彩色信息和深度信息),估计相邻帧图像之间相机的运动,包括旋转矩阵和平移矩阵;相邻帧的运动串起来,就构成了轨迹;但会出现漂移问题,需要后端优化和回环检测;
后端优化:根据VO测量的相机位姿,以及回环检测的信息,优化得到全局一致的轨迹和地图;
回环检测:判断机器人是否回到之前到达过的位置;
建图:根据估计的轨迹,建立地图;
slam问题的数学表示:
包括运动方程和状态方程
t=1,2,...,K为离散时刻;x1,x2,...,xk表示各时刻的位置,y1,y2,...,yN为观测到的N个路标点,uk为运动传感器的读数,wk为运动噪声;zk,j为位置xk上观测到路标点yj时的观测数据,vk,j为观测噪声;
在视觉slam中,xk为相机位姿(平移和旋转);yj为空间点位置;vk,j为图像像素;
引出:
运动方程中位姿表示问题;(李群李代数)
观测方程中路标点怎么投影到图片像素上;(相机成像模型)
怎么解slam方程;(非线性优化)
第5讲:相机与图像
相机模型
公式展示了从像素点到世界坐标的转换过程,已知像素值和相机内参(K矩阵)可以恢复像素的相机坐标点,再结合R,t矩阵(IMU/视觉里程计得到的位姿参数)可恢复世界坐标系;
问题:深度信息Z未知,由一像素点[u,v]只能得到归一化平面Z=1的相机坐标点Pc=[X/Z, Y/Z, 1], 无法确定具体的空间点(相机光心到归一化平面连线上所有的点可以投影到该像素上)
解决:双目相机或者RGB-D相机确定深度信息
双目相机模型
找到左右图像匹配的点,根据视差d(左右图像横坐标之差)可以确定像素点的深度;(因此需要提取特征点和匹配)
RGB-D相机模型
Kinect内置的红外结构光可以检测像素点深度信息;
so:目前为止:在已知深度信息(双目/RGB-D),位姿信息(IMU/视觉里程计),像素点,相机内参下,可以重建图像的三维信息(点云)
问题:怎么获取位姿信息;(视觉里程计)
第6讲:非线性优化
如误差对pose和point的导数,对位姿的雅可比矩阵为2*6矩阵,对3D点的导数为2*3矩阵
第7讲:视觉里程计
VO按照是否需要提取特征点,分为特征点法和直接法;
特征点法:
特征提取->匹配->位姿估计
特征提取:SIFT、SURF、ORB
SIFT:尺度不变特征变换、计算量大、无法满足定位建图实时性;
ORB:代表性的实时图像特征,改进了FAST检测子不具备方向性的问题,采用速度极快的二进制描述子BRIEF
估计相机位姿:
根据提取的匹配点对,估计相机的运动。由于相机的不同,情况不同:
1.当相机为单目时,我们只知道2D的像素坐标,因而问题是根据两组2D点估计运动。该问题用对极几何来解决。
2.当相机为双目、RGB-D时,或者我们通过某种方法得到了距离信息,那问题就是根据两组3D点估计运动。该问题通常用ICP来解决。
3.如果我们有3D点和它们在相机的投影位置,也能估计相机的运动。该问题通过PnP求解。
对极几何:
几何意义是P、O1、O2共面,称为极平面,l1、l2表示投影点可能出现的位置,也就是说p1的对应点不需要在I2整幅图像上搜索,必然位于极线上,我们希望从摄像机的标定参数中,求出极线;
8点法求基础矩阵E
问题:E具有尺度等价性,分解得到的R,t有一个尺度等价性,R具有自身约束,而t归一化后导致了单目视觉的尺度不确定性;
解决:单目SLAM初始化,初始化的两张图片必须有一定程度的平移,后的轨迹以此平移为单位;但这种方式会引发初始化的纯旋转问题
三角测量
通过对极约束已经计算出R,t,但是重建还需要深度信息,因此利用三角测量(同一点不同地方观察)来估计地图点的深度;
3D-2D:PnP
已知一张图像上特征点的3D位置(世界坐标)(三角化或者RGBD-D深度图)和其投影坐标,求解方法有:
方法一:直接线性变换:至少6对匹配点
方法二:P3P:只需要3对3D-2D匹配点
利用三角形相似原理,求解投影点在相机坐标系下的3D坐标,结合世界坐标系下的3D坐标,转换成3D-3D的位姿估计问题;
方法三:Bundle Adjustment:李代数上的非线性最小二乘问题,最小化重投影误差(当前像素值与3D点按估计的位姿投影得到的位置之差);
3D-3D:ICP
匹配好的3D相机坐标系点和3D世界坐标系点;找到迭代最近点
方法一:SVD方法
方法二:Bundle Adjustment
2D-2D确定的是两帧之间的运动,3D-2D,3D-3D确定的是相机坐标相对世界坐标的运动;
summary:
往往是前一帧为参考,前一帧提取的特征点,通过相机变换到相机坐标,然后投影到Frame_cur,计算重投影误差,优化位姿(相对的)!
其中可以用光流法跟踪特征点的运动,而不计算描述子!
或者不计算关键点,也不计算描述子,用直接法,计算光度误差
第10讲:后端优化
包括以EKF优化为代表的滤波器后端和非线性优化后端
假设状态量(位姿x和观测点y)和噪声项服从高斯分布,问题转变为当存在一些运动数据和观测数据时,如果去估计状态量的高斯分布,包括均值(对变量最优值的估计)和协方差矩阵(估计的不确定性)
如果假设k时刻的状态只与k-1时刻的状态有关,则得到EKF模型;
若考虑k时刻状态与之前所有时刻状态的关系,得到非线性优化模型;
第13讲:单目建图
1、若是建立稀疏地图,可以进行特征匹配,位姿估计出R,t,在得到R,t,有一对匹配像素点的基础上,三角化得到深度;
2、若是建立稠密地图,无法每个像素都当作特征点计算描述子;因此匹配成为重要一环,这里用到极线搜索和块匹配知识确定匹配点,对进行三角化得到深度;不同的是,要很多次三角化让深度估计收敛,用到深度滤波器的知识