SLAM常见面试汇总

1. 相机的内参有 fx, fy, cx, cy, 畸变参数(只考虑k1, k2),相对世界坐标原点外参T。如果我们现在对相机拍摄的图片进行2倍的下采样,那么这些参数会如何变化?

SLAM常见面试汇总_第1张图片

 由像素坐标到相机坐标的转换公式可以知道,当对相机拍摄的照片进行2倍下采样时,所有内参fx,fy,cx,cy都变小1/2。由于镜头安装制造等存在误差,图像会产生一定的畸变,于是建立上式的去畸变模型,畸变参数是与镜头相关的参数,与分辨率无关,所以不会改变。

2. 为什么要用逆深度误差而不是深度误差?

SLAM常见面试汇总_第2张图片

 由成像原理图可知,地图点距离相机越远,投影到前后两帧上的像素横坐标之差就越小(即视差越小)。此时较小的测量误差都会引起很大的深度误差,而使用逆深度表示可以有效降低深度较远的点造成的误差。

3. Kidnap绑架什么意思?有什么解决方法?

机器人的“绑架”问题是指机器人在缺少之前的位置信息情况下,如何重新确定当前位姿。

最常见的就是机器人在移动过程中,由于传感器故障或者相机的快速移动,导致机器人跟踪丢失了,而且也没有检测到回环,这时候机器人是不知道自己的空间位姿的。

解决方案: 其实没有很好的方法。主要是多传感器融合。比如在视觉SLAM中加入惯导,在视觉跟踪失灵时惯导还可以提供辅助信息。

4. 使用g2o和ceres库都能用来进行BA优化,这两者在使用过程中有什么不同?

g2o库:

公开的API说明比较少,对入门小白不太友好。

使用固定的模板,不太灵活

提供了预先定义好的接口,需要做的工作比较简单

ceres库:

本身是针对一般优化问题的库,更通用

需要自己定义顶点边等接口

g2o就像一个傻瓜相机,预先设置好了很多参数,只能从固定模式中选择

ceres就像一个专业相机,需要懂参数,然后自己根据需要调节参数,适用范围更广

5. SLAM中为什么要引入李群李代数?目的是什么?

在优化过程中经常需要求导,而李群只有乘法没有加法,无法求导,所以先转换为李代数,通过李代数求导。

因为旋转矩阵(李群)自身是带有约束的,正交且行列式为1。而通过李群李代数的转换关系(旋转向量),可以把位姿估计变成无约束的优化问题。

6. 描述下GN、LM方法

GN:线搜索

将f(x)进行一节泰勒展开,最后求解线性方程H△x=b;用JT*J近似H矩阵,省略H复杂的计算

过程;但稳定性差,可能不收敛;

 LM:信赖区域;

求解线性方程(H+λI)△x=b;引入λ拉格朗日乘子,当λ较小时接近高斯牛顿法,当λ较大时接近最速下降法。计算结果更稳定更准确。

7. 纯视觉slam有哪些缺陷?

  1. 相机快速移动,图像变模糊,此时无论是特征点法还是直接法都不容易计算出正确结果
  2. 光照变化较大 光照变化直接影响亮度
  3. 纹理不足 无法提取特征点
  4. 重复纹理场景 特征点匹配困难

8. 视觉SLAM方法一般分为特征点法和直接法。请简述一下特征点法和直接法的概念,以及对应的优缺点。

特征点法,提取、匹配特征点以估计相机运动,优化重投影误差。常见的开源方案 比如ORBSLAM

优点:

(1)特征点本身对光照、旋转比较不敏感,所以更加稳定。在运动速度较快时也能跟踪成功

缺点:

(1)关键点提取、描述子匹配耗时长

(2)特征点丢失场景无法使用(重复纹理)

(3)只能构建稀疏地图

直接法,根据相机的亮度信息估计相机的运动,不需要计算关键点和描述子,优化的是光度误差,根据使用像素数量可分为稀疏、半稠密、稠密三种。常见开源方案有SVO, LSD-SLAM

优点:

(1)省去计算特征点、描述子时间,计算速度快

(2)可以用在特征缺失的场合(比如白墙)

(3)可以构建半稠密乃至稠密地图

缺点:

(1)因为假设了灰度不变,所以易受光照变化影响

(2)要求相机运动较慢或采样频率较高(可以用图像金字塔改善)

9. 按照你的理解讲解一下什么是极线约束?这个约束能带来什么好处?

假设相机在不同位置拍摄了两幅图像,如果一个空间点P在两幅图上分别有两个成像点,已知左图成像点为p1,那么右图成像点p2一定在相对于p1的极线上。

极线约束的好处:通过极线搜索相比暴力匹配可以极大减少待匹配点的数量。

10. SLAM后端一般有两种方法:滤波方法和非线性优化方法,这两种方法有什么优缺点?

滤波方法:

优点:

1、相比基于优化的方法通常需要更少的计算资源。轨迹相对平滑和稳定。

缺点:

1、不适用于大范围场景。因为要存储状态量的均值和方差,且存储量与状态量呈平方增长(存储协方差矩阵)。而现在的SLAM方案,路标点(特征点)数据很大。

2、相对优化方法来说精度不太高。

优化的方法

优点:

1、精度较高。在优化过程中对参数不断地迭代求解,从而求解更加精确

2、可扩展性比较强,用于多种组合传感器比较方便。

缺点:

1、多传感器融合(比如camera + IMU)时理论比较复杂。鲁棒性也可能会比滤波方法差一些。

11. 单目视觉slam中尺寸漂移是怎么产生的?有什么解决办法?

根本原因是单目相机无法仅根据一张图片得出物体的真实大小,也就无法确定物体的远近,同理无法得出运动的尺度大小,这是产生尺度漂移的根源。

同时,在使用三角测量原理计算深度时,受到特征点匹配精度的影响,较小的角度误差在经过多帧累积之后深度误差都会变得很大,从而无法保证尺度一致性。

解决办法:

1、视觉和IMU融合。IMU可以测得高帧率的角速度和加速度,尤其当相机运动过快时,相机会出现运动模糊,或者两帧之间重叠区域太少以至于无法进行特征匹配,所以IMU是视觉信息的很好的补充,能在相机运动过快的时候给出一个较好的位姿估计。

2、后端优化时把尺度也作为一个优化变量,也可以减小尺度漂移问题。

12. 什么是pnp算法?一般用在什么场景?

SLAM常见面试汇总_第3张图片

 PnP是Perspective-n-Points的简写,它是一种根据3D-2D的匹配来求解位姿R和t的方式。

目前用到的场景主要有两个

1、求解相机相对于世界坐标系的位姿(局部地图点跟踪);

2、单目相机估计位姿时使用PnP给出相机初始位姿

13. 关键帧在SLAM里应用非常多,很多知名的开源算法都使用了关键帧。请你用自己的语言描述一下关键帧是什么?有什么用?如何选择关键帧?

关键帧使用最具有代表性的一帧表示其附近的帧,可以减少待优化的帧数。

选取的指标主要有:

(1)距离上一关键帧的时间是否够长。缺点:运动很慢时,产生大量相似的关键帧,运动较快时丢失了很多重要的帧。

(2)距离最近关键帧的距离是否足够远(空间)/运动。缺点:如果对着同一个物体来回扫就会出现大量相似关键帧。

(3)跟踪质量(共视特征点的数量)。记录当前视角下的特征点数,或者视角,当相机离开当前场景时才会新建关键帧。缺点是比较复杂

14. 描述BA

BA是一个优化模型,其目的是最小化重投影/光度误差,用于优化相机位姿和世界点。局部BA用于优化局部的相机位姿,提高跟踪的精确度;全局BA用于全局过程中的相机位姿,使相机经过长时间、长距离的移动之后,相机位姿还比较准确。BA是一个图优化模型,一般选择LM(Levenberg-Marquardt)算法并在此基础上利用BA模型的稀疏性进行计算。比如,ORBSLAM2中就是维护一个地图(三维点集合),通过PNP方法估计位姿T,然后用估计的T来计算重投影误差。

15. SLAM中地图一般是指什么?有什么用?怎样生成、更新地图?

地图一般又可以分为局部地图和全局地图两种,是特征点对应世界坐标系下的三维点的集合

局部地图主要记录相机当前位置附近的特征点,把远处的或者视野外的特征点丢弃,这样用PnP算法对当前帧和地图进行位姿估计时速度比较快。

全局地图则记录了从开始到当前所有的特征点,不适合像局部地图那样进行位姿估计,主要是用来进行回环检测。

地图点使得位姿估计更稳定。纯粹的两两帧间的位姿估计受到环境的影响比较大,比如突然出现了噪声,此时帧间位姿估计就可能误差很大甚至失败,后面也没办法继续运行。而此时如果使用了局部地图估计位姿,即使当前帧位姿估计失败,因为有地图点存在,后续帧也能利用局部地图估计出正确的位姿。

如何生成更新地图。以局部地图为例,相机拍摄的每一帧都可以为地图贡献一些信息,当前帧和局部地图点进行位姿估计后,就可以把当前帧新增的特征点对应的三维点添加到地图中,同时删除局部地图中超出视野外的较远的点。这样就对局部地图进行了更新。

16. 请问vins中是如何将IMU数据与camera融合到一起的?

简单来说,相机在低速运动下表现较好,特征匹配也会比较稳定。当相机快速运动时,很容易出现模糊,而且相邻两帧之间重叠区域会比较小,此时特征匹配很容易匹配不上。而此时IMU 却能够稳定的输出比较可靠的位姿估计。但是 IMU 作为惯性传感器在具有一定加速度的情况下才有输出,比如 IMU 静止或者匀速运动时得到的数据非常不可靠,积分后的结果也会有很大漂移。此时相机数据可以修正 IMU 本身的漂移,两者互补。此外,视觉与 IMU 的融合可以有效的消除 IMU 的积分漂移。校正 IMU 的 Bias。单目与 IMU 的融合可以有效解决单目尺度不可观测的问题。

优化阶段是最小化IMU测量残差和视觉测量残差。采用基于滑动窗口的紧耦合方法进行状态估计。由于相机频率一般比IMU低很多,所以需要对测量值进行预处理。对于视觉测量信息,跟踪连续帧之间的特征,并在最新帧中检测新特征。对于IMU测量信息,在两个连续图像帧之间做预积分,这样和图像帧进行对齐。由于使用的低成本IMU的测量值受到偏置和噪声的影响。因此,在IMU预积分过程中需要特别考虑偏置的补偿。

17. 对于单目相机,F和H矩阵有何不同,E和F矩阵有何不同,只旋转不平移能不能求F、能不能求H?

F为基础矩阵 (Fundamental Matrix)

定义为K^-T*E*K^-1,其中E为本质矩阵,E=t^*R。

F矩阵7个自由度,相机的内参K在slam中是已知的,E有五个自由度,所以最少用5对点求E,实际使用8点法;

可通过E恢复出相机运动的R,t。如果初始化遇到了纯旋转的情况,t=(0,0,0),理论矩阵F为0矩阵,受到噪声影响,由匹配点对推算F矩阵不为0,分解后的R,t受到噪声影响大。

H为单应矩阵 (Homography Matrix)

描述的为两个平面的映射关系。

H矩阵直接描述了图像坐标p1和p2之间的变换,p2等价于H*p1。H=K(R-t*n^T/d)K^-1

H 矩阵自由度为8,每一对点提供两个方程,因此可通过4对匹配特征点算出。

遇到了纯旋转的情况,t=(0,0,0),H不为零,直接等于KRK^-1,可以计算出旋转R。

总结:

F和H的区别为所求相机获取图像状态不同而选择的不同矩阵。

E和F相差相机内参的运算。

只旋转不平移求出F并分解的R,t与真实差距大不准确,能求H并分解得R。

18. 本质矩阵E,基础矩阵F,单应矩阵H 自由度分别是多少?为什么?(补充17题)

基础矩阵7个自由度,本质矩阵5个自由度,单应性矩阵8个自由度。

矩阵的自由度是指:想要解矩阵中的未知参数,需要通过列几个线性方程组?对于n*n的矩阵,如果该矩阵存在k个约束,那么其自由度为n*n-k。

基础矩阵:9-2=7 尺度等价性 + 秩为2(不满秩)

本质矩阵t^R:6-1=5 尺度等价性

单应性矩阵:9-1=8 尺度等价性

19. 共视图是什么结构?

使用指针数组进行互相关联,一个节点与很多节点关联

20. 特征点法和直接法的BA有何不同

(1) 误差函数不同。特征点法是重投影误差,直接法是光度误差

(2) 雅克比矩阵不同

21. 光流和直接法有何不同:

光流计算了特征点,但不计算描述子,利用特征点的最小光度误差计算相机的运动。直接法无需计算特征点,直接利用最小光度误差计算相机的运动。

22. EKF和BA的区别:

(1) EKF假设了马尔科夫性,认为k时刻的状态只与k-1时刻有关。非线性优化使用所有的历史数据,做全体的SLAM

(2) EKF做了线性化处理,在工作点处用一阶泰勒展开式近似整个函数,但在工作点较远处不一定成立。非线性优化每迭代一次,状态估计发生改变,我们会重新对新的估计点做 泰勒展开,可以把EKF看做只有一次迭代的BA

23. 什么是EKF

扩展卡尔曼滤波分为两步:

1. 使用上一次的最优结果预测当前的值,计算扩展卡尔曼增益

2. 同时使用观测值修正当前值,得到最优结果,计算协方差矩阵

整体上看扩展卡尔曼滤波器相当于一个带反馈的闭环控制系统,融合已建立的数学模型和实际测量值推断出最优的解。

24.介绍RANSAC算法

RANSAC算法可以在包含内点和外点的数据样本中,计算出符合内点的数据模型参数

RANSAC算法流程:

1. 假设一个适用于局内点的模型,用一组随机子集数据,计算出未知参数

2. 用1中的参数模型测试其他数据,如果在阈值内认为是局内点,将局内点添加到子集中

3. 如果子集内有足够多的局内点,则说明模型是合理的

4. 用子集中所有数据重新估计模型参数

5. 使用局内点与模型的错误率评估模型

相当于先选出内点,在用所有内点估计模型参数。
 

25. 如何优化重投影误差?采用什么方法求解?如果误匹配的点重投影之后误差很大,如何解决它对整个优化问题的影响?

图优化模型,将路标点和相机位姿作为两个节点,观测模型作为边,同时优化两个变量

SLAM中常用L-M求解,如果误匹配误差很大可以考虑用鲁棒核函数(Huber)

26. ICP匹配原理

ICP匹配也叫迭代临近点匹配

如果两组点云已经匹配好:

1 计算两组点在各自相机坐标系下的质心坐标,计算去质心坐标

2 计算使得旋转后坐标误差最小的旋转矩阵(统一了坐标系)

3 计算平移量t

如果两组点云未匹配好

1. 计算去质心坐标

2. 利用初始的R和t以及上一次迭代的增量对点云进行变换,得到临时的变换点云,然后将这个点云与目标点云进行匹配,找到在目标点云中的最近邻点。然后再计算新的R和t,反复迭代。
 

你可能感兴趣的:(大数据,c++,自动驾驶,算法)