news 2026/8/27 13:11:42

第265篇 SLAM面试高频题——面试官最爱问的20个SLAM问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第265篇 SLAM面试高频题——面试官最爱问的20个SLAM问题

前面将近30篇把SLAM从基础到进阶都过了一遍,从数学原理到具体系统,从传统方法到深度学习。这篇做个收尾,把面试官最爱问的SLAM问题做个汇总。

面试SLAM岗位(不管是视觉SLAM还是激光SLAM),面试官的提问思路通常分三步:基础概念看你是不是真的理解、算法细节看你有没有动手做过、系统设计看你能不能解决工程问题。下面按这个思路来整理。

基础概念类(5题)

1. SLAM是什么?和里程计有什么区别?

SLAM全称Simultaneous Localization and Mapping,同时做定位和建图。里程计只做定位(估计运动),不建图。SLAM的核心价值在于闭环——地图可以反过来帮助定位,形成正反馈。

2. SLAM的前端和后端分别做什么?

前端做帧间运动估计(视觉里程计或激光里程计),输出相邻帧之间的相对位姿。后端做全局优化,利用回环检测和因子图把所有位姿约束放在一起优化,消除累积误差。前端追求实时性,后端追求全局一致性。

3. 什么是回环检测?为什么SLAM必须有回环检测?

回环检测是识别"当前来过"的地方。没有回环检测,SLAM就是纯里程计,累积误差无法消除,走一圈回来地图对不上。回环提供了"跨时间"的约束,让后端优化能把轨迹"拉回来"。

4. 单目SLAM的尺度问题是什么?怎么解决?

单目相机只能观测角度不能观测距离,所以估计的轨迹和地图没有绝对尺度——你无法分辨是走了1米还是10米。解决方案包括:融合IMU提供尺度约束(VINS方案)、用深度学习预测深度(DROID-SLAM)、用已知尺寸的物体做标定。

5. 特征法和直接法的区别?

特征法先提取关键点再匹配,用匹配点的重投影误差做优化。直接法不提取特征,直接用像素灰度值的光度误差做优化。特征法对光照变化鲁棒但计算量大,直接法速度快但对光照敏感。ORB-SLAM用特征法,DSO用直接法。

视觉SLAM核心题(5题)

6. 对极几何是什么?本质矩阵和基础矩阵的区别?

对极几何描述两视图之间的几何约束。本质矩阵E用于归一化坐标(去掉了相机内参),基础矩阵F用于像素坐标(包含内参)。已知内参可以从F推出E,从E分解出旋转和平移(差一个尺度)。

7. PnP问题是什么?常用哪些求解方法?

PnP是根据3D-2D对应点估计相机位姿的问题。常用方法有P3P(3个点的最小二乘解)、EPnP(高效n点算法)、迭代法(先用P3P给初值再用非线性优化精调)。OpenCV的solvePnP函数封装了这些方法。

8. Bundle Adjustment在SLAM中扮演什么角色?

BA是SLAM后端优化的核心。它同时优化所有相机位姿和3D点位置,最小化所有观测的重投影误差。本质是一个大稀疏非线性最小二乘问题,利用稀疏性可以高效求解。

# BA优化的目标函数示意 def ba_cost(poses, points, observations): cost = 0 for obs in observations: proj = project(obs.point, obs.pose) # 3D投影到2D cost += (obs.pixel - proj).squaredNorm() return cost # 最小化这个cost

面试官追问:BA的稀疏性体现在哪里?回答:每个3D点只被少数几帧观测到,所以雅可比矩阵大部分位置是零。利用Schur补可以把3D点边缘化掉,只对位姿做优化,维度大幅降低。g2o和GTSAM都利用了这种稀疏性。

9. ORB-SLAM的三个线程分别做什么?

Tracking线程做前端跟踪,每帧提取ORB特征、和参考关键帧匹配、估计当前位姿。Local Mapping线程做局部建图,插入新关键帧、局部BA优化、剔除坏点。Loop Closing线程做回环检测和全局优化。三个线程并行工作。

10. VINS-Mono的IMU预积分是什么?为什么不直接积分?

预积分把两帧之间的IMU测量预先积分成一个相对运动约束,这个约束和当前状态估计无关。好处是当状态估计更新时(优化迭代),不需要重新积分IMU数据,只需要用预积分量做简单修正,大幅减少计算量。

激光SLAM核心题(5题)

11. ICP和NDT的区别是什么?

ICP做点到点(或点到面)的最近邻匹配然后最小化距离,对初始值敏感,容易陷入局部最优。NDT把点云分成体素,每个体素拟合一个正态分布,用概率密度函数做配准,不需要显式的点匹配,对初始值要求更低。

面试追问:实际项目中你怎么选?回答:初始位姿比较准(比如用IMU给了好的初值)就用点到面ICP,精度高速度快。初始位姿不确定或者场景特征不明显就用NDT,收敛域更宽。也可以先用NDT粗配准再用ICP精配准。

12. LOAM的核心思路是什么?

LOAM把点云中的点分为边缘点和平面点。边缘点用点到线距离做配准,平面点用点到面距离做配准。这种分类处理利用了环境中的几何结构,比全局ICP更快更准。LOAM是实时激光SLAM的里程碑。

13. Cartographer的子图(submap)机制是什么?

Cartographer把地图分成多个子图。前端扫描匹配在当前子图中做,子图完成后冻结不再更新。后端用回环检测在所有已完成的子图之间做全局优化。这种设计控制了优化规模,适合大场景。

14. 激光SLAM中的运动畸变怎么消除?

激光雷达是旋转扫描,一帧点云采集过程中传感器在运动,导致点云有运动畸变。消除方法是用IMU或里程计数据估计每个点的精确时间戳和位姿,把每个点都投影到帧开始的位姿下。LOAM和LeGO-LOAM都做了去畸变。

15. 点云下采样为什么重要?常用什么方法?

原始点云数据量巨大(16线雷达每秒约30万点),直接处理太慢。下采样减少点数同时保持几何特征。常用方法有体素滤波(voxel filter,把空间分成网格,每个网格只保留一个点)和随机采样。体素滤波最常用,网格大小是关键参数。

优化与系统题(5题)

16. 图优化中节点和边分别代表什么?

节点代表状态变量(位姿、3D点等),边代表观测约束(里程计测量、回环约束、GPS观测等)。每条边有一个信息矩阵表示约束的置信度。优化就是找一组节点值,使所有边的误差加权平方和最小。

17. g2o和GTSAM的区别?

g2o更轻量,接口灵活,ORB-SLAM用的就是g2o。GTSAM更重量级,有完整的因子图框架,支持增量式优化(iSAM2),代码更规范但学习曲线陡。研究用GTSAM更方便,工程部署g2o更灵活。

18. 关键帧选取策略有哪些?

常用策略有三种:基于共视关系(和已有帧共视点太少就插入新帧)、基于运动量(移动距离或角度超过阈值就插帧)、基于时间间隔(每隔固定帧数插入)。ORB-SLAM用的是共视关系+运动量的组合策略。

19. 怎么评估一个SLAM系统的好坏?

从精度、鲁棒性、实时性三个维度评估。精度用ATE和RPE(evo工具),鲁棒性测试光照变化、动态物体、传感器退化等极端条件,实时性统计前端后端各自的耗时。还要关注内存占用和关键帧管理策略。

20. 你在SLAM项目中遇到过什么坑?怎么解决的?

这是开放式问题,面试官想看你的实战经验。准备几个具体的例子:

初始化失败——IMU静止时陀螺仪噪声导致初始化超时,解决方案是要求用户做特定运动(画8字)来激励IMU。回环误检——走廊里两扇门长得很像被误判为回环,导致地图扭曲,解决方案是提高回环阈值并加几何一致性验证(RANSAC验证回环约束)。优化不收敛——信息矩阵设置不当导致某些约束权重过大,解决方案是仔细调信息矩阵的对角元素。特征点跟踪丢失——快速运动时特征点出视野,解决方案是加入运动模型做位姿预测,减少帧间搜索范围。


这20个问题覆盖了SLAM面试的核心知识点。基础概念、视觉SLAM、激光SLAM、优化系统四大块,每块都挑了最高频的问题。面试前把这些问题的答案过一遍,心里就有底了。

SLAM这个系列从第236篇到这篇,一共30篇文章,从数学基础到具体系统,从传统方法到深度学习,再到性能评估和面试题,基本覆盖了SLAM岗位面试需要的所有知识。

上一篇:第264篇 SLAM系统性能评估

下一篇我们进入导航模块,从ROS2 Navigation2框架开始。

如果这篇文章对你有帮助,欢迎点赞支持一下,你的鼓励是我持续更新的动力!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 13:10:52

UP Board换代Whiskey Lake:AI Core X模块如何重塑工业边缘计算

最早接触 UP Board,还是在第一代 Atom 平台的年代,彼时它在我眼里就是一个“能跑 Windows 的树莓派”。这几年 UP Board 产品线一步步迭代,从 UP Squared 到后来的 UP Xtreme 系列,我注意到它在工业场景里被用得越来越多。最近我又…

作者头像 李华
网站建设 2026/8/27 13:09:58

史上最全Android面试题(带全部答案)2024年最新版

金三银四跳槽季即将来临,今天我们要谈的主题是关于求职。 对于技术人员来说,求职是职业生涯中不可或缺的一部分,而准备一份全面细致的面试题则是减少麻烦的关键。在这个跳槽季,我特意准备了这个系列的文章,一方面是为了…

作者头像 李华
网站建设 2026/8/27 13:09:25

双核MCU架构解析:如何兼得高性能与增强安全

1. 双核 MCU 的架构逻辑:性能与安全为什么能“兼得”这几年做嵌入式项目,明显感觉到双核 MCU 已经不是“旗舰专属”了。随手翻一下主流厂商的产品线,意法半导体的 STM32H7 系列里带双核的型号、恩智浦的 i.MX RT1170、瑞萨的 RA6M5 / RZ 系列…

作者头像 李华
网站建设 2026/8/27 13:04:49

Linux学习10-mysql路由器,redis数据库及codis部署

MySQL路由器实现负载均衡安装MySQL router编辑配置文件手动添加读写,只读端口重启服务sever1上mysql创建新用户,再创建test组sever4连接7001端口三个sever上都安装网络连接查看工具查看负载均衡innoDB Cluster让 MySQL Router自动感知集群内部变化&#…

作者头像 李华
网站建设 2026/8/27 13:04:39

101.嵌入式C语言环形缓冲区实战:从原理到完整代码实现

一、核心原理回顾环形缓冲区的本质是一个首尾相连的数组,通过两个指针维护数据状态:写指针(wr_ptr):指向下一个可写入的位置读指针(rd_ptr):指向下一个可读取的位置空判断&#xff1…

作者头像 李华
网站建设 2026/8/27 13:03:15

python标准库 - asyncio

文章目录 介绍 高级API 协程与任务 awaitable对象 其他api Streams Stream客户端与服务端案例: Stream 注册一个socket等待接收数据 同步原语 asyncio.Lock asyncio.Event asyncio.Condition Semaphore 介绍 asyncio 是异步的python的标准库,基于async/await 语法编写协程并发…

作者头像 李华