当前位置:首页>自动驾驶>搞定了99%的自动驾驶,为何卡在最后1%?——应急规划Contingency Planning解析

搞定了99%的自动驾驶,为何卡在最后1%?——应急规划Contingency Planning解析

  • 2026-10-23 19:32:33
搞定了99%的自动驾驶,为何卡在最后1%?——应急规划Contingency Planning解析

作者:Zestful Zackbot

地址:https://zhuanlan.zhihu.com/p/1998410424610210766

经授权发布,如需转载请联系原作者

论文整体架构和思维导图

这两年行业的“内卷点”很明确:一边卷 L2+ 功能覆盖(城快、城区领航、无图/轻图、接管率),一边卷 端到端(把感知-预测-规划-控制一把学出来)。

但你只要跟做量产/做运营的人多聊几次,就会发现一句大实话:99% 跑得顺不等于敢说 L4/L5。卡住的恰恰是最后那 1% ——低频、但一旦发生就能把系统逼到墙角的“已知未知”。

我们团队(卡内基梅隆大学/ 香港科技大学/ 代尔夫特理工)写这篇综述时,反复遇到一个场景:大家都在做“更聪明的正常驾驶”,但真正决定能不能落地的,是系统有没有应急规划(contingency planning):世界不按剧本走时,你有没有留后路、有没有兜底、有没有办法把安全说清楚。

【论文基本信息】

  • 标题:Contingency Planning for Safety-Critical Autonomous Vehicles: A Review and Perspectives

  • 作者单位:Carnegie Mellon University(CMU)、The Hong Kong University of Science and Technology(HKUST)、Delft University of Technology(TU Delft)

  • 论文链接:arxiv.org/abs/2601.14880

  • 核心定位:该领域首篇全面综述,首次将应急规划重构为 “反应式 + 主动式” 双范式体系,揭示 AI 时代安全验证的核心鸿沟

  • 适用范围:不仅限于自动驾驶汽车,更覆盖无人机(UAVs)、水下潜航器等所有 “安全关键型自主系统”

01

先把“应急事件”钉死:

它不是噪声,而是“离散模态切换”

很多不确定性是连续的:噪声大一点、定位飘一点、预测偏一点,这类你可以当扰动处理。

但应急事件更像:系统突然切进另一个“风险模式”——规则变了。

  • 雷达掉线:从“多传感器融合”切到“弱观测”

  • 爆胎/低附着:从“标称动力学”切到“参数突变动力学”

  • 路口遮挡:从“可见世界”切到“部分可观测 + 交互不确定”

如果用一行数学影子来表达,它大概像这样(不需要记公式,抓住意思就行):

xₖ₊₁ = f_{σₖ}(xₖ, uₖ)

σₖ 是“模式/模态”(正常、传感器失效、低附着、遮挡……),应急事件就是 σ 的跳变。

所以我们更愿意把它称为:离散、低频、高影响的“已知未知”——你知道会发生哪些类(结构已知),但不知道何时发生、发生到什么程度(时刻与轨迹未知)。

工程上这类事件大致分两类(这个分类很关键,因为它决定你用哪套手段):

  • 内部故障(internal faults):车自身能力变了(传感器/定位/执行器、爆胎、制动衰减)。

  • 外部风险(external hazards):世界与他人变了(遮挡、他车意图、临时施工、异常参与者、语义分布外)。

02

两大范式:Reactive vs Proactive

(一个“出事再兜底”,一个“提前留后路”)

我们把大量工作按“底层假设”重新归类后,会发现看似花样繁多,核心其实就两条主线。

1)反应式(Reactive / Fail-safe):“σ 已经明确了,我要 0 延迟兜底”

反应式的前提是:事件已经发生/已经被可靠检测(σ 已知)。

比如:雷达故障告警触发、定位健康度掉到阈值以下、横摆角速度异常、轮胎压力突降等。

这时系统最重要的目标通常不是“继续完成任务”,而是进入一个可长期安全的状态:最低也要做到“别撞、别失稳、别把车扔到不可控区域”。工程里常用一句话叫:进入 最小风险状态(Minimum Risk Condition, MRC),比如稳稳减速、靠边停车、驶离主车流等。

场景:高速爆胎

爆胎的本质是动力学突变:轮胎侧偏刚度下降、可用横向力上限变了,你原先的控制律可能瞬间不适用。反应式要做的是:

  • 限制横摆、限制横向加速度(别让车甩起来)

  • 可控减速,必要时牺牲舒适换稳定

  • 规划一条可执行的“安全终止轨迹”(比如到路肩/紧急停车带)

硬核插播 1:反应式常用的三件“武器”到底在干嘛?

  • 控制障碍函数(Control Barrier Function, CBF):你可以把它当“电子围栏”。

先定义一个安全函数 h(x)(h≥0 表示安全),然后在控制上加约束让系统不会跨过围栏。常见形式是:

ḣ(x,u) ≥ −α(h(x))

工程实现里最常见是一个小型二次规划(QP):尽量不改原控制 u_nom,但必须满足安全约束。所以它像“安全滤波器/最后一道闸”。

优点:快、在线算得动、适合高频兜底。缺点:边界设计和建模保守性很关键。

  • 控制不变集/可行安全集(Invariant Set / Viability Kernel):更“集合论”。

你想找一个集合 X_inv,满足:只要状态进了这个集合,就总存在一个控制让它一直留在里面。

反应式很多时候就是在“把车拉回 X_inv”。

  • HJ 可达性(Hamilton–Jacobi Reachability):这是“最不讲情面”的最坏情况分析。

它用偏微分方程去算:哪些状态最终必然撞(bad set 的 backward reachable set),哪些还能救。

理论上很强、给的保证很硬,但工程上最大麻烦是“维度灾难”(维度一高就算不动),所以会有降维、近似、或用学习方法做逼近。

一句话概括:反应式的气质就是“我宁可保守点,但我要能证明底线”,特别适合内部故障这种“物理层突变”。

2)主动式(Proactive / Branching):“σ 还不确定,我得提前摆好姿势”

主动式面对的是另一类更烦的情况:事件还没发生或没被确认(σ 未知),但你知道“很可能要切模态”。

典型就是外部交互与遮挡:你看不见遮挡后面有没有人,但你知道“可能有”;你不确定旁车是让还是抢,但你知道“两种都可能”。

主动式的目标不是提前“进入 MRC”,而是:在不确定还没揭晓之前,让自己始终留在“可救”的区域——换句话说,给未来留 Plan B,而且最好不影响交通效率。

场景:遮挡路口(鬼探头)

主动式不等于“永远刹停”。更像是:

  • 你提前把速度降到一个值:如果真冲出人,你能在某条停止线前稳稳停住;

  • 同时你把车位摆到一个更安全的几何位置:让刹停所需距离更短、冲突角度更小;

  • 如果信息揭晓“没人”,你就沿主干轨迹继续走,不会像怂车一样卡死路口。

硬核插播 2:为什么主动式经常长得像“场景树”?

主动式常见的表达是:未来不是一条轨迹,而是一棵树(scenario tree):

  • 共享主干(common trunk):分叉前一段动作对所有未来都一致(因为你不能假装自己预知未来)。

  • 分支(branches):一旦观测让你区分了情形(比如看到行人/确认他车意图),才选对应分支。

数学上常被写成一个“非预见性约束(non-anticipativity)”:

对任意两个场景 s、s′,在它们还没分叉之前,u_{k,s} = u_{k,s′}

实现上最典型的是 Contingency MPC(应急 MPC)/ Branching MPC:

  • 你在线优化一棵树:主干 + 若干应急分支

  • 约束每条分支都安全可行(例如不碰撞、满足动力学约束)

  • 代价函数里既考虑效率也考虑风险(有人会用 chance constraints、CVaR 这类风险度量来避免“极端保守”)

再往交互走一步,就会出现博弈论/意图推断:把他车当成会决策的主体,用 Stackelberg / Bayes game / best response 之类模型,让你的动作不仅“规避”,还能“引导”(比如你略微减速让出空间,对方就不必硬插,冲突自然消失)。

一句话概括:主动式的气质是“我不等你出事才慌,我提前把局面摆成‘怎么走都有退路’”,特别适合外部交互这种“语义/意图不确定”。

03

聊完两条路,真正的行业深水区来了:

验证鸿沟(Verification Gap)

我们写综述时最痛的不是“方法多不多”,而是:这些方法到底怎么验证、怎么让人信?

而在 AI 时代,这件事被撕裂得更明显:

1)物理层:相对更容易“形式化保证”

爆胎、低附着、制动退化、传感器失效后的可观测性变化……这些问题再难,很多时候还是能建模的:

  • 你至少能写出保守的动力学不确定集合

  • 你能用 CBF/可达性/不变集去给“不会撞/不会失稳”的边界

所以物理层经常能做到:模型对 → 证明就硬(当然模型错了另说,但路径是清晰的)。

2)语义层:大模型黑盒,很多时候只能“经验硬测”

到了语义层(感知/理解/意图),你会遇到一个很现实的尴尬:

  • 你很难写出“误判会怎么发生”的结构化模型

  • 你也很难穷尽“分布外场景”的边界

最后往往只剩下:仿真跑、回放跑、路测跑,靠覆盖率和统计置信度堆出来。

这就是为什么很多人对端到端最大的担心不是“平均性能”,而是:你怎么知道它不会在某个角落突然犯傻?

物理层像算术题,语义层像阅读理解——题干会变,标准答案也可能变。这条鸿沟本质是方法论的分歧。

硬核插播 3:现在大家在“补鸿沟”的几个方向(但都还在路上)

  • 用形式化“框住”学习模块输出:比如学习给出候选轨迹/意图,最后由 CBF/QP 做安全过滤。

  • 用不确定性校准给“可置信边界”:比如 conformal prediction / calibrated uncertainty,让系统知道“我不确定”,然后触发更保守的主动式分支。

  • 用可验证的场景生成补覆盖:生成式模型做“更会找茬”的仿真场景,但仍然难等同于证明。

04

结论很朴素:未来一定是

“主动式引导 + 反应式兜底”的混合架构

如果你只选一个阵营,工程上都会难受:

  • 只靠反应式:为了覆盖最坏情况会很保守,且某些交互风险“等你检测到已经晚了”。

  • 只靠主动式:算力、分支爆炸、预测误差都会让系统不稳定,而且再聪明的前瞻也需要最后一道硬闸。

所以我们更相信的落地方向是混合架构,而且它不是“把两套东西堆一起”,而是一个闭环:

1)主动式 → 让反应式不那么怂

主动式提前把车带到“更有余地”的状态空间区域,相当于把反应式需要兜底的边界变得更宽松:你不必动不动急刹/停车。

2)反应式 → 给主动式兜底

反应式提供终端安全锚点:不管你前面怎么规划分支,最终都必须保证“最坏情况下仍能被反应式拉回安全集”。

把它说得更像工程,你可以想象一个节奏分层:

  • 高频层(几十到上百 Hz):CBF/QP 这类安全滤波 + 紧急控制(硬闸)

  • 中频层(几到十 Hz):Branching MPC / 交互规划(留后路)

  • 低频语义层:识别不确定性、触发分支、提示 OOD 风险(别瞎自信)

05

收个尾:这方向未来

 5–10 年大概率会越来越热

卷 L2+ 是在堆覆盖,卷端到端是在提效率,但要冲 L4/L5,最后绕不过的还是那 1%:低频高影响、离散模态切换的已知未知。

应急规划的价值也就在这:它不是替代端到端或替代传统栈,而是提供一种更“系统级”的安全观——既要提前留后路,也要最后能兜底,还要尽量把安全说清楚。

最后留三个更硬核一点的问题,欢迎评论区开聊(尤其欢迎同行来补充案例):

1)你更看好哪种组合:学习负责生成候选 + 控制负责过滤,还是学习也参与安全边界估计?

2)语义层“验证鸿沟”里,你觉得最可能先突破的是:OOD 检测、不确定性校准,还是可验证的场景生成?

3)你在仿真/路测里见过最“阴”的已知未知是什么?(那种让你觉得“这事不解决别谈 L4”的)

如果想深入了解具体技术细节,欢迎阅读我们的论文,也欢迎在评论区讨论交流!

参考文献:L. Zheng, L. Zhang, P. Yu, Y. Sun, S. Grammatico, J. Ma, and C. Liu, "Contingency planning for safety-critical autonomous vehicles: A review and perspectives," arXiv Preprint arXiv:2601.14880 [eess.SY], Jan. 2026.

https://doi.org/10.48550/arXiv.2601.14880

doi.org/10.48550/arXiv.2601.14880

自动驾驶中常见的应急场景

END

智猩猩矩阵号各有所长

点击名片即可关注

最新文章

随机文章