1、课程导论:为什么需要协同设计?决策与规划的传统割裂与痛点

1.1 一个让我印象深刻的翻车现场

先讲个真事。几年前我参与一个L4级园区物流项目,车跑得好好的,突然在路口急刹——不是撞到东西,是“吓停”了。

排查了一整天,最后发现是决策模块和规划模块打架。决策层说“我要左转”,规划层算出一条平滑轨迹,但决策层又觉得“等等,这个路口好像有行人意图”,于是改成了直行。规划层刚算完新轨迹,决策层又变卦了……

嗯,这种来回拉扯,在实车上就是一顿一顿的“点头”现象。乘客晕车,我们头疼。

说白了,这就是典型的决策与规划割裂带来的问题。我后来跟团队复盘时说过一句话:决策不知道规划能不能做到,规划不知道决策为什么变——这车能开好才怪。

1.2 传统架构:各管各的,各疼各的

传统自动驾驶软件架构里,决策和规划通常是两个独立模块。你想想看,它们之间只靠几个接口参数通信,像极了两个部门只靠邮件对接——信息损耗大,延迟高。

典型割裂表现:

  • 决策层:输出“目标车道”“目标速度”等高层指令,不考虑曲率、加速度限制
  • 规划层:收到指令后硬算轨迹,遇到不可行时只能“报错”或“降级”
  • 反馈机制:几乎没有。规划层说“我做不到”,决策层说“那你看着办”

我在项目中遇到过最离谱的一次:决策层要求换道,规划层算出来需要急转向才能完成,但决策层不知道这会导致车辆侧倾过大。结果实车测试时,货箱里的箱子全倒了。

1.3 痛点清单:这些坑你大概率也会踩

我整理了几个最常见的痛点,你看看是不是似曾相识:

痛点 具体表现 后果
信息不对称 决策不知道规划的能力边界 指令不可执行,频繁重规划
时序不同步 决策10Hz,规划50Hz,中间差了好几帧 轨迹抖动,控制滞后
目标冲突 决策要安全,规划要舒适,没人拍板 保守与激进来回切换
异常处理真空 规划失败时,决策不知道该怎么兜底 直接停车或降级到最小风险

为什么会这样?我个人的理解是:传统架构把“做什么”和“怎么做”拆得太干净了。拆干净本身没错,但中间缺了一个“协同层”。

1.4 一个简单的例子说明问题

假设场景:前方50米有静止障碍物,决策层决定“向左避让”。

传统流程是这样的:

  1. 决策层输出“目标车道:左车道,目标速度:30km/h”
  2. 规划层收到后开始算轨迹
  3. 算到一半发现:左车道也有车,而且距离不够
  4. 规划层报错:“无法生成可行轨迹”
  5. 决策层收到报错,重新决策:“减速,等待”
  6. 规划层重新算……

你看,这一来一回至少浪费了200ms。在高速场景下,200ms可能就是生与死的区别。

我的建议:决策层在做决定之前,应该先问规划层一句:“这个指令你搞得定吗?”规划层快速给一个可行性评估,决策层再拍板。这就是协同设计的核心思想。

1.5 协同设计到底解决什么问题?

说白了,协同设计就是让决策和规划共享信息、互相反馈、共同决策。不是谁指挥谁,而是商量着来。

我习惯把这种关系比作“驾驶员和副驾”:

  • 驾驶员(决策)说“我要超车”
  • 副驾(规划)看一眼后视镜说“后面有车,再等等”
  • 驾驶员说“好,那等3秒”
  • 副驾说“3秒后空间够了,可以超”

你看,这才是正常人的开车方式。但传统架构里,副驾只会说“收到”,然后硬开——开不了再喊“不行”。

1.6 本章知识体系总览

下面这张图是我自己画的一个框架,帮你快速理解决策与规划协同设计的核心逻辑:

决策与规划协同设计核心框架 感知层 环境理解 · 目标检测 决策层 行为决策 · 指令生成 规划层 轨迹生成 · 可行性评估 控制层 执行跟踪 · 反馈控制 可行性反馈 · 约束传递 协同层(核心) 信息共享 · 冲突消解 · 联合优化 传统架构:感知 → 决策 → 规划 → 控制(单向流水线) 协同架构:增加反馈回路与协同层,实现双向沟通

注意:这张图里最关键的其实是那条紫色的虚线反馈回路。我曾经在好几个项目里发现,团队把大量精力花在优化单个模块上,却忽略了这条回路——结果就是模块各自跑得飞快,但合在一起就是不行。

1.7 这门课你会学到什么?

这门课不讲虚的。我会带着你从实际工程角度,一步步拆解协同设计的方法:

  • 怎么设计决策与规划的接口——不只是定义几个结构体,而是考虑时序、容错、降级
  • 怎么让决策层感知规划的能力边界——比如用“可行性热力图”提前预判
  • 怎么处理冲突——安全 vs 舒适 vs 效率,谁优先级更高?
  • 怎么在实车上调试——我踩过的坑,你尽量别踩

嗯,内容不少。但别担心,我会用项目里真实遇到的案例来讲,保证你听完就能用上。

可可精品资料库