2. Apollo平台概述
Apollo 是面向自动驾驶研发与量产落地的开放平台,其核心价值不只是提供感知、预测、规划、控制等算法模块,更在于把这些模块组织成可协同、可扩展、可实时运行的工程系统。理解 Apollo,需要同时看清三层:平台架构决定模块如何分层与协作,消息中间件决定模块之间如何交换数据,实时通信决定整车在毫秒级约束下能否安全闭环。
一、Apollo 平台架构:从传感器到执行器的分层协作
Apollo 采用分层、模块化的软件架构。最底层是硬件与驱动层,包括激光雷达、摄像头、毫米波雷达、组合导航、CAN 总线与计算单元;其上是感知、定位、预测、规划、控制等核心算法模块;再往上是消息中间件与运行时框架,负责模块调度、数据分发和生命周期管理;最上层是应用与工具链,如 Dreamview 可视化、标定工具、仿真平台和云端数据服务。
这种分层的关键意义在于解耦:感知模块不需要知道控制模块如何实现,规划模块也不需要直接调用某个传感器驱动,它们只通过统一的消息接口交换数据。模块可以独立开发、独立测试、独立替换,从而支撑快速迭代。
二、消息中间件定位:自动驾驶系统的“神经系统”
消息中间件位于算法模块与操作系统之间,是 Apollo 运行时最关键的通信基础设施。它解决四个问题:谁发消息、谁收消息、消息如何传输、消息何时被处理。在 Apollo 中,模块通常以独立进程运行,通过发布/订阅模式通信。一个模块发布话题(Topic),其他模块订阅该话题,中间件负责序列化、传输、回调触发和线程调度。
Apollo 早期使用 ROS 作为通信基础,后续演进为 Cyber RT。Cyber RT 针对自动驾驶的高并发、低延迟、确定性需求做了优化,支持基于共享内存的零拷贝传输、协程调度、组件化模块和更精细的 QoS 控制。它的定位不是简单的“消息队列”,而是实时通信 + 任务调度 + 模块运行时三合一的中枢。
三、实时通信在自动驾驶中的关键作用
自动驾驶是一个安全关键系统,通信延迟直接转化为安全风险。假设车辆以 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,允许较高延迟 | 低带宽、可丢弃 |
五、常见误区与工程复盘
cyber_monitor 观察各话题频率与延迟,再用 cyber_recorder 录制关键链路数据,回放分析时间戳对齐情况。若发现控制指令抖动大,优先检查规划模块的调度优先级与 QoS 配置,而不是盲目增加 CPU 核数。
总体来看,Apollo 平台架构提供了模块化协作的骨架,消息中间件提供了数据流动的神经系统,而实时通信则决定了这套系统能否在真实道路上安全、稳定地闭环运行。理解三者的关系,是后续深入学习消息调度与实时通信工程的基础。