视觉SLAM面试问题和学习资料整理

文章目录

说明:

本文主要梳理了一些大佬关于视觉SLAM方向的面经,对于其中的一些问题根据自己需要进行了一些补充,增加和补充了关于ORB-SLAM2相关的内容,在文末提供了ORB-SLAM和ORB-SLAM2的论文翻译和代码讲解视频,资源主要来自
泡泡机器人

,有需要可以自行下载学习

零、参考链接

[1] 视觉SLAM总结——视觉SLAM面试题汇总

一、视觉SLAM面试相关问题

1、李群与李代数的映射关系

在SLAM系统中,李群SO(3)、SE(3)用于表示旋转矩阵和位姿变换矩阵;李代数so(3)、se(3)用于表示旋转向量和位姿(旋转向量和平移向量)

由李代数到李群存在一个 指数映射关系,由李群到李代数存在一个 对数映射关系。

视觉SLAM面试问题和学习资料整理

; 2、李群与李代数的扰动模型

在进行SLAM后端优化时,需要误差函数对相机位姿以及路标点求偏导来计算极值,为了减小求导的复杂度,可以使用基于李代数的扰动模型对李代数进行求导;

由变换矩阵的李群与李代数的之间的映射关系可以知,对位姿增加一个微小变量相当于在李群表示的旋转矩阵左乘或由乘一个微小量;
旋转矩阵左乘一个微小变量:

视觉SLAM面试问题和学习资料整理
位姿增加一个微小变量:
视觉SLAM面试问题和学习资料整理
基于李代数扰动模型求导结果:
视觉SLAM面试问题和学习资料整理

3、SIFT与SURF特征的区别

  • 图像金字塔构建方式不同,SIFT特征通过与高斯差分核进行卷积得到每一层的尺度空间;SURF利用原图像与不同的盒式滤波器做卷积
  • 特征描述子不同,SIFT特征描述子是128维,SURF描述子是64维
  • 特征点检测方法不同,SIFT特征先进行非极大值抑制,然后去除低对比度的点,最后通过Hessian矩阵去除边缘响应过大的点;SURF特征先利用Hessian矩阵确定候选点,然后进行非极大值抑制。
  • 特征点主方向不同,SITF特征在像素点的8邻域区域内统计梯度幅值的直方图,直方图最大值对应主方向,可以有多个主方向;SURF特征在圆形区域内计算各个扇形范围的x,y方向的haar小波响应,膜最大的主方向作为主方向

Hessian矩阵是一个多元二阶偏导数构成的矩阵,表征了函数的局部曲率()

SIFT(Scale-invariant feature transform)特征提取过程

  • 使用高斯差分核对图像进行卷积生成尺度空间,首先是将为图像创建金字塔,然后在金字塔的每一层octave利用不同尺度的高斯差分核与图像卷积生成尺度空间
    视觉SLAM面试问题和学习资料整理
  • 检测尺度空间的极值点:对于同一octave的图像,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点
    视觉SLAM面试问题和学习资料整理
  • 去除对比度较低的点,然后通过Hessian矩阵去除边缘响应较低的点
  • 计算每个特征点的主方向(通过计算特征点8邻域像素的梯度分布直方图,选择梯度最大的方向作为特征点方向)
  • 生成关键点描述子(共4 _4_8维,4×4个window,8个主方向),通过将向量归一化去除光照的影响,特征点匹配通过计算欧氏距离获得
    视觉SLAM面试问题和学习资料整理
    SURF(speeded up robust features)特征提取过程:
  • 通过构建Hessian矩阵生成图像所有候选特征点
  • 使用原图片与不同尺寸的盒式滤波器进行卷积,构建图像的尺度空间
  • 特征点定位:与同尺度以及相邻尺度的8邻域像素进行比较计算极值
  • 计算特征点方向:通过计算以像素为原点的扇形区域x,y方向的harr小波响应,选择膜最大的作为特征点方向
  • 生成特征描述子( 4*4*4=64维)
  • 通过计算欧式距离计算特征匹配

; 4、相似变换、仿射变换、射影变换的区别

视觉SLAM面试问题和学习资料整理

(1)等距变换:

  • 物理意义: 平移加旋转变换
  • 不变量: 体积、长度、面积、线线角度
  • 自由度: 2D有1旋转+2平移= 3个自由度;3D有3旋转+3平移= 6个自由度
    (2)相似变换:
  • 物理意义: 等距变换加一个均匀缩放的尺度
  • 不变量: 体积、面积、长度、角度之间的比例不变
  • 自由度: 2D有3+1= 4个自由度;3D有6+1= 7个自由度
    (3)仿射变换:
  • 物理意义: 平移变换和非均匀变换的组合,A仅仅是可逆矩阵,不要求正交矩阵;可以想象将一个立方体变换为一个平行四方体
  • 不变量: 面积比例、长度比例、线的平行关系
  • 自由度: 2D有4旋转+2平移= 6个自由度;3D有9+3个自由度
    视觉SLAM面试问题和学习资料整理
    (4)射影变换
  • 物理意义: 涉及齐次坐标,把理想点(平行线在无穷远处相交)变换到图像上,可以想象真实世界到照片即为一个射影变换,经无穷远处的点变为有限。
  • 不变量: 点的重合关系、长度的交比
  • 自由度: 2D有9-1个尺度因子=8个自由度;3D有16-1=15个自由度;
    视觉SLAM面试问题和学习资料整理
    即:
    视觉SLAM面试问题和学习资料整理

5、Homograph、Essential、Fundamental Matrix的区别

(1)Homograph Matrix是单应矩阵
它描述了两个平面之间的变化关系,在SLAM过程中如果场景中的点都落在同一个平面上,则可以通过单应矩阵求解相机之间的运动(无人机,SLAM纯旋转)。单应矩阵的自由度为9-1=8,减去一个尺度因子,可以通过4组点求解,然后通过分解得到旋转和平移向量。
(2)Fundamental Matrix为基础矩阵
由対级约束关系得到,物理意义是在SLAM过程中,匹配点所在的光心O1、O2以及该点对应的空间点三者共面,対级约束的公式为

视觉SLAM面试问题和学习资料整理
其中p1,p2为像素坐标,中间的矩阵成为基础矩阵
(3)Essential Matrix为本质矩阵: 本质矩阵是归一化坐标下基础矩阵的特殊形式,

; 6、双目相机视差和深度的关系(双目相机的投影模型)

双目相机在完成矫正完成后,具有 d/b=f/z的关系,d成为 视差即同一3D空间点在左右相机图像坐标系下的x坐标之差,b成为 基线即两个相机光心的距离,f为相机焦距,z为3D空间点的深度信息。在深度和焦距确定下的情况下,基线越大视差就越大。

7、描述PnP算法

Pnp在SLAM系统中用于求解3D-2D之间的变换关系。

目前在SLAM运动估计时需要通过PNP给出相机的初始位姿,然后通过BA最小化重投影误差。

通常输入的是空间中3D点在上一帧坐标系下的坐标,以及这些点在当前帧投影得到的2D点,得到当前帧相对于上一帧位姿变换的初始估计。

8、描述ICP算法

ICP也就是迭代最近点算法,最开始用于两个点云之间的配准,后来SLAM系统中3D-3D之间的匹配也被称为ICP

SLAM中的ICP算法: 在SLAM中一般指通过特征匹配得到的两组3D点之间的运动变换求解,一般通过BA进行非线性优化求解。

9、闭环检测常用方法

ORB SLAM中选择BOW词袋模型筛选回环检测候选帧,先通过词袋向量搜索计算两帧图像的相似性得分判断是否存在回环关系,如果检测到是回环关键帧则通过sim3相似变换纠正累计误差,包括更新关键帧之间的连接关系和地图点信息。

LSD SLAM中的闭环检测主要是根据视差、关键帧连接关系,找出候选帧,然后对每个候选帧和测试的关键帧之间进行双向Sim3跟踪,如果求解出的两个李代数满足马氏距离在一定范围内,则认为是闭环成功

10、梯度下降法、牛顿法、高斯牛顿法、列文伯格-马夸尔特法之间的区别

在进行估计位姿和3D空间点时,需要使用BA进行非线性优化求解,其本质就是一个最小二乘求解问题。对于不方便求解的非线性方程,一般从给定的初始值开始,不断更新当前的优化变量,求解目标函数极小值。而求解目标函数极小值最终转换为求解优化变量的下降梯度问题,梯度下降法、牛顿法、高斯牛顿法、列文伯格-马夸尔特法都是确定优化变量下降梯度的不同方式。

(1)梯度下降法:
梯度下降法是一个一阶最优化方法,通过将目标函数在优化变量附近进行一阶泰勒展开即可得到增量的方向,在求解时沿着增量的反向梯度方向进行迭代即可。这种方法被称为最速下降法,该方法的特点是目标函数下降较快,缺点是过于贪心容易走出锯齿形路线,反而增加了迭代次数。

(2)牛顿法:
是通过将目标函数进行二阶泰勒展开求解增量方向,缺点是需要计算Hessian矩阵,在问题的规模比较大时,带来的计算量比较大。

通过对目标函数进行一阶展开,然后进行平方处理则得到高斯牛顿法和列文伯格-马夸尔特法。

(3)高斯-牛顿法:
对上述平方公式展开然后对增量进行求导得到高斯牛顿方程,本质上是使用雅各比矩阵替换牛顿法的Hessian矩阵

  • 将目标函数进行一阶泰勒展开并进行平方处理
  • 求展开式关于增量的一阶导数并另导数等于零得到高斯牛顿方程 H∆x=g
  • 迭代求解增量方程(对于每一次迭代令 x=x+∆x,直到∆x足够小)

(4)列文伯格-马夸尔特法:
在使用G-N方法求解增量方程时,如果求得的步长过大,会造成局部近似不准确,导致迭代求解的结果不收敛,L-M法在高斯牛顿法的基础上对增量添加一个 可信赖区域,保证增量只在展开点附近有效。
对于每次迭代计算实际代价函数的下降值与近似下降值的比值确定可信赖区域半径,

视觉SLAM面试问题和学习资料整理
比值越接近1说明近似越准确,
过小说明实际下降较小要缩小信赖区域范围,
过大说明实际下降过大,需要扩大信赖区域范围。

; 11、简单描述下卡尔曼滤波

卡尔曼滤波假设马尔科夫性,即认为当前时刻的状态只与上一时刻相关。

通过运动方程获得下一时刻的均值和方差的预测值,然后综合下一时刻的观测方程和预测值的方差求得卡尔曼增益,然后用卡尔曼增益更新均值和方差的预测值而获得估计值。

12、极线搜索与块匹配

在单目稠密地图构建时,无法对每个像素点都进行特征匹配来恢复深度, 计算量过于庞大, 而是使用极线搜索和块匹配加快匹配搜索,通过使用多次三角测量让深度值进行收敛。

相机在K时刻观测到某个像素p1,假设该像素对应的深度在某个区域之内(最小值,无穷远),这样该像素对应的空间点就分布在某条线段上,在K+1时刻这条线段将会在图像平面投影成一条线段,也就是极线,当两帧图像之间的运动确定时则可以确定极线在图像中的位置。 这样就可以沿着极线搜索关于像素p1在K+1帧的匹配点。

但是当极线上有很多和像素点p1相似的点时,则会出现误匹配,这时可以通过比较p1附近的图像块的相似性,即 块匹配方法。

13、单目视觉SLAM中尺寸漂移是怎么产生的

单目在初始化时首先通过対级约束,根据一组2D-2D之间的匹配估计出相机在相邻两帧的运动R和t,然后通过三角化得到关于这组匹配点对应的3D空间点信息。 但是在求解堆积约束关系时,t任意缩放某个比例均会满足対级约束关系,因此这里的平移向量t是没有尺度信息的。

在初始化完成后得到一组3D空间点,之后就会使用PNP估计下一时刻相机的运动R和t,然后通过三角化继续恢复一些3D点。但是在运动估计时R和t是具有一定噪声的, 这就导致每次的估计得到的t都会产生尺度偏差,随着SLAM的进行形成累计误差。最终需要通过回环检测进行纠正。

14、解释SLAM中的绑架问题

绑架问题在SLAM中即 跟踪失败以及重定位问题。

(1)ORBSLAM2解决方式
在ORBSLAM2中是通过快速 搜索BOW词袋向量实现的,当跟踪丢失时SLAM系统会从之前的关键帧中进行bow搜索计算两帧之间的相似性得分,如果得分比较高则将该关键帧作为参考关键帧计算当前帧的位姿。

(2)ORB-SLAM3解决方式
在ORBSLAM2中如果搜索不到关键帧则会判定跟踪失败,然后重新进行初始化。在ORB-SLAM3中改变了这种策略,当彻底跟踪丢失时,首先暂时保留跟丢前保存的位姿和地图信息,然后新建一个地图重新进行跟踪和定位,当检测到回环时再更新和融合之前被暂时放弃的位姿和地图信息。

15、描述特征点法的优缺点

(1)特征点法
优点:

  • 不需要直接法灰度不变性等强假设,运动估计更加精确;
  • 相比于直接法可以在更快的运动下工作,鲁棒性更好。

缺点:

  • 特征提取和特征匹配过程会占用过多的计算资源;
  • 特征点较少的低纹理区域无法使用;

(2)直接法
优点:

  • 不需要特征提取和匹配,速度较快;
  • 可以用在特征缺失的场合;
  • 可以构建半稠密或稠密地图进行三维重建

缺点:

  • 容易受到光照和模糊的影响,不再符合灰度一致性假设;
  • 运动不能过快,需要满足时间连续性和空间一致性假设;

16、EKF和BA的区别

  • EKF假设了 马尔科夫性,假设当前时刻的状态只和上一时刻相关;BA使用更久之前或者所有的历史数据,建立关于所有时刻的非线性优化。
  • EKF做了 线性化处理,在当前位置用一阶泰勒展开近似整个函数,但在距离当前位置较远处不一定成立。BA每迭代一次,状态估计发生改变,会重新在新的位置进行泰勒展开,即可以简单的把EKF看做只有一次迭代的BA。

EKF的缺陷:

  • EKF假设马尔科夫性,即K时刻的状态只与K-1时刻相关,无法实现回环检测和位置识别等相关功能
  • 在实现上,EKF需要储存状态变量的均值和方差,但是在大型SLAM系统中需要对路标点进行状态估计,在计算协方差矩阵时复杂度会很大

17、10个相机同时看到100个路标点,BA雅各比矩阵有多少维

误差对相机位姿的偏导数维度为 2*6,误差对路标点的偏导数为 2*3,因为有10个相机同时看到100个路标点,一共有 10*6+100*3个块

视觉SLAM面试问题和学习资料整理

; 18、边缘检测算子有哪些

边缘检测一般分为三步,滤波、增强、检测;基本原理都是用高斯滤波器进行去噪,之后用卷积核寻找像素梯度。常用有三种算法,canny算子、sobel算子、laplacian算子

(1)cnanny算子: 用一阶偏导的有限差分计算像素梯度的幅值和方向,对梯度和幅值进行非极大值抑制,采用双阈值检测和连接边缘。该检测算法较为完善,抗噪能力强。

(2)sobel算子: 一阶导数算子,引入局部平均运算,对噪声具有平滑作用,计算量较大,且定位精度不高,得到的边缘较粗

(3)拉普拉斯算子: 二阶微分算子,具有旋转不变性,容易受到噪声影响,不能检测边缘的方向,一遍不直接用于检测边缘而是判断明暗变化

(4)LSD直线段检测算法: 一种直线检测算法,通过计算灰度的梯度变化检测图像中一些局部直线段,相比上述检测算法来说得到的线段更加鲁邦,且能够在线性时间内得到亚像素级别的线段。

19、LSD线段检测算法步骤

(1)对图像进行缩放,消除锯齿效应
(2)对每个像素计算其梯度大小和方向,根据像素梯度大小和方向在图像局部区域的分布确定线段支持域
(3)删选线段支持域中梯度方向与主方向差异较大的点,保留较好的内点
(4)计算内点在线段支持域内的占比判断是否为线段

20、简单介绍ORB-SLAM框架

ORB-SLAM采用 多线程思想,将SLAM系统的 tracking、localmapping、loopclosing作为三个独立的线程进行工作。

首先通过跟踪模块计算得到两帧之间的变换关系T,然后根据判断条件创建关键帧,将关键帧传递给局部地图构建线程localmapping,该线程将新的关键帧和对应的Mappoints插入到局部地图中进行更新,然后把关键帧送入到闭环检测线程,闭环检测线程根据接收的关键帧和之前的关键帧进行对比,如果检测到闭环关系存在就建立连接关系,纠正相机轨迹的累计误差。

21、介绍一下g2o库

在SLAM系统中我们所使用的优化器optimizer是一个 SparseOptimizer对象,因此在进行求解BA问题时就是对这个对象进行各种操作。大概的步骤就是创建求解器,选择合适的优化算法,添加定点和边,设置优化参数并进行优化。

一个SparaseOptimizer对象就是一个 可优化图(Optimizer Graph)。

图中有很多 顶点(Vertex)和边(Edge)

通过使用类方法SparseOptimizer.addVertex和SparseOptimizer.addEdge向图中添加定点和边,最后调用SparseOptimizer.optimizer进行优化

使用g2o进行最小二乘问题求解
(1)创建一个SparaseOptimizer图优化对象
(2)创建一个线性求解器LinearSolver;
(3)创建BlockSolver,并用线性求解器LinearSolver初始化,用于求解雅各比和海塞矩阵
(4)创建总求解器solver。并从GN, LM, DogLeg 中选一个,再用上述块求解器BlockSolver初始化
(5)添加顶点和边并加入到优化器中
(6)设置优化参数,开始优化

22、室内SLAM与自动驾驶SLAM有什么区别

SLAM是指在未知环境下的即时定位与地图构建,在无人车运行到隧道、车库、高架桥这些GPS信号比较弱或者地形比较复杂的区域时,可以通过SLAM进行辅助定位和导航。

对于自动驾驶可以准备两种地图,一种是 矢量地图,用于指导无人车按照交通规则在道路上行驶;一种是 SLAM地图,这个地图在GPS无法使用时协助无人车进行定位,和第一种地图进行融合进一步实现自主导航。

23、什么是松耦合?紧耦合?以及优缺点

以VIO算法为例

松耦合就是把视觉VO计算得到的位姿加入到和IMU等传感器的联合优化,优点是计算量小,但是会带来累计误差

紧耦合就是把视觉特征和IMU的运动参数一起进行优化,优点是可以免去中间状态的累计误差提高SLAM精度,但复杂度很高,需要很大的计算量

24、地图点的构建方法

(1)对于单目SLAM可以通过三角化计算特征点深度信息
(2)对于双目可以通过两个相机的视差计算得到深度信息
(3)对于RGB-D相机,可以直接得到深度信息

25、如果对于一个3D点,在连续帧之间形成了2D特征点之间的匹配,但这个匹配可能出现错误,如何构建这个3D点?

(1)在非线性优化代价函数中加入鲁邦核函数减少误匹配带来的误差(具体见问题52)
(2)使用随机抽样一致性算法RANSAC剔除误匹配(OPENCV集成)

  • 从匹配的点对中选择8个点,使用8点法估算出基础矩阵
  • 计算其余的点对到其对应对极线的距离,如果该距离小于一定阈值则该点为内点,否则为外点。记下符合该条件的内点的个数
  • 迭代N次,或者某次得到内点的数目占有的比例大于等于95%,则停止。选择最大的基础矩阵作为最终的结果。

26、随机抽样一致性算法RANSAC在选择最佳模型的判断准则

选用具有最小残差的模型作为最佳模型。
除了RANSAC之外还有以下两种鲁邦的估计方法:

  • M估计指的是加入鲁棒代价函数最大似然估计
  • 协方差估计指的是同时估计状态和协方差的方法,也称自适应估计。

27、3D地图是怎么储存的,以什么方式?

以ORB-SLAM2为例,将地图封装成了一个类,包括3D地图点以及每个地图点的描述子。同时还有一个MAP类储存了与3D地图点有观测关系的关键帧,以及该地图点在关键帧中的index。

如果仅保留地图点信息,可以以 txt文本或者 PCL点云的形式进行保存。

28、给定m个相机n个点的BA,但是在迭代时相机的位姿会很快的接近真值,但是地图点不能很快的收敛,为什么?

约束相机位姿的方程远多于约束地图点的方程

29、LM算法里面的λ是如何变化的?

G-N方法采用雅各比矩阵的转置乘以其本身的形式代替计算较为困难的Hessian矩阵,但是JJ是半正定的,可能会出现奇异矩阵或者病态的情况,而且∆x太大的时候也会导致这种二阶泰勒展开的近似不够准确,为了解决第二个问题,提出给∆x添加可信赖区域的方法

通过判断实际代价函数的下降值与近似下降值的比值确定可信赖区域半径,

比值越接近1说明近似越准确,
过小说明下降较小要缩小信赖区域范围,
过大说明实际下降过大,需要扩大信赖区域范围。

30、MAT是如何访问元素的?

(1)使用 类方法at() 返回某个坐标的像素值
(2)使用 类方法ptr() 返回指定行的地址
(3)使用 迭代器
返回某个元素的地址
(4)使用 data指针,将图像看做是一个一维数组

31、一个3D空间点到图像中2D像素坐标的变换过程

(1)通过相机外参(位姿)将3D点从世界坐标系转换到相机坐标系
(2)将3D点从相机坐标系投影到归一化坐标系,得到归一化坐标
(3)对归一化坐标进行去畸变处理(径向畸变和切向畸变)
(4)利用内参矩阵,将归一化坐标转换为像素坐标

视觉SLAM面试问题和学习资料整理

; 32、ORB-SLAM初始化时为什么要同时计算H矩阵和F矩阵

在初始化时,如果相机发生了纯旋转或者所有特征点在一个平面,F矩阵的 自由度会发生退化,而选择H矩阵则会有较小的误差

因为单应矩阵描述了两个平面之间的映射关系,可以比较好的计算同一平面上的点在相邻帧的运动关系。

为什么平面选择单应矩阵比较好非平面选择基础矩阵比较好? 这是由平面和非平面情况下的几何关系决定的,在非平面时匹配点之间满足对対级约束关系,最终需要求解F或者E矩阵。在纯旋转时,平移为0,这就会导致最终解出的t和R变成0;在同平面时也可以计算F或者E矩阵,但是误差可能会比较大。

因此在进行初始化时需要同时计算F和E矩阵,选择误差比较小的模型进行初始化。

33、Essential矩阵的自由度是多少,为什么

自由度为5。本质矩阵E=t^R,其中平移有3个自由度旋转有3个自由度,但是対级约束是等式为0的约束,因此E乘以任何常数都会满足対级约束关系,因此E缺少一个尺度自由度。

34、当GPS或者惯导具有误差时,如何得到一个cm级别的地图

通过SLAM 辅助定位,在开始运动时GPS信号和IMU的初始值是已知的,因此在运动过程中可以通过SLAM系统不断去优化GPS和IMU的偏差

35、RGB-D的SLAM和RGB的SLAM有什么区别?

(1)RGB-D相机优势之一 不需要计算直接获得深度信息,双目RGB也可以获得深度但是需要根据视差进行计算;单目RGB的深度信息需要在估计出运动后通过三角化得到,但是随着相机运动会造成尺度漂移,需要通过回环检测进行纠正。
(2) RGB-D可以得到稠密地图,可以用于三维重建,或者转为八叉树地图进行路径规划和导航;单目RGB只能得到稀疏特征点地图,用来定位。
(3)在跟踪过程中,有时会出现地图点越来越少的情况,对于RGB-D相机和双目相机来说可以很容易的 恢复3D的MapPoints,帮助系统进行优化。

36、什么是ORB特征?ORB特征的旋转不变性是怎么做到的?尺度不变性是怎么做到的?BRIEF描述子是怎么提取到的?

(1)ORB特征的全称是Oriented FAST and rotated BRIEF,包括改进后的 FAST特征点和BRIEF描述子
(2)ORB特征的旋转不变性主要通过计算半径r范围内像素点的一阶矩,连接质心到特征点的向量作为主方向来对周围像素进行旋转
(3)ORB特征的尺度不变性通过 构建图像金字塔,在每一层尺度上提取角点
(4)BRIEF描述子首先在给定关键点周围的patch中随机选择256个像素对;然后根据关键点的方向角度旋转像素点对,使随机点的方向与关键点方向保持一致;根据亮度对比相应分配0和1的取值构建 描述子向量

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

(1)输入图像并将其转换为灰度图像
(2)初始化相关参数,如特征点数量、金字塔层数等等
(3)构建图像金字塔
(4)将图像划分成网格块,对每个网格提取FAST特征点
(5)对所有提取到的特征点利用八叉树形式进行划分( 均匀分布

  • 将图像分割成像素块,计算每个像素块的关键点数量,如果数量大于1则继续对该像素块进行分割;当分割的像素块的数量大于需要的特征点数量停止分割,保留每个节点响应最大的关键点,保证特征点的性能。

(6)使用灰度质心法计算特征点的方向
(7)计算每个关键点的描述子

38、射影变换为什么要自由度减一

射影变换由一个一般的可逆矩阵、一个平移向量,一个缩放因子组成。在进行变换时采用齐次坐标实现,因此可以对整个变换矩阵除以一个缩放因子,这样2D的射影变换有8个自由度,3D则共有15个自由度。

从真实世界到相机照片可以看做一个射影变换。

对于齐次坐标,放缩一个点的坐标仍然得到这个点本身,对尺度不变这个性质使得自由度减一。

39、canny算子的流程

(1)使用高斯滤波平滑图像,滤除噪声
(2)计算图像中每个点的像素梯度和方向
(3)使用非极大值抑制,消除边缘检测带来的杂散响应,具体就是精确定位边缘像素点,让边缘看起来没那么粗。
(4)使用双阈值检测确定真实的和潜在的边缘,首先通过 高阈值获得质量较好的真边缘,但是因为阈值较高会出现边缘不闭合现象,然后再采用一个 低阈值,在边缘的断点继续收集新的边缘像素,直到边缘轮廓闭合
(5)通过抑制孤立的弱边缘最终完成边缘检测

40、SLAM采用逆深度的原因

在进行极线搜索时,可能会存在多个极值,为了确定真实深度值,通过使用深度的概率分布描述深度值。

(1)逆深度误差可以降低真实世界中较远的深度点造成的误差。比如对于100m和50m处的不同深度点,可能在图像中表现为几个像素的距离,如果使用深度误差的话是50的差距,但是采用逆深度误差只有1/50-1/100=0.01的差距
(2)当采用逆深度时,通过将坐标归一化可以得到逆深度因子以及特征的齐次表达形式,优化变量减少
(3)逆深度的表达形式能够表达更远的点,而且更接近于高斯分布,

41、SFM和SLAM里面的BA有什么区别

SLAM更加注重实时性,在Local Mapping和LoopClosing中可能会采取一些措施提高优化的速度,比如把关于位姿和路标点的图优化改为位姿图优化等等

SFM应该是一种离线的SLAM,对实时性没有要求,可以更加注重对精度方面的优化。

42、ORB-SLAM中的LocalMap和VINS-MONO中的滑窗法有什么区别?

LocalMap主要是不断地接收跟踪线程创建的关键帧,并维护一个由关键帧和地图点组成的局部地图,随着SLAM过程的进行,局部地图不断更新关键帧和地图点信息,同时为跟踪提供更多的匹配关系,通过BA优化得到更加精确的运动关系。

VINS-MONO中的滑窗法需要考虑通过边缘化进行先验信息的保留等操作(具体不了解,没做过VIO)

43、PRE、ATE和RMSE分别是什么

(1)PRE是相对位姿误差,指在通过计算SLAM系统估计的位姿与真实值在相同时间段内位姿变化量的差值,用于对SLAM所产生的轨迹漂移程度进行评估。
(2)ATE是绝对轨迹误差,指SLAM系统在每一时刻估计的位姿与真实轨迹的差值,用于评估SLAM系统的定位精度和轨迹的全局一致性。
(3)RMSE指平移分量在所有时间指标上的均方根误差

44、ORB-SLAM的优缺点

优点:
(1)将SLAM系统的跟踪、建图和回环检测构造成三个独立的线程,而且对于每个过程都采用统一的ORB特征,提高了算法的运行效率
(2)ORB-SLAM系统对于每个过程都采用了很多优化的小技巧来提高系统的精度和鲁棒性,比如特征点提取选择网格分布提取特征、关键帧的选择策略回环检测方式等等,更加适合作为一个工程应用。
(3)对于目前ORB-SLAM已经有了三个系列,可以支持单目、双目、RGB-D、鱼眼相机以及IMU等多个传感器
缺点:
(1)SLAM系统中的特征提取和匹配依然会占用很多时间,影响实时性
(2)没有提供稠密地图构建的接口,稀疏点云只能用于定位。
(3)还不能很好的处理SLAM过程中出现的动态移动物体。

45、KF、EKF、ESKF介绍

已知k-1时刻的均值和方差,需要根据k时刻的输入和观测值,确定x时刻的后验分布(即均值与方差)

  • 根据k-1时刻的均值和方差估计k时刻的状态分布
  • 计算卡尔曼增益
  • 通过卡尔曼增益更新变量在k时刻的状态分布,即均值和方差

扩展卡尔曼滤波则是将SLAM非线性系统进行一阶泰勒展开,将系统线性化处理,然后再使用卡尔曼滤波进行处理

卡尔曼滤波相关参数概念和调整思路

下图为卡尔曼滤波的预测和更新过程:

视觉SLAM面试问题和学习资料整理

主要进行调整的参数为:

  • 初始状态以及先验的协方差(矩阵):x_0,p_0;
  • 测量噪声的协方差(矩阵):R
  • 过程噪声的协方差(矩阵):Q

好的初值可以加速收敛,如果初值比较准确可以适当减小R值,认为基于过程模型的更新比较可信。

Q一般取0或者一个很小的值,因为表明过程变化就是符合这个线性方程的,只是有很小的噪声扰动,设置太大,过程方程就利用不上了。

R值表示测量噪声的协方差:R值太大认为较为相信过程模型,但是如果给定的初值与真值差别较大时,状态估计会出现比较大的偏移;R值如果过小,估计值会跟随测量值进行波动。

误差卡尔曼滤波ESKF
在VIO算法中比较常见,基于状态方程可以得到两个相邻时刻的相对状态,基于运动方程(IMU预积分)也可以得到两个相邻时刻的预积分状态,误差卡尔曼滤波思想是将这两种方式得到的相对状态做减法,并令其最小化

  • 在旋转的处理上,ESKF的状态变量可以采用最小化的参数表达,也就是使用三维变量来表达旋转的增量。而传统KF需要用到四元数(4维)或者更高维的表达(旋转矩阵,9维),要不就得采用带有奇异性的表达方式(欧拉角)。
  • ESKF总是在原点附近,离奇异点较远,并且也不会由于离工作点太远而导致线性化近似不够的问题。
  • ESKF的状态量为小量,其二阶变量相对来说可以忽略。同时大多数雅可比矩阵在小量情况下变得非常简单,甚至可以用单位阵代替。
  • 误差状态的运动学也相比原状态变量要来得更小,因为我们可以把大量更新部分放到原状态变量中。

; 46、ICP算法基本原理

ICP最初用于点云的配准,在知道初始变换关系的前提下,进一步优化两幅点云之间的旋转和变换关系。

ICP通过初始的旋转和平移变换初始估计,在目标点云寻找欧式距离最近的点作为匹配点,然后建立关于所有点云欧式距离之和的目标优化函数,然后通过最小二乘求解最优的R和T,在每一次迭代之后对应点之间的匹配关系会有所改变,然后重新计算对应点之间的欧氏距离优化旋转和平移矩阵。

47、ORB-SLAM3相比于ORB-SLAM2做了哪些改进

1、新增支持IMU和鱼眼镜头模型
2、使用基于紧耦合的VIO系统,精度相比ORBSLAM2提高了2-5倍
3、根据新的重定位模块可以构建多地图系统,在跟踪失败时保留当前所有的地图信息作为子地图存在,以便于支持后期回环检测和全局BA优化
(详细可以看下深蓝学院官网刘国庆大佬的ORB-SLAM3免费公开课)

48、SLAM的优化方向

(1)多传感器融合
纯视觉SLAM系统对低纹理环境无法获得鲁棒的跟踪效果,而且视觉VO随着SLAM的进行会出现累计误差,激光传感器和IMU可以弥补视觉VO在白墙这种低纹理场景下跟踪效果,而视觉VO则可以纠正IMU出现的漂移问题,从而减少后端优化的压力,实现SLAM在低端硬件上取得比较好的效果。

(2)特征融合
特征点只是整幅图像中的极少数元素,除此之外环境中还存在着大量的线特征、平面特征,他们都具有良好的旋转不变性,这些特征都可以被用来作为观测的路标,从而增加SLAM在运动估计和后端优化时的约束关系,提高定位和建图的精度。

(3)与深度学习融合
可以在前端与SLAM系统中的某些模块进行融合和替换,比如特征提取和匹配,可以在前期根据特征点、线段和平面的灰度变化特征进行训练,以替换传统的特征提取匹配方法;另外一个方向就是语义SLAM,可以结合语义和分割算法,帮助SLAM实现在物体级别的检测,进行一些位置识别、重定位和回环检测方面的优化

(4)多机器人协同建图定位
对于大场景环境,把所有的前端和后端工作都放在一台机器上需要很高的硬件支持才能达到比较好的实时性,通过多个机器人同时进行SLAM过程,然后根据机器人之间的相对位置、位置识别实现地图的融合

49、什么是BA,BA的基本原理

在SLAM中,BA问题就是一个求解关于相机位姿和路标点的最小二乘问题。

根据相机的投影模型建立关于相机投影的代价函数,然后通过非线性优化求解优化相机的位姿和路标点信息。

50、什么是BA的稀疏性

在使用非线性优化方法进行BA优化相机位姿和路标点信息时,都会涉及到求解增量方程和海塞矩阵的计算。

因为需要对对相机位姿和很多的路标点进行优化,导致增量方程和海塞矩阵的维度很大,会带来很高的计算复杂度。但是在SLAM问题中,海塞矩阵的结构具有一定的规律性和稀疏性。在使用误差对相机位姿和路标点求偏导时, 雅各比矩阵除了关于该相机位姿和某个对应的路标点之外,其余的偏导数均为0,所以尽管需要优化的变量的维度很高,但是存在了很多偏导数为0的模块。

当通过雅各比矩阵计算得到海塞矩阵时,同样存在了这种稀疏性。H矩阵主要由4个部分组成,左上角非常小而右下角占据了很大的空间,因为相机位姿优化变量远远少于路标点的数量。其余位置为相机的观测数据,海塞矩阵的这种结构被称为镐型矩阵。
对于这种结构的稀疏矩阵,可以通过 消元法加速求解。

51、消元法求解稀疏海塞稀疏矩阵

海塞矩阵是一个比较有规律性的矩阵,他的左上角和右下角分别可以看做是对角矩阵, 消元法的核心思想就是讲海塞矩阵划分成矩阵块的形式,先对对角线矩阵块分别进行求逆,然后在求解关于相机位姿和路标点的增量。

52、BA问题中的鲁邦核函数

鲁邦核函数主要是解决误匹配带来的比较大的误差对整体梯度下降带来的影响。

因为在BA问题中,通过最小化误差的二范数平方和作为目标函数求解相机位姿和路标点,所以当出现误匹配时,误差的增长速度就会很快,通过引入鲁邦核函数就是为了削弱误匹配误差带来的影响。最常用的是huber核函数

视觉SLAM面试问题和学习资料整理
除了huber核函数之外还有Cauchy核、Geman-MeClure核
视觉SLAM面试问题和学习资料整理

; 53、如何对匹配好的点进一步处理,得到更好的匹配效果

  • 确定匹配最大距离,汉明距离小于最小距离的两倍
  • 使用KNN-matching算法,令K=2。则每个match得到两个最接近的descriptor,然后计算最接近距离和次接近距离之间的比值,当比值大于既定值时,才作为最终match。
  • RANSAC(使用RANSAC找到最佳单应性矩阵。由于这个函数使用的特征点同时包含正确和错误匹配点,因此计算的单应性矩阵依赖于二次投影的准确性)

54、关键帧的选取指标

  • 跟踪质量(主要根据跟踪过程中搜索到的点数和搜索的点数比例)/共视特征点
  • 距离最近关键帧的距离是否足够远(空间)/运动
  • 距离上一关键帧的帧数是否足够多(时间)

ORB-SLAM2关键帧选取条件:

  • 距离上一次全局重定位后需要超过20帧图像。
  • 局部地图构建处于空闲状态,或距上一个关键帧插入后,已经有超过20帧图像。
  • 当前帧跟踪少于50个地图云点。
  • 当前帧跟踪少于参考关键帧K_ref云点的90%。

55、为什么要引入李群李代数

旋转矩阵自身是带有约束的,正交且行列式为1,他们作为优化变量时,会引入额外的约束,时优化变的困难,通过李群李代数的转换关系, 把位姿估计变成无约束的优化问题

56、简述一下DOG-LEG算法

Dog-Leg算法是一种高斯牛顿法和最速下降法混合使用的方法,LM法也是这样一种方法,这两者不同的是,LM法采用的是使用一个阻尼项λ来控制下降的速度在一个合理的半径内,如果λ较小的话说明二阶近似较好,方法更加接近于高斯牛顿法,如果λ较大的话说明二阶近似较差,方法更加接近最速下降法

而Dog-Leg是先计算高斯牛顿法和最速下降法的结果,然后根据两者结果以及信赖区域半径来确定最后迭代采用那个结果。

57、ORB-SLAM2中的双目立体匹配

(参考ORB-SLAM2的代码)
(1)为左目每个特征点建立带状区域搜索表,限定搜索区域。(已提前极线校正)

  • 匹配搜索的时候,不仅仅是在一条横线上搜索,而是在一条横向搜索带上搜索,简而言之,原本每个特征点的纵坐标为1,这里把特征点体积放大,纵坐标占好几行
  • 例如左目图像某个特征点的纵坐标为20,那么在右侧图像上搜索时是在纵坐标为18到22这条带上搜索,搜索带宽度为正负2,搜索带的宽度和特征点所在金字塔层数有关
  • 简单来说,如果纵坐标是20,特征点在图像第20行,那么认为18 19 20 21 22行都有这个特征点

(2)通过描述子进行特征点匹配,得到每个特征点最佳匹配点scaleduR0

  • 只在第一步创建的带状区域内进行搜索
  • 计算匹配搜索的纵向宽度,尺度越大(层数越高,距离越近),搜索范围越大
  • 如果特征点在金字塔第一层,则搜索范围为:正负2
  • 尺度越大其位置不确定性越高,所以其搜索半径越大
    (3)通过SAD滑窗得到匹配修正量bestincR
  • 先根据描述子距离最短进行左右目之间的粗匹配
  • 再通过SAD滑窗计算匹配修正量bestincR;在使用SAD滑窗时对所有SAD的值进行排序, 计算使得SAD最小匹配偏差对应的修正量
    (4)(bestincR,dist) (bestincR-1,dist) (bestincR+1,dist)三个点拟合出抛物线,做抛物线拟合找抛物线谷底得到亚像素修正量deltaR
    (5)基于此修正量计算视差判断是否在范围内,如果在最终匹配点位置为:scaleduR0 + bestincR + deltaR
    *(6)根据左右匹配点对计算深度信息

58、双目立体视觉匹配中的SAD滑窗算法

(1)算法原理
SAD(Sum of absolute differences)是一种图像匹配算法。基本思想:差的绝对值之和。此算法常用于图像块匹配,将每个像素对应数值之差的绝对值求和,据此评估两个图像块的相似度。该算法快速、但并不精确,通常用于多级处理的初步筛选。

(2)算法基本流程

  • 构造一个小窗口,类似于卷积核;
  • 用窗口覆盖左边的图像,选择出窗口覆盖区域内的所有像素点;
  • 同样用窗口覆盖右边的图像并选择出覆盖区域的像素点;
  • 左边覆盖区域减去右边覆盖区域,并求出所有像素点灰度差的绝对值之和;
  • 移动右边图像的窗口,重复(3)-(4)的处理(这里有个搜索范围,超过这个范围跳出);
  • 找到这个范围内SAD值最小的窗口,即找到了左图锚点的最佳匹配的像素块。
    视觉SLAM面试问题和学习资料整理
    *参考链接:https://blog.csdn.net/u012507022/article/details/51446891

; 59、ORB-SLAM算法中Mappoint描述符计算

先获得当前点的所有描述子,然后计算描述子之间的两两距离,最好的描述子与其他描述子应该具有最小的距离中值

  • 计算当前描述子到其他描述子之间的距离
  • 计算这些距离的中值
  • 循环遍历所有描述子,选择最小中值对应的描述子作为Mappoint的描述子

60、ORB-SLAM论文翻译、代码架构讲解资源

论文翻译和视频资源主要来源于 泡泡机器人
(1)论文翻译链接
ORB-SLAM(泡泡的网页找不到了,这个大佬参考的泡泡的翻译): https://blog.csdn.net/qq_38373843/article/details/90755887
ORB-SLAM2: https://www.sohu.com/a/154011668_715754
(2)ORB-SLAM2代码讲解
代码讲解主要参考了泡泡视频公开课里吴博大佬的讲解视频,当然视频专栏还有其他大佬的分享,公开课资源链接如下
泡泡官方主页:
https://mp.weixin.qq.com/s/zxr00q7wDbwqdsdT6R7MOQ
自己之前整合的百度云链接:
链接:https://pan.baidu.com/s/1MwrsFsDoo-sODSJKs3yWMA
提取码:5327

Original: https://blog.csdn.net/guanjing_dream/article/details/123787056
Author: 超爱吃小蛋糕的66
Title: 视觉SLAM面试问题和学习资料整理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/518822/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球