资讯动态

基于仿真的SOTIF验证:系统性识别自动驾驶可预见误用

发布时间:2026/10/22 21:41:40 来源:尧图企业网站定制
做自动驾驶安全验证这些年我越来越清楚一件事真正能把车逼到危险境地的往往不是硬件故障也不是代码逻辑错误而是“人瞎用”——也就是安全标准里反复强调的可预见误用。比如L2级辅助驾驶状态下驾驶员认为车自己会开于是脱手、低头、甚至打瞌睡结果系统在ODD边界设计运行域边界静默退出车辆直接偏离车道。这类场景靠实车路测几乎碰不到几次而一旦碰到往往就是事故。基于仿真的SOTIFSafety of the Intended Functionality预期功能安全方法就是为了在开发阶段把这些“可预见误用”系统性地找出来并通过策略缓解掉。这篇文章我把实践中的方法论、建模方式、参数选择和踩过的坑都写出来适合正在做自动驾驶系统验证、安全分析、仿真平台搭建的工程师和技术管理者参考。1. SOTIF方法论与可预见误用的定位1.1 从功能安全到预期功能安全风险谱系补全了哪一块早年做功能安全ISO 26262大家关注的核心问题是“失效”——随机硬件失效、系统性软件错误、电气故障。这套方法论解决的是“系统坏了怎么办”设计冗余、监控、降级机制把故障导向安全状态。但随着自动驾驶系统往L2、L3级别走大量危险场景根本和故障无关传感器在强逆光下性能衰减、算法在环岛路口误判目标意图、系统对“无车道线”区域的正常退出却导致驾驶员措手不及。这些情况的共性是——功能本身在按设计工作但预期功能在特定场景下的性能不足或与人预期不匹配依然会造成危害。这正是ISO 21448要补上的板块。它把安全分析的范围从“失效”扩展到了“非失效但危险”明确将可预见误用列为预期功能安全的核心风险源之一。注意这里的“误用”不是恶意滥用而是基于现实用户行为规律可以提前预判到的错误使用方式。例如驾驶员在系统激活后放弃监控路面或者驾驶员误以为系统具备远超实际的通行能力。误用一旦与功能边界相遇风险就被激活了。在我参与的某L2级辅助驾驶系统验证项目里团队最初只把精力放在功能安全分析和算法优化上后来做了误用相关的实车摸底发现相当比例的危险事件根本不是算法失效导致的而是驾驶员在系统提醒升级的过程中做出了错误的接管动作或者干脆没有动作。那次摸底之后我们才真正把可预见误用的建模与仿真提上日程。1.2 可预见误用的四类典型形态做误用建模前最重要的不是写代码而是把误用分类摸清楚。我习惯把可预见误用分成四类每类的行为特征、危害机制和仿真建模难度差别很大。误用类型典型行为危害机制仿真建模难度注意力转离激活系统后看手机、聊天、闭眼休息对系统退出或接管请求无感知中需驾驶员视觉分心模型能力高估在雨雾、夜间、无车道线等超出ODD场景开启功能系统性能下降或退出驾驶员无预案低环境参数叠加即可状态误解混淆ACC和LCC功能状态误判当前控制权制动与转向预期错位高需系统状态注入与认知模型操作失误误触开关、错误调节跟车距离导致制动过晚系统响应与驾驶员预期不一致中需操作事件序列建模实车环境下这四类误用经常叠加出现。我最常模拟的组合是“能力高估注意力转离”驾驶员在雨天开启领航辅助同时视觉注意力已经离开路面。这个组合在事故统计里出现的比例相当高而且后果往往严重。单纯靠DMS驾驶员监控系统报警可以解决一部分但报警延迟、驾驶员恢复响应的时间都必须通过仿真参数扫描来量化。1.3 SOTIF“四大区域”与误用的归宿SOTIF方法论里有一个经典的四象限划分已知安全区、已知危险区、未知危险区、未知安全区。所有工况场景都落在这四个区里。我们做仿真的核心使命就是让未知危险区的场景尽可能被识别并转为已知危险区然后在已知危险区里通过设计改进或缓解策略把风险压到可接受水平。可预见误用场景大部分属于“理论上知道但没验证透”的已知危险区团队知道驾驶员可能脱手但脱手到什么程度、在什么样的道路环境下会发生危险、哪些参数组合超出安全边界这些如果只靠经验推断很容易遗漏。仿真在这里的价值就是通过参数化的场景注入把“大概危险”变成“精确地知道在哪个参数组合下危险”从而为安全目标的制定提供数据支撑。有一点我在评审中反复强调SOTIF不是一次性分析而是迭代过程。每轮仿真发现新的危险场景设计就做一轮变更场景库也要跟着更新再跑回归。静态的分析报告在自动驾驶这种快速迭代的产品周期里很难真正保障安全。2. 为什么必须用仿真来啃误用这块硬骨头2.1 实车测试面对误用场景的天然局限说到误用验证很多人的第一反应是找一批驾驶员开实车。这个想法理论上没问题实际操作困难重重。首先是伦理和安全边界我总不能安排一位驾驶员在高速上真实地脱手30秒不看路然后在系统退出接管的那一刻去量碰撞风险。这类实验只要发生一次近失near miss团队的心理阴影和安全成本都承受不起。其次是复现性。人类驾驶员的行为随机性极强同一驾驶员即使指令相同在不同实验时段的状态也完全不同。误用行为的时间点、方向盘操作幅度、视线偏离方向这些变量在实车环境下根本无法精确控制。场景不可复现意味着你没法在软件迭代后做同一场景的回归对比。第三是覆盖率。L2系统的ODD边界、环境干扰、交通流状态组合起来参数空间是天文数字。实车一个月能跑的有效误用场景可能就是几十个而仿真批量跑一轮下来是几万个用例。这个量级差距直接决定了判断“某个缓解策略是否可靠”的置信度差异。2.2 仿真方法在SOTIF验证中的四个独特优势仿真不是实车测试的替代品而是专门补实车软肋的手段。它的优势我总结为四条。一是行为参数可编程。在仿真环境里我可以把驾驶员建模成一堆可调参数视觉脱离路面的时间、接管请求后延迟响应的秒数、方向盘反向修正的幅度。这些参数能精确注入到某个指定场景实车几乎做不到。二是场景可重复。同样的脱手分心场景我可以精确复现一千次每次只改一个参数比如弯道半径从120米变成100米。这种控制变量能力对定位安全边界特别重要。三是安全无风险。仿真里可以大胆地让车冲到对向车道、撞护栏、甚至两车碰撞。碰撞结果只是仿真记录里的一个风险标记不会造成任何真实损失。四是批量可自动化。仿真框架搭好之后可以无人值守地跑参数扫描。夜间挂机第二天早上起来看结果报告这种效率实车完全不可比。2.3 仿真在SOTIF生命周期中的角色分配基于仿真的SOTIF不是某个阶段的孤立动作而是贯穿三个环节。设计早期通过场景搜索和参数泛化去挖掘未知危险场景相当于“找雷”设计中期针对已识别的误用场景做精确的参数边界分析和缓解策略对比相当于“排雷”设计后期对定稿方案做回归验证证明残余风险在可接受范围内相当于“确认无雷”。在“找雷”阶段我常用随机参数泛化加少量种子场景的方法。原理很简单用标准场景作为种子把驾驶员状态参数和环境参数随机化大规模跑完再做聚类分析找出导致风险的参数簇。“排雷”阶段则恰恰相反要控制变量把某个参数从安全值逐步逼近边界值画出完整的安全边界曲线。这两个阶段的思路完全不同刚入行的同事常把两者混在一起做效果往往事倍功半。3. 可预见误用场景建模的核心思路3.1 误用场景的“五要素”模型做仿真场景建模第一步是把场景结构化。我用“五要素”来拆解误用场景这五要素分别是用户状态、操作输入、环境条件、系统状态、时间窗口。任何一个误用场景都可以抽象成这五个维度的具体取值组合。用户状态描述的是驾驶员的感知和认知状态例如视线是否在前方道路、双手是否在方向盘上、认知负荷是高是低。操作输入指驾驶员对方向盘、踏板、拨杆、触屏的具体动作序列。环境条件包括天气、光照、路面附着系数、车道线清晰度等。系统状态是目标系统当前的功能激活状态、报警状态、控制权归属。时间窗口则定义了这些状态之间的时间关系比如系统发出接管请求后0.5秒驾驶员开始响应和5秒后才响应结果完全不同。项目里我要求所有场景工程师按照这五要素来编写场景描述文档。好处是场景可追溯评审时其他工程师能快速理解坏处是对人的规范性要求高需要培训加模板强制。但一旦习惯了场景库的质量会明显提升因为遗漏用户状态维度这样的低级错误很容易被发现。3.2 驾驶员行为模型怎么建才靠谱误用场景建模里最难的部分是驾驶员模型。常见的做法是分三级建模型感知层、决策层、操作层。感知层决定驾驶员能看到什么——视线方向、遮挡、注意力分配决策层决定在感知到信息后驾驶员会做什么反应——是立即接管还是继续等待确认操作层决定动作的具体执行——转向的速率、制动的力度。在仿真SOTIF实践中我常用三种驾驶员行为模型来覆盖可预见误用。第一种是无响应模型。车辆持续横向或纵向偏离驾驶员不做任何修正操作。这个模型用于模拟完全脱手、昏睡、突发疾病等极端情况。参数很简单无操作时长、头部朝向偏离时间。第二种是延迟响应模型。驾驶员在系统发出接管请求后延迟接管但最终会接管。关键在于延迟时间分布和接管动作的质量。正常驾驶员的接管延迟是0.8到2秒但如果在看手机延迟可能拉到5秒甚至更长。仿真时要用不同的延迟分布去测系统能不能兜得住。第三种是误导性操作模型。驾驶员接管时操作方向搞反了或者误踩加速踏板。这种误用危害极大实车几乎不敢测但仿真里可以放心建模。我用它来验证系统能否在驾驶员错误操作时抑制其影响。还有一类值得一提渐进式不当操作。比如驾驶员在方向盘上一直施加一个很小的力矩系统判断为“驾驶员在位”但这个力矩不足以完成转向修正。这类建模难度高但恰恰是当前DMS系统的盲区。3.3 一个典型误用场景的完整参数设计我拿自动驾驶项目里最常见的一个误用场景举例驾驶员激活L2级车道居中辅助双手脱离方向盘超过30秒同时视觉注意力转向手机屏幕随后车辆进入无车道线的区域系统发出接管请求驾驶员延迟响应。这个场景要分解成具体参数。用户状态参数包括脱手时间30秒、视线偏离路面方向45度、视线偏离时间连续8秒。操作输入参数无转向操作、无制动操作。环境条件参数光照为白天或黄昏、车道线为磨损模糊状态、弯道半径设为150米、车速设定在100公里每小时。系统状态参数车道居中辅助激活、脱手报警已提示两轮、接管请求发出。时间窗口参数接管请求发出后延迟接管时间分别设为2秒、4秒、6秒、10秒四档。在仿真平台上这个场景被参数化为一条场景描述文件然后用自动化框架扫描四档延迟时间与三种弯道半径的组合共12个用例。每个用例运行时间约20秒仿真时间实际算力消耗很小。根据仿真结果团队很快看出延迟6秒以上时车辆已经明显偏离车道中心线TTC碰撞时间会降到危险阈值以下。这个信息对HMI团队的价值非常大因为能直接反推报警策略必须提前多少秒发出才能兜住最慢的那批驾驶员。4. 仿真平台搭建与测试实施流程4.1 工具链的选型与自研边界做仿真SOTIF工具链的选型直接决定项目的成败。我的经验是分三件套来搭场景定义与编辑、动力学与传感器仿真、自动化批量运行与分析。场景编辑层业界普遍用OpenDRIVE描述静态地图、OpenSCENARIO描述动态场景这两个格式已经成为事实标准新项目最好不要另搞一套私有格式否则上下游工具对接会非常痛苦。动力学与传感器仿真层的选择取决于你要验证的问题层级。如果验证的是控制策略和误用交互逻辑单轨动力学模型加理想传感器模型基本够用速度快、参数简单如果要验证感知算法在恶劣环境下的边界性能就必须上高保真传感器模型但计算成本会成倍增长。我的建议是先粗后细第一次摸底跑用低保真模型快速扫描筛出高风险参数簇再对重点参数用高保真模型精确复现。一上来就全上高保真往往把时间都耗在算力调度上。自动化批量运行与分析层我的团队采用了自研的任务分发系统。核心不复杂场景文件队列、仿真内核调度、结果数据采集三部分。但有一点要提前规划——结果数据的落盘格式。如果每个场景的结果都存完整数据跑一万个用例会产生TB级存储压力。我的做法是先落地摘要指标比如最小TTC、最大横向偏差、是否触发碰撞、接管请求时刻及响应时长只有异常用例才保存完整轨迹。4.2 从场景库到批量仿真的标准流程有了工具链具体跑数据的流程我总结为五步。第一步梳理ODD和功能边界。这一步不能跳。要明确系统在哪些条件是激活的、哪些条件下会退出、退出是静默还是有声提醒。ODD梳理不到位后面建的误用场景很可能脱离系统真实行为。第二步构建基础场景库。从事故数据库、自然驾驶数据库、公开场景集和工程师经验中整理基础场景。项目里我们整理出42个基础误用场景覆盖前面说的四类误用。每个基础场景附带变体描述比如弯道半径、能见度、交通密度等可变维度。第三步参数空间定义与扫描项生成。对每个基础场景定义需要扫描的参数及取值范围。关键是要选择对风险影响最大的参数而不是把每个参数都扫一遍。项目里我们对脱手场景扫描的是脱手时长、接管延迟、曲率三个主参数每个参数5到8个档位组合下来约12000个仿真用例。第四步批量执行与自动化监控。批量跑之前设置好每个用例的超时时间、异常终止条件。跑了十万级用例才发现有效数据只占一半。那是调度策略没做好。后来在任务分发时按场景类型分组同类型的场景放在同一批次里跑复用同样的地图缓存和模型配置执行效率大幅提升。第五步结果聚类与风险上报。跑完的数据不能只看总量。团队先用统计方法降维聚类出风险集中的参数簇。风险上报的标准是该参数簇对应的最小TTC是否低于阈值且该参数簇在真实用户行为分布中出现的概率是否可接受。两条标准同时满足才纳入设计改进清单。4.3 指标体系与通过准则怎么定仿真结果没有指标就是一堆轨迹动画。我实践下来常用的指标可以分两层。第一层是场景覆盖度指标。这一层回答的是“测全了没有”。常用的有误用场景类别覆盖率也就是四类误用中已建模并测试的比例参数边界覆盖率也就是各扫描参数取到的值是否覆盖设计边界。项目里我们要求基础误用场景覆盖率不低于90%关键参数的边界覆盖必须到极值。第二层是安全性能指标。这一层回答的是“安不安全”。我常用的有最小TTC、最晚接管后剩余横向距离、风险暴露时间、碰撞是否发生。通过准则不能一刀切要分严重程度。比如高速场景最小TTC低于0.8秒或者横向偏离超出车道边界0.5米且持续时间超过0.5秒直接判定为高风险必须改进设计。中等风险可以接受但仍要监控。这里要给个提醒指标阈值一定要基于真实事故统计和行业基准来定不能拍脑袋。早前我吃过亏——团队定了一个过于宽松的横向偏离阈值导致仿真显示“全部通过”结果实车摸底却被安全员指出车辆差点刮到侧向护栏。后来重新翻事故数据把横向偏离的容忍度收紧了一个量级再跑仿真才暴露出一批原来被掩盖的高风险场景。5. 实测中的常见问题与经验教训5.1 故障一驾驶员模型太“乖”结果过于乐观最先遇到的问题就是驾驶员模型过于“配合”。团队首版无响应模型设置的是驾驶员在系统接管请求发出后100%保持完全不动。这个模型验证的是“驾驶员完全失能”的最坏情况但真正常见的误用并非完全不动而是“动了一下但动错了”或者是“想起来接管但动作太慢”。前者是延迟响应模型后者是误导性操作模型。只测最坏情况反而漏掉了高概率风险。解决方案是丰富驾驶员模型的类型分布并且给每类模型设定一个先验概率权重。仿真报告和风险评估里不仅要有最坏情况还要有不同误用类型下的加权风险值让决策层看到面向大概率事件的整体风险而不是盯着极端角落里的个案。5.2 故障二传感器模型保真度不足把危险场景测没了低保真传感器模型有时候会把危险测没了。雷达模型只加高斯噪声摄像头模型不做逆光和雨滴影响建模最后跑出来的结论是系统能在恶劣天气下准确识别目标。但实车上逆光下的摄像头性能下降很明显感知结果会漏检或延迟。仿真参数扫描给出的安全边界过于乐观一上实车就露馅。这个教训让我定了一条规矩凡是涉及环境退化的误用场景传感器模型至少要用中级保真度带天气、光照参数且必须做过与实车数据的对比验证。低保真模型只能用于理想天气下的逻辑验证。5.3 故障三只看碰撞率错过了大量near-miss信息早期项目报告只看“是否碰撞”这一个布尔值。后来发现碰撞率太低反而导致大家放松警惕。事实是很多场景虽然没有碰撞但最小TTC已经跌破1秒说直白点就是“差一点就撞了”。单纯看碰撞率等于把大量风险信息丢进了垃圾桶。从那以后指标体系中引入了风险分级绿色安全余量充足、黄色接近边界但可控、橙色高风险逼近、红色碰撞或等效碰撞。每次评审先看橙红色用例的数量和分布而不是只看红色。这个简单调整让团队对系统的真实安全边界认识深刻了很多。5.4 故障四场景库与结果数据无法追溯成了黑账跑了几万个用例后最头疼的就是追溯。场景参数改了版本但结果库里还留着旧版本的结果某个用例的仿真中止原因不明日志信息被覆盖。整个场景库和结果数据成了烂账评审时对不上号。后来我们建立了严格的版本管理流程。场景文件像代码一样入仓库每次改动都记录版本号结果数据表必须携带场景文件版本号、仿真内核版本号、算法版本号三个关键字段数据落库后任何人不能改动只能追加修正记录。这套流程虽然增加了录入成本但换来了评审时的底气和数据的可信度。常见问题现象表现解决对策驾驶员模型过于理想仿真全部通过实车却问题频出引入延迟响应与误导操作模型传感器保真度不足环境退化的危险场景被测没了按环境退化级别选择对应保真模型只看碰撞结果大量near-miss风险被掩盖采用四级风险分级指标数据无法追溯评审对不上旧版本结果场景和结果建立强制版本关联6. 关于基于仿真的SOTIF我最后想再多说两句在实际操作中我越来越体会到基于仿真的SOTIF应用真正的瓶颈其实不是工具链而是团队对“误用”的理解深度。仿真平台再强场景设计者对用户行为的认知浮于表面生成出来的误用场景也就是“剧本化的假危险”。反之一旦团队梳理清楚ODD边界、真实用户如何错误地使用系统、系统在边界处如何表现仿真就能发挥出远超预期的价值——它不仅能验证安全目标还能反向驱动HMI设计、报警策略和MRM机制的优化。有一个小技巧值得分享每次跑完批量仿真后我会特意安排一次“结果反读会”。把风险用例的轨迹动画放给算法、HMI和功能安全团队一起看甚至邀请做过实车评测的同事来挑刺。很多从指标上看不出来的体验问题比如报警音触发时机对驾驶员造成的慌张感反而在这一步暴露出来。仿真不只是用来过安全评审的材料它完全能成为跨团队沟通风险共识的通用语言。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑