SLAM常见面试题集锦

前言

在备战秋招时,发现SLAM相关的知识点比较庞杂零碎,网上对于常见的面试题也没有全面的集锦可以参考复习,所以参考我找到的一些面试题,自发整理了一些常见的问题及参考答案。参考答案是博主参考大佬的回答及自己的理解给出的,用于自己秋招备战使用的,所以答案都力求准确、简洁。但奈何能力有限,答案仍可能存在错误或者瑕疵,欢迎留言批评指正。

当然这里整理的也不全面,只是略尽绵薄之力,希望对大家有所帮助。另外,希望各位在此基础上进行修改、补充添加,并继续共享给大家,这样慢慢就会有比较全面的复习资料了。

ps:2020年秋招算法岗实在是太难了,相较2019年难的不是一星半点,都说2019年算法岗是“神仙打架”,2020年则是“诸神黄昏”,很多搞算法的都转行做了软开。况且博主还是半路出家,没有相关实习经历(客观原因)、没有项目经验(平台限制),7-8月份提前批折腾了两个月,结果发现毫无进展,最终无奈选择了去*厂搬砖。

最后,给后来者的忠告:想进大厂,项目经验、相关实习经历至关重要!面试官都是通过你的项目、实习内容展开问题,一看没有项目、没有实习,就一票pass了。所以一定要提前找实习,早做打算。

常见面试题

  1. 视觉SLAM框架及组成
    a) SLAM即实时定位建图,按照使用的传感器分为激光SLAM(LOAM、V-LOAM、cartographer、gmapping)与视觉SLAM,其中视觉SLAM又可分为单目SLAM(MonoSLAM、PTAM、DTAM、LSD-SLAM、ORB-SLAM(单目为主)、SVO)、双目SLAM(LIBVISO2、S-PTAM等)、RGBD SLAM(KinectFusion、ElasticFusion、Kintinous、RGBD SLAM2、RTAB SLAM);按照前端方法分为特征点法(稀疏法)、光流法、稀疏直接法、半稠密法、稠密法;按照后端方法分为基于滤波(EKF,UKF,PF原理简介)与基于图优化的方法。
    b) 视觉SLAM由前端(视觉里程计)、后端(位姿优化)、闭环检测、建图图4个部分组成。
    在这里插入图片描述

  2. 如何对匹配好的点做进一步的处理,更好保证匹配效果?或如何滤除外点
    a) 确定匹配的最大距离:先求出所有匹配点最小距离min_dist(Hamming距离吗?),小于2倍的最小距离的点,认为是内点,即30<匹配点距离<=2*min_dist,30是经验值,有些点会特别小。
    b) 基于KNN匹配算法:令k=2,即取最近邻与次近邻距离(.distance(),该距离类似于欧式距离,用于表征匹配质量,距离越小,匹配效果越好)的比值,比值小于一定阈值(如<0.8)则认为是内点;
    c) RANSAC方法。

  3. 对于单目相机,F和H矩阵有何不同,E和F矩阵有何不同,只旋转不平移能不能求F、能不能求H?
    a) F和E描述的都是两帧间的极线约束,只不过坐标系不同:F描述的是同一空间点在不同帧之间像素坐标的几何约束关系,也即极线约束,E描述的是归一化相机坐标之间的几何约束关系,且 , ,其中 ;可知,E只与相机内参有关,F与内外参都有关;而H描述的是一系列共面的3D点到相机成像平面(两个平面间)的投影变换关系;
    b) 三者分解出R,t不同: ,其中(n,d)表示世界坐标系下某个平面的平面方程,因此H只与外参、平面参数有关,而与内参无关。
    c) 在相机只有纯旋转而没有平移时,此时t为0,E、F也将为0,导致无法求解R;此时可以使用单应矩阵H求旋转,但仅无平移t,无法三角化求深度。

  4. 计算H矩阵和F矩阵的时候有什么技巧呢?实际上在问归一化的操作。

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

  6. 什么是极线约束
    a) 所谓极线约束就是说同一个点在两幅图像上的映射,已知左图映射点p1,那么右图映射点p2一定在相对于p1的极线上,这样可以减少待匹配的点数量、提高匹配效率。(画图解释)

  7. 描述BA过程
    a) BA是Bundle Adjustment的简称,又称光束法平差、捆绑调整、集束调整,其本质是一个优化模型,其目的是最小化重投影/光度误差,用于优化相机位姿和路标点。其主要过程为:根据相机的投影模型构造代价函数,利用非线性优化(比如高斯牛顿或L-M(Levenberg-Marquardt)算法)来求最优解,利用Hessian矩阵的稀疏性解增量方程,得到最优的相机位姿和3D特征点。
    b) 局部BA用于优化局部的相机位姿/三维点,提高跟踪的精度;全局BA用于全局过程中的相机位姿/三维点,使相机经过长时间、长距离的移动之后,相机位姿还比较准确。可以直接计算,也可以使用g2o或者Ceres等优化库进行计算。局部BA的约束:相机位姿、三维点,全局BA约束:相机位姿、三维点、回环检测的约束。
    c) Bundle Adjustment :光束指的是三维空间点投影到像平面上的光速,每一个特征点都会反射几束光线,当把相机位姿和特征点位置做出最优的调整后,即使用光束法调整光束以后,这些光线都收束到相机光心。
    SLAM常见面试题集锦_第1张图片

  8. 描述PnP过程
    a) PnP即Perspective-n-Points,它是一种由3D-2D匹配点求解相机位姿的方式,此处的3D点是世界坐标系,2D点是归一化相机坐标(内参已知),对于那些没有3D匹配点的2D-2D匹配点对,求解其3D点仍需采用三角化的方式。
    b) 此时求解出来的位姿均是相机相对世界坐标系的变换关系Twc(Twc是所求目标结果,但一般存储的是Tcw,便于计算)。
    c) 目前遇到的场景主要有两个,其一是求解相机相对于某2维图像/3维物体的位姿;其二就是SLAM算法中估计相机位姿时通常需要PnP给出相机初始位姿。在场景1中,我们通常输入的是物体在世界坐标系下的3D点以及这些3D点在图像上投影的2D点,因此求得的是相机坐标系相对于世界坐标系(Twc)的位姿。在场景2中,通常输入的是上一帧相机坐标系下的3D点(把上一帧视为世界坐标系,本质仍是世界坐标系)和这些3D点在当前帧中的投影得到的2D点,所以它求得的是当前帧相对于上一帧的位姿变换。两种情况本质上是相同的,都是基于已知世界坐标系3D点和对应的归一化相机坐标系2D点求解相机运动的过程。

  9. 描述Gaussian-Newton法、LM法
    a) Gaussian-Newton:是线搜索方法,是将f(x)进行一阶泰勒展开、再平方,最后求解线性方程H△x=b,其中H=J^TJ,b= -JT*f(x_k),G-N法使用JTJ近似Newton法中Hessian矩阵,省略了其H矩阵的计算过程。缺点:H有可能不可逆,导致稳定性差、可能不收敛。
    b) LM:是信赖区域法,再G-N法基础上添加了阻尼因子λ,求解线性方程(H+λI)△x=b;当λ较大时,相当于梯度下降法、λ较小时,相当于G-N法。
    c) LM算法中λ如何变化:在使用L-M法时,常先设置一个比较小的λ值,当发现代价函数反而增大时(说明阻尼带来的“阻力”不够,或步长太大),将λ增大、减小步长,使用梯度下降法搜索,拒绝此次迭代;如果代价函数减小(说明方向正确,可尝试进一步减小阻尼、增大步长,),则再将λ减小使用高斯牛顿法,进一步增大步长、加速收敛,即λ的变化与代价函数的变化是正相关的。更科学的,使用阻尼更新策略比例因子衡量 ρ = f ( x ) − f ( x + Δ ) J Δ \rho=\frac{f(x)-f(x+\Delta)}{J\Delta} ρ=JΔf(x)f(x+Δ),分子:实际函数下降值,分母:使用近似模型计算的下降值。若 ρ > 3 4 \rho>\frac{3}{4} ρ>43,则令 λ = 2 ∗ λ \lambda=2*\lambda λ=2λ ρ < 1 4 \rho<\frac{1}{4} ρ<41,则 λ = 0.5 ∗ λ \lambda=0.5*\lambda λ=0.5λ
    d) 参考

  10. 说一下Dog-Leg算法

  11. 如何选择关键帧
    关键帧选择指标:
    a) 跟踪质量:比如当前帧跟踪到的特征点数大于一定阈值,如大于50个点,或关键帧跟踪到的点比参考关键帧少90%。
    b) 距离最近关键帧的距离是否足够远(空间):即当前帧空间位置是否有足够的变换,如在静止不动或移动幅度较小的情况下,当移动角度大于一定程度才认为是关键帧。
    c) 距离上一关键帧的帧数是否足够多(时间):如过了20帧仍没有插入关键帧;
    d) 关键帧作用:图像插入频率过高会导致信息冗余度快速增加,而这些冗余的信息对系统的精度提升却十分有限,甚至没有提高,反而消耗了更多的计算资源。关键帧的目的在于,适当地降低信息冗余度,减少计算机资源的损耗,保证系统的平稳运行。

  12. 为什么要引入李群李代数?李群与李代数的关系?
    a) 旋转矩阵自身是带有约束的,即是正交矩阵且行列式为1,他们作为优化变量时,会引入额外的约束,优化变的困难,通过李群李代数的转换关系,把位姿估计变成无约束的优化问题。
    b) 李群与李代数是对数与指数的关系,李群到李代数是对数变换,李代数到李群是指数变换。李群是矩阵的集合,李代数是向量的集合,矩阵求导时对加法不封闭,而映射为李代数之后对向量来说,加法是封闭的。

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

  14. 单目视觉尺寸漂移是怎么产生的
    a) 单目相机无法根据一张图片得出一张图片中物体的实际大小,同理也就无法得出运动的尺度大小,这是产生尺度漂移的根源。而在使用单目估计相机位姿和3D点坐标时,需要通过对极几何、三角化进行估计,在这个过程中会产生误差(特征点精度误差、计算误差),即使是极小的误差经过多帧累积后会变得特别大,无法保证尺度的一致性,造成尺度漂移。
    b) 解决办法:从理论上说,只靠单目相机是无法确定尺度的。视觉与IMU融合,IMU可以测量实际尺度,借助IMU测得的高帧率的角速度、加速度对视觉进行修正、补充;后端优化时,把尺度作为一个优化变量进行优化,可以减小尺度漂移问题。

  15. 单目SLAM初始化过程、单目SLAM整个过程
    a) 初始化过程:是通过前两帧之间2D-2D匹配点,使用对极几何计算出相机的旋转、平移矩阵,并将该平移矩阵初始化为后续相机运动的单位,即初始化之后的运动都以初始化时的平移作为单位1,是为了解决单目的尺度不确定性问题。且在初始化时,要保证两帧图片之间的运动必须包括平移(不能只是纯旋转),否则将导致求得的本质矩阵E为0,也就无法分解得到相机位姿。
    b) 单目SLAM流程是:初始化—PnP—三角化—PnP—三角化……。具体方法是依赖对极几何的相关知识,根据2D-2D匹配点对计算本质矩阵(或基本矩阵),并对其进行分解得到相机运动,再依据三角化原理计算特征点距离。至此即得到3D-2D匹配点对,后续的相机位姿的估计就是PnP问题了、后续3D点的计算仍采用三角化方式。

  16. SLAM中的绑架问题(重定位)
    a) 绑架问题就是重定位,是指机器人在缺少之前位置信息的情况下,或跟踪丢失的情况下,如何进行重新定位、确定当前位姿。例如当机器人被安置在一个已经构建好地图的环境中,但是并不知道它在地图中的相对位置,或者在移动过程中,由于传感器的暂时性功能故障或相机的快速移动,都导致机器人先前的位置信息的丢失,在这种情况下如何重新确定自己的位置。

  17. 词袋模型可以用于回环检测,也可以用于重定位,有什么区别
    词袋模型在SLAM中的应用:当前帧与关键帧的特征匹配、重定位的特征匹配、回环检测的特征匹配;(第一个是后两个的基本原理,后两个是应用场景)。连续帧间特征匹配采用的并不是词袋模型。
    a) 重定位:主要是通过当前帧与关键帧的特征匹配,定位当前帧的相机位姿。
    b) 回环检测:优化整个地图信息,包括3D路标点、及相机位姿、相对尺度信息。回环检测提供了当前帧与所有历史帧的关系,

  18. 相比VSLAM,加入IMU后,哪些状态可观?
    a) 单目SLAM7个自由度不可观:6个自由度+尺度;
    b) 单目+IMU4个自由度不可观:偏航角(yaw)+3自由度不可观;翻滚角(roll)、俯仰角(pitch)由于重力存在而可观,尺度因子由于加速度计的存在而可观;

  19. 仿射变换、透视变换、欧式变换有什么区别
    a) 仿射变换:形状会改变,但直线的平行关系不变,如矩形变成平行四边形。是透视变换的特殊形式。
    b) 透视变换(或称射影变换):是仿射变换更一般的形式,是共面点投影的变换关系,如单应性矩阵。平行的直线变换前后可能不会保持平行。
    c) 欧式变换(或称等距变换):旋转、平移;

  20. 什么是紧耦合、松耦合?优缺点
    a) VIO是融合相机和IMU数据实现SLAM的算法,根据融合框架的区别又分为紧耦合和松耦合,松耦合中视觉运动估计和惯导运动估计系统是两个独立的模块,将每个模块的输出结果进行融合,而紧耦合则是使用两个传感器的原始数据共同估计一组变量,传感器噪声也是相互影响的,紧耦合算法上比较复杂,但充分利用了传感器数据,可以实现更好的效果,是目前研究的重点。
    b) 按照是否把图像的Feature加入到状态向量区分,也就是松耦合是在视觉和IMU各自求出的位姿的基础上做的耦合,紧耦合是使用图像和IMU耦合后的数据计算相机位姿。

  21. 室内SLAM与自动驾驶SLAM有什么区别?

  22. RANSAC在选择最佳模型的时候用的metric是什么?
    a) Metric译作:admission to a group,可以理解为指标、许可。我的理解是,此处指的是按照什么指标选择最佳模型,对每个模型计算内点数量,内点数量的大小即是选择指标,内点数量最大的即是最佳模型。

  23. 除了RANSAC之外,还有什么鲁棒估计的方法?
    a) M-估计(鲁棒核函数)、最小中值估计。
    b) 参考

  24. 有哪几种鲁棒核函数?
    a) RANAC和鲁棒核函数都是为了解决出现outlier的问题:RANAC是从数据中选择正确的匹配进行估计,鲁棒核函数则是直接作用在残差上,对残差进行饱和函数运算,限制单个数据点对于误差函数的影响力。等于对最小二乘问题做了包装,通过降低错误匹配的权重,使得观测数据中的outlier影响不到最终的估计结果:
    在这里插入图片描述
    b) 常用核函数:Huber、Cauchy、Turkey;
    c)
    在这里插入图片描述
    d)
    SLAM常见面试题集锦_第2张图片

  25. 如果把一张图像去畸变,写公式,流程。

  26. 写出单目相机的投影模型,畸变模型。

  27. 说一个自己熟悉的SLAM算法,Lidar/Visual slam,说优缺点

  28. 什么是边缘化?First Estimate Jacobian算法?一致性?可观性?
    a) 对于VIO系统,边缘化的目的是把旧的状态量从状态估计窗口中移除,保证运行效率;同时,需要把移除的状态量的信息保留下来,作为当下窗口的先验,尽可能避免信息丢失。

  29. RGB-D的SLAM和RGB的SLAM有什么区别?
    a) RGBD-SLAM与RGB-SLAM使用的相机不同,前者可读出深度图像和彩色图像、后者只能读出彩色图像(单目或双目);
    b) 传感器数据不同,主要造成前端视觉里程计很多不同,如RGBD-SLAM不用初始化、计算3D点云方式不同、可以使用ICP直接计算相机位姿,
    c) 参考

  30. 什么是ORB特征,ORB特征的旋转不变性是如何做的,BRIEF算子是怎么提取的。
    a) ORB特征即Oriented FAST and Rotated BRIEF,由FAST关键点和BRIEF描述子两部分组成,先使用FAST提取角点作为特征点,再使用BRIEF对特征点周围区域进行描述,计算描述子;
    b) 通过改进FAST特征点获得尺度不变性和旋转不变性:普通FAST角点不具备方向性和尺度不变性,ORB对其进行改进,增加了尺度不变性和特征点的方向信息,所以称为Oriented FAST关键点;尺度不变性通过构建图像金字塔、并在金字塔每一层检测角点实现;特征的方向(旋转)信息由灰度质心法计算图像块的质心、再连接图像块几何中心O与质心C,即可得到特征点的方向向量OC,特征点的方向即定义为theta =arctan(m01/m10)。至此FAST角点具有了尺度与旋转的描述。FAST特征点有了方向信息,在后续计算BRIEF描述子时,即可保证特征点的旋转不变性。
    c) FAST角点提取:半径为3的圆上16个像素点,如果连续的N个点的亮度大于Ip+T或小于Ip-T(T为设定的阈值,如0.2*Ip),则认为该点是特征点,N常去12,即FAST-12。
    d) BRIEF算子是二进制描述子,其描述向量由许多0和1组成,通过在关键点附近随机取两个像素(如p和q),比较p和q像素值的大小关系,如果p大于q,则取1,反之取0,取128组这样的p、q,即可得到特征点的128维描述子。
    e) ORB速度快的原因:相比其他特征点检测算法,FAST只是比较像素亮度大小;BRIEF通过随机选点、编码0和1的方式计算描述子,因此速度快。
    f) 参考:《视觉SLAM十四讲》P134-P36;

  31. ORB-SLAM中的特征是如何提取的?如何均匀化的?

  32. ORB-SLAM中关键帧之间的连接,共视图(Covisibility Graph)数据结构
    a) ORB-SLAM2中关键帧之间的连接是通过共视图(Covisibility Graph)和生成树(Spanning Tree)表达的。
    b) 共视图:是一个有权重的无向图,图的结点为一个关键帧,如果两个关键帧能共同观测到一定数量的地图点,那么这两个关键帧之间建立一条边,边的权重为共同观测到的地图数量。
    c) 生成树: 生成树是共视图的包含最少边的子图,每次向生成树添加一个关键帧时,将该关键帧与树中共视地图点数量最多的关键帧连接。从生成树中删除一个关键帧时,也要更新受到影响的所有关键帧的连接关系。
    d)参考
    SLAM常见面试题集锦_第3张图片

  33. 地图点的构建方法有哪些?3D地图点是怎么存储的?表达方式?
    a) 地图点构建:单目:可以通过关键帧匹配构造、也可以通过普通帧构造(临时被Tracking用来追踪的);双目:立体匹配、块匹配;RGBD:彩色深度图对齐得到深度d,再根据彩色(u,v)坐标根据相机投影公式计算3D点坐标。
    b) 3D地图点存储方式:Vector3f
    c) 地图主要包含关键帧、3D地图点、BoW向量、共视图、生长树等:关键帧(包括特征点、描述符、当前帧的相机位姿,BoW向量无法保存,可在加载关键帧后重新计算)、3D地图点、共视图、
    d) 参考

  34. 如果对于一个3D点,我们在连续帧之间形成了2D特征点之间的匹配,但是这个匹配中可能存在错误的匹配。请问你如何去构建3D点?

  35. 说一下3D空间的位姿如何去表达?
    a) 旋转、平移矩阵;旋转可用:旋转向量(即李代数)、欧拉角、四元数、RPY表示;
    b)

  36. SLAM中的EKF,UKF,PF原理简介
    a) 参考

  37. 给你m相机n个点的bundle adjustment。当我们在仿真的时候,在迭代的时候,相机的位姿会很快的接近真值。而地图点却不能很快的收敛这是为什么呢?

  38. 给两组已经匹配好的3D点,计算相对位姿变换。已知匹配的ICP问题,写代码。

  39. 给一组点云,从中提取平面。

  40. 机器人从超市门口出发,前往3公里外的小区送货。请你设计一个定位系统,包括传感器的配置、算法的流程,用伪代码写出来。

  41. 双线性差值如何去做,写公式。

  42. 如何标定IMU与相机之间的外参数?

  43. 说一下VINS-Mono的优缺点

  44. 描述(扩展)卡尔曼滤波与粒子滤波,你自己在用卡尔曼滤波时遇到什么问题没有?

  45. 熟悉Ceres优化库吗?说一下。

  46. 除了视觉传感器,还用过其他传感吗?比如GPS,激光雷达

Word版

为方便复习使用,这里分享上述常见面试题集锦的word版本,CSDN下载链接

你可能感兴趣的:(SLAM)