写于文前:要找工作了。毫无头绪。只能将网上关于slam的面经总结一下,希望有用。祝大家找到好工作!
首先感谢https://zhuanlan.zhihu.com/p/76280626;https://www.cnblogs.com/xtl9/p/8053331.html的面经。
. 卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。因为观测数据中包括系统中的噪声和干扰的影响,因此最优估计也可以当作是滤波的过程。(顺便复习粒子滤波!)
. slam的后端一般分为两种处理方法,一种是EKF(扩展卡尔曼滤波)为代表的滤波方法,一种是以图优化为代表的非线性优化(BA)方法。主流方法还是图优化。
. 滤波方法的优缺点:(1)优点:在资源受限、待估计量比较简单的情况下,EKF比较有效,经常用在激光slam中。
(2)缺点:存储量和状态量是平方增长关系(存储的是协方差矩阵)。不适合大型场景。现阶段,基于视觉的slam中特征点数据大,滤波方法效率非常低。
.图优化一般分为两个任务:构建图。机器人位姿作为顶点,位姿间的关系作为边;优化图。调整机器人的位姿来尽量满足边的约束,使得误差最小。
EKF和BA的区别:(1)EKF假设了马尔可夫性,k时刻的状态只与k-1时刻有关。(2)非线性优化使用所有的历史数据,全局slam。(3)EKF做了线性化处理,在工作点处用一阶泰勒展开式近似整个函数,工作点较远处不一定成立。(4)非线性优化每迭代一次,状态估计发生改变,会对新的估计点做泰勒展开。
. 总而言之,EKF可被看作是只有一次迭代的BA。
(1)先来说一下相机和陀螺仪(IMU)的互补作用吧:相机能够进行回环检测校正(IMU)累计误差;IMU能够校正(相机)快速运动时的模糊。
(2)相机与IMU之间的外参包括两部分:first:相机与IMU之间的相对位姿(相机坐标系和IMU坐标系之间的变换)。second:相机与IMU之间的时间差。
(3)终于开始说如何标定了:方法如下(原理不懂):一:相对位姿在线标定放法(VINS)。二:时间差在线标定方法(依旧是VINS)。
传送门:https://blog.csdn.net/electech6/article/details/95237412。
(1)先说ORB吧。Oriented FAST and Rotated BRIEF,该方法是在FAST特征检测和BRIEF特征描述子的基础上提出来的。运行时间优于SIFT和SURF,可以用于实时特征检测。
(2)所以ORB用FAST提取角点(特征点):连续N个点的灰度有明显的差异;用BRIEF提取描述子:用汉明距离度量二进制差异性。
具体讲解传送门:https://www.cnblogs.com/qiuheng/p/9274583.html
. SIFT,SURF,ORB?
(1)四叉树与八叉树其实就是2D与3D的“二分法”,与二叉树类似。
(2)四叉树主要应用于图像处理,快速碰撞检测,存储稀疏数据等;八叉树主要应用于3D图形处理。
(3)四叉树的每一个节点代表一个矩形区域,每一个矩形区域又可以划分为四个小矩形区域(四个子节点)。八叉树类似,只不过变成了立方体。
(1)PnP(3D-2D):可以根据某一帧图像中特征点的二维像素坐标及其对应的三维空间坐标,来计算对应的点在相机坐标系下的坐标,从而得到相机相对三维空间坐标系的坐标变换及姿态(外参)。
.解法:线性方式:使用直接法或者P3P的相似三角形来先求出相机位姿,再求出空间点。(主要是求相机位姿,因为空间点坐标已知了呀,再求的不过是另一个坐标系下的空间坐标吧。)
. 非线性方式:通过BA来构建最小化重投影误差,同时优化相机位姿和空间点坐标的解。
(2)ICP(3D-3D):可以根据前后两帧图像中匹配好的特征点在相机坐标系下的三维坐标,求解相机帧间运动。
.解法:同样有两种方式:线性方式:奇异值分解(SVD)的方式求R,t。(记得能分解的原因是它是稀疏的吧)。
. 非线性的方式则是BA通过迭代的方式寻找最优解。(比PnP简单,因为不用优化空间点目标),ICP求解时可以任意选定初始值。
(1)根据激光测量原理得到的点云:包括三维坐标(XYZ)和激光反射强度(Intensity)。
(2)成本:激光高;视觉相机低。显而易见。
应用场景:激光slam主要应用于室内的地图构建和导航工作;视觉slam在室内外环境下均能工作,但对光的依赖程度高。
地图精度:激光精度高(思岚精度2cm),视觉精度低(约3cm,测距范围3-12m之间,大部分是这样的)
易用性:激光和RGB-D直接获取点云;别的相机通过移动计算来获取点云,稍显麻烦。
.自己的理解:首先明确最小化的是重投影误差,不是实际3D点与计算的3D点的误差。
流程:先按照正常的步骤计算出3D点的坐标;然后重投影(按理说一个正向计算,一个反向计算,误差是0才对),但是由于各种原因(不清楚具体是啥)存在了重投影(像素坐标)误差。因此需要求MIN的误差。求的过程中需要不断调整3D点位置与相机外参,因此求出MIN误差的时候,也获取了最优的3D点位置与相机姿态。
(1)地图坐标系(map_frame):世界坐标系中的固定frame。全局的固定frame。不会随着移动而产生漂移误差。一般设置系统的初始状态作为坐标原点。
(2)里程计坐标系(odom_frame):对机器人进行位姿估计的坐标系,也是系统的初始状态作为目标原点。
(3)机器人坐标系(baselink_link_frame):机器人坐标系,一个移动的坐标系。
(4)激光坐标系(laser_frame):传感器坐标系,与机器人坐标系类似。
(1)节点:主要的计算执行过程。可以与其他节点进行交互。使用roscpp进行编写。
(2)节点管理器:用于节点的名称注册和查找。可以在一台计算机上运行节点管理器,在其他计算机上运行节点。
(3)参数服务器:参数服务器能够使数据通过关键词存储在系统核心位置。通过使用参数,就能够在运行时配置节点。
(4)消息:节点通过消息完成彼此的通信。消息包含一个节点发送到其他节点的数据消息。ROS包含标准类型的消息。
(5)主题:由ROS网络对消息进行路由和消息管理的数据总线。每一条消息都有相应的主题。当一个节点发送数据实时,就是该节点正在向主题发布消息。节点可以通过订阅某个主题,接受其他节点的消息。
(1)刚性变换:只有物体的R,t发生改变,形状不变。
(2)等距变换:R,t的复合,等距变换前后长度,面积,线线之间的角度不变。自由度6。
(3)相似变换:等距变换和均匀缩放(S)的一个复合,类似相似三角形,体积比不变。自由度7。
(4)仿射变换(正交投影):平移变换和非均匀变换(A)的复合,不变量是平行线。自由度12。
(5)射影变换(透视变换):图像中的点的齐次坐标的一般非奇异线性变换。 不变量是:重合关系,长度的交比。自由度15。
. 先谈以下视图间的关系(对极几何):第一种是极点(第一幅图像)能够确定极线(第二幅图像)的关系。用基本矩阵表示;
第二种是一点可以确定另外一幅图像上的点,(第一幅图像通过光心和图像点的射线与一个平面的交点在第二幅图像上的影像。)用单应矩阵来表示。而本质矩阵则是基本矩阵的一种特殊情况,是归一化图像坐标下的基本矩阵。
(1)基本矩阵(F)反映的是对极几何的内在射影几何关系,基本矩阵只依赖于摄像机的内参K和外参R,t。
. F是秩为2、自由度为7的齐次矩阵(齐次9-1,满足约束-1.故7)。
(2)本质矩阵(E)是归一化图像坐标下的基本矩阵的特殊情况。把标定相机的基本假设(K)去掉了(将K归一化)。本质矩阵只依赖于摄像机的外参R,t。
. E是自由度为的齐次矩阵(齐次性,6-1)。
(3)单应矩阵(H)反映的是所有的空间点都在同一个平面上,因此两幅图像中的点都满足同一个射影变换(单应矩阵)。
. H的自由度为8。
. 回环检测的关键就是如何有效地检测出相机经过同一个地方。从而使数据关联并为重定位提供基础。
(1)最简单的方法:对任意两个关键帧进行特征匹配。
(2)基于里程计的方法(?)。
(3)基于外观的方法。:和前端、后端的估计无关,通过两幅图像的相似性确定回环检测关系,使回环检测相对独立。
. 1.词袋模型、2.相似度计算。
. 深度滤波器的主要目的就是用贝叶斯估计来对多个测量值进行融合。
原理:(1)如果进来一个关键帧,就提取关键帧上的新特征点,作为种子点放进一个种子队列中。
(2)如果进来一个普通帧,就用普通帧的信息,更新所有种子点的概率分布。如果某个种子点的分布已经收敛,就把它放到地图中,供追踪线程使用。
步骤: 1.新的一帧图像。2.计算种子点在当前帧的极线。3.使用NCC算法在当前极线上搜索匹配。4.三角测量恢复种子单词测量的深度和不确定性。5.将种子的上一状态最有深度和当前测量深度融合。
. 特征匹配遇到误匹配时,如何筛选处理?
用RANSAC算法进行滤波。
**.RANSAC(随机抽样一致):**可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法——有一定概率得出合理的结果。(提高迭代次数可以提高概率)。
基本假设:(1)数据由“局内点”组成。PS:数据分布可由模型表示。
(2)“局外点”是不能适应该模型的数据。
(3)除此之外的数据属于噪声。
局外点产生的原因:噪声极值、错误的测量方法、对数据的错误假设。
(1)特征点法优点:1.精确,直接法属于强假设。2.运动过大时,只要匹配点在像素内,不会引起误匹配,鲁棒性好
. 缺点:1.特征提取匹配耗时长。2.特征点丢失场景无法使用。3.只能构建稀疏地图。
(2)直接法优点:1.省去计算特征点、描述子时间。2.可以用在特征缺失的场合(比如白墙,只要有像素梯度变化就可以)。3.可以构建稠密地图。
. 缺点:1.强假设条件,易受光照和模糊影响。2.运动必须微小,要求相机运动较慢或采样频率高(可以用图像金字塔改善)。3.非凸性;单个像素没有区分度。
. 边缘检测一般有三步,分别是滤波、增强、检测。基本原理都是用高斯滤波器进行去噪,之后用卷积内核寻找像素梯度。常用的有三种算法:(1)canny算子;(2)sobel算子;(3)laplacian算子;
. ORBSLAM2中的Tracking线程有用到关键帧。关键帧选取的指标主要有:(1)跟踪质量(根据跟踪过程中搜索到的点数和搜索的点数的比例)/共视特征点。(2)距离最近关键帧的就是否足够远**/空间**。(3)距离上一关键帧的帧数是否足够多**/时间**。(4)局部地图空闲。
. 是指机器人在缺少之前位置信息的情况下,如何去确定当前位姿。应用情景:(1)将机器人放置在已构建好的地图环境中,确定位姿。(2)在移动过程中,由于传感器故障或快速移动导致的机器人位姿丢失,需要重新确定位姿。
. 流程:(ORB-SLAM):当跟踪失败的时候,系统启动relocation。(1)找出候选关键帧,对每个候选关键帧用ransac和epnp估计位姿。(2)更新当前帧匹配,优化位姿。(3)若内点较少,通过投影对之前未匹配的点进行匹配再求解。(4)当有足够的内点支持优化后的位姿。重定位结束。
(1)QR速度快稳定性没有SVD好。(不十分确定)
(2)QR多用于求解稠密矩阵。
(3)SVD多用于求解超定的最小二乘解。
动态slam解决的问题主要是:如何分辨场景中的动态物体。
1.几何角度:
a. 使用光流法估计基础矩阵,进行极线距离阈值判断筛选动态点;
b.使用深度数据,将关联帧的点投影到当前帧,进行深度判别;
2.深度学习:
a、使用深度学习模型学习光流;
b、深度学习产生对象mask;
.由Fischer和Bolles在1981年的文章[1]中首先提出,简要的说经典RANSAC的目标是不断尝试不同的目标空间参数,使得目标函数 C 最大化的过程。这个过程是随机(Random)、数据驱动(data-driven)的过程。通过反复的随机选择数据集的子空间来产生一个模型估计,然后利用估计出来的模型,使用数据集剩余的点进行测试,获得一个得分,最终返回一个得分最高的模型估计作为整个数据集的模型。
. 在经典的RANSAC流程中,目标函数C 可以被看作:在第k次迭代过程中,在当前变换参数作用下,数据集中满足变换参数的点的个数,也就是在当前变换条件下类内点的个数,而RANSAC就是最大化 C 的的过程。而判断当前某个点是否为类内需要一个阈值t。
26.除了RANSAC之外,还有什么鲁棒估计的方法?
M-估计
.在M-估计中,对残差进行饱和函数运算,限制单个数据点对于误差函数的影响力。其思想类似于L1的稀疏性。
最小中值估计
.最小中值方法通过求解下述最小化问题来估计模型参数
与RANSAC相比,不采用一致集内点的个数来衡量样本的好坏,而是根据样本,计算所有数据点到样本的偏差,以偏差的中位数衡量样本好坏。
26.有哪几种鲁棒核函数?
27.李群与李代数的关系?
李群的定义是指连续光滑的群,比如我们前面说的旋转矩阵群SO(3)。
李代数对应李群的正切空间,它描述了李群局部的导数。
28.ORB-SLAM初始化的时候为什么要同时计算H矩阵和F矩阵?
29.说一下VINS-Mono的优缺点
30.说一下Dog-Leg算法
31.ORB特征的旋转不变性是如何做的?
32.ORB-SLAM的共视图是什么结构?内部如何存储的?
33. Eigen是行优先还是列优先?
在Eigen中行优先的矩阵会在其名字中包含有row,否则就是列优先。