☰
自动驾驶预测决策规划:高频考点与工程实践
2026/10/3 13:12:02 网站建设 项目流程

最近好几个准备面试自动驾驶算法岗的朋友问我,说网上各种“预测决策规划八股”满天飞,但真正能讲清楚“什么场景下用哪套方案”的内容很少,更多是名词解释堆砌。我自己前前后后也面过几十个候选人,带过不少刚转行过来的同学,发现大家在准备这一块的时候,很容易掉进一个误区:把“预测、决策、规划”当成三个孤立的“考点”去背,而没有理解它们在整车软件架构里是怎么串起来协作的。

这篇东西我不打算写成一本正经的技术手册,更像是我这几年在项目里踩坑、评审代码、准备面试和面试别人之后,沉淀下来的一份“内参”。内容会围绕预测、决策、规划三个模块的核心问题拆开讲,把那些高频考点的来龙去脉说清楚,也会穿插一些真正工程落地时的考量和教训。不管你是刚入门想建立知识体系,还是准备跳槽想查漏补缺,只要吃透这些“八股”背后的逻辑,应付技术面试和日常开发都会从容很多。

1. 先搞清楚整个系统长什么样

1.1 感知-预测-决策-规划的分层逻辑

很多新手上来就盯着规划算法啃,结果发现A*、EM Planner、Lattice这些名词越学越乱,因为他没有建立“上游给什么、下游要什么”的边界意识。自动驾驶软件栈虽然各家命名略有差异,但核心逻辑高度一致:感知层负责回答“我周围现在有什么”,定位层回答“我在哪里”,预测层回答“这些东西接下来会怎么动”,决策规划层回答“我该怎么动”。这里的“动”不只是方向盘和油门,还包括“是否变道、是否让行、以多大速度通过”这一连串决策。

预测决策规划在整个链条里处于“承上启下”的位置。它拿到感知融合后的障碍物列表(通常包含位置、速度、朝向、类别、历史轨迹等),结合高精地图和自车状态,输出一条安全、舒适、可执行的轨迹。这条轨迹通常是一条带时间戳的离散路径点序列,包含位置、速度、加速度甚至曲率信息,交给下游控制模块去跟踪执行。

这里有个特别容易被忽略的点:预测决策规划三者的输入输出是有“接口契约”的。预测模块输出的不是“这个障碍物3秒后会在这个位置”就完事了,而是要附带概率分布或者多模态假设;决策模块吐出的也不是一个简单的“左转”指令,而是一组带约束条件的语义决策;规划模块则要将这些语义决策转化成几何上可行、动力学上可执行的轨迹。这个“接口契约”思想是面试里经常会深挖的内容,也是真实工程协作里最容易扯皮的地方。

1.2 预测决策规划的核心边界

搞清系统分层后,还得把三者的职责边界划清楚,不然很容易在面试里答串。预测和决策的边界在于:预测只“猜测未来”,不去评判哪个未来对自车最优;决策只“定方向”,不去负责生成具体的曲线。比如前方路口有一辆左转车,预测模块要做的是估计它“是左转还是靠边停”的概率,而决策模块要做的是根据这个概率分布,结合自车意图,决定“减速让行”还是“鸣笛提示后绕行”。规划模块接到的则是更具体的指令:“自车在3秒内从当前车道平滑切换到左侧车道,目标速度15m/s”。

实际操作里,边界往往不是绝对清晰的。现在很多方案引入了“预测决策联合优化”或者“决策规划一体化”,比如通过代价函数把预测的不确定性直接揉进规划求解里。但作为基础框架,先理清三者的传统边界,再谈融合才有意义,否则很容易陷入“端到端大模型”的浪漫想象里,遇到具体实现就抓瞎。


2. 预测模块:高频考点与实战经验

2.1 预测问题怎么定义,评估指标怎么选

预测模块的核心任务可以描述成:给定障碍物的历史状态序列和场景上下文,估计其未来一段时间内的状态分布。这里“状态”可以是位置、速度、朝向,也可以是意图(比如左转、直行、停车)。面试时一上来就追着问“你用过哪些预测模型”的一般是初级面试官,真正有经验的面试官会先问“你的预测结果是怎么评估的”。

原因很简单:预测评估的指标直接决定了算法方案的选择。最常用的指标是ADE(Average Displacement Error,平均位移误差)和FDE(Final Displacement Error,最终位移误差)。ADE计算预测轨迹与真实轨迹在所有时间步上的平均欧氏距离,FDE只计算预测终点与真实终点的距离。但这两个指标只能反映“平均表现”,掩盖了长尾场景的安全风险。一个预测模型在普通场景下表现很好,一旦遇到加塞、突然变道这类交互场景就崩盘,ADE可能只是略微变差,但实车测试就是致命的。

所以我更建议在简历项目和面试沟通中,除了报ADE/FDE数值,还要能讲清楚“在哪些场景下预测会失效”。业界常用的补充评估方式包括:按场景类型分层计算指标(路口、匝道、cut-in)、计算预测轨迹的碰撞率、把预测结果输入规划器后统计“因预测错误导致的紧急制动次数”。这些指标虽然不是标准八股,但能体现你对预测问题本质的理解深度。

2.2 从基于模型的预测到数据驱动的预测

预测模块的技术演进,基本走了一条“基于物理模型 → 基于规则/意图模型 → 基于数据驱动的交互预测”的路线。这条演进路线本身也是面试八股的高频骨架,你要能说清楚每一步在解决什么问题、引入了什么新问题。

基于物理模型的预测最常见的是恒速度(CV)、恒加速度(CA)模型,配合卡尔曼滤波做状态估计,外推未来几秒的轨迹。优点是计算快、可解释强,缺点是不会考虑道路几何和障碍物意图,弯道场景预测很容易“飞出路面”。所以纯物理模型现在一般只用于短时预测或者作为其他方案的兜底。

基于意图模型的预测引入车道级信息,先估计障碍物最可能的目标车道(比如“往左变道”还是“沿当前道直行”),再在目标车道上用物理模型或路径规划生成未来轨迹。这种方案工程上可控性强,很长一段时间里是量产项目的主流。面试里常问的“如何估计意图”,常见答法有规则打分、贝叶斯网络、隐马尔可夫模型(HMM),进阶一点的会提到用轻量级分类网络。

数据驱动预测是现在卷得最厉害的方向。核心思路是不再手工设计意图规则,而是从大量轨迹数据里学习障碍物的运动模式。代表作有Social LSTM、Social GAN、Trajectron++、MultiPath等等。这些模型内部细节很多,但面试八股更看重的是你能否讲清楚一个共性问题:多智能体交互怎么建模。几个主流思路包括:把周围障碍物池化成栅格图喂给CNN(RasterNet)、用图神经网络建立障碍物之间的交互边(VectorNet)、或者用Attention机制让每个障碍物“关注”其他障碍物(Transformer系列)。

2.3 预测模块的“交互博弈”与不确定性表达

如果说前面是预测模块的及格线,那“交互博弈”和“不确定性表达”就是区分度最高的考点。面试官问“你怎么处理自车对障碍物预测的影响”时,大部分候选人会愣住,因为很多人的预测模型是纯开环的——只观察障碍物历史轨迹,不考虑自车决策对它的影响。但真实交通里,你减速让行,对方可能就加速通过;你提速抢行,对方可能就踩刹车。这种“双向影响”就是交互预测要解决的问题。

工程上比较成熟的折中方案是“自车轨迹条件化预测”:在预测障碍物轨迹时,把自车的规划轨迹作为输入特征之一。具体实现上,可以将自车未来几秒的轨迹点编码后,和障碍物历史轨迹一起喂进预测模型。这样预测结果就是“给定自车当前计划”下的障碍物未来分布,虽然不是真正的博弈,但工程上可控,也能明显提升交互场景的预测质量。

不确定性的表达同样很重要。预测输出的不确定性至少分成两类:偶然不确定性(aleatoric uncertainty)和认知不确定性(epistemic uncertainty)。前者是数据本身带有的随机性,比如行人可能突然驻足的随机性;后者是模型能力不足导致的不确定性,比如训练数据里没见过这种车型。面试时能聊到这一层,面试官会认为你是真的做过预测系统的,而不是只会调包跑模型。


3. 决策模块:从状态机到MDP的进化之路

3.1 决策到底在解决什么问题

决策模块在自动驾驶里回答的问题是:“自车在当前场景下应该执行什么样的驾驶行为”。这里的“行为”是语义级别的,比如巡航跟车、停车等待、变道超车、路口让行、靠边停车等等。一个好的决策系统需要满足三个基本要求:安全(不违反交规、不碰撞)、效率(不阻碍交通流)、可解释(遇到事故时能回溯为什么做出这个决策)。可解释性这块在量产项目里尤其重要,也是面试官喜欢追问的点。

决策问题最经典的数学刻画是马尔可夫决策过程(MDP),由状态、动作、状态转移概率、奖励函数四要素组成。自动驾驶的决策可以建模成一个MDP:状态是自车和周围障碍物的联合状态,动作是语义决策或离散控制量,奖励函数用来量化“安全、效率、舒适”等目标。但教科书上的MDP和真实工程之间有很大一条鸿沟,因为真实场景的状态转移概率往往难以精确建模,奖励函数怎么设计也没有标准答案。

一个折中的工程实践是把决策拆成“上层行为决策 + 下层参数决策”。上层用规则或状态机选择驾驶行为,下层根据当前具体场景输出行为参数(比如目标车速、跟车时距、安全距离阈值)。这种分层方式可靠性高、调试方便,很多量产项目至今仍在用。

3.2 状态机、MDP、POMDP 这些工具怎么选

状态机(FSM)是决策模块最“皮实”的方案,也是面试题里最容易被小看的一个。自动驾驶的决策场景可以被抽象成有限个状态,比如“车道保持”、“变道中”、“路口等待”、“紧急停车”,状态之间通过事件或条件触发迁移。FSM的优点是可解释性极强、开发调试直观、安全验证容易做;缺点是状态设计高度依赖人工经验,遇到设计之外的“组合爆炸”场景容易漏状态,表现得很“机械”。

比FSM“更高级”的决策方法是基于MDP/强化学习的方案。MDP的求解方法包括动态规划、价值迭代、策略迭代,在路径规划、资源调度等领域早有成熟应用,但在自动驾驶决策里,状态空间连续且高维,精确求解并不可行。业界更多是往“分层强化学习”“模仿学习+RL微调”方向探索,但目前真正量产落地的还是少数。

POMDP(部分可观测马尔可夫决策过程)是理论上应对“感知不确定性下的决策”最完备的框架。它额外引入观测模型和信念状态,让决策系统能够推断“我对自己和环境的认知有多不确定”。面试里提到POMDP会加分,但也要做好准备面对追问:“为什么实际项目用得少”。因为POMDP求解复杂度极高,计算资源消耗大,工程上通常要做大量近似和简化,性价比反而不如前面提到的FSM+条件化预测组合。

3.3 决策八股的核心:从“想当然”到“看约束”

决策模块的八股考点里,高频问题基本绕不开这几个:怎么保证决策安全性、怎么处理交互博弈、怎么定义奖励函数、怎么防止决策震荡。前两个前面已经提过,奖励函数设计是另一个容易被问透的点。

奖励函数的设计本质上是在“翻译”人类驾驶员的驾驶目标。常见做法是加权叠加多个子项:碰撞惩罚、交规违反惩罚、进度奖励(希望尽快到达目的地)、舒适度惩罚(加速度过大)、变道惩罚(减少无谓换道)。但权重一旦靠人工调,很容易顾此失彼。我在项目里的经验是要加上“约束型”处理而不是纯靠权重:对碰撞和交规违反这一类硬约束,采用“安全护栏”机制直接否决对应决策;对于舒适、效率这类软目标,才用加权代价来排序。

“决策震荡”是路测里特别常见的坑。表现是自车在“变道”和“保持”之间反复横跳,或者“加速”和“减速”来回切换。原因一般有两个:上游感知/预测结果帧间抖动太大,或者决策模块本身没有加迟滞机制。工程上常用“决策保持计数器”和“状态切换迟滞”来抑制,比如连续3帧都满足变道条件才真正执行变道。


4. 规划模块:把决策变成一条可以开的轨迹

4.1 规划问题的数学表达与约束体系

规划模块的任务是把决策层的语义意图转化成一条满足运动学/动力学约束、避障约束、交规约束的轨迹。一条合格的轨迹一般包括几何路径(path)和速度曲线(speed profile),两者可以联合优化,也可以分开求解。

面试八股里最常问的是规划问题里的约束体系,你要能条件反射式地列出这几类:边界约束(道路边界、车道线)、动力学约束(加速度、加加速度、曲率、横摆角速度)、安全约束(与障碍物的最小距离)、交规约束(限速、停止线、红绿灯)、舒适性约束(加加速度的软约束)。每一类约束都有对应的数学表达方式,比如安全约束可以用圆/凸多边形包络表示,边界约束可以用高精地图里的车道中心线坐标来参数化。

规划问题的求解目标通常是最小化一个代价函数,代价由参考线偏离、加加速度变化率、离障碍物距离、换道次数等子项组成。面试时如果能提到“多目标优化通常用加权求和,但权重标定要结合实车体验来调”,会显得很有工程落地经验。

4.2 路径规划和速度规划的分治策略

工程上最主流的规划方案不是“一次性求解整条轨迹”,而是“分治”:先在Frenet坐标系下做路径规划,再在S-T图里做速度规划,最后组合成完整的轨迹。Frenet坐标系的精髓是用道路中心线作为参考线,将车辆位置表示为纵向位移s和横向偏移l,这样道路的曲率信息被“吸收”到参考线里,路径规划的复杂度大幅降低。这个坐标系转换的思想是规划八股里的绝对核心,建议深挖。

路径规划主流方法分三类。第一类是基于搜索的,比如A*、Hybrid A*,A适合全局导航级路径规划,Hybrid A额外考虑了车辆的非完整性约束,常用于停车场自主泊车场景;第二类是基于采样的,比如RRT、RRT*,通过随机采样构建路径树,在高维空间里搜索能力很强,但轨迹平滑性一般需要后处理;第三类是基于优化的,比如Lattice Planner和EM Planner。Lattice Planner在Frenet坐标系下采样一系列候选轨迹(横向、纵向各采样多个候选),然后用代价函数选最优;EM Planner是先做动态规划(DP)得到一个粗略解,再用二次规划(QP)做平滑,是百度Apollo早期的经典方案。

速度规划同样有对应的思路。最常见的是沿着S-T图搜索:S-T图的横轴是时间,纵轴是沿道路的纵向位移,障碍物在图上被投影为占据区域,规划的目标是找一条不穿越占据区域的S-T曲线。动态规划可以先给出一个粗略的速度曲线,再用QP做平滑优化,处理加速度、加加速度约束。

4.3 轨迹平滑与优化求解的那些坑

很多人面试准备到“DP+QP”就停了,但真正工程里坑最多的是最后一步轨迹优化求平滑。规划出来的轨迹常常存在曲率突变、加速度突变的问题,直接交给控制模块会导致车身顿挫甚至失控。所以需要专门的平滑算法来处理,常见的有B样条曲线拟合、分段多项式拟合、基于OOP(Optimization-based Planning)的QP平滑。

说一个我在项目里踩过的坑:QP平滑的代价函数里,横向偏移的权重调太大,轨迹会被“死死按”在参考线上,遇到障碍物绕行时会切弯切得很生硬;权重调太小,轨迹又会大幅“甩”出去,乘客体验很差。这个权重没有标准答案,只能结合车辆标定和实车体验反复调试。面试如果聊到这里,面试官大概率会对你刮目相看。

另外,规划模块必须处理“动态障碍物未来轨迹不确定”的问题。处理的方法之一是把障碍物的预测结果(带概率分布的轨迹)当作“时空占据概率”,在轨迹代价评估里加入碰撞风险项。更工程化的做法是“轨迹滚动时域重规划”:每100ms重新规划一次轨迹,每次只执行未来1-2秒的轨迹,后面部分作为备用,这样即使预测存在误差,也能通过高频重规划来修正。

4.4 规划模块面试真题与答题模板

5. 常见问题与经验避坑

5.1 八股的“背诵陷阱”和“推导陷阱”

准备预测决策规划面试的过程中,最常见的误区就是“背结论不推导”。比如很多人能熟练说出“Apollo的EM Planner是DP + QP两段式优化”,但被追问“DP在这一步具体在优化什么目标?QP的约束条件是什么?两者的衔接关系怎么处理?”就卡壳了。这是因为只背了流程,没理解每一步要解决的问题。

以EM Planner为例,DP阶段的目标是快速拿到一个“粗糙但可行”的解作为初值,这时候不需要太精细的动力学约束,主要解决“有没有”的问题;QP阶段在DP解的基础上做平滑和细节优化,目标是把轨迹打磨到可执行的质量。所以DP和QP是“先求有、再求好”的关系。面试时能把这个逻辑讲清楚,比背一百遍算法名称都管用。

另一个常见陷阱是“只讲模型,不讲实现”。我说一个我面过的一个候选人的例子:简历上写着“基于LSTM的多模态轨迹预测”,但问了几个关键问题——“输入序列长度怎么定的?”“输出是直接回归坐标还是预测高斯分布的参数?”“训练时如何处理多模态的塌缩问题?”——完全答不上来。所以准备八股时,不要停留在“模型长什么样”,要深入一层想“这个模型怎么用代码实现、怎么训练、怎么上实车”。

5.2 简历项目和真实工程经验的“包装”建议

很多候选人会拿课程项目或者开源项目写在简历里,这本身没问题,关键在于你怎么表述。与其写“实现了LSTM轨迹预测模型”,不如写清楚“基于TensorFlow实现LSTM多模态轨迹预测,在开源数据集(如Argoverse)上FDE从3.2m降至2.8m,并通过注意力机制融合自车意图特征,提升交互场景预测稳定性”。面试官喜欢看到的是“你遇到了什么问题、你是怎么思考的、最终结果如何”。

还有一点强烈建议:在你的项目描述里加入“Fallback方案”和“系统集成”的思考。比如“当预测模型失败时,系统如何兜底”“规划轨迹如何与控制模块接口”。这会让面试官相信,你不仅会跑代码,还真的在思考如何让系统整体稳定工作。

5.3 自动驾驶学习路线的几条建议

如果你是从零开始准备进入预测决策规划方向,我的建议是别一头扎进深度学习框架里。先花两周时间把坐标系变换、车辆运动学模型、车辆动力学模型、卡尔曼滤波这些基础概念吃透。基础模型的底子打好之后,再去看Apollo的规划模块源码、Lattice Planner的开源实现、以及相关课程的作业代码。编程语言方面最好掌握C++跟Python两门,Python用来做研究和原型验证,C++用来搞工程落地,几乎没有例外。

深度学习模型方面,先跑通几个经典方案再谈改进。强烈推荐从行为克隆(Behavior Cloning)开始入门,把轨迹预测做成一个“输入历史轨迹+场景上下文,输出未来轨迹”的回归任务,用PyTorch实现一遍。跑通之后,再渐进式加入多模态、交互建模、不确定性建模,每一层都能给你带来新的理解。这个过程当然不轻松,但相信我,当你真正手写过一个完整系统之后,面试里那种“八股”问题根本难不倒你。


最后再分享一个小技巧,也是我几年从业下来最深的体会:学习预测决策规划,最忌讳“只见树木不见森林”。壮观的端到端模型背后,依然是“感知、预测、决策、规划、控制”这五层架构在兜底。纯粹为了应付面试背八股,非常容易背到焦虑;但是如果你每学一个概念,都追问一句“这在系统里承担什么角色?输入输出是什么?失败了我怎么兜底?”,你会发现自己不知不觉已经把整条技术栈拧成了一股绳。希望这篇东西能帮你在准备面试和工程开发的过程中少走点弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询