4. 预测模块入门
在 Apollo 预测规划控制联调工程中,预测模块位于感知与规划之间,承担着“把当前世界推演到未来几秒”的关键职责。规划模块之所以能做出安全、平滑的决策,前提是预测模块给出了周围动态障碍物未来一段时间内的可能运动轨迹。本节从任务定义、输入输出、典型场景和评价指标四个角度,建立预测模块的整体认知。
一、预测任务定义
预测任务的核心定义可以概括为:给定自车周围动态障碍物的历史状态与当前环境信息,输出其在未来一段时间内的多条可能轨迹及其概率。与感知只回答“现在是什么、在哪里”不同,预测回答的是“接下来可能去哪里、以什么方式去”。
在 Apollo 中,预测通常面向未来 8 秒左右的时间窗口,输出形式为多条带概率的轨迹。每条轨迹包含一系列按时间排列的位姿点,并附带该轨迹发生的置信度。规划模块会结合这些轨迹做保守或激进的决策,因此预测不仅要“准”,还要“全”——不能只给一条最可能的轨迹,而要覆盖合理的多模态可能性。
预测的本质是多模态概率推演:同一辆车在路口可能左转、直行或右转,预测模块需要同时给出这些可能性及其概率,而不是只赌一种结果。
二、输入与输出
预测模块的输入来自多个上游模块,输出则直接服务于规划。理解输入输出边界,是联调时定位问题的第一步。
| 类别 | 具体内容 | 来源/去向 |
|---|---|---|
| 输入 | 障碍物历史轨迹、当前位置、速度、朝向、尺寸、类型 | 感知模块 |
| 输入 | 高精地图车道线、路口拓扑、限速、停止线 | 地图模块 |
| 输入 | 自车定位与状态 | 定位模块 |
| 输出 | 多条预测轨迹 + 概率 + 轨迹类型标签 | 规划模块 |
| 输出 | 预测障碍物优先级、交互意图 | 规划/决策模块 |
联调中最常见的接口问题是时间戳对齐和坐标系一致性。预测输入若使用了过期感知结果,或坐标系未统一到同一参考系,会导致轨迹跳变,规划侧表现为“幽灵刹车”或异常避让。
三、典型场景
预测模块在不同场景下的难度差异很大,联调时应优先覆盖以下典型场景:
- 跟车场景:前车匀速或减速,预测相对简单,主要验证纵向轨迹平滑性。
- 路口交互:多车博弈,存在左转、直行、右转多模态,是预测最难也最关键的场景。
- 行人横穿:行人意图不确定,需要预测其是否进入自车路径,考验多模态覆盖能力。
- 切入切出:相邻车道车辆突然变道,预测需要快速响应并给出高概率切入轨迹。
- 静止障碍物:如路边停靠车辆,预测应稳定输出静止轨迹,避免误判为运动。
下面用一张信号链示意图展示预测模块在联调工程中的位置与数据流向:
四、评价指标
预测模块好不好,不能只看“像不像”,而要用量化指标衡量。联调中常用的评价指标包括:
- ADE(平均位移误差):预测轨迹与真实轨迹各时刻位移误差的平均值,反映整体精度。
- FDE(最终位移误差):预测终点与真实终点的距离,反映长时预测能力。
- Miss Rate(漏检率):真实轨迹未被任何预测轨迹覆盖的比例,反映多模态覆盖能力。
- NLL(负对数似然):结合概率评估预测分布质量,概率越准值越小。
- 推理延迟:单帧预测耗时,直接影响规划模块的实时性。
联调时建议同时关注精度指标和实时性指标。预测再准,若延迟超过规划周期,也会导致控制抖动。Apollo 中通常要求预测单帧耗时控制在几十毫秒量级。
五、常见误区与复盘
初学者在预测模块联调中容易踩以下坑:
- 只看单条最优轨迹:忽略多模态,导致规划在路口做出过于激进的决策。
- 忽视时间戳对齐:感知与预测时间不同步,轨迹出现跳变,规划误判为紧急情况。
- 坐标系混用:预测输出未统一到自车坐标系或世界坐标系,导致轨迹位置偏移。
- 用训练集指标代替实车表现:离线 ADE 低不代表实车安全,需结合场景回放和实车验证。
预测模块的输出是规划模块的输入,任何预测异常都会直接传导到控制层。联调时应先确认预测输入输出接口稳定,再逐步调优算法参数,避免“算法没调好、接口先出错”的混乱局面。
掌握预测任务的定义、输入输出边界、典型场景和评价指标,是后续深入预测算法与联调实操的基础。在实际工程中,预测模块往往需要与感知、规划反复迭代,才能达到安全、平滑、实时的整体效果。