系统架构:自动驾驶系统典型架构与ASIL分解实战
大家好,我是老张。做了十年功能安全,今天咱们聊聊自动驾驶系统架构里最核心的东西——感知-决策-执行这条链路,以及怎么把ASIL等级合理地拆解下去。
说实话,很多刚入行的朋友一上来就盯着算法看,觉得感知牛就完事了。但我在项目里吃过亏,有一次路测,感知模块明明识别到了障碍物,决策层也发了刹车指令,结果执行器响应慢了200毫秒……嗯,后果你们能想象。从那以后,我特别强调架构层面的安全分解。
一、典型三层架构:感知-决策-执行
自动驾驶系统,说白了就是“看-想-动”三个环节。我习惯把它们拆成下面这样:
- 感知层:摄像头、激光雷达、毫米波雷达、超声波,加上定位模块(GPS+IMU)。负责“看”清楚周围环境。
- 决策层:行为规划、路径规划、运动控制。负责“想”清楚怎么走。
- 执行层:线控转向、线控制动、线控驱动。负责“动”起来。
你想想看,这三个层级之间是有依赖关系的。感知错了,决策就跟着错;决策错了,执行再准也没用。所以安全设计必须贯穿全链路。
关键点:每个层级内部还要做冗余。比如感知层,摄像头和激光雷达互为冗余;执行层,制动系统要有两套独立的液压回路。
二、ASIL分解:从顶层到模块
ASIL(Automotive Safety Integrity Level)分A、B、C、D四个等级,D最高。对于自动驾驶,尤其是L3以上,很多功能要求ASIL D。但直接让整个系统都做到D级,成本受不了,也没必要。
我个人的习惯是:先做功能级ASIL分解,再做架构级ASIL分解。
2.1 功能级分解
举个例子,自动紧急制动(AEB)功能。顶层安全目标是“避免碰撞”,这个目标通常要求ASIL D。但我们可以把它拆成:
- 感知模块:检测障碍物(ASIL B)
- 决策模块:计算制动时机(ASIL C)
- 执行模块:执行制动(ASIL D)
为什么会这样?因为感知和决策可以通过冗余设计来降低对单点的依赖。比如感知用两个不同原理的传感器,决策用两套独立算法做投票。这样,单个模块的ASIL等级就可以降下来。
我的经验:在做分解时,一定要先确认“独立性”。如果两个模块共用同一个电源或同一个通信总线,那它们就不算独立,分解无效。
2.2 架构级分解
架构级分解更细。我拿一个实际项目里的例子来说明:
| 子系统 | 安全目标 | 原始ASIL | 分解后ASIL | 冗余方式 |
|---|---|---|---|---|
| 感知融合 | 正确输出障碍物列表 | D | B(D) + B(D) | 双通道异构传感器 |
| 路径规划 | 输出无碰撞轨迹 | D | C(D) + C(D) | 双算法投票 |
| 线控制动 | 响应制动指令 | D | D | 双回路液压 |
注意看,感知融合从D分解成了两个B(D)。意思是:两个独立的B级模块,组合起来可以满足D级要求。但前提是——这两个模块不能有共因失效。
避坑指南:我曾经遇到过一个项目,两个感知模块用了同一个供应商的同一款芯片。结果芯片有个隐藏bug,两个模块同时失效。嗯,那次的ASIL分解被审核员直接打回。记住:独立不仅仅是硬件独立,软件、算法、甚至开发团队都要独立。
三、安全机制在架构中的落地
光有分解还不够,得有具体的安全机制来保证。我列几个常见的:
- 感知层:传感器自检(每帧数据校验)、时间戳对齐、故障注入测试
- 决策层:看门狗定时器、输出合理性检查(比如刹车指令不能突变)、双通道比较
- 执行层:回读校验(指令发出去,再读回来确认)、硬件冗余切换、降级模式
举个例子,决策层输出一个方向盘转角指令。我们会在架构里加一个“合理性检查模块”:如果转角变化率超过每秒30度,就判定为异常,切换到备用路径。这个检查模块本身也要做到ASIL D。
// 伪代码:转角合理性检查
if (abs(current_angle - last_angle) > MAX_DELTA) {
// 触发安全机制
switch_to_fallback_path();
set_safe_state();
}
这段代码看着简单,但实际部署时要注意:MAX_DELTA这个阈值怎么定?定大了,危险情况检测不到;定小了,正常变道都会被误判。我建议用实车数据标定,别光靠仿真。
四、总结一下我的思路
做ASIL分解,核心就三句话:
- 先定顶层安全目标,别一上来就拆模块。
- 用冗余换等级,但冗余必须真独立。
- 安全机制要可验证,不能只写在文档里。
我记得有一次评审,对方问我:“你们这个ASIL分解,怎么证明是对的?”我直接拿出故障注入测试报告,每个分解路径都做了1000次随机故障注入。嗯,从那以后,审核再没卡过。
好了,这一章就聊到这儿。下一章咱们深入讲讲感知层的安全设计,尤其是摄像头和激光雷达的冗余策略。到时候我会分享一个我在高速路测时遇到的真实案例——传感器被泥巴糊住,系统怎么降级处理的。