作者:wr人在峡 | 来源:互联网 | 2023-10-10 14:14
这份面试题整理自12家大厂的2022年秋招面试题。题目基本涵盖了自动驾驶和机器人定位方向的主要知识点,包括惯性导航、点云、状态估计、CVVIO、C等部分。建议大家先
这份面试题整理自12家大厂的2022年秋招面试题。题目基本涵盖了自动驾驶和机器人定位方向的主要知识点,包括惯性导航、点云、状态估计、CV/VIO、C++等部分。
建议大家先自己答题,再对照参考答案~(参考答案是由5位行业算法专家整理并校对~),我们也专门建立了面试题交流群,进群方式见文末。
整理不易,点个赞再走吧!
一、惯性导航方向
- IMU测量方程是什么?噪声模型是什么?
- 惯导误差模型是怎么来的?比如15维的卡尔曼滤波模型。
- GPS双天线安装偏角是怎么标定的?
- 多传感器之间是怎么对时的?
- GPS到来时是有延时的,而IMU给出的加速度和角速度是实时的,这种情况下怎么处理延时?怎么做的融合?
- DR递推的原理是什么?大概怎么去做?
- 组合导航卡尔曼滤波过程噪声是如何调参的?
二、点云算法方向
- 最近邻问题有哪几种典型解法?
- 怎么对KdTree进行插入操作?怎么确定一个节点的分类面?
- 怎么对KdTree进行Search By Range和Search By KNN操作?
- 举出除了KdTree以外的近邻计算方法(栅格、B树、R树、四叉、八叉树等)。
- 给定一组点,如何计算其拟合平面?如何计算其拟合直线?解释其方法的意义。
- 举出常见的点云的registration方法。
- 说明ICP的详细过程,要求说明代数解法和匹配问题解法。
- 说明NDT的详细过程,Normal distribution的含义是什么。
- 匹配问题除了最近邻还有什么解法?说明匈牙利算法、最大流/最小割、谱方法等其中一种。
- 解释混合高斯模型含义。解释EM算法的原理。
三、状态估计方向
- 从贝叶斯滤波器角度推出卡尔曼滤波器方程。
- 从增益最优化角度推出卡尔曼滤波器方程。
- 从Cholesky方程推出卡尔曼滤波器方程。
- 解释KF中的噪声矩阵含义。运动方程中估计噪声是变大还是变小?修正方程中估计噪声是变大还是变小?
- RTS与KF之间的联系?
- 将卡尔曼滤波器推广至EKF。
- 解释数值矩阵求逆的几种做法(QR、Cholesky、SVD)。
- 什么是Moore-Penrose逆?如何计算Moore-Penrose逆?
- SVD是什么?SVD是如何求解的?
- 特征值是什么?如何计算矩阵的特征值与特征向量?什么样的矩阵必然能对角化?不能对角化的矩阵的标准形式是什么?什么是Jordan标准形?
- 如何求解线性最小二乘解?如何求解零空间解?说明特征值方法和奇异值方法之间的联系。
- 描述图优化和最小二乘之间联系。画出VIO中常用的图优化模型。
- 稀疏图优化的稀疏性体现在哪里?要求答出稀疏Schur和稀疏Cholesky之一。
- 描述滤波器与最小二乘之间的联系?说明为什么卡尔曼滤波器可以看成两个时刻间的最小二乘。
- 说明UKF、EKF和PF之间的关系。
- 解释UKF中的Sigma采样点关系。
- 解释PF中的重要性重采样的过程是如何做的。解释轮盘赌原理。
- 解释李群李代数在三维状态估计中的作用。
- 流形是怎么定义的?流形在局部与R3同胚是什么含义?为什么说SO3是一个流形?
- 解释SO3, SE3中的Exp和Log的原理。解释BCH的原理和作用。
- 分别使用左右扰动模型,求解几个常见的雅可比:
22.解释四元数的更新与SO3的更新方式有何异同。
23. 说明四元数运动模型与SO3运动模型之间的联系。
24. 解释高斯推断和概率学中边缘化之间的关系。解释边缘化与卡尔曼滤波器之间的关系。
25. 什么是M估计?说明M估计与核函数之间的关系?
四、计算机视觉/VIO方向
- 单应矩阵、基础矩阵、本质矩阵的定义?
- 相机内参和外参的含义?如果将图像放大两倍,内外参如何变化?
- 径向和切向畸变模型含义,鱼眼模型含义(回答等距投影模型即可)?
- 极线是什么?对极约束是什么?描述了什么几何关系?
- 八点法原理与过程。
- 预积分相比于传统积分的差异在哪里?
- 预积分的测量模型和噪声模型是什么?预积分对零偏是怎么处理的?为什么要这样处理?
- 说明预积分的图优化模型。
- 解释重投影模型和BA的原理。
- 说明PnP问题的解法。
- 说明RANSAC原理,讨论存在的问题。
- 解释单目VIO的初始化过程。需要估计哪些量?重力方向和尺度如何估计?
- 为什么单目VSLAM会有尺度漂移?如何解释这种尺度漂移?现实当中有没有解决办法?
- 举出几种光流方法(LK,HS等)。说明LK光流的建模方式。
五.C++方向
- C++函数指针有哪几类?函数指针、lambda、仿函数对象分别是什么?
- 如何利用谓词对给定容器进行自定义排序?
- 传递引用和传递值的区别?传递常引用和传递引用之间的区别?传递右值引用和传递引用之间的区别?
- 函数对象应该通过什么传递?
- 什么是万能引用?用途是什么?
- 什么是完美转发?用途是什么?
- std::unorded_map和std::map之间的差异是什么?
- 虚函数、虚表的原理
- 如何在c++中创建线程?如何在线程间同步?
- 互斥锁是什么?用途是什么?条件变量又是什么?为什么要用条件变量?
- 智能指针和祼指针之间的差异?为什么要用指针的引用计数?
- 智能指针分哪几种?std::unique_ptr, std::shared_ptr, std::weak_ptr各有何用途?
- 悬挂指针会导致什么问题?如何避免?
- traits是什么?什么时候用traits?
参考答案(部分)
一、惯性导航方向
1. IMU测量方程是什么?噪声模型是什么?
中值积分的情况下,IMU的测量方程为:
IMU的随机误差一般包括以下几类,各类误差项及其原理如下(以陀螺仪为例):
(1) 量化噪声
量化噪声是数字传感器必然出现的噪声,我们通过AD采集把连续时间信号采集成离散信号,在这个过程中,精度就会损失,损失的精度大小和AD采样的精度有关(这里具体指的是模数转换时,AD器件的位数,位数越高采样越精确),精度越高,量化噪声越小。
(2) 角度随机游走
陀螺敏感角速率并输出时是有噪声的,这个噪声里面的白噪声成分叫宽带角速率白噪声,我们计算姿态时,本质上是对角速率做积分,这必然会对噪声也做了积分。白噪声的积分并不是白噪声,而是一个马尔可夫过程,即这一次的误差是在上一次误差的基础上累加一个随机白噪声得到的。角度误差所包含的这种马尔可夫性质的误差就叫做角度随机游走。
(3) 角速率随机游走
从理解上和角度随机游走一样,角速率里面并不全是白噪声,它也有马尔可夫性质的误差成分,而这个误差是由宽带角加速率白噪声累积的结果。
(4) 零偏不稳定性噪声
这应该是大家再熟悉不过的一个误差项了,如果一个陀螺只让你用一个指标来体现精度,那必然就是它了。但是这个指标的理解上却不像前几个参数那样直白。
我们可以先把它理解为零偏随时间的缓慢变化,假设在刚开始时零偏大小是某个值,那么过一段时间之后,零偏便发生了变化,具体变化成了多少,无法预估,所以就要给他一个概率区间,来描述它有多大的可能性落在这个区间内,时间越长,区间越大。
实际上,如果你真的测的时间足够长,会发现它也不会无限制增长下去,所以,这个对概率区间的描述只是近似有效,或者一定时间内有效,由于这个有效时间比较长,所以我们一般仍然使用这种方式来描述,只是在理解上要知道这一点的存在。
(5) 速率斜坡
看到斜坡这种描述词,我们一般会想它是不是一种趋势项。实际上,它确实是趋势性误差,而不是随机误差。所谓随机误差,是指你无法用确定性模型去拟合并消除它,最多只能用概率模型去描述它,这样得到的预测结果也是概率性质的。而趋势性误差是可以直接拟合消除的,在陀螺里,这种误差最常见的原因是温度引起零位变化,可以通过温补来消除。
加速度计同样具有这5项误差,而且原理一致,因此不再重复
2. 惯导误差模型是怎么来的?比如15维的卡尔曼滤波模型。
可参考博客文章 < 多传感器融合定位理论基础&#xff08;六&#xff09;&#xff1a;惯性导航误差分析 - 知乎>
或参考英文文献
3. GPS双天线安装偏角是怎么标定的&#xff1f;
通过车辆前行得到航迹角&#xff0c;同时双天线自己可以计算出一个航向角&#xff0c;两者之差为安装偏角&#xff0c;具体拟合方法可以通过最小二乘或滤波算出。
4. 多传感器之间是怎么对时的&#xff1f;
激光雷达&#xff1a;大多数雷达如VLP-16等都提供基于pps脉冲和GPRMC信号的输入接口,PPS和GPRMC信号可以由GNSS或IMU提供&#xff0c;或者由外部时钟源提供。少数激光雷达还支持NTP/PTP同步&#xff0c;PTP的精度一般来说比NTP要高&#xff0c;这两个信号都需要由外部时钟源设备提供。
相机&#xff1a;需要支持外部触发曝光的型号&#xff0c;因为相机帧周期包括曝光时间和readout时间&#xff08;整帧像素点读出&#xff09;&#xff0c;一般来说readout时间是固定的&#xff0c;可以补偿这个时间&#xff0c;相机的时间戳选择为曝光的中间时间。
GNSS&#xff1a;GNSS可以从卫星获得高精度的时钟信号&#xff0c;而且通常的GNSS都支持PPS脉冲以及GPRMC信号。
&#xff08;1&#xff09;使用GNSS作为时钟源&#xff0c;将GNSS的PPS信号提供给LiDAR和一个开发板&#xff0c;开发板将给相机同时提供一个曝光的脉冲信号。CAMVOX采用这种方案。
&#xff08;2&#xff09;使用外部时钟源&#xff0c;这种时钟源通常支持PPS信号输入&#xff0c;将GNSS的PPS传给外部时钟源&#xff0c;同时外部时钟源可以使用PTP/NTP/PPS给LiDAR做时间同步&#xff0c;同时触发相机开始曝光。外部时钟源同时也可以使用PTP/NTP对主机进行时间同步。
5. GPS到来时是有延时的&#xff0c;而IMU给出的加速度和角速度是实时的&#xff0c;这种情况下怎么处理延时&#xff1f;怎么做的融合&#xff1f;
先通过imu积分计算实时的轨迹&#xff0c;同时把imu数据缓存下来&#xff0c;当GPS到来时&#xff0c;再根据GPS的时间戳去修正历史时刻的数据&#xff0c;然后重新积分该时刻后的imu。
6. DR递推的原理是什么&#xff1f;大概怎么去做&#xff1f;
DR&#xff0c;也叫航位推算&#xff0c;是在知道当前时刻位置的条件下&#xff0c;通过测量移动的距离和方位&#xff0c;推算下一时刻位置的方法。可以根据上一时刻位置速度角度&#xff0c;通过imu加速度二次积分得到平移量&#xff0c;角速度积分得到旋转量来进行DR&#xff0c;也可以通过轮速计和车辆运动模型来进行DR。
7. 组合导航卡尔曼滤波过程噪声是如何调参的&#xff1f;
先通过GPS和imu的性能参数和频率确定一个米级单位下的噪声。之后在该噪声参数下得到融合的轨迹&#xff0c;然后分别对两个噪声增大缩小分成几组进行调节&#xff0c;观察轨迹。最终选最平滑的一组轨迹的噪声参数&#xff0c;或者选跟真值比精度最高的一组的噪声参数。
同时&#xff0c;我们除了准备详细答案&#xff0c;还为大家提供自动驾驶面试交流群&#xff0c;目前已经开到4群了~点击这里就可以来啦&#xff01;
http://fss.mpay8.cn/article/dMGIR984adhttp://fss.mpay8.cn/article/dMGIR984ad