slam技术面试问题(三)

点点圈 提交于 2019-11-26 20:53:08

26.回环检测常用方法
视觉词袋算法,会对比当前关键帧和与之相连的共视图中的关键帧的相似度,得到一个最低评分;然后遍历所有关键帧找出相似度大于最低评分的闭环备选帧,最后在候选帧中检测具有连续性的候选帧。
闭环检测一般使用词袋模型作为场景匹配方法。而作为一个场景识别问题,闭环检测可以看做是一个视觉系统的模式识别问题。所以可以使用各种机器学习的方法来做,比如什么决策树/SVM,也可以试试CNN方法。不过实际当中要求实时检测,没有那么多时间训练分类器。所以SLAM更侧重在线的学习方法。

27.orbslam工作原理及其优缺点,如何改进

28.SVO中的深度滤波器原理
深度滤波器认为像素点的深度误差满足高斯分布。在每一个关键帧上提取若干特征点,这些特征点的深度未收敛,称为seed。根据当前帧与上一关键帧的坐标变换,计算seed在当前帧上的极线,在极线上寻找与上一关键帧的匹配点,三角化配对点,得到新的深度估计。将当前的深度估计与以往的最优深度估计做融合,更新seed的深度估计。当该深度估计收敛时,将seed添加到地图中。

29.推导重投影误差偏导计算

30.后端边缘化
由于BA的计算量随优化变量的增多而增大,因此必须限制优化变量的数量,但是不能直接丢弃不需要优化的变量,这样会破坏变量之间的约束关系,因此采用边缘化来计算更新量。

31.鲁棒核函数(降低误匹配影响的方法)
如果出现误匹配会导致某个误差项是错误的,从而使某条边的误差特别大。当误差较大时,由于误差函数采用二范数的形式,导致误差增长的特别快。因此需要把原先的误差函数替换成一个误差增长的没有那么快的函数,同时需要保证函数的光滑性。
鲁棒函数有多种,最常见的是Huber核:
H(e)={1/2*e^2 , |e|<delta
      delta*(|e|-1/2*delta), 其它)}

32.单目SLAM和双目SLAM的区别
单目slam和双目slam的本质区别是尺度问题:
1)单目slam的尺度是不确定的,因此单目slam有初始化过程,并且运动恢复是2D-2D情形,需要根据对极几何约束和三角化测量来实现;
2)双目slam的尺度是确定的,不需要初始化,并且运动恢复是2D-3D或3D-3D情形,需要根据PnP、ICP算法实现。

33.路径规划算法原理
1)dijkstra
对于图中每个节点,赋值一个很大的代价
创建一个空列表
将起始节点的代价赋值为0,并添加到列表中
while(列表不为空)
    将列表中代价最小的节点赋给当前节点,并将当前节点从列表中删除
  if(当前节点==目标节点)
    返回成功
    for(当前节点的所有近邻节点)
    if(近邻节点的代价>当前节点代价+从当前节点到近邻节点代价)
     近邻节点的代价=当前节点代价+从当前节点到近邻节点代价
     将近邻节点的父节点设为当前节点
如果近邻节点不在列表中,则将其加入列表    
2)A*
对于图中每一个节点都有两个属性,一个是从起始节点到当前节点的实际代价g,另一个是从起始节点到目标节点的估计代价f,将每个节点的这两个属性均赋值一个很大的代价
创建一个空列表
起始节点的g赋值为0,f赋值为H(起始节点),H为从当前节点到目标节点最优代价,将起始节点添加到列表中
while(列表不为空)
将列表中f最小的值赋给当前节点,并将当前节点从列表中删除
if(当前节点==目标节点)
    返回成功
for(当前节点的所有近邻接点)
    if(近邻节点的代价>当前节点的代价+从近邻节点到当前节点的代价)
     近邻节点的g=当前节点的g+从近邻节点到当前节点的代价
将近邻节点的父节点设为当前节点
近邻节点的f=近邻节点的g+H(近邻节点)
     如果近邻节点不在列表中,则将其加入列表中
3)RRT
将起始节点加入到树中
for(n次)
生成一个随机的采样点x
    if(x不在障碍物区域内)
    从树中找到离x最近的点y
        if(x和y的距离>指定的阈值)
     在x和y组成的线段上找到一点z,使得点z与点y的距离等于给定的阈值
      x=z
     if(x和y组成的线段与障碍物没有干涉)
        将点x的父节点设置为y,并将点x添加到树中

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!