4. SOTIF开发流程

场景参数化设计,说白了就是把测试场景里的可变因素提炼出来,变成一个个可以调节的旋钮。你想想看,如果每个场景都手写死数据,那场景库建到后面就是个灾难——改一个路口逻辑,几十个场景都得跟着调。

我个人习惯,拿到一个功能需求后,第一件事不是写场景,而是先列参数。把能变的、该变的、可能出问题的变量全列出来。这一步做扎实了,后面的工作才有根基。

4.1 参数空间定义

参数空间,就是所有可变参数的取值范围构成的集合。我见过不少团队,参数定义得特别随意——车速范围设个0到200 km/h,看着挺全,实际上一大半取值根本用不上。

定义参数空间,我建议按三个维度来梳理:

维度 说明 典型参数举例
环境参数 车辆运行的外部条件 光照强度、路面摩擦系数、天气类型、温度
自车参数 被测车辆自身状态 初始车速、加速度、转向角、传感器配置
交互参数 与其它交通参与者的关系 目标车距离、相对速度、切入角度、行人意图

每个参数都要明确它的类型和量纲。比如车速是连续型浮点数,单位m/s;天气是枚举型,取值{晴, 雨, 雪, 雾}。我在项目中遇到过有人把枚举型参数当连续型处理,结果生成了一堆不可能出现的组合——比如“晴天+路面结冰”,这种场景跑出来也没意义。

小技巧:参数空间定义完成后,画一张参数关系矩阵图。把两两参数之间的耦合关系标出来,哪些参数独立、哪些相互依赖,一目了然。这能帮你避免生成大量无效场景。

4.2 参数边界与组合

参数边界,就是每个参数的极限值。为什么边界重要?因为系统往往在边界处出问题。我记得有一次做AEB(自动紧急制动)测试,参数空间里目标车距离设了5m到100m,结果所有场景都跑在中间段。后来我专门补了一组边界场景——目标车距离2.5m、3m、4m——果然复现了一个传感器延迟导致的漏报问题。

边界值选取有个通用原则:

  • 物理边界:车辆能达到的极限,比如最大减速度、最大转向角
  • 法规边界:标准规定的阈值,比如Euro NCAP的测试速度点
  • 设计边界:系统设计文档里写的正常工作范围
  • 经验边界:你从实车测试中发现的敏感点

参数组合,则是把多个参数的取值排列组合起来。这里有个坑——组合爆炸。假设你有10个参数,每个取5个值,组合数就是5的10次方,接近一千万。跑不完,根本跑不完。

我常用的组合策略有三种:

  1. 全因子组合:参数少(≤4个)时用,覆盖所有组合
  2. 单因子轮换:固定其他参数,每次只变一个,适合找单个参数的影响
  3. 正交实验设计:用正交表选取代表性组合,用最少场景覆盖最大参数空间

核心原则:参数组合不是越多越好,而是越精越好。用20%的场景覆盖80%的参数空间,剩下的边界场景单独补。这才是工程上可行的做法。

4.3 参数敏感性分析

参数敏感性分析,就是搞清楚哪个参数对测试结果影响最大。说白了,帮你找到“哪个旋钮拧一下,系统反应最剧烈”。

我一般用两种方法:

方法 原理 适用场景
局部敏感性分析 每次只变一个参数,看输出变化 参数少、线性关系强时
全局敏感性分析 所有参数同时变化,用统计方法评估贡献度 参数多、存在交互效应时

局部敏感性分析简单直观,但容易漏掉参数间的交互效应。全局敏感性分析更准确,但计算量大。我个人的做法是:先用局部分析快速筛选出敏感参数,再用全局分析对敏感参数做精细评估。

举个例子,做自适应巡航(ACC)的跟车场景测试。我列了5个参数:前车初始速度、前车减速度、自车初始速度、自车跟车时距、路面附着系数。局部分析跑下来,发现前车减速度和跟车时距这两个参数对碰撞时间(TTC)影响最大。然后我用全局分析进一步看,发现这两个参数之间还有交互——低附着系数下,跟车时距的影响会被放大。

注意:敏感性分析的结果不是一成不变的。同一个参数,在不同工况下敏感度可能完全不同。我曾经在车道保持测试中发现,横向偏差对车速的敏感度在直道上很低,但在弯道上急剧升高。所以,敏感性分析要分场景、分工况来做,不能一概而论。

做完敏感性分析后,我会把参数分成三类:

  • 高敏感参数:重点覆盖,边界值、中间值、典型值都要测
  • 中敏感参数:适度覆盖,取几个代表性值即可
  • 低敏感参数:固定为典型值,不需要大量变化

这样分类之后,场景库的构建效率能提升一大截。你想想看,把精力花在刀刃上,比盲目堆场景有用得多。

场景参数化设计核心流程 参数空间定义 环境·自车·交互 参数边界与组合 边界值·正交实验 敏感性分析 局部·全局 高敏感参数 重点覆盖 边界+中间+典型 中敏感参数 适度覆盖 取代表性值 低敏感参数 固定典型值 不大量变化 高效场景库 覆盖全面·冗余最低·效率最高 核心思想:用20%的场景覆盖80%的参数空间,边界场景单独补充

嗯,这里要注意一点。敏感性分析不是一次性工作。随着场景库的迭代,参数的重要性排序可能会变。我建议每迭代两到三个版本,重新做一次敏感性分析,看看有没有新的敏感参数冒出来。

最后说一句,参数化设计做得好不好,直接决定了场景库的扩展性和复用性。你想想看,如果参数定义得合理,新场景只需要改几个参数值就能生成,根本不用从头写。这才是场景库该有的样子。