1. 课程导入

在自动驾驶系统中,预测、规划与控制是决定车辆“怎么想、怎么走、怎么稳”的三条核心链路。很多初学者会把它们拆开学习:预测只关心他车轨迹,规划只关心路径生成,控制只关心油门刹车。但在真实工程中,三者必须通过联调形成闭环,才能让车辆在动态交通中安全、平滑、合理地行驶。本课程围绕 Apollo 平台,带你从模块认知走向系统联调,建立“感知输入—预测推演—规划决策—控制执行—反馈修正”的完整工程视角。

本节核心问题:预测、规划、控制各自解决什么问题?它们之间的数据接口和时序关系是什么?为什么“单模块能跑”不等于“整车能开”?联调到底在调什么?

一、学习目标:从会看代码到会调系统

本课程的学习目标分为四个层次。第一,概念层:理解预测、规划、控制的基本定义、输入输出和典型算法族。第二,接口层:掌握 Apollo 中 Prediction、Planning、Control 三个模块的 topic 通信、消息格式和配置参数。第三,联调层:能够使用 Dreamview、Cyber Monitor、rosbag 回放等工具定位模块间数据断流、时序错位和参数不匹配问题。第四,工程层:具备场景化调试能力,例如跟车、换道、避障、红绿灯通行等典型场景下的联合调参和问题复盘。

换句话说,学完本课程,你不仅要能读懂 planning.conf 和 control_conf.pb.txt,还要能判断“为什么规划轨迹突然抖动”“为什么控制响应滞后”“为什么预测输出与规划预期不一致”。

二、核心概念:三条链路与一个闭环

预测负责回答“周围物体会怎么动”。它接收感知输出的障碍物信息,结合地图和交通规则,输出未来一段时间内他车的可能轨迹或意图概率。规划负责回答“自车应该怎么走”。它基于预测结果、地图、定位和路由信息,生成安全、舒适、可执行的轨迹。控制负责回答“如何让车精确跟随轨迹”。它接收规划轨迹和车辆状态,输出油门、刹车、转向等控制指令。

三者不是单向流水线,而是带反馈的闭环:控制执行后车辆状态变化,定位和感知更新,预测和规划随之重新计算。联调的价值就在于保证这个闭环在时序、精度和鲁棒性上都能满足实车要求。

Apollo 预测—规划—控制联调闭环 感知输入 → 预测推演 → 规划决策 → 控制执行 → 车辆反馈 感知与定位 障碍物 / 车道线 / 位姿 Prediction 意图识别 · 轨迹预测 输出:预测轨迹 + 概率 Planning 路由 · 决策 · 轨迹优化 输出:平滑可执行轨迹 Control 横向 · 纵向 · 标定 输出:油门/刹车/转向 车辆与底盘 执行机构 · 状态反馈 速度 / 加速度 / 转角 状态反馈与重规划触发 联调工具链 Dreamview Cyber Monitor rosbag / 日志 关键接口 /prediction /planning /control /canbus /localization /perception 时序对齐 频率匹配 坐标系一致

三、整体框架:从模块到系统的分层理解

Apollo 的联调工程可以按“四层一闭环”来理解。数据层包括感知、定位、地图、底盘反馈;算法层包括预测、规划、控制的核心算法;通信层基于 Cyber RT 的 topic 和服务机制;工具层包括 Dreamview、Cyber Monitor、rosbag、日志系统。闭环则体现在车辆执行后状态回传,触发下一轮计算。

在联调中,最常见的不是算法本身写错,而是接口不一致:预测输出的坐标系与规划期望的不一致,规划轨迹的时间戳与控制周期不匹配,控制标定参数与车辆实际动力学差异过大。因此,联调工程师必须同时具备“看算法”和“看数据”的能力。

模块 核心输入 核心输出 典型联调问题
Prediction 感知障碍物、地图、定位 预测轨迹、意图概率 预测轨迹跳变、意图误判
Planning 预测结果、路由、定位 平滑轨迹、决策指令 轨迹抖动、避障保守或激进
Control 规划轨迹、车辆状态 油门、刹车、转向 响应滞后、跟踪超调
Cyber RT 各模块 topic 消息 数据分发与调度 丢帧、延迟、频率不匹配

四、案例场景:一个跟车场景的联调复盘

假设车辆在城市道路跟随前车行驶,前车突然减速。感知输出前车位置和速度,预测模块判断前车未来 3 秒可能减速至停止,规划模块据此生成减速轨迹,控制模块执行刹车。如果联调不到位,可能出现三种典型问题:

  • 预测滞后:预测模块仍认为前车匀速,规划未及时减速,导致安全距离不足。
  • 规划抖动:预测轨迹频繁跳变,规划在“跟车”和“换道”之间反复切换,轨迹不平滑。
  • 控制超调:规划减速轨迹合理,但控制刹车标定过强,车辆顿挫明显。

联调排查顺序建议:先看 Cyber Monitor 确认 topic 频率和延迟,再看 rosbag 回放确认数据时间戳对齐,最后检查各模块配置文件中的坐标系、周期和阈值参数。不要一上来就改算法。

五、常见误区与学习建议

第一个误区是“单模块仿真通过就等于联调通过”。单模块仿真往往使用理想输入,而联调中输入带有噪声、延迟和丢帧。第二个误区是“只调参数不看数据流”。很多问题根源在 topic 断流或时间戳错位,而非参数本身。第三个误区是“忽视车辆动力学差异”。不同车型的转向比、制动响应和轮胎特性不同,控制参数必须结合实车标定。

# 联调常用检查命令示例
cyber_monitor                 # 查看 topic 频率与延迟
cyber_recorder info demo.record  # 查看 rosbag 基本信息
cyber_recorder play -f demo.record  # 回放数据
tail -f /apollo/data/log/planning.INFO  # 查看规划日志
tail -f /apollo/data/log/control.INFO   # 查看控制日志

注意:联调阶段务必先保证数据链路通畅,再讨论算法优化。数据链路问题会伪装成算法问题,浪费大量调试时间。

本课程后续将围绕预测、规划、控制的接口细节、配置参数、典型场景和排障方法逐步展开。你需要带着“系统闭环”的视角学习每一个模块,始终关注:它接收什么、输出什么、与谁通信、在什么时序下工作、出问题时如何定位。只有这样,才能真正掌握 Apollo 预测规划控制联调工程的核心能力。