VSLAM 相关知识点总结

2023-05-16

VSLAM 相关知识点

这篇文章是对VSLAM涉及的知识点进行系统性的总结和更新,一些内容来源至VSLAM经典教材,博客,和开源项目(引用材料如下表)

  • SLAM十四讲高博
  • 古月老师的技术博客
  • 崔神的github(VIO讲解)
  • 知乎面经
  • 计算机视觉life
    **相关知识点不断更新中-最近更新2022年12月5日

工程问题

  1. RANSAC异常点剔除算法:

    • 使用需要有先验(需要提前知道inlier的比例是多少,知道点的卡方分布),迭代次数的公式模型(F或者H).
    • RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。 RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:

    1.有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
    2.用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
    3.如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
    4.然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过。
    5.最后,通过估计局内点与模型的错误率来评估模型。
    固定迭代的次数重复执行,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。

  2. 增强特描述子之间的区分度:

    • 旋转不变性(增加方向向量)
    • 尺度不变性(使用图像金字塔)
    • 光照不变性(使用对曝光模型增加识别度)
  3. 单目视觉尺度漂移:

    在使用单目相机估计相机姿态和3D坐标时,需要对极几何、三角化估计,这个过程中会产生累积误差,进而导致尺度的不一致,产生尺度漂移。根本原因是单目相机无法根据一张图片就会的图中物体的大小信息,这就是尺度漂移的根源。
    解决办法:将前后两帧的尺度作为后续的尺度。采用全局式估计,使用统一的尺度。

  4. 单目和VIO的可观性:

    单目VO:七自由度不可观,三自由度位置,三自由度旋转,尺度。
    VIO:四自由度不可观,加速计导致尺度可观,由于重力向量已知,导致和重力向量平行的roll翻滚角,重力向量垂直相交的pitch俯仰角可观。剩下三自由度位置和绕重力旋转的yaw航向角不可观。

  5. 后端不收敛的解决办法

    (1)第一次进入后端优化就不收敛,这时候就应该分析优化变量和约束条件的理论和code是否正确;

    • 迭代次数不够,增加迭代次数。
    • 优化方法的问题:使用高斯牛顿法时,可能出现JJT(H的近似)为奇异矩阵或者病态的情况,此时增量稳定性较差,导致算法不收敛。(残差函数在局部不像一个二次函数,泰勒展开不是很准确),导致算法不收敛。而且当步长较大时,也无法保证收敛性改进更换增量方程的求解方法,如果使用的是高斯牛顿法,可尝试使用LM法算法。
      (2)前面优化收敛,突然当前优化不收敛,这时候需要判断下是否加入了错误的回环约束:删除回环约束,重新本次优化,如果OK,则应该是回环错误。
  6. 定位阶段实际地图与离线地图发生较大差异的情况

    先建立局部定位使得系统在没有地图时也能定位,等找到了回环,再进行全局优化。

  7. 针对SLAM算法的各个阶段,谈谈使用哪些方法可以提升算法的运行速度?

    前端特点匹配识别使用GPU加速
    后端涉及内存搬用的部分,全部改为引用和指针。

  8. 单目slam和双目slam的区别?

    双目SLAM,不用初始化,双目可以恢复世界尺度,单目不能。
    单目标定简单参数不易变换,双目标定难维护难。

  9. 如果环境中有两个版本的OpenCV,如何在CMakeList.txt中指定使用某一版本的OpenCV?

    fin_package(OpenCV 3.4 REQUIRED)

  10. 紧耦合、松耦合、优缺点?

    松耦合: 松耦合中视觉运动估计和惯导运动估计系统是两个独⽴的模块,将每个模块的输出结果进⾏融合。算法简单计算量不高,拓展性强,可以增加传感器,但精度一般。
    紧耦合:紧耦合则是使⽤两个传感器的原始数据共用构建一个误差函数来估计⼀组变量,传感器噪声也是相互影响的。紧耦合算法上⽐较复杂,计算量大,充分利⽤了传感器数据可以实现更好的精度,但不可拓展或者说拓展性能差。

  11. 多传感器时间标定(例如:相机和IMU之间的时间标定)

    1)在线标定:VINS-mono,将时间漂移作为一个优化变量。
    2)Kalibr 工具箱中离线的时间标定方法。
    3)硬件对齐:因为时钟源都有钟漂,而且每个时钟源钟漂不同,所以即使把各个传感器时间戳在初始时刻对齐,运行一段时间之后,之前对齐的结果仍会偏离。解决这个问题的办法就是在硬件上把时钟源统一,常见的做法是做一个脉冲发生器,所有传感器都被这个脉冲触发,每次触发都校正一次自己的时钟,这样就可以消除时钟源的累计误差。

  12. 相机标定:

    使用相机自标定法:相机自标定方法并不需要知道图像点的三维坐标,它通过计算某一点在不同拍摄角度的场景图中的相对关系来确定相机标定的参数问题。自标定法的这种特性,使得它能够完成一些未知相机参数的标定,方法灵活,得到的结果较差。
    基于主动视觉的相机标定法是通过主动系统控制相机做特定运动,拍摄多组图像,依据图像信息和已知位移变化来求解相机内外参数。
    基于主动视觉的相机标定法是通过主动系统控制相机做特定运动,拍摄多组图像,依据图像信息和已知位移变化来求解相机内外参数。相机标定kalibr工具包,标定板进行标定。
    IMU标定:
    IMU的误差模型给出了输出的测量值与真实值之间的对应关系方程,显然要求解的变量就是标定参数。可以看出只要找到了相对应的真实值和测量值,解这个方程组就好了。对于加速度计来说,这个好办,因为地球上天然的就存在重力加速度,只要调整IMU的姿态就能测出若干组真值。但是对于陀螺仪来说事情就变得没那么简单了,因为角速度的真值并没有能够直接获取的途径。一般专业的IMU标定都得借助专门的转台设备来进行。
    kalibr标定工具包:
    多相机标定(内外参标定,包括无重叠视场的情况)
    Visual-Inertial标定,spatial – 旋转+平移,temporal – 不同传感器时间戳的偏差;
    卷帘相机标定,卷帘相机的不同行的曝光开始时间有先后顺序,所以与快门相关的参数也要标出来。

  13. 如何标定IMU与相机的内参和外参?

  14. 多目相机的标定方法 ?

  15. 多相机怎样实现周视系统 ?

  16. 相机畸变种类有哪些?径向畸变(透镜的形状决定的),切向畸变(感光元件的安装位置决定的)。

  17. 在没有groundtruth情况下如何判断自己的置信度?

因为没外部参考的真实值,所以要采用平均值作为数据分析的center。然后求得偏差作为置信度。

  1. 光流法和直接法的区别。

    误差函数不同。
    特征点法是重投影误差,直接法是光度误差,雅克比矩阵不同。
    光流法还是需要提取图像中有代表性的点,图像的特征点,只是不需要再计算描述子了,光流法通过灰度假设计算特征点像素的运动,然后通过PNP、对极几何、ICP等方法求解相机的运动;而直接法直接通过灰度假设计算得到相机之间的运动,任何图像的点都可以,不需要提取有代表性的点。

  2. 如何存储稀疏矩阵?(十字链表,三元组顺序表,行逻辑连接表)
  3. SLAM中的绑架问题怎么理解? (绑架问题是指机器⼈在缺少之前位置信息的情况下,或跟踪丢失的情况下,如何进⾏重新定 位、确定当前位姿。例如当机器⼈被安置在⼀个已经构建好地图的环境中,但是并不知道它在 地图中的相对位置,或者在移动过程中,由于传感器的暂时性功能故障或相机的快速移动,都导致机器⼈先前的位置信息的丢失,在这种情况下如何重新确定⾃⼰的位置)

SLAM相关的理论

  1. 旋转矩阵的特征值和特征向量的关系?
  • 旋转向量是旋转矩阵特征值为1的特征向量。
  1. 特征值和特征向量的一种物理意义?
  • 如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值。
  1. 各种矩阵的物理意义?
  • 正交矩阵:
  • 对角矩阵:
  • 上三角或下三角矩阵:
  • 反对称矩阵:
  1. 求出的R矩阵不满足旋转矩阵的性质,该怎么做?
  2. so(3)和se(3)的区别是什么,如何在算法中使用?(so3表示旋转,se3表示旋转和平移,在矩阵的求导过程中使用,利用李代数良好的加法特性,来简化矩阵使用扰动进行求导的过程,算法的使用参考SLAM十四讲)
  3. 推导左扰动模型?
  4. 为什么引入李群和李代数?(旋转矩阵自身是带有约束的(正交且行列式为 1)。它们作为优化变量时, 会引入额外的约束,使优化变得困难。通过李群——李代数间的转换关系,我们希望把位姿估计变成无约束的优化问题,简化求解方式)
  5. 相机的投影模型,推导从世界坐标系到像素平面坐标系的过程以及 fx 的计算公式?
  6. Eigen中矩阵求逆,用了哪些数学上的技巧?** 不清楚 **
  7. 如何判断求导是否正确?
  8. 三维空间的位姿有哪些表达⽅法(优缺点)?
  • 旋转矩阵
  • 旋转向量
  • 欧拉角
  • 四元数
  • 前沿理论
    1.物体级SLAM有CodeSLAM,CubeSLAM ,QuadricSLAM

预积分

  1. IMU为什要积分?预积分?预积分推导?预积分增量的原理?
  • IMU积分的作用:通过积分IMU每个时刻的加速度和角速度来结算位姿
  • 预积分的作用:IMU的采样频率是高于图像帧的发布频率的,所以相邻两个图像帧之间的IMU信息需要积分从而与视觉信息对齐。对IMU积分时,积分符号中有被优化的状态变量,通过预积分可以去除积分号里面被优化的状态变量,让IMU的积分只跟IMU的测量值有关,而与被优化的状态量无关,通过预积分可以避免每次优化完状态变量后,再重新进行积分操作,减少计算量。
  • 预积分的推导
  1. VIO中协方差怎么传递?
  2. 协方差的主要作用?在待优化的残差函数中,协方差的逆作为信息矩阵来表示每个传感器对应残差的权重,通过这个权重矩阵可以归一化不同残差的高斯分布,使得不同传感器残差可以线性相加。引用vinsmono作者,香港科大沈劭劼老师的话,简单来说协方差矩阵的逆,是多传感器信息融合时,残差加权平均的权重。

前端

光流匹配–理论

  1. 光流的原理,光流评价的指标?
  • 计算光流和GT的误差 Endpoint error(EPE),
  • 光流向量间的Angular error(AE)。
  • 图像颜色值插值误差 Interpolation error(IE),
  • 图像颜色值差值误差 Normalized interpolation error(NE)。
  1. 光流实现原理,为什么要用金字塔?

图像金字塔的方法,即窗口固定,将图像生成金字塔,在每一层金字塔上都用同一个大小的窗口来进行光流计算。那么在图像大小较小的时候,窗口显得较大,此时的光流可以跟踪速度较快的目标,而在原始图像的时候,光流窗口相对较小,得到的光流就更准确。这是一个由粗到精的过程。构建图像金字塔可以解决大运动目标跟踪,也可以一定程度上解决孔径问题(相同大小的窗口能覆盖大尺度图片上尽量多的角点,而这些角点无法在原始图片上被覆盖)。

  1. 光流的patch不同有什么影响?
  • 光流的基本假设:亮度不变,以及区域运动一致性(都是较强的假设)。
  • 当窗口较大时,光流计算更鲁棒。当运动较为剧烈的时候,无法实现光流的基本假设,所以当我们的领域加大的时候,算法更鲁棒。
  • 当窗口较小时,光流计算更正确。原因在于,当图像中每一个部分的运动都不一致的时候,如果开的窗口过大,很容易违背假设:窗口(邻域)内的所有点光流一致,这可能与实际不一致,所以窗口小,包含的像素少,更精确些。
  1. 光流跟踪在快速运动过程中,跟踪容易失败,采取什么方法?
  • 增大窗口,因为LK算法的约束条件即:小速度,亮度不变以及区域一致性都是较强的假设,并不很容易得到满足。如当物体运动速度较快时,假设不成立,那么后续的假设就会有较大的偏差,使得最终求出的光流值有较大的误差。构建图像金字塔可以解决大运动目标跟踪,也可以一定程度上解决孔径问题(相同大小的窗口能覆盖大尺度图片上尽量多的角点,而这些角点无法在原始图片上被覆盖)。
  • 考虑物体的运动速度较大时,算法会出现较大的误差。那么就希望能减少图像中物体的运动速度。一个直观的方法就是,缩小图像的尺寸。假设当图像为400×400时,物体速度为[16 16],那么图像缩小为200×200时,速度变为[8,8]。缩小为100*\100时,速度减少到[4,4]。
  • 所以光流可以通过生成原图像的金字塔图像,逐层求解,不断精确来求得。简单来说上层金字塔(低分辨率)中的一个像素可以代表下层的两个。
  1. 特征点法和直接法的对⽐及优缺点?
    1. 特征点法:运动或者旋转过大时,只要匹配点还在像素内,则不太会引起无匹配,相对于直接法有更好的鲁棒性。只能用来构建稀疏地图,无环境特征时无法工作,且计算和匹配描述子,耗费计算量。
    2. 直接法:有梯度即可,可以在渐变的环境下工作。
      不需要计算描述子,不需要匹配特征点,节省了很多计算量。可以筹建半稠密乃至稠密的地图。
      稀疏的直接法可以做到非常快速的效果,适合real time和资源受限的场合。基于灰度不变假设,容易受外界光照的影响。相机发生大尺度移动或旋转时无法很好的追踪,非凸优化,容易局部极值。用尺度金字塔改善。
    3. 光流法 :关键点提取的多少基本上都可以工作。

运动求解—理论

  1. 前端对极几何中的:E本质矩阵 F基础矩阵 H单应矩阵是什么?
  • 本质矩阵E:E = t^R (本质矩阵E根据匹配的特征点求得,包含了平移和旋转的信息,可以通过奇异值分解(SVD)求得平移和旋转)
    * E的自由度和求解方法:具有平移和旋转共六自由度,但由于尺度等价性事实上只有五自由度,因此需要至少五对点求解,一般使用八点法求解。
    * E的内在性质:1-本质矩阵 E 的奇异值必定是 [σ, σ, 0]T 的形式 (t^ 是反对称矩阵,R是正交矩阵,E=t^R所以存在E的内在性质)。2.-E秩是2(对于线性方程求解出来不满足内在性质E, 可以将最小奇异值设为0).
    * E求解出R和t的方法:使用矩阵奇异值分解 E = UΣVT 其中 U,V 为正交阵,Σ 为奇异值矩阵
    * E的求解技巧:据线性方程解出的 E,可能不满足 E 的内在性质——它的奇异值不一定为 σ, σ, 0 的形式。这时,在做 SVD 时,我们会刻意地把 Σ 矩阵调整成上面的样子。通常的做法是对八点法求得的 E 进行 SVD 分解后,会得到奇异值矩阵 Σ = diag(σ1, σ2, σ3),不妨设 σ1 ≥ σ2 ≥ σ3。取:diag( (σ1 + σ2)*1/2,(σ1 + σ2)*1/2 , 0))这相当于是把求出来的矩阵投影到了 E 所在的流形上。当然,更简单的做法是将奇异值矩 阵取成 diag(1, 1, 0),因为 E 具有尺度等价性,这样做也是合理的。
  • 本质矩阵基础矩阵的推导:
    * 在这里插入图片描述在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
  • 基本矩阵F:F = k’Ek-1 (基本矩阵就是本质矩阵多了相机外参)
  • 单应矩阵H:H 描述两个平面之间的映射关系 。
    * 应用场景:如扫地机器人携带顶视相机,和无人机携带俯视相机
    * 单应矩阵H的工程作用:特征点共面或者相机发生纯旋转的时候,基础矩阵的自由度下降,这就出现了所谓的退化(degenerate)。现实中的数据总包含一些噪声,这时候如果我们继续使用八点法求解基础矩阵,基础矩阵多余出来的自由度将会主要由噪声决定。为了能够避免退化现象造成的影响,通常我们会同时估计基础矩阵 F 和单应矩阵。H: 选择重投影误差比较小的那个作为最终的运动估计矩阵。
    * 计算H:自由度8,使用4点,每个点提供两自由度(理论上提供3自由度,自由度实际能用2)。分解的方法包括数值法与解析法。
  • 单目相机的F和H矩阵有何不同,E和F矩阵有何不同,只旋转不平移能不能求 F、能不能求H?(答案如上)
  1. 2d-3d PnP原理? (PnP位姿最少需要几个点?有几组解?误差来源于哪里)
  • 特点:两张图一张3D点已经知道,至少三对点才能。3D-2D 方法不需要使用对极约束,又可以在很少的匹配点中获得较好的运动估计,是最重要的一种姿态估计方法。
  • 求解方法:
    • 三对点估计位姿的P3P(3对点)
    • 直接线性变换(DLT)(六对点,使用SVD求解 u=[RT]P)( 直接线性变换的误差,在于求解出来的矩阵可能不满足旋转矩阵约束,需要利用QR分解进行近似,如果不知道内参时,内参估计的过程也会引入误差。)
    • EPnP(Efficient PnP)[46],UPnP[47] 等等)。
    • 非线性优化BA.
  1. 3d-3d ICP 原理?

匹配3D点,求解R和T的方法:

  • 点对点旋转平移转换公式,通过SVD方法,先求旋转矩阵R, 再求平移T。
  • 使用BA优化方法,直接求RT.
  1. icp至少需要几对点,已知对应点的话,怎么求变换关系闭式解?
  2. 恢复特征点深度的方法?-三角测量
  3. SFM定义?即给出多幅图像及其图像特征的一个稀疏对应集合,估计3D点的位置,这个求解过程通常涉及3D几何(结构)和摄像机姿态(运动)的同时估计。

后端优化

  1. 两帧之间构建残差

    视觉残差:
    1)特征点法:通过重投影误差构建残差,使用观测值减去估计值来构建代价函数,可以同时位姿和特征点。
    2) 直接法:光度误差
    IMU残差:IMU预积分增量和帧间增量的差值
    公式推导

    • 重投影误差公式推导:
    • 光度误差公式推导:
    • IMU残差推导;
  2. 非线性优化的方法和区别?

    非线性优化问题的框架,分为 Line Search 和 Trust Region 两类。
    Line Search (线性搜索) 先固定搜索方向,然后在该方向寻找步长,以最速下降法和 Gauss-Newton 法为代表。
    Trust Region(信赖区域)先固定搜索区域,再考虑找该区域内的最优点。此类方法以 L-M 为代表。

    公式推导:求解增量deltX使得目标函数最小
    在这里插入图片描述
    * 最速下降法(目标函数泰勒展开保留一阶梯度,过于贪心容易走出锯齿形):在这里插入图片描述
    * 牛顿法(目标函数泰勒展开保留二阶梯度,H矩阵难以计算):在这里插入图片描述
    * G-N(f(x)一阶泰勒展开,展开目标函数的平方项,求导数为0):在这里插入图片描述
    * 在这里插入图片描述
    * LM(GN的二阶近似,只能在展开点附近有好的效果,给deltx设置限定区域从而保证近似值的准确性):
    * 我们用 Lagrange 乘子将它转化为一个无约束优化问题在这里插入图片描述

  3. 图优化

  • 图优化与非线性最小二乘的关系:slam中的图优化的环节,本质上实际是一个非线性最小二乘问题的求解过程.
  • 图优化求解过程:
  1. 控制优化模型规模的方法

控制优化模型规模原因:
在slam的后端优化问题中,通常会通过⼀些传感器的观测,比如视觉特征点,IMU预积分量,Lidar面点和边缘点(角点)的约束去构建一个优化问题,去求解状态量(如位姿、速度等)。这个时候存在一个问题,当给这个系统新增⼀个约束时,就会重新建立所有的约束对状态量的优化问题进行求解;当优化模型增大时,显然进行一次优化的时间也会增加很多;一方面实时性遭遇了挑战,另一方面,很久之前的状态也没有继续更新的必要。这时候就需要控制优化模型的规模。

  • 第⼀种方式:滑动窗口来控制优化问题的规模,但滑动窗口需要处理好边缘化的问题;
  • 第二种方式:因子图的模型来解决优化模型的规模。
    • 增量推理:前面所说的约束就是因子节点,优化变量就是优化节点,通过调整变量求得最大后验估计,就得到了我们想要的状态量。最大后验概率正比于所有因子图相乘的最大概率值。最大后验是整个因子图实际上就是每个因子单独的乘积。在机器人运行的过程,因子图往往是逐渐成长和增大的。比如说在往前移动的过程中,加了一组节点,随着观测的数据越来越多,加了越来越多的因子进来。 每一次求解都是比上次多一些因子,而且大部分因子图跟之前因子图是基本一致的,这是增量推理(incremental inference).
    • 因子图求解过程: 假设因子图只加了一点, 其他都没变,如果从零开始求解,矩阵会越来越大,求解速度会越来越慢,而且绝大多数都是重复性的工作。sam1实际上做的是增量QR分解。给定一个J矩阵,可以分解成Q和R,假设因子图其他都不变,之前的因子图还在,加了一些新的因子。每一个因子对应的是J矩阵的每一行,所以新加了几个因子,就是在J矩阵中增加了几行。问题就是如果在已知分解出来的QR的情况下,J增加了几行,如何快速算出R矩阵。
  • 第三种方式,位姿图优化,只优化位姿位姿变量,不优化特征点变量。
  1. 卡尔曼滤波算法的主要公式及各参数代表的意义

卡尔曼滤波步骤
在这里插入图片描述

  • 卡尔曼滤波的过程简述:卡尔曼滤波通过协方差传播状态。首先通过运动方程预测下一时刻的状态变量,再通过观测方程求得卡尔曼增益K,并利用卡尔曼增益融合数据,以达到最小化噪音和最大化后验估计的目的。
  • 卡尔曼增益K的含义:增益是指每次融合数据后不确定性的变化程度。如果融合了新的数据后不确定性降低了,那么这个增益就是正面的,有助于提高预测的准确度。如果不确定性反而升高了,那么这个增益就是负面的,对于系统预测的准确性反而起了反面作用
  • 卡尔曼滤波过程的噪音变化:预测噪音应该是越来越大的,观测方程的噪音应该是是在一定范围内变化的(可能变大,可能变小),通过卡尔曼增益融合之后的噪音一般情况是变小的。
  1. BA当中雅可比矩阵的纬度是 ?
  2. 什么是紧耦合、松耦合?优缺点?

优化过程中的工程问题

  1. 如何增加鲁棒核函数,雅克比需要重新计算么,增加核函数后雅克比怎么变化?对于视觉中有鲁棒核的损失函数,因为视觉里面有Huber核函数的原因,需要重写雅克比与残。
  2. 多传感器之间的误差分摊,那传感器多怎么办?使用协方差矩阵的逆对误差,进行归一化。
  3. 边缘化的意义? 边缘化在概率中的意义是条件概率,在SLAM的BA问题中是指利用H矩阵的稀疏性进行加速计算。
  4. 滑动窗口的理解? 为了控制状态量的维度和规模,保证实时性。
  5. 滑窗时边缘化是怎么实现的?通过舒尔补对变量进行消元。
  • 求解高阶非线性方程组
  1. 常用的优化方法有哪些(GN,LM, Dog-Leg)?这三种优化方法的原理是什么?最速下降法,GN,LM,Dog-Leg的区别?LM中的lamda的作用?λ 为 Lagrange 乘子,这 个子问题是带不等式约束的优化问题,我们用 Lagrange 乘子将它转化为一个无约束优化
  2. 高斯牛顿法,两个方程f1(x,y),f2(x,y),雅克比是J1,J2。增量方程中最后的J是什么。(J = J12+J22)

求解线性方程组

  1. 求解AX = B 有几种解法? 什么时候适用什么方法 ?
  2. QR分解,LDLT,Cholskey,SVD分解各自使用条件是什么,优劣势是什么,原理是什么 ?
  3. 谈谈QR分解,chokesly分解、SVD分解各自特点 ?
  4. Ax=B什么时候有唯一解,无穷解和无解?

李群李代数的导数

  1. 李群上位姿的导数 ?
  2. 为什么要引⼊李群李代数?李群与李代数的关系?指数映射关系

回环检测

  1. 回环检测方法有哪些?怎么实现?

MSCKF

  1. MSCKF中为什么分为SLAM点和MSCKF点?MSCKF中SLAM特征与MSCKF特征的区别?
  2. MSCKF中为什么没有landmark会很快,MSCKF是如何操作的,如果这个点没有左零空间呢?

ORBSLAM

  1. orbslam的位姿图优化是怎么建立的?
  2. orbslam单目初始化与双目初始化的区别?
  3. ORB-SLAM中单⽬地图初始化过程?
  4. orbslam为了特征点均匀化做了哪些处理?使用四叉树对一个图像金字塔图层中的特征点进行均匀化,在特征点均匀化之前,需确定每层图像上特征点的提取数量。图像金子塔层数越高,对应层数的分辨率越低,面积越小,所能提取到的特征点数量就越少,所以分配策略根据图像的面积来定,将总特征点数目根据面积比例均摊到每层图像上。
  5. 卡方检验在orbslam起什么作用? 计算每个点对的对称转移误差和卡方分布的对应值比较,由此判定该点是否为内点。累计内点的总得分。
  6. orb-slam2的如何实现的整个流程,说说他的初始化?
  7. 在orb-slam回环中,更新的数据在哪个环节起到哪些作用?
  8. ORB-SLAM中的B是什么?(B是特征描述子描)ORB和FAST的区别?(可以指定特征点数量添加了尺度和旋转的描述)
  9. 你认为ORB-SLAM3和VINS-Fusion的几个不同点?
  10. Vins mono的初始化和orb slam3的初始化有啥区别?
  11. 什么是ORB特征,ORB特征的旋转不变性是如何做的?BRIEF算⼦是怎么提取的?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VSLAM 相关知识点总结 的相关文章

  • 为什么数组变成tensor精度只有四位?

    64 TOC为什么数组变成tensor精度只有四位 xff1f 原数据为list 3 316344738006592 xff0c 1 777564764 xff0c xff0c 1 104965329170227 list变成tensor
  • Hadoop系列-HDFS工作流程和原理详解(九)

    一 HDFS 数据读写流程 HDFS 是 Hadoop 生态里面的数据存储层 xff0c 它是一个具有容错性的非常可靠的分布式文件系统 HDFS 以主从 xff08 Master Slave xff09 架构的方式工作 xff0c Name
  • 正则表达式(判断中文,判断英文字母、下划线、数字)

    1 判断输入得内容为中文 span class token keyword var span str span class token operator 61 span span class token keyword this span
  • echarts 折线图,可滑动

    1 主要得展示 折线图 xff0c x轴可以滑动 xff0c 如图 详细代码如下 xff1a span class token operator lt span template span class token operator gt s
  • echarts x轴一个数据;y轴左边数值,右边百分比。(柱状图)

    大概样子如下 xff1a 配置代码如下 xff1a span class token keyword export span span class token keyword const span span class token func
  • vue自定义指令clickoutside

    npm install vue click outside 方法一 xff1a span class token operator lt span span v span class token operator span clickout
  • canvas四个点画矩形,中垂线,以及顶点拖拽

    场景 xff1a 已知四个点 xff0c 画出矩形 xff0c 并且计算出每个中垂线 xff0c 并加箭头 xff0c 标识符 xff0c 点击四个顶点还能拖拽进行变动 vue span class token operator lt sp
  • promise.all([]).then(() => {}).catch(() => {})异步处理

    场景 xff1a 在同一时间 xff0c 同时调用相同的接口 xff08 唯一不同 xff1a 接口传参不一样 xff09 简单写法 xff1a Promise span class token punctuation span span
  • git 修改远程仓库地址,用户名,地址

    在git上新建项目 然后讲本地原来的git clone地址更换成新建仓库的clone 地址 方法一 xff1a 1 删除本地仓库当前关联的无效远程地址 xff0c 再为本地仓库添加新的远程仓库地址 git remote span class
  • Docker Dockerfile

    什么是Dockerfile Dockerfile 是一个用来构建镜像的文本文件 xff0c 文本内容包含了一条条构建镜像所需的指令和说明 使用Dockerfile定制镜像 仅讲解如何运行Dockerfile 文件来定制一个镜像 1 定制一个
  • websocket

    在WebSocket API中 xff0c 浏览器和服务器只需要完成一次握手 xff0c 两者之间就直接可以创建持久性的连接 xff0c 并进行双向数据传输 webSocket方法 ws send 向服务器发送数据ws close 关闭连接
  • 搭建electron-vue下

    搭建electron vue下 npm install 后续问题Version 9 of Highlight js has reached EOL npm run dev 后续ReferenceError Unknown plugin 34
  • Centos 7 安装VNC步骤

    Centos7 安装 VNC 步骤 一 安装 1 以root 用户运行以下命令来安装vncserver yum install tigervnc server 2 同样运行以下命令来安装vncviewer yum install vnc 3
  • [记录]Ubuntu18.04使用桥接模式实现上网

    前言 一般在虚拟机中采用NAT模式就可以上网 其最大优势是虚拟系统接入互联网非常简单 xff0c 你不需要进行任何其他的配置 xff0c 只需要宿主机器能访问互联网即可 但是这种方式 虚拟机可以通过主机 单向访问 网络上的其他主机 xff0
  • Linux-浅谈系统调用

    我们开始研究操作系统中一个非常重要的概念 系统调用 大多数程序员在写程序时都很难离开系统调用 xff0c 与系统调用打交道的方式是通过库函数的方式 xff0c 库函数用来把系统调用给封装起来 xff0c 要理解系统调用的概念还需要一些储备知
  • 可复用软件模块的接口设计

    在上一篇博客中模块化代码的基本写法举例 青衫客36的博客 CSDN博客 xff0c 我们给出了模块化代码的基本写法 xff0c 本文我们继续探讨对menu程序进行改造 xff0c 使之成为可复用软件模块 下面先引入可重用软件的一些相关概念
  • Makefile实验

    一 准备C程序 1 input h ifndef INPUT H define INPUT H void input int int a int b endif 2 input c include lt stdio h gt include
  • CSAPPLab2- BombLab

    写在前面 xff1a 本次实验对GDB的使用提出了较高要求 xff0c 对GDB调试不了解的读者可以先移步到笔者的这篇博客 GDB调试实验 青衫客36的博客 CSDN博客 由于老师发布的压缩包中有48个bomb代码包 xff0c 根据 学号
  • 代码优化- 前端优化

    常量折叠 基本思想 xff1a 在编译期间计算表达式的值 xff08 编译时静态计算 xff09 例如 xff1a a 61 3 43 5 61 61 gt a 61 8 xff0c if true amp amp false 61 61
  • Haffman编码(算法导论)

    上次算法导论课讲到了Haffman树 xff0c 笔者惊叹于Haffman编码的压缩效果 xff0c 故想自己亲自动手尝试写一个极简的Haffman压缩程序 首先 xff0c 我们来了解一下什么是Haffman编码 Haffman编码 赫夫

随机推荐

  • C++ Primer- 变量声明和定义的关系

    为了允许把程序拆分成多个逻辑部分来编写 xff0c C 43 43 语言支持分离式编译 xff08 separatecompilation xff09 机制 xff0c 该机制允许将程序分割为若干个文件 xff0c 每个文件可被独立编译 如
  • Compiler Lab2- 自制极简编译器

    笔者实现的这个超级迷你版编译器 xff08 词法分析 语法分析 生成中间代码 xff08 cpp xff09 xff09 仅支持四则运算 xff0c 功能真的是非常非常简单 xff0c 不过其中的流程 xff08 词法分析 gt 语法分析
  • 贪心算法实现最佳任务调度实验

    题目描述 一个单位时间任务是恰好需要一个单位时间完成的任务 给定一个单位时间任务的有限集S 关于S 的一个时间表用于描述S 中单位时间任务的执行次序 时间表中第1 个任务从时间0 开始执行直至时间1 结束 xff0c 第2 个任务从时间1
  • 在CentOS安装CMake

    你或许听过好几种 Make 工具 xff0c 例如 GNU Make xff0c QT 的 qmake xff0c 微软的 MS nmake xff0c BSD Make xff08 pmake xff09 xff0c Makepp xff
  • CSAPP Lab3- bufbomb

    实验目标 xff08 1 xff09 掌握函数调用时的栈帧结构 xff08 2 xff09 利用输入缓冲区的溢出漏洞 xff0c 将攻击代码嵌入当前程序的栈帧中 xff0c 使得程序执行我们所期望的过程 实验代码 xff08 1 xff09
  • 金蝶部署SpringBoot+vue项目总结

    金蝶部署SpringBoot 43 vue项目文章目录 文章目录 金蝶部署SpringBoot 43 vue项目文章目录前言一 金蝶部署中两个重要概念1 域2 应用基础上下文 二 部署准备1 前后台打包2 部署过程3 部署成功后的注意事项
  • Gazebo-Realsense 编译问题解决

    64 Gazebo仿真 Realsense 编译问题解决 参考 这篇文章配置 首先git clone代码到你的工作空间 git clone https github com nilseuropa realsense ros gazebo g
  • docker快捷添加用户组,远离sudo困扰

    使用docker命令时 xff0c 总是需要root权限 xff0c 同时还要验证密码 xff0c 过于麻烦便将root添加进docker分组 xff0c 远离sudo困扰 span class token comment 创建docker
  • 全注解下的SpringIoc 续4-条件装配bean

    Spring Boot默认启动时会加载bean xff0c 如果加载失败 xff0c 则应用就会启动失败 但是部分场景下 xff0c 我们希望某个bean只有满足一定的条件下 xff0c 才允许Spring Boot加载 xff0c 所以
  • 卡尔曼滤波结果和图优化的融合

    仅使用卡尔曼滤波结果作为初始值辅助NDT算法的进行 xff0c 并没有进行实际融合 论文地址 算法流程 扩展的卡尔曼滤波融合GPS 惯性测量单元IMU 编码器里程计得到融合后的定位信息 基于3D NDT配准得到激光里程计 建图优化 融合单帧
  • Kalibr工具进行相机IMU标定

    github地址 xff1a https github com ethz asl kalibrWiki文档 xff1a https github com ethz asl kalibr wiki camera imu calibration
  • 保研复试-计算机网络复习

    计算机网络是我专业课里成绩较高的课 xff0c 老师应该会问到 xff0c 面试的时候计网也是公司里爱问的科目 整理一下看到的网上的一些保研 考研复试题 xff0c 便于复习 一 计算机网络的体系结构 1 计算机网络的分类 按分布范围 xf
  • Hbase的API

    Hbase API 文章目录 Hbase API准备工作Namespace DDL1 Junit执行代码模板2 创建namespace的API3 列出所有的namespace4 列出所有namespace中的表名5 修改namespace的
  • 【Python】 matplotlib 以pdf形式保存图片

    Python matplotlib 以pdf形式保存图片 span class token keyword import span matplotlib span class token punctuation span pyplot as
  • 51单片机 | 点亮第一个LED | LED 闪烁实验 | LED流水灯实验

    文章目录 一 51单片机GPIO介绍1 GPIO概念2 GPIO 结构框图与工作原理2 1 P0端口2 2 P1端口2 3 P2端口2 4 P3端口 2 5 要点 二 LED简介三 硬件设计四 软件设计1 点亮第一个LED2 LED 闪烁实
  • matlab二维矩阵可视化几种方法

    目录 一 pcolor 二 imagesc 三 spy 四 文末彩蛋 一 pcolor 以一个100x100块对角矩阵B为例 1 xff1a 原生pcolor 可以在矩阵维度不大时进行可视化 xff0c 带小方格 矩阵比较大时画出整体为黑色
  • 【ROS入门】双系统安装和ros安装踩坑

    记录一下安装Ubuntu双系统和和ros过程中踩的坑 xff0c 防止下次再犯错 一 双系统安装与删除 双系统的安装比一开始想的说实话要简单得多 xff0c 随便用u盘制作一个系统安装盘 xff0c 或者在u盘里面放需要的Ubuntu镜像
  • 【ROS入门】TF与URDF

    一 什么是TF TF全程就是transform xff0c 就是一个坐标系的转换 在ROS中坐标的转换是一个很重要的内容 xff0c 主要还是因为机器的不灵活性 xff0c 如果是人 xff0c 完全可以灵活地控制手臂去抓取一个物体 xff
  • 树莓派3B+——系统安装及显示

    树莓派3B 43 系统安装及显示 目录 树莓派3B 43 系统安装及显示系统安装显示显示器显示3 5寸显示屏显示pc显示 树莓派3B 43 系统安装及显示 初次接触树莓派 xff0c 花了差不多一天的时间把系统的安装和显示全部搞定 xff0
  • VSLAM 相关知识点总结

    VSLAM 相关知识点 这篇文章是对VSLAM涉及的知识点进行系统性的总结和更新 xff0c 一些内容来源至VSLAM经典教材 xff0c 博客 xff0c 和开源项目 引用材料如下表 SLAM十四讲高博古月老师的技术博客崔神的github