文章目录
- 0 引言
- 1 单目、双目、深度相机和RGBD相机的区别
- 2 特征点法与直接法的优缺点
- 3 等距变换、相似变换、仿射变换、射影变换的区别
- 4 单应矩阵、本质矩阵和基础矩阵的区别
- 5 Slam中为什么用李群李代数
- 6 解释Slam中的绑架问题
- 7 ORB、SIFT和SURF特征点检测算法的区别
- 8 什么是对极极线约束
- 9 常用的边缘检测算子和优缺点
- 10 描述RANSAC算法
- 11 描述PnP算法
- 12 描述BA算法
- 13 EKF和BA的区别
- 14 描述Slam中的ICP算法
- 15 简述Slam中的紧耦合和松耦合及优缺点
- 16 单目视觉slam中尺寸漂移是怎么产生的
- 17 推导一下卡尔曼滤波
- 18 描述下粒子滤波
- 19 介绍下熟悉的非线性优化库
- 20 描述梯度下降法、牛顿法、高斯-牛顿法和LM法
- 21 如何解决Slam环境中动态对象的问题(如过往的行人)
- 22 深度学习和Slam的结合点
- 23 描述下评估工具rpg_trajectory_evaluation和evo
- 24 描述图优化
- 25 ORBSLAM中如何使用g2o进行优化?
- 26 详细讲述一下vins中预计分的推导过程
- Reference
0 引言
本文主要记录视觉Slam相关的面试题。
1 单目、双目、深度相机和RGBD相机的区别
单目相机:
- 优点:单目相机是成本低、易于使用和部署的选择。由于只有一个摄像头,硬件要求和计算资源要求也较低。
- 缺点:单目相机只能提供二维图像信息,无法直接获取深度信息。因此,需要使用其他传感器或计算方法来估计场景的深度。这可能导致深度估计的不准确性和不稳定性。
双目相机:
- 优点:双目相机能够提供深度信息,通过计算两个摄像头之间的视差,可以估计场景中物体的距离。相比于单目相机,双目相机提供了更多的几何信息,可以提高深度估计的准确性和稳定性。
- 缺点:双目相机的硬件配置较为复杂,需要进行标定和同步,以确保两个摄像头的准确对齐。
深度相机:
- 优点:深度相机通过测量光的时间飞行(
Time-of-Flight
)或其他深度感知技术,直接提供场景的深度信息。 - 缺点:相对于单目和双目相机,深度相机通常价格较高。此外,深度相机的分辨率和测量范围也会受到限制。
RGBD
相机:
- 优点:
RGBD
相机是一种结合RGB
图像和深度图像的传感器。提供了同时获得彩色图像和深度信息的能力。 - 缺点:
RGBD
相机相对于其他相机类型来说,价格也较高。此外,深度图像的质量可能会受到光照和纹理等因素的影响。
2 特征点法与直接法的优缺点
特征点法:
优点:
- 易于实现,特征点法具有明确的流程,包括特征提取、特征匹配和运动估计等步骤;
- 鲁棒性好,对于光照变化、遮挡和视角变化相对较为鲁棒,能够处理复杂的场景。且运动过大时,只要匹配点在像素内,则不太会引起误匹配。
缺点:
- 关键点提取、描述子、匹配耗时长;
- 特征点丢失场景无法使用;
- 一般只能构建稀疏地图。
直接法:
tips: 直接法利用光度一致性约束(强假设)来进行像素匹配。光度一致性约束假设在相机运动过程中,同一物体的像素亮度保持不变。
优点:
- 速度快,省去计算特征点、描述子时间;
- 可以用在特征缺失的场合(白墙等);
- 可以构建半稠密乃至稠密地图。
缺点:
- 因为假设了灰度不变,易受光照和模糊影响;
- 运动必须微小,要求相机运动较慢或采样频率较高(可以用图像金字塔改善)。
3 等距变换、相似变换、仿射变换、射影变换的区别
等距变换(Isometric Transformation
)是一种保持物体之间距离和角度不变的几何变换。在等距变换中,平移、旋转和镜像是常见的操作。等距变换可以保持物体的形状和大小不变。
相似变换(Similarity Transformation
)是一种保持物体之间距离比例和角度不变的几何变换。相似变换包括平移、旋转和缩放操作。与等距变换不同的是,相似变换可以改变物体的大小,但保持其形状和轮廓不变。
仿射变换(Affine Transformation
)是一种保持物体之间的平行性、直线性和比例性不变的几何变换。仿射变换包括平移、旋转、缩放和剪切操作。它可以对物体进行平行四边形的变形,但不能改变物体的形状和轮廓。
射影变换(Projective Transformation
),也称为透视变换,是一种保持直线的直线性不变的几何变换。射影变换包括平移、旋转、缩放、剪切和投影操作。它可以对物体进行更加复杂的形变,包括将平面上的任意四边形映射到另一个平面上。
4 单应矩阵、本质矩阵和基础矩阵的区别
单应矩阵(Homography Matrix
)是用于描述平面到平面投影变换的矩阵。它是一个3×3
的矩阵,表示了一个平面上的点在另一个平面上的投影位置。单应矩阵可以用于图像校正、图像拼接和虚拟现实等应用中。
本质矩阵(Essential Matrix
)是用于描述两个相机之间的几何关系的矩阵。它是一个3×3
的矩阵,可以通过相机的内参矩阵和相机位姿之间的关系来计算。本质矩阵具有两个重要的性质:它是奇异矩阵(行列式为0
),并且在尺度不确定的情况下唯一确定。
基础矩阵(Fundamental Matrix
)是描述两个摄像机之间的几何关系的矩阵。它是一个3×3
的矩阵,在计算机视觉中用于描述两个视图之间的对应关系。基础矩阵可以通过对应点的坐标来计算,它满足对应点的几何约束关系。
单应矩阵和本质矩阵:当相机之间没有旋转时,单应矩阵可以表示投影关系,本质矩阵为零矩阵;当相机之间存在旋转时,本质矩阵描述几何关系,可以通过分解得到旋转矩阵和平移向量。
基础矩阵和本质矩阵:基础矩阵可以通过本质矩阵和相机内参矩阵计算得到。
5 Slam中为什么用李群李代数
旋转矩阵自身是带有约束的,正交且行列式为1
,他们作为优化变量时,会引入额外的约束,时优化变的困难,通过李群李代数的转换关系,把位姿估计变成无约束的优化问题。
6 解释Slam中的绑架问题
绑架问题是指当机器人在运行过程中被移动到一个完全未知的位置,而无法察觉到自身的位置变化。这种情况可能会导致Slam系统出现严重的错误,因为机器人的定位和地图都建立在错误的假设下,比如以下情况可能会发生绑架问题:
-
恶意干扰:有人故意将机器人移动到一个新位置,以破坏Slam系统的性能或误导机器人的行为。
-
意外移动:机器人可能在运行过程中由于外部干扰、碰撞或其他原因被意外移动到一个新位置。
-
传感器故障:传感器故障可能导致机器人无法正确感知自身的位置变化,例如定位或视觉传感器的错误测量。
7 ORB、SIFT和SURF特征点检测算法的区别
算法 | SIFT | SURF | ORB |
---|---|---|---|
原理 | SIFT 算法通过在不同尺度空间和旋转角度上检测图像中的关键点,并计算每个关键点的局部特征描述子 | SURF 算法也是基于尺度空间的特征提取方法,使用了积分图像的数据结构来加速计算,并检测图像中的兴趣点,并计算每个兴趣点的局部特征描述子 | ORB 算法结合了FAST 关键点检测器和BRIEF 描述子。FAST 用于检测关键点,BRIEF 用于计算关键点的二进制描述子 |
特征描述子 | SIFT 算法生成128 维的局部特征描述子 | SURF 算法生成64 维的局部特征描述子 | ORB 算法生成二进制 的局部特征描述子 |
计算效率 | SIFT 算法计算效率较低,尤其在计算特征描述子时需要进行大量的高斯模糊和梯度计算操作 | SURF 算法相对于SIFT 算法来说计算效率较高,主要得益于使用积分图像结构来加速计算 | ORB 算法具有较高的计算效率,主要因为FAST 关键点检测器和BRIEF 描述子都是基于快速计算的算法 |
尺度不变性 | SIFT 算法对于尺度变化具有较好的不变性 | SURF 算法也具有一定的尺度不变性 | ORB 算法在尺度变化较大的情况下可能不太稳定 |
旋转不变性 | SIFT 算法具有很好的旋转不变性 | SURF 算法也具有一定的旋转不变性 | ORB 算法在旋转角度较大的情况下可能不太稳定 |
鲁棒性 | SIFT 算法在处理光照变化、噪声等情况下具有较好的鲁棒性 | SURF 算法对于光照变化和噪声有一定的鲁棒性 | ORB 算法在光照变化和噪声较小的情况下表现较好 |
👉 详细参考:详解SIFT、SURF和ORB特征点检测和描述算法
8 什么是对极极线约束
对极几何是研究两个摄像机之间的关系的几何学理论。它描述了两个视图之间的对应关系,以及在一幅图像中观察到的特征点与另一幅图像中可能的对应点之间的关系。对极几何的关键概念是极线和极点。极线是通过一个摄像机中的点与另一个摄像机的光心之间的直线,而极点是表示极线在另一个视图上的交点。对极几何提供了一种几何约束,用于估计相机之间的相对位置和姿态。
👉 详细参考:2D-2D对极几何中的基本矩阵、本质矩阵和单应矩阵
9 常用的边缘检测算子和优缺点
边缘检测一般分为三步,分别是滤波、增强、检测。基本原理都是用高斯滤波器进行去噪,之后在用卷积内核寻找像素梯度。常用有三种算法:canny
算子,sobel
算子,laplacian
算子
-
canny
算子:一种完善的边缘检测算法,抗噪能力强,用高斯滤波平滑图像,用一阶偏导的有限差分计算梯度的幅值和方向,对梯度幅值进行非极大值抑制,采用双阈值检测和连接边缘。 -
sobel
算子:一阶导数算子,引入局部平均运算,对噪声具有平滑作用,抗噪声能力强,计算量较大,但定位精度不高,得到的边缘比较粗,适用于精度要求不高的场合。 -
laplacian
算子:二阶微分算子,具有旋转不变性,容易受噪声影响,不能检测边缘的方向,一般不直接用于检测边缘,而是判断明暗变化。
10 描述RANSAC算法
RANSAC
(Random Sample Consensus
)算法是一种用于估计模型参数的鲁棒性算法。主要目标是从包含噪声和误匹配数据的数据集中,识别出符合模型假设的内点,并通过这些内点来估计模型的参数。RANSAC
算法的基本步骤如下:
-
随机采样:从数据集中随机选择一小部分数据点作为样本,这些数据点被称为随机样本或内点集。
-
模型拟合:使用随机样本来拟合一个模型,该模型可以是任何适用于问题的模型,例如直线、平面、圆等。根据选定的模型,估计模型的参数。
-
内点选择:对于剩余的数据点,计算它们与估计模型的拟合误差,并根据设定的阈值,将其分为内点(符合模型假设)和外点(不符合模型假设)。内点的选择通常是使用距离度量(如点到模型的距离)进行判断。
-
判断条件:计算内点的数量,如果内点数量超过预设的阈值或达到指定的迭代次数,则认为当前模型足够好,并进入下一步。否则,返回
步骤1
,重新随机选择样本。 -
参数估计:使用所有内点重新估计模型的参数,可以使用最小二乘法或其他适当的方法。
-
模型验证:对估计的模型进行验证,通常是通过计算所有数据点与模型之间的拟合误差来评估模型的质量。如果模型满足预定义的准确性标准,则算法终止;否则,返回
步骤1
,重新进行采样和拟合。
11 描述PnP算法
PnP
算法(Perspective-n-Point
)是一种用于求解相机位姿的计算机视觉算法。通过已知的3D
点和对应的2D
图像点来估计相机的旋转和平移。PnP
算法的基本原理如下:
-
输入数据:
PnP
算法的输入包括一组已知的3D
点和它们在图像中的对应2D
点。这些3D
点通常是在世界坐标系下表示的,而2D
点则是通过相机投影得到的。 -
假设模型:
PnP
算法基于一个假设模型,即相机的内参矩阵已知。内参矩阵包括相机的焦距、主点坐标和畸变参数等信息。 -
求解过程:
PnP
算法的目标是估计相机的旋转矩阵和平移向量,将3D
点映射到2D
图像上以与对应的2D
点匹配。具体求解过程通常分为以下几个步骤:
-
a. 特征匹配:根据输入的
2D
点和3D
点,进行特征匹配,找到2D
点与对应3D
点的匹配关系。 -
b. 姿态估计:使用
RANSAC
(Random Sample Consensus
)或其他方法从匹配的特征对中选择一组内点,用于估计相机的旋转矩阵和平移向量。RANSAC
算法可以排除噪声和误匹配的特征对,提高求解的准确性。 -
c. 优化:在姿态估计的基础上,可以使用迭代最小化重投影误差的方法进一步优化相机的位姿。该过程通过最小化
3D
点在图像平面上的投影点与对应的2D
点之间的误差来调整相机的旋转和平移。
- 输出结果:
PnP
算法最终输出相机的旋转矩阵和平移向量,表示相机在世界坐标系下的位姿。
12 描述BA算法
BA
算法(Bundle Adjustment
)是一种用于优化相机姿态和三维点坐标的计算机视觉算法。通过最小化重投影误差,同时优化相机位姿和场景中的三维点,以提高相机姿态和场景的准确性。BA
算法的基本原理如下:
-
输入数据:
BA
算法的输入包括一组已知的相机位姿和对应的2D
图像点,以及与这些2D
点对应的3D
场景点。这些相机位姿和3D
点可以通过PnP
算法、三角化等方法获得。 -
重投影误差:
BA
算法的目标是最小化重投影误差,即将优化后的相机位姿和3D
点重新投影到图像平面上,与对应的2D
点之间的误差。重投影误差是衡量相机姿态和3D
点估计准确性的指标。 -
优化过程:
BA
算法通过迭代优化的方式,不断调整相机位姿和3D
点的估计值,以最小化重投影误差。优化过程中,通常采用非线性优化方法,例如高斯牛顿法或Levenberg-Marquardt
算法。 -
目标函数:
BA
算法的目标函数是重投影误差的平方和,加上一些正则化项(如相机和3D
点的先验信息),用于控制优化的平滑性和稳定性。目标函数的最小化可以通过迭代优化算法来实现。 -
优化器选择:在实际应用中,可以使用不同的优化器来求解
BA
问题。常见的选择包括使用开源库(如Ceres Solver
、g2o
等)或自行实现优化器。优化器的选择取决于问题规模、计算效率和实现难度等因素。 -
输出结果:
BA
算法最终输出优化后的相机位姿和3D
点坐标,这些估计值可以更准确地描述相机的姿态和场景的几何结构。
13 EKF和BA的区别
-
EKF
假设了马尔科夫性,认为k
时刻的状态只与k-1
时刻有关。非线性优化使用所有的历史数据,做全体的Slam
; -
EKF
做了线性化处理,在工作点处用一阶泰勒展开式近似整个函数,但在工作点较远处不一定成立。非线性优化每迭代一次,状态估计发生改变,会重新对新的估计点做泰勒展开。
tips: 可以把EKF
看做只有一次迭代的BA
。
14 描述Slam中的ICP算法
ICP
算法的基本思想是通过迭代的方式,不断优化两个点云之间的刚体变换(旋转和平移),使得它们在空间中更加接近。算法的核心是最小化两个点云之间的距离度量,常用的度量方式是欧氏距离。
下面是ICP
算法的基本步骤:
- 初始化:假设有两个点云,分别为目标点云(
Target Point Cloud
)和源点云(Source Point Cloud
)。初始时,可以使用一些启发式方法(例如最近点搜索)来初始化刚体变换的估计。 - 点云匹配:对于源点云中的每个点,通过最近邻搜索(
Nearest Neighbor Search
)在目标点云中找到对应的最近邻点。这里可以使用**kd
树**等数据结构来加速搜索过程。 - 离群点剔除:通过设定一个阈值,将源点云和目标点云中距离较远的点剔除,以减少离群点对匹配结果的影响。
- 刚体变换估计:使用匹配对应的点对,计算源点云到目标点云的刚体变换(旋转和平移)。最常用的方法是最小二乘法(
Least Squares
)。 - 优化迭代:根据估计的刚体变换,将源点云变换到目标点云坐标系下,并重复
步骤2-4
,直到满足停止条件(例如达到最大迭代次数或刚体变换的变化小于阈值)。 - 输出结果:最终得到两个点云之间的最佳刚体变换,可以用于建图和定位任务。
15 简述Slam中的紧耦合和松耦合及优缺点
- 紧耦合(
Tight Coupling
):- 紧耦合
Slam
系统是指传感器和估计器之间具有密切的依赖关系,传感器数据直接用于估计器的状态估计。 - 优点:
- 可以充分利用传感器的数据,提供较精确的状态估计。
- 可以实现较高的精度和鲁棒性。
- 缺点:
- 对传感器数据的质量和准确性要求较高。
- 系统的设计和实现相对复杂。
- 对传感器的选择和配置有一定限制。
- 紧耦合
- 松耦合(
Loose Coupling
):- 松耦合
Slam
系统是指传感器和估计器之间的依赖关系较弱,传感器数据经过预处理后,以较高级别的特征或信息形式提供给估计器。 - 优点:
- 对传感器数据的要求较低,可以容忍一定程度的噪声和不准确性。
- 系统的设计和实现相对简单。
- 可以更加灵活地选择和集成不同类型的传感器。
- 缺点:
- 由于信息传递的抽象程度较高,可能会丢失一些细节和精确度。
- 需要合适的特征提取和数据关联技术来处理传感器数据。
- 松耦合
16 单目视觉slam中尺寸漂移是怎么产生的
单目相机根据一张图片无法得出一张图片中物体的实际大小,同理也就无法得出运动的尺度大小,这是产生尺度漂移的根源。而在优化过程中,单目相机使用对极几何中的三角测量原理,而三角测量中,极小的角度误差在累积之后深度不确定都会变得很大,从而无法保证尺度一致性。
17 推导一下卡尔曼滤波
假设有一个线性动态系统的状态方程如下:
x
k
=
A
∗
x
k
−
1
+
B
∗
u
k
−
1
+
w
k
−
1
x_k = A * x_{k-1} + B * u_{k-1} + w_{k-1}
xk=A∗xk−1+B∗uk−1+wk−1
其中,
x
k
x_k
xk表示系统在时刻
k
k
k的状态,
A
A
A是状态转移矩阵,
x
k
−
1
x_{k-1}
xk−1是系统在时刻
k
−
1
k-1
k−1的状态,
B
B
B是输入控制矩阵,
u
k
−
1
u_{k-1}
uk−1是输入控制向量,
w
k
−
1
w_{k-1}
wk−1是过程噪声,表示系统模型中的不确定性。
另外,还有一个观测方程如下:
z
k
=
H
∗
x
k
+
v
k
z_k= H * x_k+ v_k
zk=H∗xk+vk
其中,
z
k
z_k
zk是在时刻
k
k
k的观测值,
H
H
H是观测矩阵,
v
k
v_k
vk是观测噪声,表示观测过程中的不确定性。
现在的目标是通过观测值来估计系统的状态。卡尔曼滤波通过将观测值和系统模型进行融合,得到对系统状态的最优估计。
首先,定义系统状态的先验估计为 x _ h a t k − 1 x\_hat_{k-1} x_hatk−1,表示在时刻 k − 1 k-1 k−1时对系统状态的估计。还定义系统状态的协方差矩阵为 P k − 1 P_{k-1} Pk−1,表示对系统状态估计的不确定性。
卡尔曼滤波的两个基本步骤如下:
-
预测步骤(时间更新):
在预测步骤中,根据系统模型来预测系统在时刻 k k k的状态和状态协方差矩阵。
先验估计: x _ h a t _ m i n u s k = A ∗ x _ h a t k − 1 + B ∗ u k − 1 x\_hat\_minus_k = A * x\_hat_{k-1} + B * u_{k-1} x_hat_minusk=A∗x_hatk−1+B∗uk−1
先验协方差: P _ m i n u s k = A ∗ P k − 1 ∗ A T + Q P\_minus_k = A * P_{k-1} * A^T + Q P_minusk=A∗Pk−1∗AT+Q
其中, Q Q Q表示过程噪声的协方差矩阵。 -
更新步骤(测量更新):
在更新步骤中,根据观测值来修正先验估计,得到对系统状态的最优估计。
创新(观测残差): y k = z k − H ∗ x _ h a t _ m i n u s k y_k = z_k- H * x\_hat\_minus_k yk=zk−H∗x_hat_minusk
创新协方差: S k = H ∗ P _ m i n u s k ∗ H T + R S_k = H * P\_minus_k * H^T + R Sk=H∗P_minusk∗HT+R
增益矩阵: K k = P _ m i n u s k ∗ H T ∗ S k ( − 1 ) K_k = P\_minus_k * H^T * S_k^(-1) Kk=P_minusk∗HT∗Sk(−1)
后验估计: x _ h a t k = x _ h a t _ m i n u s k + K k ∗ y k x\_hat_k = x\_hat\_minus_k + K_k * y_k x_hatk=x_hat_minusk+Kk∗yk
后验协方差: P k = ( I − K k ∗ H ) ∗ P _ m i n u s k P_k = (I - K_k * H) * P\_minus_k Pk=(I−Kk∗H)∗P_minusk
其中, R R R表示观测噪声的协方差矩阵, I I I是单位矩阵。
通过不断进行预测步骤和更新步骤,可以逐步逼近系统的真实状态,并获得对系统状态的优化估计。
18 描述下粒子滤波
粒子滤波(Particle Filtering
),也称为蒙特卡洛滤波(Monte Carlo Filtering
),是一种非参数滤波方法,用于估计系统的状态,尤其在非线性和非高斯噪声条件下表现良好。
粒子滤波通过使用一组随机粒子来表示状态空间,并通过加权采样和重采样来逼近后验状态分布。其基本思想是根据系统模型和观测数据,通过粒子的重采样和更新来逐步逼近目标分布。
粒子滤波的描述如下:
- 初始化:
a. 根据先验分布从状态空间中抽取一组初始粒子。
b. 对每个粒子进行权重初始化。 - 预测:
a. 对每个粒子,根据系统模型和控制输入进行预测,得到下一个时间步的粒子。
b. 根据系统噪声对预测的粒子进行扰动。 - 更新:
a. 对每个预测的粒子,根据观测模型和观测数据计算其权重。
b. 对权重进行归一化,使其总和为1
。
c. 根据权重对粒子进行重采样,从中选择新的粒子集合,使得高权重的粒子被选择的概率更高。 - 重复
步骤2和步骤3
,直到达到滤波的终止条件(例如达到一定数量的时间步或满足预设的误差要求)。
19 介绍下熟悉的非线性优化库
-
Ceres Solver
:Ceres Solver
是一个功能强大的开源c++
库,用于解决大规模的非线性最小二乘问题。它提供了丰富的优化算法和工具,适用于Slam
中的优化问题。Ceres Solver
支持自动求导和稀疏矩阵,可以处理大规模问题,并提供了Python
和其他语言的接口。 -
g2o
:g2o
是一个用于图优化的通用框架,主要用于Slam
和视觉里程计等问题。它提供了一组优化算法和数据结构,可以方便地构建和求解图优化问题。g2o
支持稀疏矩阵和自动求导,并提供了用于图可视化的工具。 -
ceres-solver-python
: 这是Ceres Solver
的Python
接口,提供了在Python
中使用Ceres Solver
进行非线性优化的功能。该接口可以方便地与其他Python
库(如NumPy
)集成,并简化了在Slam
应用中使用Ceres Solver
的过程。
20 描述梯度下降法、牛顿法、高斯-牛顿法和LM法
-
梯度下降法(
Gradient Descent
)是一种迭代的优化算法,通过沿着目标函数的负梯度方向进行参数更新,逐步接近最优解。梯度下降法的更新步骤简单,但可能会陷入局部最优解。它的收敛速度较慢,特别是在目标函数存在高度非凸性或长而窄的优化空间时。 -
牛顿法(
Newton's Method
)是一种基于目标函数的二阶导数信息的优化算法。它使用目标函数的梯度和海森矩阵(Hessian Matrix
)来更新参数。相较于梯度下降法,牛顿法的收敛速度更快,但计算和存储海森矩阵的代价较高,特别是对于大规模问题。此外,牛顿法可能会陷入局部最优解或不稳定的情况。 -
高斯-牛顿法(
Gauss-Newton
)是一种用于非线性最小二乘问题的优化算法。它是基于牛顿法的一种变体,但假设目标函数可以近似为一组非线性函数的平方和。高斯-牛顿法通过线性化目标函数来估计参数的更新方向,避免了计算和存储海森矩阵的开销。它在处理非线性最小二乘问题方面效果良好,但同样可能陷入局部最优解。 -
LM(
Levenberg-Marquardt
)也是一种用于非线性最小二乘问题的优化算法。它结合了梯度下降法和高斯-牛顿法的思想。LM
法在初始阶段使用梯度下降法进行参数更新,以快速接近最优解,然后逐渐过渡到高斯-牛顿法,以提高收敛速度和稳定性。LM
法通过引入一个调整参数来平衡梯度下降法和高斯-牛顿法之间的权衡关系,从而更好地适应不同的问题。
21 如何解决Slam环境中动态对象的问题(如过往的行人)
-
多传感器融合:结合多种传感器的信息,如激光雷达、摄像头、惯性测量单元(
IMU
)等,进行传感器融合。通过多传感器的互补性,可以提高对动态对象的感知和估计。 -
运动预测与滤波:根据动态对象的运动模式,通过运动预测来估计其未来位置。比如使用滤波器(如扩展卡尔曼滤波器或粒子滤波器)来跟踪动态对象,并预测它们在未来时间步的位置。
-
动态物体检测与跟踪:引入动态物体检测和跟踪算法,以识别并跟踪动态对象(如行人)。比如使用传感器(如激光雷达或摄像头)来观测并分割动态对象,然后使用目标跟踪算法来跟踪它们的运动。通过将动态对象的信息与Slam系统的数据进行分离,可以减少其对机器人位姿估计的干扰。
-
鲁棒性设计:通过引入回环检测机制和滑动窗口优化等方法,一定程度上减小动态对象对位姿估计的影响,使Slam算法更鲁棒。
22 深度学习和Slam的结合点
-
特征提取和描述子学习:深度学习可以用于学习鲁棒的特征提取方法和描述子,例如使用卷积神经网络(
CNN
)来提取图像特征。 -
深度学习辅助的视觉里程计:深度学习可以用于学习视觉里程计的模型,通过输入图像序列预测相机的运动,实现端到端的运动估计。
-
深度学习辅助的回环检测:深度学习可以用于学习图像的表示和相似性度量,从而改善回环检测的准确性和鲁棒性。
-
语义
Slam
:深度学习可以用于学习场景的语义信息,例如物体的类别、语义分割和实例分割等。将语义信息与Slam
结合可以提高环境建模、物体跟踪和场景理解的能力,例如在机器人导航和增强现实中应用。
tips: 至于不可避免的实时性问题,可参考硬件加速(GPU
)、模型压缩和优化、网络结构设计和多尺度处理等方法来缓解。
23 描述下评估工具rpg_trajectory_evaluation和evo
rpg_trajectory_evaluation
:
rpg_trajectory_evaluation
提供了一系列的评估指标和可视化功能,用于比较机器人轨迹与参考轨迹之间的差异。主要特点包括:
- 轨迹比较:可以计算轨迹之间的位置误差、旋转误差和尺度误差。
- 轨迹可视化:可以将轨迹以图形方式显示,并与参考轨迹进行对比。
- 统计分析:提供了一些统计指标,如平均误差、标准差和误差分布图。
- 轨迹插值:可以将轨迹进行插值,使其与参考轨迹具有相同的时间步长。
evo
(Evaluation for Autonomous Systems
):
evo
专注于轨迹评估和比较。它提供了一系列的评估指标和可视化工具,用于比较不同轨迹估计算法的性能。主要特点包括:
- 轨迹比较:可以计算位置误差、姿态误差、尺度误差和时间误差等。
- 轨迹可视化:提供了多种可视化方式,如轨迹图、误差图和误差分布图。
- 统计分析:提供了各种统计指标,如平均误差、中位数误差和误差百分比。
- 批量评估:支持同时评估多个轨迹文件,方便进行大规模的算法对比和评估。
24 描述图优化
图优化(Graph Optimization
)是用于估计系统状态或参数的最优解。通过构建一个图模型,将观测和约束以图的形式表示,并利用优化算法来找到最符合观测和约束的状态或参数。图优化的基本步骤如下:
- 图构建:根据具体问题的特点和需求,将观测和约束以因子图或稀疏图的形式构建出来。节点代表待优化的状态变量或参数,边代表观测或约束。
- 优化变量和边界条件:为图中的节点和边界条件设置初值,这些初值可以是来自传感器的初始测量值或其他先验信息。
- 优化迭代:通过迭代优化的方式,不断调整节点的值,使得整个图的代价函数最小化。常用的优化算法包括最小二乘法(
Least Squares
)、高斯-牛顿法(Gauss-Newton
)、Levenberg-Marquardt
算法等。 - 收敛判定:检查优化过程是否收敛,通常通过检查代价函数的变化或节点值的变化是否满足停止条件来判断。
- 输出结果:最终得到优化后的状态变量或参数,作为系统的最优解。
以下待更新
25 ORBSLAM中如何使用g2o进行优化?
26 详细讲述一下vins中预计分的推导过程
不定期更新…
Reference
- 2D-2D对极几何中的基本矩阵、本质矩阵和单应矩阵
- 详解SIFT、SURF和ORB特征点检测和描述算法
- https://github.com/MichaelGrupp/evo
- https://github.com/uzh-rpg/rpg_trajectory_evaluation
⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔