控制算法工程师面经
秋招差不多结束了,来写一下面经。本人虽然是PnC方向的,由于只有一段运动控制实习经历,所以一些大厂的决策规划都没有给面试机会(这告诉我们针对不同岗位的要写不同的简历),但是控制方向的面试基本都通关了。下面总结一下自动驾驶运动控制算法工程师面试常问的问题。
其实下面的问题都不难,但是给未来的同学的建议是:不要 all in 算法工程师,可以同时准备软开or其他方向。这个行业只会越来越卷。
1. 基础知识
车辆动力学
- 主要考察建模,这几乎是必问的问题,因为大多数的项目都是基于模型的。运动学或动力学,Frente or Cartesian, 线性或非线性,reference是什么,cost怎么设计,error怎么定义的。质心侧偏角、航向误差之间的关系是什么。
- 一些常见的扰动和补偿方法,比如:执行延迟、横风、侧倾、坡道。
- 哪些信号是传感器能拿到的,哪些是不能拿到的。卡尔曼滤波相关问题。
- 控制量的物理边界是多大。
- 关于车辆更深层次的问题问得不多,可能是因为项目中没涉及到:比如其他轮胎模型的特点、如何处理道路附着的不确定性等等。
数值优化和最优控制
- 能观能控、状态方程与传递函数转化方式、如何判断系统的稳定性、如何设计龙博格观测器。(这些不经常问)
- 你知道lqr有几种求解方法吗?详细讲讲推导过程。
- mpc的设计,stages多大,实时性如何,lqr和mpc的区别,理论层面看,mpc和lqr是不是一个东西。
- 调参方法,weight的大致数量级关系。
- 离散化方法,各自的特点。
- ilqr的推导过程,开发过程中遇到的实际问题以及如何解决的。
- 常用的正则化方法有哪些?
- qp问题的构成,这些矩阵有什么要求?为什么。
- 为什么常常将问题构造成qp的形式。
- 无约束优化问题求解方法有哪些?讲讲梯度法、牛顿法、拟牛顿法、共轭牛顿法。讲讲线搜索方法有哪些。
- 内点法是什么?
- 介绍一下增广拉格朗日。
- 罚函数的缺点是什么?罚函数因子对问题求解有什么影响。
- 对偶问题是什么?弱对偶性和强对偶性是什么?Slater准则是什么?
- 讲一下kkt条件是什么?
2. 项目经历与计算机基础
对于控制算法来说,最重要的是实车开发调试的经历。工作中用到的语言一般是python和C++,python(matlab等)都是快速验证算法的可行性,然后用C++开发。
项目经历
- 实车的经历重点在于对细节的把握,包括控制器是什么,soc是什么,车速多大,各种误差多大,如何调参的,遇到了什么问题怎么解决的。
- 举个例子,可接受的横向误差数量级:曲率变化比较小,小于 0.10 m,曲率变化大,小于 0.15 m。
- 项目开发的语言/平台是什么?
计算机基础
- 数据结构与算法:参考代码随想录和hot100足以。质量比数量重要,一般面试的题目都是做过的题目。
- 计算机网络:问得很少,只有个别企业问一些简单的八股。
- 操作系统:问得少,比计算机网络多一些,除了常见的八股,还有对ubuntu使用的提问。
- C++:八股问得多,封装继承多态,stl,智能指针,移动语义,主要考察自动驾驶项目常用的语法知识。