1. 课程导入
欢迎进入《Apollo 自动驾驶运行时与模块治理工程》。在动手写第一行治理代码之前,我们需要先建立一张"全局地图":Apollo 到底由哪些部分组成?"运行时"和"模块治理"分别解决什么问题?它们在整个自动驾驶系统中处于什么位置?本节将回答这些问题,并给出后续 29 章的学习路径。
一、Apollo 平台是什么:从"能跑"到"跑得稳"
Apollo 是百度开源的自动驾驶平台,它并不是一个单一程序,而是一套围绕"感知—预测—规划—控制"构建的软件栈,外加一整套工程基础设施。可以把它理解为三层:
- 算法层:感知、定位、预测、规划、控制等核心模块,决定车"会不会开"。
- 运行时层:Cyber RT 通信框架、调度、内存管理、组件生命周期,决定车"跑得顺不顺"。
- 治理层:模块配置、参数校验、健康监控、故障隔离、版本与灰度,决定车"跑得稳不稳、可不可维护"。
很多初学者只关注算法层,结果系统在实车上频繁出现"模块卡死、消息丢失、参数写错、启动顺序混乱"等问题。本课程的重点正是后两层——运行时与模块治理,它们是让算法真正落地的工程骨架。
二、核心概念:运行时、模块、治理
在 Apollo 中,模块(Module)是功能封装的基本单位,例如 perception、planning、control。每个模块通常以组件(Component)形式运行在 Cyber RT 之上,通过 Channel 收发消息。
运行时(Runtime)指模块实际执行时所依赖的环境与机制:节点调度、通信中间件、线程模型、内存池、时间同步等。它决定了模块之间的数据如何流动、任务如何被调度。
模块治理(Module Governance)则是对模块全生命周期的管理:配置加载、参数校验、依赖顺序、健康检查、异常恢复、资源限制、版本控制。治理的目标是让系统"可观测、可控制、可恢复"。
三者关系可以用一句话概括:模块是砖,运行时是水泥,治理是施工规范。
三、整体框架:一张图看懂运行时与治理的位置
下图展示了 Apollo 从硬件到应用的分层结构,以及运行时与治理工程所处的位置。请重点观察:治理层如何横向贯穿所有模块,运行时如何承上启下。
四、学习路径:30 章如何展开
本课程按"认知—运行时—治理—实战"四阶段推进,建议按顺序学习:
- 认知阶段(第 1–4 章):平台概览、目录结构、构建系统、Cyber RT 初识。
- 运行时阶段(第 5–14 章):节点与组件、Channel 通信、调度策略、内存管理、时间同步、日志与监控。
- 治理阶段(第 15–24 章):模块配置、参数校验、依赖管理、健康检查、故障隔离、灰度与版本。
- 实战阶段(第 25–30 章):综合案例、性能调优、排障复盘、工程规范。
五、案例场景:一次"模块启动失败"的复盘
某团队在实车上启动 Apollo,发现 planning 模块反复崩溃。排查过程如下:
# 查看模块状态
cyber_monitor
# 输出片段
planning [FAILED] restart_count=3
perception [OK] freq=10Hz
control [WAITING] dependency=planning
# 查看日志
tail -f /apollo/data/log/planning.INFO
# 关键错误
[ERROR] Failed to load config: planning_config.pb.txt
[ERROR] Param 'default_cruise_speed' out of range: -1.0
根因是配置文件被误改,参数越界导致模块启动失败,而 control 因依赖 planning 一直等待。这个案例同时暴露了三个治理问题:参数校验缺失、依赖顺序不明确、健康状态不可观测。这正是本课程要解决的核心问题。
六、核心概念速查清单
| 概念 | 含义 | 典型对象 | 治理关注点 |
|---|---|---|---|
| 模块 Module | 功能封装的基本单位 | perception、planning | 配置、依赖、生命周期 |
| 组件 Component | 模块在 Cyber RT 中的运行实体 | PlanningComponent | 调度、线程、消息触发 |
| Channel | 模块间消息通信通道 | /apollo/planning | 频率、延迟、丢包 |
| 运行时 Runtime | 模块执行所依赖的环境与机制 | Cyber RT、调度器 | 资源、时序、稳定性 |
| 治理 Governance | 模块全生命周期管理 | 配置中心、监控 | 可观测、可控制、可恢复 |
本节建立了 Apollo 平台的分层认知,明确了运行时与模块治理的位置和重要性,并给出了 30 章的学习路径。接下来,我们将从 Apollo 的目录结构与工程组织开始,真正走进这套系统的内部。