The Autonomous Vehicle Stack: An Architectural Overview / 自动驾驶全栈架构概览
当一辆自动驾驶汽车在复杂的城市环境中行驶时,数十个传感器、多个计算单元和数百万行代码必须毫秒级协同工作,以感知环境、预测行为、规划路径并安全控制车辆。这种极端复杂性不可能通过“即兴编程”实现,而必须依赖于一个严谨、分层且经过深思熟虑的系统架构。本章将为您解构自动驾驶全栈架构,从底层的硅片到顶层的应用服务,建立一种系统性的思维框架,理解每一层的职责、接口、依赖关系以及贯穿始终的安全约束。我们将深入探讨功能安全(ISO 26262)与预期功能安全(SOTIF/ISO 21448)如何像“基因”一样嵌入架构设计,并理性分析集中式与分布式计算范式在真实世界产品中的取舍。本章不仅是技术概览,更是全书的方法论基石——后续所有章节的深入探讨,都将建立在此架构视图之上。
1.1 分层架构范式:从硬件到应用的垂直整合
自动驾驶系统本质上是一个实时、安全关键的嵌入式信息物理系统(Cyber-Physical System, CPS)。其架构设计普遍采用分层抽象和关注点分离的原则,将庞大的系统分解为一系列功能明确、接口清晰的层级。这种分层并非物理上的必然,而是一种强大的逻辑组织范式,它允许不同团队并行开发、独立验证,并便于技术迭代。一个典型的自动驾驶全栈可划分为以下七层,自底向上,数据与控制流逐层升华。
1.1.1 硬件抽象层与计算平台
这是架构的基石,常被软件开发者忽视,却决定了系统性能与安全的物理边界。
- **传感器套件**:包括摄像头(Camera)、激光雷达(LiDAR)、毫米波雷达(Radar)、超声波传感器(Ultrasonic Sensor)以及惯性测量单元(IMU)和全球导航卫星系统(GNSS)接收机。每类传感器都有其固有的**物理局限**(如摄像头受光照影响、激光雷达在雨雾中衰减、雷达分辨率低),这些局限直接塑造了上层感知算法的设计边界。硬件选型是一场权衡:分辨率、视场角(FOV)、刷新率、成本、功耗、尺寸以及**环境鲁棒性**。
- **执行器**:包括转向电机、制动系统、油门执行器。它们是控制指令的物理落脚点,其响应延迟、精度和冗余设计是控制层必须建模的**关键参数**。
- **计算硬件**:从早期的分布式ECU(电子控制单元)到如今主流的**高性能域控制器**。核心是SoC(片上系统),如NVIDIA Orin、华为MDC、特斯拉FSD Computer、Mobileye EyeQ系列。关键指标包括:AI算力(TOPS)、通用算力(CPU核心数、频率)、内存带宽、功耗、制程工艺以及**功能安全等级**(如ASIL-D)。硬件平台的选择是架构决策的第一个重大岔路口。
输入/输出与依赖:硬件层为上层提供原始数据流(如RAW图像、点云、雷达反射点)和控制接口(如CAN FD、Ethernet)。它依赖于电源管理、散热设计等基础工程。其输出质量(信噪比、时间戳精度)直接设定了整个系统性能的天花板。
1.1.2 中间件与通信层
这是系统的“中枢神经系统”,负责在分布式组件之间实现高效、确定、安全的通信与计算资源管理。它通常基于或借鉴机器人操作系统(ROS 2) 或AUTOSAR Adaptive平台,但自动驾驶领域有更严苛的要求。
- **核心功能**:
1. 服务发现:组件如何动态找到彼此。 2. 发布/订阅与请求/响应:主要的通信范式。例如,感知模块“发布”检测到的障碍物列表,规划模块“订阅”该列表。 3. 实时性保障:通过时间敏感网络(TSN) 或确定性调度,确保关键消息(如紧急制动指令)在严格时限内送达。 4. 数据记录与回放:为问题诊断和算法迭代提供“黑匣子”功能。 5. 生命周期管理:组件的启动、停止、健康监控。
输入/输出与依赖:该层依赖底层网络硬件(如以太网交换机)和操作系统(通常是Linux的实时内核变种或QNX)。它为上层应用提供透明的通信API,屏蔽了底层网络的复杂性。其设计深刻影响系统的可扩展性(增加新模块的难度)和可诊断性。
1.1.3 感知层
感知是自动驾驶的“眼睛和耳朵”,其任务是将原始、嘈杂的传感器数据转化为对周围环境的结构化、符号化理解——即环境模型。
- **核心模块**:
- **传感器融合**:前融合(原始数据层融合,如BEVFormer)和后融合(各传感器独立感知后的结果融合,如卡尔曼滤波)。前融合潜力大但计算重、校准难;后融合成熟、模块化强。
- **目标检测与跟踪**:识别车辆、行人、骑行者等,并维持其跨帧ID和状态(位置、速度、加速度)。
- **可行驶区域与车道线检测**:理解道路几何结构。
- **交通标志与信号识别**:解读交通规则。
- **局部占用栅格**:构建一个概率化的、描述空间被占据情况的网格地图(如使用Truncated Signed Distance Function, TSDF)。
输入/输出与依赖:输入为时间同步后的多模态原始数据(图像、点云)。依赖高精度定位(见下节)提供的自车位姿,以将感知结果统一到全局或地图坐标系。输出是一个动态的、带不确定性的环境快照,通常表示为本体论(Ontology)形式,包含对象列表、车道、交通规则等,是预测和规划层的直接输入。感知的漏检率和虚警率是SOTIF分析的核心。
1.1.4 定位与地图层
回答“我在哪里?”的问题,精度需达到厘米级。
- **核心模块**:
- **高精地图(HD Map)**:包含车道几何、交通规则、地标等先验信息的静态语义地图。它是先验知识的宝库,但需要高昂的采集与更新成本。
- **同步定位与地图构建**:在无地图或地图陈旧区域,使用激光雷达SLAM或视觉SLAM构建局部地图并定位。
- **多传感器融合定位**:主流方案。融合GNSS(绝对位置,但易受遮挡)、IMU(高频相对位姿,但会漂移)、轮速计以及**与高精地图或SLAM地图的匹配**(如点云匹配、激光雷达里程计)。通常采用**因子图优化**或**卡尔曼滤波器**(如误差状态卡尔曼滤波器,ESKF)进行状态估计。
输入/输出与依赖:输入为GNSS原始观测值、IMU原始数据、轮速计信号、以及感知层提供的环境特征(用于与地图匹配)。依赖高精地图作为先验。输出为高精度、高频率的自车6自由度位姿(位置+姿态),并提供不确定性估计(协方差矩阵)。此位姿是几乎所有上层模块(感知融合、规划、控制)的基础坐标系,其故障是灾难性的。
1.1.5 预测层
回答“其他交通参与者会做什么?”的问题。这是从“感知是什么”到“未来会怎样”的关键飞跃。
- **核心模块**:
- **轨迹预测**:预测目标未来几秒内的可能轨迹。通常基于**物理模型**(恒定速度/加速度)、**行为模型**(跟车、换道、转弯)和**交互模型**(考虑多智能体交互,如使用社会力模型或图神经网络)。
- **意图识别**:推断目标的高层意图(如“准备左转”、“寻找车位”),这常与预测结合,通过**语义地图**(如车道连接关系)和**上下文**(交通灯状态、周围车辆行为)来推断。
- **不确定性建模**:预测必须是**概率性**的,通常表示为多条候选轨迹及其概率,或一个概率分布(如高斯混合模型)。
输入/输出与依赖:输入为感知层提供的当前环境状态(所有对象的列表、属性、关系)和定位层提供的自车位姿。依赖高精地图提供的语义上下文(车道拓扑、交通规则)。输出为多个交通参与者的概率性未来轨迹集,是规划层进行风险规避和决策的输入。预测的错误(尤其是对罕见但关键行为的误判)是事故的主要潜在原因,是SOTIF验证的重中之重。
1.1.6 规划层
回答“我接下来应该怎么做?”的问题,是自动驾驶的“大脑”。它通常分为三个子层,形成递进式决策:
1. 任务规划/路由规划:基于全局地图和交通规则,从A点到B点的宏观路径(序列化的车道级 maneuver,如“直行2公里,然后右转”)。类似于导航软件,但需考虑实时交通。 2. 行为规划:在局部场景中决定宏观行为,如“保持车道”、“换道到左道”、“在路口停车让行”。这是一个离散决策问题,常用有限状态机(FSM)、行为树(Behavior Tree) 或部分可观测马尔可夫决策过程(POMDP) 建模。它接收预测层的轨迹集,评估不同行为的长期风险与收益。 3. 运动规划:生成一条可执行、舒适、安全的连续时空轨迹(包含路径形状和速度剖面)。常用方法有:
- **基于搜索**:如A*、状态 lattice 规划。
- **基于优化**:将轨迹生成表述为二次规划(QP)或非线性规划(NLP)问题,在成本函数中平衡轨迹跟踪误差、平滑度、与障碍物的距离、交规遵守度等。
- **基于学习**:端到端或模仿学习,但可解释性和安全验证是挑战。
输入/输出与依赖:输入为高精地图(车道拓扑、交通规则)、自车位姿、环境模型(感知+预测结果)以及任务规划的宏观指令。输出为一条时空轨迹(一组路径点+对应时间戳或速度),以及一个行为状态。规划层是安全关键的,其输出必须经过可行性检查(如车辆动力学限制)和安全力场验证后才能下发。
1.1.7 控制层
回答“如何精确执行规划轨迹?”的问题。它是车辆动力学与规划指令之间的桥梁。
- **核心模块**:
- **横向控制**:控制转向角以跟踪路径。常用**Stanley方法**、**Pure Pursuit**或**模型预测控制(MPC)**。MPC因其能显式处理车辆动力学约束和前瞻性而成为主流。
- **纵向控制**:控制油门和制动以跟踪速度剖面。同样常用MPC或PID控制,但需协调制动能量回收。
- **协调控制**:处理横向与纵向的耦合,特别是在极限工况下。
输入/输出与依赖:输入为规划层生成的时空轨迹。依赖车辆动力学模型(用于MPC预测)和执行器特性。输出为低级别控制指令(如目标转向扭矩、目标制动压力),通过车辆网络(如CAN)发送给执行器硬件。控制性能直接影响乘坐舒适性和轨迹跟踪精度,其稳定性和鲁棒性是功能安全(ISO 26262)分析的对象。
1.1.8 应用与云平台层
超越单车智能,形成“车-路-云”协同。
- **核心模块**:
- **人机交互**:仪表盘显示、语音交互、接管请求。
- **车队管理与数据平台**:收集海量真实世界驾驶数据(**数据闭环**的核心),用于离线分析、算法迭代、地图更新。
- **OTA更新**:安全可靠地远程更新软件、模型甚至地图。
- **V2X通信**:与路侧单元(RSU)、其他车辆(V2V)交换交通、危险预警等信息,扩展感知范围。
- **远程监控与接管**:在极端情况下,远程操作员介入。
输入/输出与依赖:依赖车辆本地各层的运行状态和日志数据。输出为用户界面、云端数据和远程指令。这一层引入了新的攻击面(网络安全)和新的故障模式(如OTA失败、云服务延迟),需要独立的安全考量。
---
```mermaid graph TD subgraph “硬件层” A1[传感器套件] A2[执行器] A3[计算硬件 SoC] end
subgraph “中间件层” B1[通信与发现] B2[实时调度] B3[数据记录] end
subgraph “感知层” C1[传感器融合] C2[目标检测跟踪] C3[可行驶区域] end
subgraph “定位与地图层” D1[高精地图] D2[多传感器融合定位] end
subgraph “预测层” E1[轨迹预测] E2[意图识别] end
subgraph “规划层” F1[任务规划] F2[行为规划] F3[运动规划] end
subgraph “控制层” G1[横向控制 MPC] G2[纵向控制 MPC] end
subgraph “应用与云平台层” H1[人机交互 HMI] H2[数据平台 OTA] H3[V2X] end
A1 -->|原始数据| B1 A3 -->|算力| C1 & D2 & F3 & G1 & G2 B1 -->|服务调用| C1 & D2 & E1 & F2 & F3 & G1 & G2 D1 -->|先验地图| C1 & F2 D2 -->|自车位姿| C1 & F3 & G1 & G2 C1 -->|环境模型| E1 C2 -->|目标列表| E1 E1 -->|概率轨迹| F2 F2 -->|行为指令| F3 F3 -->|时空轨迹| G1 & G2 G1 & G2 -->|控制指令| A2 H1 -->|显示/指令| F2 H2 -->|模型/地图更新| C1 & D1 & F2 & F3 H3 -->|外部信息| C1 & F2
style A1 fill:#e1f5fe style C1 fill:#f3e5f5 style F3 fill:#e8f5e8 style G1 fill:#fff3e0 ```
*图 1.1:自动驾驶全栈架构分层数据流图。箭头表示主要数据/控制依赖方向。注意,中间件层(B)横跨所有垂直层,提供通信骨架。定位(D2)的输出是几乎所有上层模块的公共基础。*
---
1.2 安全标准的架构基因:ISO 26262 与 SOTIF
在传统汽车领域,功能安全(Functional Safety) 主要关注由系统故障(如硬件失效、软件bug、传感器失灵)引发的危害。而自动驾驶引入了前所未有的复杂性,其危害不仅来自故障,更可能来自系统在无故障情况下的性能局限——例如,感知系统在极端天气下漏检了一个被部分遮挡的儿童,系统“正常工作”却导致了事故。这就引出了预期功能安全(Safety of the Intended Functionality, SOTIF)。两者共同构成了自动驾驶安全工程的基石,并从根本上塑造了架构设计。
1.2.1 ISO 26262:应对“系统失效”的纵深防御
ISO 26262基于风险驱动的方法,通过汽车安全完整性等级(ASIL) 量化安全需求。ASIL从A(最低)到D(最高)划分,决定了所需的安全措施严格度。
对架构的根本性影响:
1. 冗余设计:对于ASIL-D功能(如制动控制),架构必须包含冗余路径。例如,双计算单元、双电源、双通信总线。冗余不是为了提升性能,而是为了在单一故障发生时,安全状态仍可维持。 2. 故障检测与切换:架构必须内置监控机制。例如,看门狗定时器监控计算单元心跳;奇偶校验或CRC校验监控内存和数据完整性;传感器自检(如激光雷达回波强度分析)监控传感器健康状态。检测到故障后,系统需能安全地切换到降级模式或最小风险状态(MRM)。 3. 分离与隔离:安全相关和非安全相关功能必须在空间(硬件分区,如使用Hypervisor)和时间上隔离,防止一个功能的故障蔓延(故障传播)。例如,制动控制任务运行在独立的、锁定的CPU核心上,与信息娱乐系统物理隔离。 4. 确定性:关键任务(如控制循环)的执行时间必须是可预测且 bounded的。这推动了实时操作系统(RTOS) 如QNX、VxWorks或Linux的PREEMPT_RT补丁在安全关键模块的应用,并影响了中间件的调度策略。 5. 可验证性:架构必须支持全面的验证与确认(V&V)。模块化设计允许单元测试;明确的接口定义支持集成测试;内置的测试点(如诊断接口)支持硬件在环(HIL)测试。
架构模式体现:一种常见的实现是安全岛(Safety Island) 架构。一个独立的高安全等级MCU(如Infineon AURIX)作为“安全管家”,监控主计算平台(高性能SoC)的健康状态,并在检测到不可恢复故障时,直接接管关键控制权(如触发紧急制动),绕过可能已故障的主系统。这体现了监控-执行分离的原则。
1.2.2 SOTIF (ISO 21448):应对“性能局限与已知未知”
SOTIF处理的是系统按设计运行时,因传感器局限、算法性能边界、场景覆盖不足而导致的危害。例如,摄像头在逆光下无法识别白色卡车;感知算法在训练数据中未见过“侧翻的卡车”而漏检。
对架构的根本性影响:
1. 传感器互补性与覆盖:架构必须通过多传感器融合来弥补单一传感器的局限。激光雷达在雨雾中性能下降,但毫米波雷达在雨雾中相对稳定;摄像头分辨率高但受光照影响,雷达不受光照影响但无法识别颜色和纹理。融合架构的设计目标是在各种运行条件(ODD) 下,实现可接受的总体性能。 2. 冗余表示与置信度估计:感知和预测模块不仅应输出“最佳猜测”,还应输出不确定性估计(如边界框的置信度分数、轨迹的概率分布)。规划层必须能理解并利用这些不确定性进行风险感知的决策。例如,对高不确定性的目标,应预留更大的安全边际。 3. 场景库与边缘案例驱动:架构应支持高效的场景库管理和仿真测试。系统需要能够从海量路采数据中自动识别边缘案例(Corner Cases) 和长尾场景,并在仿真中复现和测试。这要求中间件和数据平台提供强大的场景描述、回放和注入能力。 4. **降级策略与最小风险状态