SLAM常见面试题

单目

  1. 单目SLAM流程【稀疏】
    单目SLAM流程是:初始化–PnP–PnP……。具体方法是依赖对极几何的相关知识,根据2D-2D匹配点对计算本质矩阵(或基本矩阵),并对其进行分解得到相机运动,再依据三角化原理计算特征点距离。至此即得到3D-2D匹配点对,后续的相机位姿的估计就是PnP问题了。

  2. 初始化
    初始化的意义是求取两个图像间的运动和特征点距离,初始化之后的运动都以初始化时的平移作为单位1,这称为单目的不确定性问题(Scale Ambiguity)。且在初始化时,要保证两帧图片之间的运动必须包括平移(不能只旋转),否则将导致求得的本质矩阵E为0,也就无法分解得到相机位姿。

  3. 尺度漂移问题
    根本原因:单目slam产生尺度漂移的根本原因是单目相机无法根据一张图片得出图中物体的大小,这是尺度漂移的根源;在使用单目估计相机位姿和3D点座标时,需要通过对极几何、三角化进行估计,在这个过程中会产生误差(特征点精度误差、计算误差),这些误差经过多帧累积后会变得特别大,进而导致尺度的不一致性,造成尺度漂移。
    解决办法:1、视觉与IMU融合,借助IMU测得的高帧率的角速度、加速度对视觉进行修正、补充;后端优化时,把尺度作为一个优化变量进行优化,可以减小尺度漂移问题。
    补充:由于初始化时存在尺度不确定性,因此单目相机估计的目标物体距离与真实世界里的距离存在比例上的差异,这个比例被称作尺度。而且,受到噪声的影响,导致这个尺度会逐渐漂移、改变,这被称为单目SLAM的尺度漂移问题。从理论上来说,只靠单目相机(不借助其他传感器)是无法确定这个尺度具体是多少的,比较好的解决方法是使用回环检测,但是要求相机的整个运动过程存在回环。

  4. 单目SLAM流程【稠密】
    深度高斯滤波器

  5. 基础矩阵
    概述:基础矩阵FF对极约束的代数表示,并且这种约束关系独立与场景的结构,只依赖与相机的内参和外参(相对位姿)。
    求解方法:求解基础矩阵时,如果匹配特征点对较少,则使用8点法进行求解;为提高求解精度,或者如果匹配点对很多且可能存在外点,则通常使用RANSAC方法筛选出内点,再进行求解;为进一步提高精度,还可以根据所有内点对F做非线性优化,通常使用L-M算法求解该优化目标函数。目标函数常采用两种距离度量:辛普森距离(Sampson distance)、对称极线距离(symmetric epipolar distance)。
    参考:RANSAC求基本矩阵流程:SLAM入门之视觉里程计(4):基础矩阵的估计,该博客中博主使用的内点判断标准是对称极线距离,也可以使用辛普森距离。

  6. 本质矩阵EE、基本矩阵FF、单应性矩阵HH区别?
    基本矩阵:描述的是不同帧之间同一空间点像素座标的几何约束关系,将图像归一化座标替换为像素点座标,得到基本矩阵约束,基本矩阵描述的约束又称为极线约束。基本矩阵和相机内参,外参都有关系。
    本质矩阵:描述空间点在不同帧之间的归一化座标的约束关系,是相机座标系层面。本质矩阵和相机外参有关系,和内参无关。本质矩阵则是基本矩阵的一种特殊情况,是在归一化图像座标下的基本矩阵,可以理解为本质矩阵对应的座标位于相机座标系,基础矩阵对应的座标位于图像平面座标系。
    单应性矩阵:在相机只有旋转而没有平移的情况,此时t为0,E也将为0,导致无法求解R,这时可以使用单应矩阵H求旋转,但仅有旋转,无法三角化求深度。

  7. 滤除匹配外点
    方法1:先求出所有匹配点最小距离min_dist(Hamming距离吗?),处于这个范围内的点认为是内点:30<匹配点距离<=2*min_dist;
    方法2:基于KNN,设置k=2,即取最近邻与次近邻距离(.distance(),该距离类似于欧式距离,用于表征匹配质量,距离越小,匹配效果越好)的比值,比值<0.8则为内点;
    方法3:RANSAC方法。

  8. 什么是闭环检测?
    在视觉SLAM问题中,位姿的估计往往是由上一帧位姿解算当前帧位姿,这么递增求解,因此相邻两帧之间的误差就会产生累计。如我们在求解第五帧位姿的时候,一般是根据第四帧计算的,但是如果我们发现第5帧还可以由第2帧计算出来,就减少了误差的累计。这种与之前的某一帧(非相邻帧)建立位姿约束关系就叫做回环。找到可以建立这种位姿约束的历史帧,就是回环检测。回环通过减少约束数,起到了减小累计误差的作用。
    方法:特征匹配,提取当前帧与过去所有帧的特征,并进行匹配,这种方式假设了过去所有帧都有可能出现回环,匹配十分耗时、计算量大。基于词袋模型,词袋模型就是把特征看成是一个个单词,通过比较两张图片中单词的一致性,来判断两张图片是否属于同一场景。词袋模型需要训练字典(K-means聚类),但通常字典内单词数量巨大,在确定某个特征时需要与字典内每个单词进行匹配,效率低下。为提高匹配效率,字典在训练的过程中构建了一个有k个分支,深度为d的树(K叉树),类似于层次聚类,可容纳k^d个单词,保证了对数级别的查找效率。
    参考:浅谈SLAM的回环检测技术

  9. 讲一下Gaussian-Newton法和LM法?
    为什么用这两种算法:在SLAM中求解相机位姿时,常构建待优化位姿的误差函数(光度误差或重投影误差),通过使得这个误差函数取最小值,得出最优的相机位姿。如果这个误差函数是线性的,则可以直接求导数等于0处的极值即可,但该误差函数通常是关于待优化位姿的非线性多元函数,这实际上是一个非线性无约束最优化问题,常用的解法是G-N、LM算法。
    两者均是非线性最小二乘求解方法, 都是通过泰勒展开进行线性化,并利用导数确定最优迭代方向,进行逐步迭代求出最优解的优化算法。
    梯度下降法:在寻找目标函数极小值时,是沿着反梯度方向进行寻找的。梯度的定义就是指向标量场增长最快的方向,在寻找极小值时,先随便定初始点(x0,y0)然后进行迭代不断寻找直到梯度的模达到预设的要求。但是梯度下降法的缺点之处在于:在远离极小值的地方下降很快,而在靠近极小值的地方下降很慢,靠近的时候可能成zig-zag下降。
    高斯牛顿法:其利用了目标函数的泰勒展开式把非线性函数的最小二乘化问题化为每次迭代的线性函数的最小二乘化问题。高斯牛顿法的缺点在于:若初始点距离极小值点过远,迭代步长过大会导致迭代下一代的函数值不一定小于上一代的函数值。
    LM算法:在高斯牛顿法中加入了因子μ,当μ大时相当于梯度下降法μ小时相当于高斯牛顿法。在使用Levenberg-Marquart时,先设置一个比较小的μ值,当发现目标函数反而增大时,将μ增大使用梯度下降法快速寻找,然后再将μ减小使用牛顿法进行寻找。
    LM算法在高斯牛顿法中加入了因子μ,当μ大时相当于梯度下降法,μ小时相当于高斯牛顿法。在使用Levenberg-Marquart时,先设置一个比较小的μ值,当发现目标函数反而增大时,将μ增大使用梯度下降法快速寻找,然后再将μ减小使用牛顿法进行寻找。

  10. 参考:
    LM算法-讲解详细
    高斯牛顿(Gauss Newton)、列文伯格-马夸尔特(Levenberg-Marquardt)最优化算法与VSLAM
    概率角度解释:高斯-牛顿法(Guass-Newton Algorithm)与莱文贝格-马夸特方法(Levenberg–Marquardt algorithm)求解非线性最小二乘问题
    单目SLAM在移动端应用的实现难点有哪些?

ORB-SLAM

  1. ORB-SLAM在估计相机位姿时,为什么同时计算基础矩阵F和单应性矩阵H?
    当特征点共面或相机间发生了纯旋转时,基础矩阵自由度下降,即发生了所谓的退化,此时如果仍采用八点法估算F矩阵,基础矩阵多出来的自由度将会由噪声决定,对结果造成极大误差。为避免退化现象造成的影响,通常会同时估计基础矩阵F和单应矩阵H,选择重投影误差较小的那个作为最终的运动估计矩阵。

双目、RGBD

  1. 双目SLAM流程
  2. RGBD-SLAM流程

光流法、直接法、特征点法

  1. 光流法如何估计相机位姿?
    光流法通过跟踪图像像素点,得出两帧间角点的匹配关系,当存在一系列匹配点之后,即可使用三角测量、PnP、ICP等方法估计相机位姿。
  2. 光流法与直接法的区别是什么?
    光流法:是基于像素的光度不变性假设,跟踪图像像素点的方法,描述了像素在图像中的运动。当使用光流法跟踪图像特征点得出匹配点对之后,即可以用匹配的特征点,使用ICP、PnP或对极几何估计相机运动。光流法本质上还应该划分到特征点法中,只不过把提取特征点、计算描述子、特征匹配替换成了光流跟踪而已,之后求解R和t的过程是一样的。
    直接法
    (1).是由光流法演变而来的,也是基于灰度不变性假设,通过最小化光度误差(或称为测量误差)来优化R和t。直接法将获取匹配点对(数据关联关系)与计算相机位姿放到同一个非线性最小二乘问题中,而特征点法是先得出匹配点,再进行非线性优化得出相机位姿,是分步进行的。
    (2).区别:光流仅估计了像素间平移,但没有用到相机本身的几何结构、没有考虑到相机的旋转和图像的缩放、对于边界上的点,光流不好追踪,但直接法则考虑了这些信息;
    (3).直接法流程:假设有两个帧,运动未知,但有初始估计R,t(通过经验值设定);第一帧上看到了点P,投影为P1;按照初始估计,将P1转到第二帧,得出P在第二帧上投影P2;通过最小化P1与P2点的灰度误差来优化初始估计R、t。以上是定位过程,建图过程如下:当确定最优的R、t后,即可重投影得出3D点座标。
    特征点法
    特征点法通过特征匹配得出2D-2D匹配点,使用对极几何即可计算相机位姿R、t,进一步通过最小化重投影误差优化R、t,得出最优的相机位姿。不同与直接法的地方在于,特征点法使用对极几何(或PnP、ICP)计算出的R、t作为位姿初值,最小化重投影误差进行优化,而直接法则使用经验值设定的R、t作为初值,使用最小化灰度误差进行优化。

视觉SLAM

  1. 视觉SLAM存在的问题
    虽然双目和RGBD不存在初始化化和尺度漂移问题,但是视觉SLAM仍然存在很多共性问题。相机运动太快会导致图像模糊、相机视野不够会导致匹配特征点少、计算量太大(特征提取和匹配)、遮挡、特征缺失、动态物体或光源干扰等。

IMU

  1. 使用IMU优点
    IMU能帮助单目确定尺度;
    IMU能测量快速的运动;
    IMU在相机被遮挡时亦能提供短时间的位姿估计;
    视觉SLAM相邻两帧之间没有约束关系,优化误差函数是重投影误差;IMU增加了相邻帧之间的约束关系,

图像处理

  1. 什么是ORB特征,ORB特征的旋转不变性是如何做的,BRIEF算子是怎么提取的。
    ORB特征是对FAST特征点检测方法与BRIEF特征描述子进行结合和改进的特征点检测方法;FAST特征点不具备方向,ORB使用矩表示特征点的主方向,有了主方向就可以解决了BRIEF描述子不具备旋转不变性的问题了。方式:关键在于其建立座标系的方式,ORB在计算BRIEF描述子时是以关键点为圆心、以关键点和取点区域的形心的连线为X轴建立2维座标,这种方式保证了在不同的旋转角度下,当以同一个取点模式取出的点是相同的,这就解决了旋转不变性的问题???
    ORB并未解决尺度不变性,OpenCV上的实现使用了高斯金字塔来保证其尺度不变性。
    参考:图像特征点—ORB特征点

旋转&点云

  1. 机器人学中表示旋转的方式有哪些?区别是什么?
    表示旋转的方式有4种:旋转矩阵、旋转向量、欧拉角、四元数;
    区别:
    旋转矩阵:用9个变量描述3个自由度,具有冗余,不够紧凑;
    旋转向量:3维,使用向量描述旋转,向量的方向与旋转轴一致、向量长度等于旋转角,即李代数。
    欧拉角:3维,比较直观,将一个旋转拆分成了绕3个座标轴的旋转,如RPY指横滚、俯仰、偏航角度,指绕固定轴XYZ、绕旋转之后的轴:ZYX。
    四元数:4维,旋转向量与欧拉角虽然紧凑但具有奇异性,四元数紧凑、没有奇异性;使用1个实部、3个虚部表示。
  2. 有哪些点云匹配算法?原理是什么?
    点云匹配算法:ICP、

其他

  1. 你还有什么问题?
    可以从以下方面进行提问:(1) 部门(2) 业务范围(3) 培养方式(4) 工作模式(5) 后续通知时间
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章