视觉Slam面试题(不定时更新)

news2024/11/20 10:47:19

文章目录

  • 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 特征点法与直接法的优缺点

特征点法

优点

  1. 易于实现,特征点法具有明确的流程,包括特征提取、特征匹配和运动估计等步骤;
  2. 鲁棒性好,对于光照变化、遮挡和视角变化相对较为鲁棒,能够处理复杂的场景。且运动过大时,只要匹配点在像素内,则不太会引起误匹配。

缺点

  1. 关键点提取、描述子、匹配耗时长;
  2. 特征点丢失场景无法使用;
  3. 一般只能构建稀疏地图。

直接法
tips: 直接法利用光度一致性约束(强假设)来进行像素匹配。光度一致性约束假设在相机运动过程中,同一物体的像素亮度保持不变。

优点

  1. 速度快,省去计算特征点、描述子时间;
  2. 可以用在特征缺失的场合(白墙等);
  3. 可以构建半稠密乃至稠密地图。

缺点

  1. 因为假设了灰度不变,易受光照和模糊影响;
  2. 运动必须微小,要求相机运动较慢或采样频率较高(可以用图像金字塔改善)。

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特征点检测算法的区别

算法SIFTSURFORB
原理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算法

RANSACRandom Sample Consensus)算法是一种用于估计模型参数的鲁棒性算法。主要目标是从包含噪声和误匹配数据的数据集中,识别出符合模型假设的内点,并通过这些内点来估计模型的参数RANSAC算法的基本步骤如下:

  1. 随机采样:从数据集中随机选择一小部分数据点作为样本,这些数据点被称为随机样本或内点集

  2. 模型拟合使用随机样本来拟合一个模型,该模型可以是任何适用于问题的模型,例如直线、平面、圆等。根据选定的模型,估计模型的参数。

  3. 内点选择:对于剩余的数据点,计算它们与估计模型的拟合误差,并根据设定的阈值,将其分为内点(符合模型假设)和外点(不符合模型假设)。内点的选择通常是使用距离度量(如点到模型的距离)进行判断

  4. 判断条件:计算内点的数量,如果内点数量超过预设的阈值或达到指定的迭代次数,则认为当前模型足够好,并进入下一步。否则,返回步骤1,重新随机选择样本。

  5. 参数估计使用所有内点重新估计模型的参数,可以使用最小二乘法或其他适当的方法。

  6. 模型验证:对估计的模型进行验证,通常是通过计算所有数据点与模型之间的拟合误差来评估模型的质量。如果模型满足预定义的准确性标准,则算法终止;否则,返回步骤1,重新进行采样和拟合。

11 描述PnP算法

PnP算法(Perspective-n-Point)是一种用于求解相机位姿的计算机视觉算法。通过已知的3D点和对应的2D图像点来估计相机的旋转和平移PnP算法的基本原理如下:

  1. 输入数据PnP算法的输入包括一组已知的3D点和它们在图像中的对应2D点。这些3D点通常是在世界坐标系下表示的,而2D点则是通过相机投影得到的。

  2. 假设模型PnP算法基于一个假设模型,即相机的内参矩阵已知。内参矩阵包括相机的焦距、主点坐标和畸变参数等信息。

  3. 求解过程PnP算法的目标是估计相机的旋转矩阵和平移向量,将3D点映射到2D图像上以与对应的2D点匹配。具体求解过程通常分为以下几个步骤:

  • a. 特征匹配:根据输入的2D点和3D点,进行特征匹配,找到2D点与对应3D点的匹配关系。

  • b. 姿态估计:使用RANSACRandom Sample Consensus)或其他方法从匹配的特征对中选择一组内点,用于估计相机的旋转矩阵和平移向量。RANSAC算法可以排除噪声和误匹配的特征对,提高求解的准确性

  • c. 优化:在姿态估计的基础上,可以使用迭代最小化重投影误差的方法进一步优化相机的位姿。该过程通过最小化3D点在图像平面上的投影点与对应的2D点之间的误差来调整相机的旋转和平移。

  1. 输出结果PnP算法最终输出相机的旋转矩阵和平移向量,表示相机在世界坐标系下的位姿。

12 描述BA算法

BA算法(Bundle Adjustment)是一种用于优化相机姿态和三维点坐标的计算机视觉算法。通过最小化重投影误差,同时优化相机位姿和场景中的三维点,以提高相机姿态和场景的准确性。BA算法的基本原理如下:

  1. 输入数据BA算法的输入包括一组已知的相机位姿和对应的2D图像点,以及与这些2D点对应的3D场景点。这些相机位姿和3D点可以通过PnP算法、三角化等方法获得。

  2. 重投影误差BA算法的目标是最小化重投影误差,即将优化后的相机位姿和3D点重新投影到图像平面上,与对应的2D点之间的误差。重投影误差是衡量相机姿态和3D点估计准确性的指标。

  3. 优化过程BA算法通过迭代优化的方式,不断调整相机位姿和3D点的估计值,以最小化重投影误差。优化过程中,通常采用非线性优化方法,例如高斯牛顿法Levenberg-Marquardt算法。

  4. 目标函数BA算法的目标函数是重投影误差的平方和,加上一些正则化项(如相机和3D点的先验信息),用于控制优化的平滑性和稳定性。目标函数的最小化可以通过迭代优化算法来实现。

  5. 优化器选择:在实际应用中,可以使用不同的优化器来求解BA问题。常见的选择包括使用开源库(如Ceres Solverg2o等)或自行实现优化器。优化器的选择取决于问题规模、计算效率和实现难度等因素。

  6. 输出结果BA算法最终输出优化后的相机位姿和3D点坐标,这些估计值可以更准确地描述相机的姿态和场景的几何结构。

13 EKF和BA的区别

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

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

tips: 可以把EKF看做只有一次迭代的BA

14 描述Slam中的ICP算法

ICP算法的基本思想是通过迭代的方式,不断优化两个点云之间的刚体变换(旋转和平移),使得它们在空间中更加接近。算法的核心是最小化两个点云之间的距离度量,常用的度量方式是欧氏距离。

下面是ICP算法的基本步骤:

  1. 初始化:假设有两个点云,分别为目标点云(Target Point Cloud)和源点云(Source Point Cloud)。初始时,可以使用一些启发式方法(例如最近点搜索)来初始化刚体变换的估计
  2. 点云匹配:对于源点云中的每个点,通过最近邻搜索Nearest Neighbor Search)在目标点云中找到对应的最近邻点。这里可以使用**kd树**等数据结构来加速搜索过程。
  3. 离群点剔除:通过设定一个阈值,将源点云和目标点云中距离较远的点剔除,以减少离群点对匹配结果的影响。
  4. 刚体变换估计:使用匹配对应的点对,计算源点云到目标点云的刚体变换(旋转和平移)。最常用的方法是最小二乘法Least Squares)。
  5. 优化迭代:根据估计的刚体变换,将源点云变换到目标点云坐标系下,并重复步骤2-4,直到满足停止条件(例如达到最大迭代次数或刚体变换的变化小于阈值)。
  6. 输出结果:最终得到两个点云之间的最佳刚体变换,可以用于建图和定位任务。

15 简述Slam中的紧耦合和松耦合及优缺点

  1. 紧耦合Tight Coupling):
    • 紧耦合Slam系统是指传感器和估计器之间具有密切的依赖关系,传感器数据直接用于估计器的状态估计。
    • 优点
      • 可以充分利用传感器的数据,提供较精确的状态估计。
      • 可以实现较高的精度和鲁棒性。
    • 缺点
      • 对传感器数据的质量和准确性要求较高。
      • 系统的设计和实现相对复杂。
      • 对传感器的选择和配置有一定限制。
  2. 松耦合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=Axk1+Buk1+wk1
其中, x k x_k xk表示系统在时刻 k k k的状态, A A A是状态转移矩阵, x k − 1 x_{k-1} xk1是系统在时刻 k − 1 k-1 k1的状态, B B B是输入控制矩阵, u k − 1 u_{k-1} uk1是输入控制向量, w k − 1 w_{k-1} wk1是过程噪声,表示系统模型中的不确定性。

另外,还有一个观测方程如下:
z k = H ∗ x k + v k z_k= H * x_k+ v_k zk=Hxk+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_hatk1,表示在时刻 k − 1 k-1 k1时对系统状态的估计。还定义系统状态的协方差矩阵为 P k − 1 P_{k-1} Pk1,表示对系统状态估计的不确定性。

卡尔曼滤波的两个基本步骤如下:

  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=Ax_hatk1+Buk1
    先验协方差: 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=APk1AT+Q
    其中, Q Q Q表示过程噪声的协方差矩阵。

  2. 更新步骤(测量更新)
    在更新步骤中,根据观测值来修正先验估计,得到对系统状态的最优估计。
    创新(观测残差): 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=zkHx_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=HP_minuskHT+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_minuskHTSk(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+Kkyk
    后验协方差: P k = ( I − K k ∗ H ) ∗ P _ m i n u s k P_k = (I - K_k * H) * P\_minus_k Pk=(IKkH)P_minusk
    其中, R R R表示观测噪声的协方差矩阵, I I I是单位矩阵。

通过不断进行预测步骤和更新步骤,可以逐步逼近系统的真实状态,并获得对系统状态的优化估计。

18 描述下粒子滤波

粒子滤波(Particle Filtering),也称为蒙特卡洛滤波Monte Carlo Filtering),是一种非参数滤波方法,用于估计系统的状态,尤其在非线性和非高斯噪声条件下表现良好

粒子滤波通过使用一组随机粒子来表示状态空间,并通过加权采样和重采样来逼近后验状态分布。其基本思想是根据系统模型和观测数据,通过粒子的重采样和更新来逐步逼近目标分布

粒子滤波的描述如下

  1. 初始化
    a. 根据先验分布从状态空间中抽取一组初始粒子。
    b. 对每个粒子进行权重初始化。
  2. 预测
    a. 对每个粒子,根据系统模型和控制输入进行预测,得到下一个时间步的粒子。
    b. 根据系统噪声对预测的粒子进行扰动。
  3. 更新
    a. 对每个预测的粒子,根据观测模型和观测数据计算其权重。
    b. 对权重进行归一化,使其总和为1
    c. 根据权重对粒子进行重采样,从中选择新的粒子集合,使得高权重的粒子被选择的概率更高。
  4. 重复步骤2和步骤3,直到达到滤波的终止条件(例如达到一定数量的时间步或满足预设的误差要求)。

19 介绍下熟悉的非线性优化库

  1. Ceres Solver: Ceres Solver是一个功能强大的开源c++库,用于解决大规模的非线性最小二乘问题。它提供了丰富的优化算法和工具,适用于Slam中的优化问题。Ceres Solver支持自动求导和稀疏矩阵,可以处理大规模问题,并提供了Python和其他语言的接口。

  2. g2o: g2o是一个用于图优化的通用框架,主要用于Slam和视觉里程计等问题。它提供了一组优化算法和数据结构,可以方便地构建和求解图优化问题。g2o支持稀疏矩阵和自动求导,并提供了用于图可视化的工具。

  3. ceres-solver-python: 这是Ceres SolverPython接口,提供了在Python中使用Ceres Solver进行非线性优化的功能。该接口可以方便地与其他Python库(如NumPy)集成,并简化了在Slam应用中使用Ceres Solver的过程。

20 描述梯度下降法、牛顿法、高斯-牛顿法和LM法

  1. 梯度下降法Gradient Descent)是一种迭代的优化算法,通过沿着目标函数的负梯度方向进行参数更新,逐步接近最优解。梯度下降法的更新步骤简单,但可能会陷入局部最优解。它的收敛速度较慢,特别是在目标函数存在高度非凸性或长而窄的优化空间时。

  2. 牛顿法Newton's Method)是一种基于目标函数的二阶导数信息的优化算法。它使用目标函数的梯度和海森矩阵(Hessian Matrix)来更新参数。相较于梯度下降法,牛顿法的收敛速度更快,但计算和存储海森矩阵的代价较高,特别是对于大规模问题。此外,牛顿法可能会陷入局部最优解或不稳定的情况。

  3. 高斯-牛顿法Gauss-Newton)是一种用于非线性最小二乘问题的优化算法。它是基于牛顿法的一种变体,但假设目标函数可以近似为一组非线性函数的平方和。高斯-牛顿法通过线性化目标函数来估计参数的更新方向,避免了计算和存储海森矩阵的开销。它在处理非线性最小二乘问题方面效果良好,但同样可能陷入局部最优解。

  4. LMLevenberg-Marquardt)也是一种用于非线性最小二乘问题的优化算法。它结合了梯度下降法和高斯-牛顿法的思想LM法在初始阶段使用梯度下降法进行参数更新,以快速接近最优解,然后逐渐过渡到高斯-牛顿法,以提高收敛速度和稳定性。LM法通过引入一个调整参数来平衡梯度下降法和高斯-牛顿法之间的权衡关系,从而更好地适应不同的问题。

21 如何解决Slam环境中动态对象的问题(如过往的行人)

  1. 多传感器融合:结合多种传感器的信息,如激光雷达、摄像头、惯性测量单元(IMU)等,进行传感器融合。通过多传感器的互补性,可以提高对动态对象的感知和估计。

  2. 运动预测与滤波:根据动态对象的运动模式,通过运动预测来估计其未来位置。比如使用滤波器(如扩展卡尔曼滤波器或粒子滤波器)来跟踪动态对象,并预测它们在未来时间步的位置。

  3. 动态物体检测与跟踪:引入动态物体检测和跟踪算法,以识别并跟踪动态对象(如行人)。比如使用传感器(如激光雷达或摄像头)来观测并分割动态对象,然后使用目标跟踪算法来跟踪它们的运动。通过将动态对象的信息与Slam系统的数据进行分离,可以减少其对机器人位姿估计的干扰。

  4. 鲁棒性设计:通过引入回环检测机制和滑动窗口优化等方法,一定程度上减小动态对象对位姿估计的影响,使Slam算法更鲁棒。

22 深度学习和Slam的结合点

  1. 特征提取和描述子学习:深度学习可以用于学习鲁棒的特征提取方法和描述子,例如使用卷积神经网络(CNN)来提取图像特征。

  2. 深度学习辅助的视觉里程计:深度学习可以用于学习视觉里程计的模型,通过输入图像序列预测相机的运动,实现端到端的运动估计。

  3. 深度学习辅助的回环检测:深度学习可以用于学习图像的表示和相似性度量,从而改善回环检测的准确性和鲁棒性。

  4. 语义Slam:深度学习可以用于学习场景的语义信息,例如物体的类别、语义分割和实例分割等。将语义信息与Slam结合可以提高环境建模、物体跟踪和场景理解的能力,例如在机器人导航和增强现实中应用。

tips: 至于不可避免的实时性问题,可参考硬件加速(GPU)、模型压缩和优化、网络结构设计和多尺度处理等方法来缓解。

23 描述下评估工具rpg_trajectory_evaluation和evo

  1. rpg_trajectory_evaluation
    rpg_trajectory_evaluation提供了一系列的评估指标和可视化功能,用于比较机器人轨迹与参考轨迹之间的差异。主要特点包括:
  • 轨迹比较:可以计算轨迹之间的位置误差、旋转误差和尺度误差。
  • 轨迹可视化:可以将轨迹以图形方式显示,并与参考轨迹进行对比。
  • 统计分析:提供了一些统计指标,如平均误差、标准差和误差分布图。
  • 轨迹插值:可以将轨迹进行插值,使其与参考轨迹具有相同的时间步长。
  1. evoEvaluation for Autonomous Systems):
    evo专注于轨迹评估和比较。它提供了一系列的评估指标和可视化工具,用于比较不同轨迹估计算法的性能。主要特点包括:
  • 轨迹比较:可以计算位置误差、姿态误差、尺度误差和时间误差等。
  • 轨迹可视化:提供了多种可视化方式,如轨迹图、误差图和误差分布图。
  • 统计分析:提供了各种统计指标,如平均误差、中位数误差和误差百分比。
  • 批量评估:支持同时评估多个轨迹文件,方便进行大规模的算法对比和评估。

24 描述图优化

图优化Graph Optimization)是用于估计系统状态或参数的最优解。通过构建一个图模型,将观测和约束以图的形式表示,并利用优化算法来找到最符合观测和约束的状态或参数。图优化的基本步骤如下:

  1. 图构建:根据具体问题的特点和需求,将观测和约束以因子图或稀疏图的形式构建出来。节点代表待优化的状态变量或参数,边代表观测或约束。
  2. 优化变量和边界条件:为图中的节点和边界条件设置初值,这些初值可以是来自传感器的初始测量值或其他先验信息
  3. 优化迭代:通过迭代优化的方式,不断调整节点的值,使得整个图的代价函数最小化。常用的优化算法包括最小二乘法(Least Squares)、高斯-牛顿法(Gauss-Newton)、Levenberg-Marquardt算法等。
  4. 收敛判定:检查优化过程是否收敛,通常通过检查代价函数的变化或节点值的变化是否满足停止条件来判断。
  5. 输出结果:最终得到优化后的状态变量或参数,作为系统的最优解。

以下待更新

25 ORBSLAM中如何使用g2o进行优化?

26 详细讲述一下vins中预计分的推导过程




不定期更新…


Reference

  • 2D-2D对极几何中的基本矩阵、本质矩阵和单应矩阵
  • 详解SIFT、SURF和ORB特征点检测和描述算法
  • https://github.com/MichaelGrupp/evo
  • https://github.com/uzh-rpg/rpg_trajectory_evaluation



⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1105368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QGIS如何给元素添加属性

选中图层,右键,属性

汽车上的A/C按键是做什么用的?

汽车上的A/C按键是做什么用的? 汽车上的a/c 键是空调制冷开关。A/C是空调的缩写,它的全称是air condition,理解为空气调节。它通过空调压缩机的不同运转方式来达到制冷或制暖的目的。 打开a/c 按键之后,因为空调压缩机是靠发动机工作的&…

【小白专用】安装Apache2.4+ 安装PHP8.2+ php与sql server 2008 r2连接测试教程

PHP安装 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意: 1.要下载Thread Safe,否则没有php7apache2_4.dll这个文件 2.如果是64位系统要下载x64的,x86的不行 3.下载Zip 2、PHP解压安装 将Zip进行解压,里…

【六、docker中hyperf项目怎么进行跨域设置】

1、第一步就是新建跨域文件,即跨域中间件 跨域中间件的代码如下 <?phpdeclare(strict_types=1);namespace App\Middleware; namespace App\Middleware; namespace App\Middleware;use Hyperf\Context\Context; use Psr\Http\Message\ResponseInterface;

Linux文件管理与用户管理

一、查看文件内容 1、回顾之前的命令 cat命令、tac命令、head命令、tail命令、扩展&#xff1a;tail -f动态查看一个文件的内容 2、more分屏显示文件内容&#xff08;了解&#xff09; 基本语法&#xff1a; # more 文件名称 特别注意&#xff1a;more命令在加载文件时并不…

爆肝整理,性能测试-非GUI模式执行Jemter压测,看这篇就够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、上传脚本 把在…

如何利用vscode进行断点调试后端node开发的项目,如express或koa?

介绍 在我们平常开发中前端可以通过浏览器断点调试代码执行的过程&#xff0c;但是node项目后端通常用命令启动&#xff0c;但命令启动项目也只能打印日志信息&#xff0c;不能断点。所以这一章节教大家如何利用vscode进行断点调试。 步骤 配置launch.json文件 代码如下&…

matlab奇技淫巧——绘制三维地图

在数据处理工作中&#xff0c;常常会用到地图的绘制&#xff0c;最常用的自然是绘制平面的区域/全球地图&#xff0c;通过 worldmap(world) % 创建世界地图坐标区域 load coastlines % 导入海岸线数据 plotm(coastlat,coastlon)即可绘制&#xff0c;效果…

【eNSP】VLAN间通信

VLAN间通信 文章目录 一、使用路由器物理接口实现VLAN间通信实验拓扑图1、配置交换机Access接口和路由器IP地址LSW1AR1 2、验证 二、使用路由器子接口实验拓扑图1、路由器、交换机基本配置LSW1AR1 2、配置路由器子接口AR1 3、验证 三、使用VLANIF技术实现VLAN间通信原理图实验拓…

vue3弹窗中循环生成表单的校验和重置问题

应用场景&#xff1a; 1、弹框里的表单是根据后台返回的时段生成的&#xff0c;后台返回几个时段&#xff0c;就渲染几组表单。 -1- 重置&#xff1a;遍历每个表单&#xff0c;获取当前表单的引用&#xff0c;在resetFields() -2- 校验&#xff1a;创建一个数组来存储每个表单的…

MySQL学习(五)——索引

文章目录 1. 索引介绍2. 索引结构2.1 索引结构介绍2.2 二叉树2.3 B-Tree2.4 BTree2.5 Hash 3. 索引分类3.1 索引分类3.2 聚集索引和二级索引 4 索引语法4.1 语法介绍4.2 数据准备4.3 索引演示 5 SQL 性能优化5.1 执行频率查询5.2 慢查询日志5.3 profile详情5.4 explain 6 索引使…

谈谈 Redis 如何来实现分布式锁

谈谈 Redis 如何来实现分布式锁 基于 setnx 可以实现&#xff0c;但是不是可重入的。 基于 Hash 数据类型 Lua脚本 可以实现可重入的分布式锁。 获取锁的 Lua 脚本&#xff1a; 释放锁的 Lua 脚本&#xff1a; 但是还是存在分布式问题&#xff0c;比如说&#xff0c;一个客…

金融信息化研究所与YashanDB等单位启动金融多主数据库应用行动计划

10月13日&#xff0c;2023金融业 数据库技术大会在京成功召开。会上&#xff0c;金融信息化研究所与崖山数据库YashanDB、阿里巴巴、奥星贝斯、达梦、南大通用、华为、天翼云、万里数据库、优炫数据库共同启动金融多主数据库应用行动计划&#xff0c;并成立金融多主数据库应用…

基于SpringBoot的大学生体质测试管理系统

基于SpringBoot的大学生体质测试管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 管理员界面 教师界面 学生界面 摘要 大学生体质测试管理系统是一…

谁懂?这23个关于大数据的灵魂拷问!

在企业内训行业也深耕蛮多年了&#xff0c;每次做大数据培训&#xff0c;都会遇到一些发人深省的灵魂拷问。 在这些拷问的人群中&#xff0c;有一些是没有接触过大数据平台&#xff0c;有一些甚至已经是大数据老兵。 那趁着这次机会&#xff0c;让我们索性一次把这些问题言简意…

maven依赖冲突以及解决方法

什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包&#xff0c;有多个不同的版本&#xff0c;因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它的隐式类包&#xff0c;这些隐式的类包会被maven间接引…

竞赛 深度学习YOLO抽烟行为检测 - python opencv

文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习YOLO抽烟行为检测 该项目较为新颖&#xff0c;适合作为竞赛课…

Yaml语法学习

SpringBoot使用一个全局的配置文件 &#xff0c; 配置文件名称是固定的 application.properties&#xff08;官方不推荐&#xff09; 语法结构 &#xff1a; keyvalue application.yml 语法结构 &#xff1a;key&#xff1a;空格 value server:port: 8081 配置文件的作用 &…

jvm 各个版本支持的参数

知道一些 jvm 调优参数&#xff0c;但是没有找到官网对应的文档&#xff0c;在网上的一些文章偶然发现&#xff0c;记录一下。 https://docs.oracle.com/en/java/javase/ 包含各个版本 jdk 8 分为 windows 和 unix 系统 https://docs.oracle.com/javase/8/docs/technotes/too…

关于CW32单片机pack包安装 KEIL IAR

CW32 系列微控制器软件开发工具入门 芯片包 1. 下载芯片包 官方下载链接&#xff1a;武汉鑫源半导体 2. 安装芯片包 双击芯片包.pack文件 支持 CW32F 系列的 IDE 支持 CW32F 系列的工具链&#xff1a; • • EWARM v7.70 或更高版本 MDK-ARM v5.17 或更高版本 2.1 EW…