2. Apollo平台概述

Apollo 是面向自动驾驶研发与量产落地的开放平台,其核心价值不只是提供感知、预测、规划、控制等算法模块,更在于把这些模块组织成可协同、可扩展、可实时运行的工程系统。理解 Apollo,需要同时看清三层:平台架构决定模块如何分层与协作,消息中间件决定模块之间如何交换数据,实时通信决定整车在毫秒级约束下能否安全闭环。

一、Apollo 平台架构:从传感器到执行器的分层协作

Apollo 采用分层、模块化的软件架构。最底层是硬件与驱动层,包括激光雷达、摄像头、毫米波雷达、组合导航、CAN 总线与计算单元;其上是感知、定位、预测、规划、控制等核心算法模块;再往上是消息中间件与运行时框架,负责模块调度、数据分发和生命周期管理;最上层是应用与工具链,如 Dreamview 可视化、标定工具、仿真平台和云端数据服务。

这种分层的关键意义在于解耦:感知模块不需要知道控制模块如何实现,规划模块也不需要直接调用某个传感器驱动,它们只通过统一的消息接口交换数据。模块可以独立开发、独立测试、独立替换,从而支撑快速迭代。

Apollo 的典型数据链路可以概括为:传感器驱动 → 感知 → 定位/预测 → 规划 → 控制 → CAN 执行,同时伴随监控、诊断、日志与仿真回放。

二、消息中间件定位:自动驾驶系统的“神经系统”

消息中间件位于算法模块与操作系统之间,是 Apollo 运行时最关键的通信基础设施。它解决四个问题:谁发消息、谁收消息、消息如何传输、消息何时被处理。在 Apollo 中,模块通常以独立进程运行,通过发布/订阅模式通信。一个模块发布话题(Topic),其他模块订阅该话题,中间件负责序列化、传输、回调触发和线程调度。

Apollo 早期使用 ROS 作为通信基础,后续演进为 Cyber RT。Cyber RT 针对自动驾驶的高并发、低延迟、确定性需求做了优化,支持基于共享内存的零拷贝传输、协程调度、组件化模块和更精细的 QoS 控制。它的定位不是简单的“消息队列”,而是实时通信 + 任务调度 + 模块运行时三合一的中枢。

Apollo 平台分层架构与消息中间件数据流 应用与工具层 Dreamview 可视化 · 标定工具 · 仿真平台 · 云端数据服务 · 诊断监控 消息中间件与运行时(Cyber RT) 发布/订阅 · 共享内存零拷贝 · 协程调度 · 组件生命周期 · QoS · 时间同步 Topic 通道:/perception/obstacles /localization/pose /planning/trajectory /control/command 核心算法模块层 感知 Perception 定位 Localization 预测 Prediction 规划 Planning 控制 Control 硬件与驱动层 激光雷达 摄像头 毫米波雷达 组合导航 CAN 总线 实时约束 感知 10Hz 规划 10Hz 控制 100Hz 通信中枢

三、实时通信在自动驾驶中的关键作用

自动驾驶是一个安全关键系统,通信延迟直接转化为安全风险。假设车辆以 72 km/h 行驶,即 20 m/s,若感知到规划的消息延迟 100 ms,车辆已经前进 2 米;若控制指令延迟 50 ms,执行器响应再滞后,实际轨迹偏差会进一步放大。因此,实时通信必须满足三个指标:低延迟、低抖动、可预测。

  • 低延迟:从传感器数据产生到控制指令发出,端到端延迟通常要求控制在百毫秒以内,关键链路甚至要求几十毫秒。
  • 低抖动:延迟不能忽高忽低,否则规划与控制算法难以稳定收敛。
  • 可预测:在 CPU 负载升高、消息量突增时,系统仍要保证关键话题优先传输。

Cyber RT 通过共享内存减少数据拷贝,通过协程调度降低线程切换开销,通过 QoS 配置区分关键话题与普通话题,从而在工程上逼近上述目标。

四、典型应用场景与配置示例

在 Apollo 中,不同场景对通信的要求不同。例如,感知障碍物话题数据量大、频率高,适合共享内存传输;定位位姿话题数据量小但必须稳定;控制指令话题频率高、延迟敏感,需要最高优先级。下面是一个典型的 Cyber RT 组件配置片段:

# cyberfile 中定义一个规划组件
modules {
  name: "planning"
  type: "PlanningComponent"
  topic: "/planning/trajectory"
  readers {
    channel: "/perception/obstacles"
    channel: "/localization/pose"
    channel: "/prediction/obstacles"
  }
  writers {
    channel: "/control/command"
  }
  qos {
    reliability: RELIABLE
    history: KEEP_LAST
    depth: 10
  }
}
场景 典型话题 频率/延迟要求 通信关注点
感知融合 /perception/obstacles 10 Hz,延迟 < 80 ms 大数据量、共享内存、零拷贝
定位输出 /localization/pose 50 Hz,抖动 < 5 ms 稳定性、时间戳同步
规划决策 /planning/trajectory 10 Hz,延迟 < 100 ms 可靠性、消息完整性
控制执行 /control/command 100 Hz,延迟 < 20 ms 最高优先级、低抖动
诊断监控 /apollo/monitor 1 Hz,允许较高延迟 低带宽、可丢弃

五、常见误区与工程复盘

误区一:把消息中间件当成普通消息队列。 在自动驾驶中,中间件还承担调度、时间同步和确定性保障,选型与配置直接影响安全。
误区二:只关注平均延迟,忽略最坏延迟。 安全系统必须看 P99 甚至 P999 延迟,偶发的长尾抖动可能导致一次危险决策。
复盘建议: 在联调阶段,先用 cyber_monitor 观察各话题频率与延迟,再用 cyber_recorder 录制关键链路数据,回放分析时间戳对齐情况。若发现控制指令抖动大,优先检查规划模块的调度优先级与 QoS 配置,而不是盲目增加 CPU 核数。

总体来看,Apollo 平台架构提供了模块化协作的骨架,消息中间件提供了数据流动的神经系统,而实时通信则决定了这套系统能否在真实道路上安全、稳定地闭环运行。理解三者的关系,是后续深入学习消息调度与实时通信工程的基础。