一句话理解功能安全
功能安全 = 系统在遇到故障(硬件坏了/软件bug/感知异常)时,仍然能保证不发生不可接受的人身伤害
没有功能安全:激光雷达死机 → 感知丢失 → 车辆继续行驶 → 撞车
有功能安全:激光雷达死机 → 感知模块报错 → 安全监控介入 → 车辆安全靠边停车
功能安全不关心"系统能不能做好自动驾驶"——那是算法团队的职责。功能安全关心的是**“当系统出问题时,怎么保证不撞死人”**。
第一部分:ISO 26262基础
ISO 26262是道路车辆功能安全的国际标准,源自工业通用的IEC 61508。该标准覆盖了从概念设计到生产释放再到退役的整个安全周期。
核心概念体系
在学习ISO 26262之前,需要先建立它的概念体系。这些术语的精确含义与日常使用存在差异,需要仔细区分。
故障 (Fault):系统的异常状态。可以是硬件故障(如电阻短路)、软件故障(如空指针异常)或系统故障(如设计缺陷)。故障是"因"。
失效 (Failure):系统或组件丧失执行所需功能的能力。当故障被激活时,就会发生失效。例如,电阻短路(故障)导致供电电压异常(失效)。失效是"果"。
危险 (Hazard):系统失效可能导致伤害的潜在状态。例如,刹车失效(失效)与车辆正在行驶(运行场景)结合,构成"无法制动"的危险。
风险 (Risk):危险发生的概率与伤害严重程度的组合。ISO 26262的目标就是将风险降低到可接受的水平。
安全目标 (Safety Goal):对系统在特定危险下必须满足的安全要求的顶层描述。例如:“在刹车指令发出后的500ms内,制动力必须达到需求的90%。”
安全状态 (Safe State):系统失控后可以进入的一种不会对人员造成伤害的状态。最典型的安全状态就是"停止"——车辆刹车停稳,然后保持静止。
ASIL等级:风险的量化
ASIL (Automotive Safety Integrity Level) 是ISO 26262中最广为人知的概念。它将功能安全要求分为四个等级:ASIL A(最低)到ASIL D(最高)。还有一个QM (Quality Management) 级别,表示仅需标准质量管理,无需功能安全流程。
ASIL等级由三个参数决定:
$$ ASIL = f(Severity, Exposure, Controllability) $$严重度 (Severity, S):伤害的严重程度。
- S0:无伤害
- S1:轻伤(如擦伤)
- S2:重伤(如骨折)
- S3:致命伤
暴露率 (Exposure, E):系统运行场景中危险出现的概率。
- E0:几乎不会发生
- E1:极少发生(<1%的驾驶时间)
- E2:偶尔发生(1%-10%)
- E3:经常发生(10%-50%)
- E4:几乎持续发生(>50%)
可控性 (Controllability, C):驾驶员或乘客能否通过适当反应避免伤害。
- C0:完全可控
- C1:简单可控
- C2:一般可控
- C3:难以控制或无法控制
三者的组合确定ASIL等级:S3 + E4 + C3 = ASIL D(最高安全等级);S1 + E1 + C1 = QM(仅需质量管理)。
理解ASIL的工程意义:
ASIL等级直接决定了开发过程中需要投入的安全工程工作量。对于ASIL D级别的功能:
- 硬件需要达到99%以上的诊断覆盖率
- 软件需要双模冗余或更高级别的容错机制
- 开发流程需要独立的安全评审和验证团队
- 测试覆盖率要求远高于低ASIL级别
在自动驾驶中,转向、制动、动力等核心执行器相关的安全功能通常被归类为ASIL D。而某些非安全关键功能(如信息娱乐系统)可能仅需QM级别。
HARA分析
HARA (Hazard Analysis and Risk Assessment) 是ISO 26262概念阶段的核心活动,也是确定ASIL等级的方法论。
HARA的完整流程分为三步:
第一步:场景分析 (Situation Analysis)
识别系统在生命周期中可能处于的所有运行场景。对于自动驾驶来说,场景分析需要覆盖正常驾驶、泊车、充电/加油、维护、维修等全部阶段。
每个场景进一步细分为"运行模式"和"环境条件"。例如,“高速公路夜间小雨中行驶"就是一个具体的场景组合。
第二步:危险识别 (Hazard Identification)
对每个场景,分析系统失效可能导致的危险。以自动紧急制动(AEB)系统为例:
| 失效模式 | 运行场景 | 危险事件 |
|---|---|---|
| 意外触发制动 | 高速行驶 | 后车追尾 |
| 制动不足 | 障碍物前 | 与前车碰撞 |
| 制动力不平衡 | 湿滑路面 | 车辆失控 |
| 制动响应延迟 | 行人横穿 | 行人碰撞 |
第三步:风险评估 (Risk Assessment)
对每个危险事件,评估S、E、C三个参数,确定ASIL等级。上例中,“制动不足 → 与前车碰撞"在高速场景下的S通常为S3(致命伤),E为E3(经常遇到),C为C2(一般可控),综合得到ASIL C或D。
HARA实践中的典型经验数据:
- 一个中等复杂度的自动驾驶系统(覆盖L2+功能)通常会产生50-150个危险事件
- 每个危险事件对应1-2个安全目标
- ASIL D级别的安全目标通常占总量10-20%,ASIL B/C占30-40%,QM占30-50%
第二部分:ISO 21448 (SOTIF)
ISO 26262主要针对的是"系统故障导致的安全问题”(比如传感器坏了、软件算错了)。但自动驾驶面临一个更根本的挑战:即使所有硬件和软件都没有故障,仅仅因为算法能力不足(看不准、预测错),也可能导致危险。
这就是SOTIF (Safety Of The Intended Functionality)——预期功能安全——要解决的问题。
从26262到21448
ISO 21448标准的核心洞察是将场景分为四个象限:
| 已知场景 | 未知场景 | |
|---|---|---|
| 安全 | 场景已知且模型处理正确(Quadrant I) | 场景未知但无害(Quadrant IV) |
| 不安全 | 场景已知但模型处理不好(Quadrant II) | 场景未知且模型处理不好(Quadrant III) |
ISO 26262负责的是Quadrant I到II的边界——已知场景中,如果系统因为故障导致不安全,那是26262的范畴。
SOTIF负责的是Quadrant II和Quadrant III——系统没有故障,但算法能力不足以安全处理场景。
工程解读:
- Quadrant II(已知不安全):我们明确知道哪些场景当前模型处理不好(如强逆光、大雨天雾、无保护左转)。对这些场景,需要量化感知不确定性、设计降级策略、或者在ODD中排除。
- Quadrant III(未知不安全):我们不知道模型在哪些场景中会失败——这就是最难处理的部分。SOTIF要求通过大量的路测和仿真暴露这些未知场景,将其转化为已知场景(迁移到Quadrant II),然后解决或排除。
SOTIF的核心流程
SOTIF的整体开发流程包括以下环节:
1. 功能规范分析与系统定义
明确系统的预期功能和非预期功能。例如:自适应巡航(ACC)的预期功能是"保持设定车速和跟车间距”,非预期功能包括"在施工区域错误识别限速标志"。
2. 安全场景识别与评估
通过以下手段识别不确定性来源:
- 传感器局限性(雨、雾、逆光、低对比度等)
- 算法局限性(感知模型在特定场景的精度退化)
- 系统局限性(计算延迟导致的不确定性)
3. 功能改进 —— 减少不安全场景
通过算法改进降低Quadrant II和Quadrant III的规模:
- 提升感知模型在长尾场景的精度
- 引入感知不确定性量化模块
- 设计冗余传感器方案覆盖感知盲区
4. 安全机制验证 —— 证明残余风险可接受
对于改进后仍然存在的残余风险,通过以下方式论证:
- 定量分析:用统计数据证明风险低于可接受阈值
- 降级策略:证明在已知不安全场景中,系统能及时降级到安全状态
- 运行设计域(ODD)限制:在无法解决的场景中排除使用(如大雨天暂停运行)
5. 全生命周期安全评估
SOTIF不是一次性工作。随着路测数据的积累、ODD的扩展、新场景的暴露,需要持续更新安全分析和安全机制。
第三部分:VLA模型的安全工程实践
现在我们把功能安全和SOTIF的语言落地到VLA (Vision-Language-Action) 模型的具体实践中。VLA模型用大语言模型作为推理后端,直接输出驾驶决策,这在安全工程上带来了全新的挑战。
感知不确定性量化
VLA模型需要环境感知作为输入。无论是直接处理视觉token还是接收BEV特征,感知模块的不确定性都会传递到决策模块。对不确定性的量化和处理是SOTIF在VLA模型中最直接的落地。
三类不确定性:
1. 偶然不确定性 (Aleatoric Uncertainty)
源于传感器或环境的固有噪声。比如雨天LiDAR点云的稀疏性、摄像头在弱光下的信噪比降低。
量化方法:对于每个感知输出,模型同时输出一个不确定性估计。例如,检测头的输出不仅包含边界框 $(x, y, w, h)$,还包含方差 $\sigma^2$:
$$ \hat{y} = f_\theta(x), \quad \hat{\sigma}^2 = g_\theta(x) $$训练时使用不确定性加权的损失函数:
$$ \mathcal{L} = \frac{\lVert y - \hat{y} \rVert^2}{2\hat{\sigma}^2} + \frac{1}{2}\log\hat{\sigma}^2 $$2. 认知不确定性 (Epistemic Uncertainty)
源于模型的"知识盲区"——模型训练数据中没有覆盖的场景。比如在训练数据中从未出现过的工程车辆。
量化方法:使用Monte Carlo Dropout、Deep Ensemble或直接学习"不知道"的阈值。在VLA模型中,一个实用方案是用模型对备选轨迹的logit值的方差来衡量认知不确定性。
3. 分布外检测 (OOD Detection)
当输入与训练数据分布显著不同时,模型应该"承认自己不知道"而不是强行输出一个错误的结果。
常用方法包括基于特征距离的方法(Mahalanobis距离到训练集特征中心的距离):
$$ D_{Mahalanobis}(x) = (z - \mu_{train})^T \Sigma_{train}^{-1} (z - \mu_{train}) $$其中 $z$ 是模型的中间层特征,$\mu_{train}$ 和 $\Sigma_{train}$ 是训练集特征的均值和协方差矩阵。
当 $D_{Mahalanobis}$ 超过某个阈值时,模型判定当前输入为OOD,触发降级策略。
工程落地经验:感知不确定性量化的核心挑战不是"能不能算",而是"阈值怎么设"。阈值太宽松会频繁触发不必要的降级(影响可用性),阈值太严格则漏掉真正危险的不确定性。实践中通常通过收集大量路测数据,分析不确定性分数与实际驾驶风险的对数关系来确定阈值。
降级策略 (Degradation Strategy)
降级策略是功能安全中的"最后一道防线"——当系统检测到自身无法安全处理当前场景时,自动降低功能级别。
三级降级体系:
| 级别 | 检测到的问题 | 行为 | 对用户体验的影响 |
|---|---|---|---|
| Level 1 | 感知不确定性轻微升高 | 降低车速上限(如从80降到60km/h); 增加跟车距离 | 基本不可感知 |
| Level 2 | 感知不确定性显著升高; 单传感器失效; VLA模型置信度过低 | 通知驾驶员准备接管; 限速到40km/h; 切换到冗余传感器方案 | 驾驶员需要关注路况 |
| Level 3 | 多传感器失效; 系统严重异常; 严重OOD | 最小风险策略(MRM, Minimal Risk Maneuver): 安全靠边停车 | 立即接管或系统自动执行MRM |
MRM的设计:最小风险策略是降级的终极状态。MRM需要设计为在安全冗余系统上执行,不能依赖于引发降级的那套感知系统。典型的MRM流程:
- 减速到安全速度(通常10-15km/h,保证在检测到障碍物时有足够刹车距离)
- 打双闪灯
- 缓慢靠向右侧路肩或紧急停车带
- 停车后挂入P挡,拉起电子手刹
- 通过车联网上传故障日志和降级原因
整个MRM过程需要设计为在单传感器失效、单计算单元失效的情况下仍然可执行。这意味着MRM的执行路径必须经过冗余设计和独立供电。
安全监控器 (Safety Monitor)
安全监控器是一个独立于主算法模型的安全监控系统。它的核心原则是:不依赖于被监控对象来判断自身的可靠性。
安全监控器的设计原则:
- 独立性:监控器使用与主模型不同的传感器、不同的计算平台、不同的算法原理。例如,主模型使用基于神经网络的视觉感知,监控器可以使用基于传统计算机视觉的校验算法。
- 简单性:监控器应该足够简单,使得它的行为可以被正式验证。这通常意味着使用确定性算法而不是深度学习模型。
- 实时性:监控器的延迟必须低于主模型的决策周期,通常要求在30-50ms以内输出安全评估结果。
监控器的典型工作模式:
VLA模型特有的安全监控挑战:
VLA模型使用大语言模型的token generation作为推理过程。这种"非结构化推理"给安全监控带来了新问题:
- 推理过程不可观测:传统规划模型输出明确的轨迹点,可以直接校验。VLA模型输出的是自然语言/action token,防御性校验的输入维度完全变了。
- 幻觉问题:大模型可能在输出中生成合理但事实错误的推理。例如,“前方没有障碍物”(但实际有施工区域),模型仍然生成了一个合理的加速轨迹。
- 延迟波动:大模型推理的延迟可能随输入长度和复杂度显著变化,这与功能安全要求的确定性延迟时间存在冲突。
应对方案:在实践中,VLA模型通常采用"混合架构"——用大模型做高层意图推理(如"前方车流密集,准备跟车"),但最终的动作执行仍然通过一个固定的、可验证的规划器来生成。安全监控器监控的是最终输出的轨迹,而不是大模型的推理过程。
第四部分:功能安全的工程现实
安全文化 vs 安全程序
功能安全标准最重要的贡献不是那些条条框框,而是建立了一种"安全的思考习惯"。ISO 26262让整个开发团队养成一种条件反射:每做一个决策,都要问"如果这里出问题了会怎么样?"
但在工程现实中,很容易陷入"为了过审而走流程"的形式主义——HARA分析成了填表格,安全评审成了走过场。
一个好的功能安全实践,至少要做到三件事:
- 安全工程师嵌入开发团队:安全不是独立于开发的"监管活动",安全工程师需要实际参与设计评审
- 安全工件与实际代码关联:每个安全目标和安全机制都需要通过git commit或者具体的代码变更来追溯
- 安全测试与功能测试融合:功能安全验证不是独立于功能测试的额外工作,而是测试计划的一部分
安全冗余的工程成本
每增加一级安全冗余,都意味着硬件成本、开发工程量、系统复杂度的显著上升。以ASIL D的转向系统为例:
- 单一控制器方案:硬件成本X,功能安全等级无法达ASIL D
- 双控制器热备方案:硬件成本约2.3X,工具链成本增加约1.5倍,可以实现ASIL D
- 三模冗余方案:硬件成本约3.5X,同步机制复杂度指数级上升,开发周期增加2倍以上
在实际量产中,OEM会根据ASIL等级的精确定义来决定冗余的具体实现方式——不是"越冗余越好",而是"刚好达到安全目标即可"。
SOTIF验证的数据量估算
SOTIF的验证要求是:残余风险必须低于可接受水平。但"可接受水平"是多少?业界还没有一个完全统一的标准,但一个常见的参考是:L4系统要求每百万公里发生致命事故的频率低于1次。
要达到这个置信水平,需要多少路测数据?假设真实世界中致命事故的发生率为每百万公里0.5次(这是人类驾驶的平均水平),要在95%置信水平下验证系统致命事故率不超过1次/百万公里,需要大约300万公里的路测数据。
300万公里对应一个50辆车的测试车队,每辆车每天跑300公里,连续运行200天。这还不包括在罕见场景中需要的大量仿真数据。这就是SOTIF验证令人望而生畏的地方——安全不是一个技术问题,在更大程度上是一个数据规模问题。
关键论文与延伸阅读
- ISO 26262:2018: “Road vehicles — Functional safety” — 功能安全主标准,共12个部分
- ISO 21448:2022: “Road vehicles — Safety of the intended functionality” — SOTIF标准正文
- HARA分析实践: R. Palin et al., “HARA: A Practical Guide for Automotive Systems”, SAE 2020. — HARA分析的方法论和工程案例
- 感知不确定性量化: A. Kendall et al., “What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision?”, NeurIPS 2017. — 偶然不确定性和认知不确定性的经典区分
- 自动驾驶安全框架: P. Koopman et al., “Safety First: A Safety-First Approach to Autonomous Vehicle Development”, 2019. — 基于SOTIF理念的自动驾驶安全框架白皮书
- MRM设计: S. Shalev-Shwartz et al., “On a Formal Model of Safe and Scalable Self-driving Cars”, arXiv 2017. — 最小风险策略(MRM)的理论基础
功能安全不生产自动驾驶的能力,但它定义了这个能力的"底线"。一个好的安全系统应该让用户感觉不到它的存在——直到真的出问题的那一刻,它才是所有人最感激的那个默默工作的组件。