SLAM算法工程师面经
暑期实习
字节 AI Lab
一面
- IMU 预积分解决了什么样的问题?为什么要加入预积分?预积分有什么作用?
- IMU 预积分和普通积分有什么区别
- FAST-LIO2 有没有用到预积分
- 比赛中用的多少线的激光雷达,有没有试过 16 线激光雷达+FAST-LIO2
- FAST-LIO2 和 LIO-SAM 前端有什么区别
- FAST-LIO2 前端如果也加上特征提取的话和 LIOSAM 的效果会有什么样的差别
- LIOSAM 是如何解决特征退化的
- 你们在做室内地图构建的时候有没有遇到走廊退化的问题,你们是怎么解决的
- 比赛时为什么要用 UKF 解决机器人高频振动的定位问题
二面
面试官为非 SLAM 岗,所以没问技术细节,主要在了解项目和比赛内容
旷视
自动驾驶一面
主要都是针对项目细节问的
- 介绍一下 UKF、iterated-KF
- 图优化用的什么框架,g2o 和其他的框架比有什么区别
- Eigen 遇到过什么报错?有没有关于内存对齐的错误
- 手撕:合并有序链表(Leetcode 21 题)
研究院一面
- 向量内积和外积的几何含义
- UKF 的状态空间有啥,除了机器人的六维状态,还有没有三维的 feature
- 手撕:给定平面中四个点,判断四个点能否形成正方形
图森
一面
- 自我介绍、问简历里的项目
- 紧耦合的 Lidar 和 IMU 中,IMU 是如何初始化的
- UKF 的具体实现步骤
- 定位过程中是如何处理 IMU 的预测值和 odom 的预测值
- iterated-KF 是如何工作的
二面
- git 如何撤销 add 操作
- git 如何撤销 commit 操作
- fork 之后,如果原仓库更新了,如何更新本地的仓库
- C++资源管理 RAII
- C++11 中的移动语义
- 手撕 1
- 手撕 2
达摩院
一面
- 你认为在本科到研究生期间,收获最大的项目或者比赛是什么?(并介绍)
- 你在这个项目中遇到的最大的难点是什么
- 你做的 LIO 前端为什么使用 IMU 的预积分,预积分和普通的积分比有什么区别
- 你提到的 LOAM 算法,它的帧间匹配是如何实现的
- 你在跨越险阻这个比赛中最大的贡献是什么?(并介绍)
- 刚才提到的 NDT 和 ICP,介绍一下二者分别是如何实现点云匹配的
- 一些比较基础的问题:姿态有哪几种表示形式?(四元数、欧拉角、旋转矩阵)分别有什么优缺点?欧拉角如何做插值?旋转矩阵转欧拉角是唯一解嘛?
二面(主管)
- 问项目经历
- 了解比赛内容及收获
- 比赛准备过程中,意见不一致怎么处理的
- 无技术细节、无笔试
三面(HR)
- 你期望在这份实习中学到什么
- 你怎么看待机器人和自动驾驶的前景
- 以现在的技术和经验,你觉得自己会更适合去做自动驾驶还是机器人
- 在团队中更倾向于什么角色
- 团队中出现意见不一致的时候,你是如何解决的?举一个具体的例子
- 说说你大学期间最 tough 的一段时间
- 你有什么比别人好的学习方法嘛
- 小蛮驴前段时间在郑州的大学中陷到水泥里面(是刚铺的水泥,还没干,只有一条细线作为标识),你会如何来分析这个问题
文远知行
一面
- 给定 p1…pn 的点,用 RANSAC 如何拟合平面
- 给定 p1…pn 的点,用最小二乘法如何拟合平面,写一下最小二乘法的方程以及如何求解
- 给三个点,如何求平面方程
- 说一下 LIO 的流程
- LIO 如何去除点云的畸变,用的 pose 是如何得来的
- 使用预积分的目的
- 写一下 IMU 预积分得到的 的形式
- 说一下 的几何意义
- 多线程之间如何线程同步(举了一个例子,前端处理好的点云数据,后端如何知道处理好了并接受)(ROS Topic?)
1 |
|
上述代码中静态变量如何赋值 11. shared_ptr 和 unique_ptr 的区别,以及 unique_ptr 如何赋值 12. 手撕:给定一个二维数组,判断其中 1 组成的块的个数(上下左右任意一个方向有相邻的 1 就组成一个块)
1 |
|
美团无人车
一面
- 聊项目
- IMU 预积分和普通积分有什么区别
- UKF 和 EKF 区别
- 手撕:输入一个浮点类型的数据,输出它的平方根(二分或牛顿法)(LeetCode 69)
二面
- IMU 的 bias 估计不准确会对预积分过程以及里程计估计有多大的影响
- IMU 预积分
- 简要说明一下预积分的推导过程
- 预积分的离散化是如何做的
- IMU 和 Lidar 的标定是如何实现的
- 说一下 LIO-Mapping、LIO-SAM、FAST-LIO2、HDL 的优缺点
- ROS 的 Topic 这种机制有什么优点
- 有没有接触过视觉和 GPS
- 你所做的框架有没有想过在室外环境应如何修改
- 说明一下 UKF 实现定位的过程
- C++11 中的 move 函数
1 |
|
- 手撕:删除链表的倒数第 N 个节点(LeetCode 19)
元戎启行
一面
- 对于平面误匹配的情况,有没有遇到过,是如何解决的(鲁棒优化的方式:① 最大化共识,RANSAC 实现 ② 鲁棒核函数,M 估计)
- 预积分对于优化的意义是什么
- 预积分的 有没有几何意义
- FAST-LIO2 和 FAST-LIO 的区别(i-KD Tree 和对 ikf 的修改)
- 在 UKF 定位中,由于 UKF 是针对当前时刻 IMU 进行预测,对于 Lidar 和 IMU 的时间不同步,是如何处理的?(可以参考一下 MSCKF)
二面
- C++11 智能指针
- C++11 左值引用
- C++11 move 函数有什么作用,为什么 C++11 要引入 move 函数
- 讲一下 C++中 template
1 |
|
三面
- 自我介绍、问项目
- 表示旋转的三种方法,各有什么优缺点
- 求解 $ \frac{\partial R_1R_2}{\partial R_2} $
智加科技
一面
- ROS 中消息传输的机制
- ROS 中消息的时间同步
- 项目
- 用过什么 C++中的容器(vector queue map unordered_map)
- map 和 unordered_map 内部分别用什么实现的
- 模板实例化是在编译期还是在执行期
- 智能指针有什么作用
- 手撕:写一个快排
- 手撕:给两组二维坐标序列,分别代表左右两条车道线,计算车道线的中线的点序(左右点的数量不一样长)
秋招
蔚来
一面
- 实验室项目
- 实习项目
- 无专业知识无八股
- 手撕:nums=[3,2,1,0,4],代表每个下标可以跳跃的距离,起始位置在 idx=0,问判断能不能跳跃到最后一个下标(动态规划),说一下实现的时间复杂度和空间复杂度
- 反问:蔚来自动驾驶部门主要是在北京,目标做 L4,目前地图定位组有 80 个人,作息 10:30-21:30
二面
- 实验室项目
- 实习项目
- 无专业知识无八股
- 手撕:输入一个字符串,输出其计算结果,例如输入"0+3-2-5*6", 输出-29
- 面试官是做机器学习构建高精地图的,生成车道线、路口等
三面
- 手撕:K-Means,不咋了解机制,换一个:01 矩阵,找最大的相邻的 1 的面积
- 九十月份能不能先过去实习
- bfs 和 dfs 的区别
- fast-lio2 和 liosam 的区别,在哪些场景下效果会更好
- g2o 和 gtsam 之间的区别(没用过 gtsam,不太清楚)
- fast-lio2 迭代次数一般设置多大(经验来看,没改过迭代次数,不过说了一下程序判断跳出迭代的条件)
- 意向工作地点,上海能不能接受
速腾聚创
一面
- 聊项目,无专业知识,无八股
- 团队规模做 SLAM 的五六个人,今年要扩招,往机器人公司探索,做一些自动泊车这种
二面
- 聊项目,无专业知识,无八股
- 数学题:
AB+CD+EF+GH = III,每个字母对应 0-9 一个数字,问哪个数字没被用到 - 反问:
今年团队规模要扩大,再招十来个做 SLAM 的
三面
- 聊天
航天科技创新研究院-HR 综合面
- 自我介绍
- 科研结果怎样产业化,自己的看法
- 比赛中收获最大的是什么时候
- 为什么一直参加比赛
- 为什么选择来研究所
美团无人配送
一面
- 面试官是做规划控制的,不知道为啥把我捞起来了,离谱
- 没啥好聊的,就聊项目
- 手撕:编辑距离,没做出来(LeetCode 72)
- 八股:深拷贝和浅拷贝的区别
定位组一面
- 自我介绍 聊项目
- 无八股
- 手撕:计算根号 2,循环在 50 次以内(直接二分)
- 反问:定位建图规模在大几十人,具体数字不方便透露,以公开道路无人配送为主,近期不考虑做卡车
定位组二面
- 项目
- 无八股 无手撕
定位组三面
- 机器人和自动驾驶,未来会更倾向于哪个方向
- 未来的职业发展规划,选择建图或者是定位
- 实验室做的项目、比赛或者实习期间遇到的难点,是怎么解决的
- 三个词形容一下自己,并分别举个例子
- 现在获取新的知识的方式有哪些
- 现在面了哪些公司,收到了哪些意向书,你会如何排序选择
- 会根据项目问一下项目有多少人,都是怎么分工的
- 实验室期间有没有发论文
- 在实验室期间主要以参加比赛为主还是做项目搞科研为主
擎朗智能
一面
- 自我介绍
- 项目
- UKF 实现定位
- 运动规划里可以怎么用图优化(TEB)
- 牛顿法、高斯牛顿法、梯度下降法
- new 和 malloc 区别
- 多态
- static 关键字
- AMCL 和 MCL 区别、GMAPPING 原理
二面(两个人一起面试)
- 自我介绍(大概二十多分钟,做了一个 PPT)
- 问项目和细节
- 滤波的五个步骤
- 梯度下降、牛顿法、高斯牛顿法区别,梯度下降法局限性
- 超多八股:介绍多态、介绍 stl 容器、map 和 unordered map、用过的设计模式(只知道单例模式)、智能指针、C++的内存结构
智加科技
一面
- 项目
- 介绍 IMU 预积分(好久没看了,讲的不太清楚)
- 手撕:寻找第 K 大(快排)(LeetCode 剑指 Offer 76)
- 开放性问题: 在做融合的时候要怎么设计各个传感器的方差
- 如何判断 lidar 在三个轴上匹配的置信度
- 点云的 PCA(主成分分析)特征值和特征向量对点云来说有什么物理含义
二面
- 项目
- 问了很多达摩院这边的工作
- C++调试工具 gdb
- 进程和线程的区别
- 手撕 1:写一个二分(面试官很惊讶,一面居然出了寻找第 K 大这么难的题)
- 手撕 2:栈的压入、弹出(LeetCode 剑指 Offer 31)
- 反问:北京建图定位规模七八人
三面
- 项目
- 开放问题:对于高速加隧道这种场景,你可以怎么设计定位的模块
- 开放问题:SLAM 分为哪几个部分,分别是干啥的
- 进程和线程、进程之间如何通信、ROS 有没有遇到什么 bug、引用传参好处、
- 手撕:反转链表(要怎么设计验证数据 (LeetCode 剑指 Offer 24)
- 手撕:设计 LFU(LeetCode 460)
华为
一面
- 项目
- 手撕:给定一个字符串 s,根据字符出现的频率,对其进行降序排序,例如:“tree”,输出"eert",e 出现了两次,排在前面,r 和 t 各出现一次,任意顺序都 ok(共享屏幕在本地 IDE 做,限时 15min)
- 笔试复盘:描述一道笔试题
- 北京上海两地办公
二面
- 项目
- 开放问题:如果机器人是坐电梯上到二楼,那么 LIO 会出现什么问题,该如何解决
(紧耦合会出现比较大问题,LIDAR 残差和 IMU 残差不一致。解决方案:IMU 零速区间检测?不太懂) - 开放问题:目前根据 hd map、车道线定位、RTK 已经能实现比较好的定位,那 SLAM 在无人车的定位里面主要优势是什么
(就是在没有车道线和阴天 rtk 信息不好的时候发挥作用?) - 开放问题:高精地图在自动驾驶里面比较大的问题在哪?可以如何解决?
(高精地图体量太大,可以把高精地图分块,每次只加载附近区域的地图块;可以对高精地图进行压缩,提前进行地图压缩,加快地图加载速度) - 手撕:01 矩阵寻找岛屿数量
三面
- 聊天
仙途
一面
- 聊项目
- 八股:常用的 STL 容器
- vector 的内存管理,是如何做到动态分配的
- deque 如何实现前端和后端插入删除复杂度都是 O1
- unordered map 底层是用什么实现的
- 如果要实现一个哈希表,要怎么做
- 常用的优化算法
- 如果图优化中有 10 个顶点,3 条平面边,一条里程计边,那算出来的雅可比矩阵是什么样的
- 手撕:给一个排好序的数组,把他转换成任意无序的状态
百度
一面
- 项目
- 无八股
- 旋转有几种表示方法
- 如何进行四元数插值
- 描述点到点 ICP 算法过程
- 手撕:寻找两个正序数组的中位数(Hard)(Leetcode 4)
反问:计算机 3D 视觉就是高精地图,整个地图组大概八九十人,点云融合组不到十个人,主要做 Apollo robotaxi 和百度 ANP(L2 辅助驾驶)
二面
- 纯问项目,无八股,无手撕
- FAST-LIO2 和 LIO-MAPPING 这两种 LIO 的方法,有什么区别,对应的 covariance 有什么区别,对优化过程有什么影响
- LIO 过程中,如果利用滑窗的方法,既想让滑窗覆盖的范围大一些,又想不让 IMU 积分时间太长,应该怎么办(参考 VINS-MONO 的方法,回去补课)
三面
- 聊天,聊项目
文远知行
一面
- 面了一个半小时,没做自我介绍,上来就介绍阿里的项目
- 面试官是做决策的,聊了四十多分钟的决策, 给了很多场景,问这些场景下车辆应该考虑哪些因素做决策
- 手撕:给一组二维点以及一个四元数,输出旋转之后的二维点,用 Eigen 实现
- 计算 sqrt(x)
二面
- 项目、实习(实习问了将近半小时,觉得达摩院的方案做的不行)
- 手撕:反转每对括号间的子串(Leetcode 1190)
SLAM算法工程师面经
https://fansaorz.github.io/2023/02/10/SLAM算法工程师面经/