3、场景分析入门:场景的定义与要素、运行场景与运行设计域(ODD)、场景分析工具介绍

各位同学,欢迎来到场景分析入门这一讲。

说实话,做SOTIF(预期功能安全)这些年,我最大的感触就是:场景分析是整件事的基石。你想想看,如果连车会在什么情况下跑、会遇到什么情况都说不清楚,那后面的危害分析、风险评估,说白了就是空中楼阁。

我个人习惯,每次接手一个新项目,第一件事不是翻代码,而是拉着系统工程师和测试团队,先把场景聊透。为什么?因为场景决定了你的ODD(运行设计域),ODD又决定了你的功能边界。边界划不清楚,后面全是坑。

3.1 场景的定义与要素

先问大家一个问题:什么是场景?

很多人觉得场景就是「车在路上开」。嗯,这个说法没错,但太粗糙了。做SOTIF分析时,我们需要把场景拆成几个核心要素。

场景的五大要素(我个人总结的):

  • 道路结构:直道、弯道、匝道、十字路口、环岛……
  • 交通参与者:其他车辆、行人、自行车、动物、甚至掉落的货物
  • 环境条件:白天/黑夜、晴天/雨/雪/雾、光照角度、路面湿滑程度
  • 自车状态:车速、转向角、加速度、传感器视野是否被遮挡
  • 时间因素:季节、时间段、交通流密度

我记得有一次做港口无人集卡的场景分析,我们漏掉了「海鸥」这个要素。结果呢?测试车在码头被一群海鸥挡住,传感器误判为障碍物,直接急刹。你说这算不算场景要素?当然算!

所以,场景的定义可以这样理解:场景是某一时刻,自车与周围环境、交通参与者之间所有相关信息的快照。它不是静态的,而是一个动态变化的过程。

3.2 运行场景与运行设计域(ODD)

搞清楚了场景的要素,接下来我们聊聊两个容易混淆的概念:运行场景运行设计域(ODD)

说白了,运行场景是「实际发生了什么」,而ODD是「我们允许系统在什么条件下运行」。

举个例子:

  • 运行场景:一辆车在夜间暴雨中,行驶在无路灯的乡间小路上,前方突然出现一个行人。
  • ODD:系统设计时声明「本系统仅在白天、晴朗天气、有清晰车道线的城市道路上运行」。

你看,如果实际场景超出了ODD的边界,系统就不应该被激活,或者必须安全地退出。这就是SOTIF的核心逻辑之一——明确边界,守住边界

避坑指南:

我曾经在一个项目中,团队把ODD写得特别宽泛,什么「城市道路」就完了。结果测试时发现,系统在隧道里表现很差——因为隧道里GPS信号弱,而且光照突变。后来我们学乖了,ODD里必须写明:「有GPS信号覆盖」「光照强度不低于X lux」。越细越好,别怕啰嗦。

ODD的描述通常包含以下几个维度:

维度 示例描述
道路类型 高速公路、城市主干道、封闭园区道路
速度范围 0-60 km/h
天气条件 无降水、能见度 > 200m
光照条件 白天(照度 > 1000 lux)
通信条件 GPS信号强度 > -130 dBm
交通参与者 无行人、无非机动车

你想想看,如果ODD写得不够细,测试团队怎么设计测试用例?验证团队怎么判断系统是否安全?所以,ODD不是写给别人看的,是给自己用的。

3.3 场景分析工具介绍

聊完了理论,咱们看看实际干活时用什么工具。我这些年用过不少,挑几个有代表性的说说。

3.3.1 六层场景模型(6-Layer Model)

这是PEGASUS项目提出来的,现在基本是行业标准。它把场景分成六层:

  1. 道路层:车道线、路沿、标志牌
  2. 交通基础设施层:红绿灯、护栏、路障
  3. 临时操作层:施工区域、临时封路
  4. 物体层:车辆、行人、动物
  5. 环境层:天气、光照、路面状态
  6. 数字信息层:V2X消息、高精地图更新

我个人习惯,做HARA时直接用这个模型来「过一遍」场景,确保没有遗漏。比如分析一个十字路口场景,我会一层一层问:道路层有没有特殊标线?基础设施层有没有故障的红绿灯?临时操作层有没有施工?……这样结构化的方式,不容易漏。

3.3.2 场景分类工具:功能场景、逻辑场景、具体场景

这个分类方法也很实用:

  • 功能场景:用自然语言描述,比如「车辆在高速公路上跟车行驶」。
  • 逻辑场景:用参数范围描述,比如「车速60-120 km/h,跟车距离20-100m」。
  • 具体场景:用具体数值描述,比如「车速80 km/h,跟车距离50m」。

做SOTIF分析时,我们通常从功能场景出发,然后通过参数组合生成逻辑场景,最后用具体场景来设计测试用例。这个流程,说白了就是「从抽象到具体」的过程。

注意:

千万不要跳过逻辑场景直接跳到具体场景。我见过有人直接写「车速60km/h,跟车距离30m」就开始分析,结果漏掉了车速80km/h、跟车距离20m这种更危险的组合。逻辑场景的作用就是帮你系统地覆盖参数空间,而不是拍脑袋选几个点。

3.3.3 OpenSCENARIO / OpenDRIVE

如果你做仿真测试,这两个格式是绕不开的。

  • OpenDRIVE:描述道路网络(路网结构、车道线、坡度等)
  • OpenSCENARIO:描述动态场景(车辆轨迹、交通参与者行为、环境变化等)

举个例子,一个简单的OpenSCENARIO片段长这样:

<Scenario>
  <Entities>
    <Entity name="Ego" />
    <Entity name="Target" />
  </Entities>
  <Storyboard>
    <Init>
      <Action name="Ego_Speed">
        <Private>
          <LongitudinalAction>
            <SpeedAction>
              <Target>50 km/h</Target>
            </SpeedAction>
          </LongitudinalAction>
        </Private>
      </Action>
    </Init>
  </Storyboard>
</Scenario>

嗯,这里要注意,写OpenSCENARIO时最容易犯的错误是忘记定义初始状态。比如你只写了目标车怎么动,但没写它一开始在哪、速度多少,仿真器就会报错或者行为异常。我刚开始用的时候,光调试这个就花了两天。

3.4 本章知识体系总览

为了让大家更直观地理解本章的内容结构,我画了一张图:

场景分析知识体系 场景定义与五大要素 运行场景 vs ODD 六层场景模型 功能/逻辑/具体场景 OpenSCENARIO/OpenDRIVE SOTIF危害分析与测试用例设计 场景分析是连接「真实世界」与「系统设计」的桥梁

这张图把本章的核心内容串起来了。从场景定义出发,到ODD的边界划分,再到具体的分析工具,最终都指向一个目标——为SOTIF的HARA提供扎实的输入

好了,场景分析入门就讲到这里。记住一句话:场景分析不是一次性工作,而是贯穿整个开发周期的持续活动。项目初期要分析,中期要更新,后期要验证。别想着一次搞定,那是不可能的。