2024届SLAM算法岗校招硬货
前期面试雄心满满面经总结的多,后期摆烂随缘面试,没咋总结,楼主尽量回忆回忆,废话不多说,直接上硬货吧。
以下面经包括但不限于图森,影石,科大讯飞,元戎启行,滴滴,卡尔动力,旷视,mmt,小米,小鹏,理想,小马,华为车bu等等。
slam基础
这里列出一些相关问题,答案见我基础知识里的总结,基本是全的,自己对号入座,我主要写问题延伸出来的需要掌握的知识点,视觉slam为主哈。
- 重投影为什么用归一化平面,而不用像素平面?做视觉相关的,几个坐标系之间的转换必须非常清楚,包含世界,相机,图像,归一化,像素等,如果做多传感器融合,还有body坐标系,车辆坐标系等等。
- imu白噪声和随机游走有什么关系?涉及到vio相关的,对于imu的原始数据,建模以及残差构建,甚至imu标定也得比较了解。
- LK光流的三个假设?点特征关联要么描述子匹配,要么光流跟踪,里边涉及描述子计算,暴力匹配,KNN匹配,汉明距离,LK光流三个假设等等。
- 为什么用雅可比矩阵×雅可比矩阵的转置代替海森矩阵?最小二乘问题的优化求解,涉及最速下降法,牛顿法,高斯牛顿法,LM法,狗腿法都要熟悉。
- Ax=b方程数值的稳定性怎么判断?这个确实有点难,这里给出答案用条件数来判断矩阵是否为病态矩阵,对于这种一个微小扰动对数值求解造成很大干扰的病态矩阵直接跳过条件数定义为矩阵的范数乘以其逆矩阵的范数,条件数越大,矩阵越病态,越接近不可逆,从而也越难得到精确解。
- 高斯牛顿不能解决什么问题?同4
- Ax=0以及Ax=b的解法?就线性解法和非线性解法,线性解法就直接硬解,非线性就考虑的多了。
- 非线性最小二乘里F(x)和f(x)的关系?二范数,最小二乘问题的建模。
- imu预积分和积分的差别?这里还包括imu预积分的推导,残差,雅可比以及协方差。
- 对极几何约束是什么?视觉slam里最基础的概念,涉及到本质矩阵,基础矩阵。
- 本质矩阵的求法,最少几个点?基础矩阵,本质矩阵,单应矩阵的自由度以及解法都要了解。
- 大矩阵如何求解?那就是矩阵求解,包括QR,LU,Chokesly以及SVD,其过程和具体怎么分解,解决什么问题都要了解。
- vins初始化是怎么做的?vio必不可少的问题,需要了解一下为什么要初始化,初始化又是去求解哪些量,动态初始化以及静态初始化。
- 光流跟踪时为什么要用图像金字塔?了解一下图像金字塔和KLT光流法。
- FAST角点在光照变化下的影响?几种几何角点的问题,最好再了解了解superpoint,superglue以及lightglue。
- 几种旋转描述方式的相互转换?旋转矩阵,旋转向量,欧拉角和四元数之间的转换,以及SO(3)和SE(3)。
- vins边缘化操作?H矩阵的稀疏性怎么利用,这也是精华部分,怎么做边缘化。
- ceres的具体使用?一个残差怎么求导,手动求导以及自动求导怎么写,其中一些参数怎么设置,求解次数,时间,矩阵求解方式。
- 为什么要用李代数?李群李代数之间的相互转化,以及为什么要用李代数求导,有时也会让你手推对旋转矩阵和变换矩阵的李代数求导,注意左扰动和右扰动的方式。
- 图像之间如何做运动估计?那就是2D-2D,2D-3D,3D-3D的运动估计方式了,设计对极几何,PnP,ICP以及三角化等
背我基础总结里链接的知识,一键三连别白嫖,至少点个心心吧,码字不易。
corner case解决
这里就涉及一些实际项目了,我先抛砖引玉,挑几个印象比较深的总结一下,也欢迎大家来讨论,当然个人之见难免有错误,大佬轻喷,喷我的是狗,永不反弹。
- 泊车场景颠簸路面怎么解决?带来问题:车辆颠簸会1)给imu等传感器带来高频噪声;2)会影响传感器之间的外参,一般来说imu和摄像头安装在车辆顶部,而wheel安装在车辆底盘上,二者之间不是刚体连接,当车辆滑动或车辆发生颠簸时如车辆通过减速带或道路不平时,传感器的外参会发生很大的实时变化;3)使里程计发生较大偏移,进而使构建的地图出现重影,间隙,失真等问题;解决方案:1)可以对imu数据进行去噪,考虑到实时性,可以尝试一些轻量的滤波库,例如iir1;2)对传感器外参进行在线优化,或者重参数化传感器之间的外参(轮速计和IMU之间的旋转外参),涉及到不可观的问题不细说了;3)对地图进行位姿图优化来调整位姿,激光这样做,因为激光点的深度准确,地图点和位姿是绑定的,对于视觉地图来说,最好能做BA,对车辆位姿和地图中车位线的位置进行捆集调整,可以参考港科大的monoLaneMapping,泊车场景也可以用这个思路。
- 弱纹理或重复纹理场景怎么解决?带来问题:一般来说,基于几何方法的点特征在弱纹理场景难以提取,主要是需要像素梯度,弱纹理下像素变化不明显,无纹理更难顶,重复纹理下基于描述子的匹配因外观相似也容易失败,一个地方出来的,破不了招啊;解决方案:1)特征层面:可以引入多维几何特征例如线、面特征或者语义特征,这种不行我就换种,几何不行我就学习,反正硬学还真能学出特征来,见superpoint等等2)传感器层面:加imu,加wheel,加一切可加的。
- 光流错误结果怎么去除?ransac和双向光流,vins-fuison里有这种操作。
- 泊车场景基于已知地图定位时icp初值怎么给?1)室外停车场gps做初值,icp迭代求解位姿;2)室内停车场,imu+wheel递推做初值,icp迭代求解位姿;3)递推不准情况下,可以使用一些全局配准算法(例如FPFH)获得较好的初始对齐结果,然后再用ICP进行精细调整,注意得了解粗匹配和精匹配各自的精度,本质也是个优化问题。
- 错误匹配点怎么去除?一些trick,1)鲁棒核函数;2)ransac随机采样一致去除外点;3)多次优化根据重投影误差筛外点;vins-mono里都有。
- 如何降低里程计的累积漂移?长期运行下里程计漂移不可避免,一般来说,走直线精度还可以,但一转弯旋转一估计不准后边位姿都会有问题,所以可以考虑在旋转上加点观测,可以参考上交邹丹平组的工作。1)从全局角度来看,就加锚点或标志物等一些带有绝对位置的信息,然后利用位姿图去调整位姿。构建的残差包括估计出的位姿在位置上的约束以及位姿增量上的约束。2)从局部角度来看,可以利用闭环检测或引入一些额外的约束和规律,比如曼哈顿世界,亚特兰大世界,以及消失点等,通过提高旋转估计的精度来降低轨迹漂移。
- 回环检测相关的问题?1)车辆行驶的路径不一定会带有回环;2)基于词袋模型的回环检测在地库场景因外观相似而难以触发;3)即使能够触发回环,也面临难以及时修正里程计漂移和无法正确分摊误差难以及时减少里程计漂移——移动机器人需要重新回到以前去过的地方才能检测到闭环,因此很难及时减少里程计的漂移无法正确地将漂移分摊到历史位姿中——闭环优化在执行的过程中仅仅是简单地添加了一个回环约束;解决方案见6。
- 动态场景问题?用目标检测把动态物体识别出来,然后把上边提取到的动态特征去除,但也会遇到动态特征去除过多导致位姿估计精度下降或失败的问题,解决方案就是加其他特征加传感器,特征不行换特征,换不了特征加传感器,只要钱到位,就没有问题,百万级的惯导下一切牛鬼蛇神都灰飞烟灭。
- 如何做回环检测或重定位?1)基于特征的方法:词袋模型,室内还行,室外狗都不用,不过现在词袋不止用点特征了吧;2)基于时空信息的方法:保存车辆的运行轨迹,通过计算当前位姿与历史帧位姿的差值判断是否触发回环,注意用KDtree方便存取查询;3)基于深度学习的方法:这个一般叫vpr,完事还得用PnP算一下位姿,所以最好找那种能一步到位的网络,所以做学习的哥别懒了,直接把位姿给求出来吧,求求了。
- 多传感器之间怎么同步?举个例子,对于imu和轮速计,那就是寻找临近 IMU 前后时间戳的轮速编码器数据,根据时间的变化量做线性插值,vins上都有可以看看四元数的球面线性插值,无损插值。
多多涉猎吧, 这东西挺考验做没做过实际项目,什么,你没做过项目,那你看个鸟啊!
项目面试
每个人的项目都不一样,这里说点通用的,对于某个项目,注意项目背景,需求以及量化指标,遇到了哪些实际问题,现有方法有什么问题,具体怎么解决的,自己项目都整不明白,其他其实也没必要看,我劝你耗子尾汁。
C++基础
这个基本参考阿秀的学习笔记就行,你只需要收藏这个链接,阿秀考虑的可就多了,基本涵盖了所有八股,但面试比较注重一些实际编程遇到的问题,回答的时候可以举一些例子,比如vins里其实有很多这样的操作,设计互斥锁,多线程等等
- 数据结构的一些操作:vector,map,deque你不会真没用过吧,了解了解底层。
- 多线程:swwing pool等等,了解了解。
- 几种锁的应用:别说你没看过vins,ros节点咋传的。
- 单例模式,工厂模式:实验室里一般不用,毕竟代码能跑就行,上班就得考虑的多了,最好了解了解。
相关库
别说你不掉库,库版本冲突怎么解决,以及如何用Cmake编译都了解了解,什么,哥们不调库,牛逼牛逼。
- Eigen:哥们,矩阵运算没这个可不行,得知道版本吧,还有个多版本共存的问题。
- ceres:优化必备,还有g2o,gtsma,选一个深入了解一下。
- Sophus:支持李群李代数,反正我用的少。
- OpenCV:现在都用4吧,但哥们对3情有独钟,不过有些特征检测器都给删没了。
- ROS:这是操作系统,可以了解了解node之间的通信,好像也没啥可问的。
传感器相关
就那么几种,最好了解一下传感器模型以及一些基础的东西,哥们不会没接触过实物吧,数据集科学家建议出门右转。
- 视觉:重投影残差,相机模型,RGB-D的深度图滤波,单目尺度啥的。
- IMU,轮速计:IMU滤波,IMU和轮速计的建模以及预积分残差,轮速计双轮差分模型算帧间位姿,外参标定,imu+wheel递推。
- GPS/RTK:松耦合——VINS-Fusion,以起始帧为基准,将经纬高转为xyz,构建位置上的残差和变化量的残差;紧耦合——GVINS,对伪距,多普勒速度等原始数据进行处理,有一说一,这玩意真不好调。
- lidar/radar:哥们真不熟。
slam相关编程
懒得写了,chatgpt自己查查,今天累了,不想写了,有心情了再补上。
- 最小二乘拟合直线
- ransac拟合直线/平面
- 线性插值
- 球面线性插值
- 双轮差分模型计算轮速计帧间位姿
- ICP代数解法
- 特征点残差定义
其他
除了专业知识,还有些面试爱问的问题,自己想想怎么回答吧,有些问题坑挺多的。
- 有哪些offer,怎么考虑的:有无数offer,要钱多的
- 3-5年职业规划:抱紧大佬大腿
- 自己的优缺点:优点就是没有缺点,缺点就是只有优点
- 对我们公司有什么了解:哥们,你投的你不了解,不会想找通解吧
- 对于一份工作,你最看重什么:当然是为块术啦,难道是为钱嘛
基础知识
图穷匕见,这个才是重点,引流一下,基础知识都写到知乎了,以后还会继续更(看心情)
【VSLAM面试】必备基础知识2-最小二乘问题求解,基础矩阵、本质矩阵和单应矩阵,矩阵分解(求解Ax = b) - 知乎 (zhihu.com)
【VSLAM面试】必备基础知识1-旋转的四种表达方式及相互转换,李群李代数,Ax=0,Ax=b解法 - 知乎 (zhihu.com)