在自动驾驶系统(ADS)的研发中,规划模块(Planning)常被称为车辆的“大脑”。如果说规划算法是这个大脑的各种“技能”,那么场景管理(Scenario Management)就是调度这些技能的“神经中枢”。过去,我们基于 Apollo 框架进行开发时,随着业务场景从简单的“车道跟随”扩展到复杂的业务逻辑时“代客泊车”、“掉头脱困”及“故障降级”,原有的场景切换逻辑逐渐显露出其工业化的瓶颈。今天,我想聊聊我们对规划模块场景切换架构的一次深思熟虑的重构:从生硬的顺序匹配,进化为基于优先级的动态竞标体系。一、 破旧:为什么“老架构”跟不上时代了?
在传统的 Apollo 设计中,场景切换逻辑相对直观,但也存在缺陷:顺序执行的“首位效应”: 场景决策器(Deciders)是按代码顺序排列的。只要排在前面的场景(如 ParkAndGo、intersection)满足了基本条件,系统就会直接进入,而排在后面的、可能更符合当前局部最优的场景则永远没机会执行。
2. 不可逆的“状态陷阱”: 缺乏统一的等级划分。一旦进入某个复杂场景,很难在保证安全的前提下被更高优先级的安全逻辑(如紧急制动)平滑打断。想象一下: 车辆正在执行变道,此时感知系统突然报出遮挡故障。在旧架构下,由于变道指令已发出且处于最高优先级,系统可能会硬着头皮继续完成变道,而无法即时降级到“车道保持”或“靠边停车”。二、 立新:三大原则定义的重构蓝图
为了解决上述痛点,我们重新定义了场景切换的底层逻辑,核心围绕三个原则展开:1. 优先级抢占 (Priority Preemption)
我们建立了一套严谨的 场景分级体系 (Scenario Grading System):2. 原子性保护 (Atomic Protection)
对于涉及复杂横纵向协同的任务(如泊车中),我们引入了 “粘性策略 (Sticky Strategy)”。除非遇到 L3 级的致命故障,否则不允许低级别或同级别场景中途截断,确保指令的一致性。3. 状态一致性 (Stability & Hysteresis)
通过 Debounce(防抖) 和 TransitionGuard(跳转守卫),彻底杜绝了因感知噪声引起的场景频繁“闪烁(Flickering)”。三、 深度解析:多路竞标与守卫决策流
重构后的系统不再是简单的 if-else。每一帧,系统都会进行一场打分以及评判:并行竞标 (Bidding): 所有 Deciders 观察当前环境(Frame、Map、Routing),并交出自己的 ScenarioDecisionResult。
分值计算: 每个 Decider 会计算一个得分。
跳转守卫 (TransitionGuard): 收集所有竞标结果后,Guard 会核对“白名单”。例如,从“高速巡航”跳到“室内泊车”会被直接封杀。
最终仲裁: 优先级(Grade)最高的胜出;Grade 相同时,分数(Score)最高的胜出。
四、 实战证明:新架构的降维打击
通过以下两个典型案例,我们可以清晰地看到重构后的优势:案例 A:功能降级流 (Degradation Path)
案例 B:复杂掉头脱困 (U-Turn & Escape)
五、 未来趋势:从“人工逻辑”到“强化学习”
目前的架构虽然解决了确定性和安全性的问题,但场景的分数(Score)和触发阈值仍带有一定的启发式色彩(Heuristics)。我们的下一个目标是引入类 Q-Learning 的离散强化学习算法:通过大规模离线仿真训练,我们将让 ScenarioManager 自动学习在什么时机切换场景能获得全局最优的行驶体验,让自动驾驶从“能开”走向“老司机”式的“好开”。
专家点评: 自动驾驶的重构从未停止。从早期的规则驱动,到现在的分级竞标,再到未来的数据驱动,每一次架构演进都是为了在确定性与灵活性之间寻找那个完美的平衡点。
您对目前主流框架中的场景管理方案有什么看法?欢迎在评论区交流。
关注WheelOS自动驾驶社区,掌握上下游产业链信息,洞悉最新自动驾驶动态!