自动驾驶机器人slam定位试知识系列08之高频面试题(03)

这个博客系列会分为C++ STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新,基本涵盖了自己秋招历程被问过的面试内容(除了实习和学校项目相关的具体细节)。在知乎和CSDN(某些文章上会附上内推码)也会同步更新,全网同号(lonely-stone或者lonely_stone)。 关于高频面试题和C++ STL面经,每次我会更新10个问题左右,每次更新过多,害怕大家可能看了就只记住其中几个点。(在个人秋招面试过程中,面试到后面,发现除了个人项目和实习经历外,个人所记录的内容基本能涵盖面试官能问到的) (另外个人才疏学浅,如果所分享知识中出现错误,请大家指出,避免误导其他人)

1. 描述下GN,LM方法:

  • GN:线搜索,将f(x)进行一节泰勒展开,最后求解,线性方程H△x=b,用JT*J近似H矩阵,省略H的运算。
  • LM:(H+λI)△x=b   λ = 0,L-M 等于G-N;   λ = 无穷,L-M等于一阶梯度下降   L-M的好处就在于:如果下降的太快,使用较小的λ,如果下降的太慢,使用较大的λ

2. 为什么SLAM中常用L-M优化?

G-N中的H矩阵可能为奇异矩阵或者病态矩阵,导致算法不收敛。而且当步长较大时,也无法保证收敛性,所以采用L-M求解增量方程,但是它的收敛速度可能较慢。

  • H是半正定的,可能出现奇异矩阵(奇异矩阵是线性代数的概念,就是该矩阵的秩不是满秩,奇异矩阵是行列式值为零的矩阵。)或者病态(病态矩阵是对于线性方程Ax=b,对于系数阵A和右边的b发生微小的扰动,就会是解x发生较大的变化,也就是说这样的方程的解是非稳定的)的情况;
  • Δx太大的时候也会导致这种二阶泰勒展开的近似不够准确。为解决这个问题,提出了给Δx添加一个信赖区域方法,也就是LM法,其采用下式判断近似差异的大小进而确定信赖区域范围

3. 加速优化的方法(比如加速ORB2后端优化的方法)

  • 过滤重投影误差大的数据点;
  • 把要维护的三维点改成逆深度的形式,这样维度变少了就变快了
  • 本身orb2里面有的求解增量方程的稀疏性等性质也是加速方法,把这里面怎么使用的稀疏特征也要弄清楚。

4. BA优化中,雅克比矩阵的维数大小与约束和优化变量的关系

  雅克比矩阵的行数是残差函数的维数,列数是优化变量的总维数和;比如以重投影误差约束为例:其误差函数为观测值的像素二维减去重投影过来的二维像素,故雅克比的行数为2,而列数是要优化的一个地图点和前后两帧的转换R、t,一共是9维(以3中的场景2为例子);   举例:10个相机同时看到100个路标点,问BA优化的雅克比矩阵有多少维数?   答:这里面的约束也是重投影误差,且约束线为10*100=1000条,每条线都是两维,故行数为2000;列数为10 * (3+3)+100 * 3 = 360,则雅克比矩阵的大小为2000x360;当然,这里都是假设全部路标点和位姿都是要进行优化的,如果有部分不进行优化,那相应减掉列数即可。

5. FEJ是什么?为什么要用FEJ?

问题: 第一种叙述:滑动窗口边缘化的时候会遇到新老信息融合的问题,旧的求解雅克比矩阵的变量线性化点和和新的求解雅克比矩阵的变量线性化点不同,可能会导致信息矩阵的零空间发生变化,使得不可观的变量变得可观,从而引入错误信息。解决方法是FEJ算法:不同残差对同一个状态求雅克比时,线性化点必须一致。这样就能避免零空间退化而使得不可观变量变得可观------在MSCKF中,(能观性矩阵的秩表示系统能观的维度,零空间的秩表示系统不能观的维度),FEJ做法就是我们⽆需关注0空间在每⼀时刻是否⼀样,保证的是每⼀时刻0空间维度都是4。 第二种叙述:我们将被Marge后的变量描述为Xm,剩余的变量记为Xr。Marg后:先验信息经过舒尔补操作后分别由残差矩阵b与先验信息矩阵Λ构成,对应的Jacobian和残差r需要由这2个矩阵通过正定方程(增量方程)反解出来 但这样就出现了2个核心问题:

  • 被Marg后的变量与测量已经丢弃,先验信息矩阵Λ中关于Xr的Jacobian在后续求解中已无法更新
  • Xr中部分变量还和其他残差有关,这些残差的Jacobian会随新的状态估计的迭代更新而不断在最新的线性化点中计算

则Λ变为了Λ1(线性化点固定)与Λ2(线性化点在变),这样最终将导致Λ的零空间改变,引入错误信息。

6. 如果对于一个3D点,我们在连续帧之间形成了2D特征点之间的匹配,但是这个匹配中可能存在错误的匹配,请问该如何构建3D点

  • 第一种方法:毋庸置疑首先想到的是用RANSAC方法进行连续帧之间的位姿估计,然后用内点三角化恢复地图点
  • 第二种方法:如果是利用非线性优化的方法获得位姿的话,可以在非线性优化代价函数中加入鲁棒核函数来减少无匹配所带来的误差

7. BA中,相机位姿很快接近真值,但地图点却不能很快的收敛,这是为什么?

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

8. ORB-SLAM哪个部分最耗时?后端H矩阵求解的算法复杂度是多少?如何加速求解?

local BA最耗时,直接对H矩阵求逆时O(n3),利用稀疏结构加速

9. 对于光照明暗变化,动态场景,视觉SLAM如何去解决?

针对光照明暗变化:

  • 在相机上放置滤光片
  • 采用多传感器融合技术,去弱化光照变化带来的影响

针对于动态场景:

  • ransac方法:将运动的点视为outlier处理,但是当运动的物体占据图像大部分比例时失效
  • 前景背景的分割:通过像素灰度和目标深度的变化,分辨前景和背景,以为前景是动的,背景是静止的
  • 光流、场景流(三维光流):通过局部的像素灰度变化,推测书运动物体的运动方向和速度
  • 多传感器融合:将相机与IMU、轮式里程计等结合
  • 几何约束:利用静态特征点的三维空间相对位置不变的性质可以分离静态和动态的特征点
  • 目标识别:识别可能会移动的物体,将其去除
  • 建立运动模型:存在动态特征点就存在多个运动模型,找出一个最好的模型。

10. 纯旋转的图像帧可以实现ORB-SLAM的初始化吗?

在计算R,t的时候选择使用H单应矩阵即可

全部评论
答主整理的太好了
点赞 回复 分享
发布于 2024-08-15 22:52 广东
25届求招生跪求更新
点赞 回复 分享
发布于 2024-08-15 22:52 广东

相关推荐

搜索部 首先说下timeline8.18,投递8.19,约一面8.21,晚上一面call约二面8.22,上午二面下午oc周末等待(8.23,8.24)8.25,offer一年前,我还是懵懵懂懂,高考完的暑假,只会提前学学高数,未来的画像是什么?我或许无法预测。开学后,自学Python,接单,无数个客户的ddl,偷偷摸摸一个人找自习的地方,这一步步竟然为后来的我,搭建工程能力的基础。大一上,我也要感谢我的第一位老板,让我接触到了实习,师兄带着我一步步入门,看他们写的飞书文档。大一下,导师带我参与企业项目,这让我渐渐发现,应该去实践,增长见识,而非局限当下,盯着自己的小新pro。不久后,第一波投递开始,结果当然是约面极少。盯着简历上的文字和ssob,我开始思考,确实很多可以去提升。带着些许不甘心,继续沉淀,慢慢的约面也越来越多,有的时候两天7场,准备完就接着下一个日程。这一次,也许是刚好到位吧,比较match,面试答的流利,关关难关关过,成为度孝子展望未来,依然是重重挑战,果然只有收到offer的那一刻是开心的。愿在百度星海拆解的每一段代码,都能成为丈量宇宙的诗行;此志终赴星河,而今迈步重铸天阶。屏幕前的你们,在无数个向星海奔赴的日夜,一定一定,会在未来化作群星回响的征程——请永远相信此刻埋首耕耘的自己!!!
一天三顿半:???百度提前批发 offer了?不是统一和正式批排序完再发吗我靠
百度求职进展汇总
点赞 评论 收藏
分享
评论
5
13
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务