4. 测试场景设计

在智能驾驶道路测试中,“场景”不是简单的一段路或一次驾驶经历,而是对测试任务、环境条件、交通参与者和车辆行为的结构化描述。场景设计的质量,直接决定了测试能否覆盖真实风险、能否复现问题、能否把路测数据转化为可回归的工程资产。本节围绕场景要素、场景分类,以及功能场景、逻辑场景、具体场景之间的转化方法展开。

一、场景要素:把“一次驾驶”拆成可描述的对象

一个完整的测试场景通常由五类要素构成:道路要素、交通参与者、环境条件、自车任务和动态行为。道路要素包括车道数、曲率、坡度、路口类型、标线、限速等;交通参与者包括机动车、非机动车、行人、动物及静态障碍物;环境条件包括光照、天气、路面附着、能见度;自车任务描述车辆当前要完成的动作,如跟车、换道、左转、避障、泊车;动态行为则描述各参与者的速度、加速度、相对位置和交互意图。

这些要素并非孤立存在。例如“雨天夜间、城市十字路口、自车左转、对向直行车辆抢行”这一场景,环境条件会改变感知置信度,道路结构决定冲突点位置,交通参与者的行为决定风险等级。因此,场景设计的第一步不是画路线,而是建立要素清单,确保每个要素都有明确的取值或取值范围。

场景要素清单示例:

场景ID: SC-URBAN-LEFT-TURN-001
道路: 双向四车道,十字路口,无左转专用相位
自车任务: 左转通过路口
交通参与者:
  - 对向直行车辆: 速度 40~60 km/h,距离 30~80 m
  - 横向行人: 从右侧人行横道进入,速度 1.0~1.5 m/s
环境: 小雨,夜间,路面湿滑,照度 10~30 lux
动态约束: 自车左转不得与对向直行车辆发生冲突

二、场景分类:从抽象到具体,从功能到数据

行业常用三层场景体系:功能场景、逻辑场景和具体场景。功能场景用自然语言描述“要测什么能力”,例如“车辆在路口左转时避让对向直行车辆”。逻辑场景把功能场景中的要素参数化,给出参数空间和取值范围,例如对向车速度 40~60 km/h、距离 30~80 m、路面附着系数 0.3~0.8。具体场景则是参数空间中的一组确定取值,可直接用于仿真或实车测试,例如对向车速度 55 km/h、距离 45 m、附着系数 0.4。

此外,按测试目的还可分为:法规场景(如 AEB、LKA 法规工况)、事故场景(来自事故数据库的典型冲突)、边缘场景(低概率高风险)、自然驾驶场景(从路测数据中提取的常态工况)。分类不是目的,而是为了在有限测试资源下实现覆盖最大化。

功能场景 → 逻辑场景 → 具体场景 转化链 从自然语言描述到可执行测试用例的参数化与实例化过程 功能场景 自然语言 · 能力级描述 “路口左转避让对向直行” “高速跟车遇前车急刹” “夜间行人横穿” 逻辑场景 参数空间 · 取值范围 对向车速度: 40~60 km/h 距离: 30~80 m 附着系数: 0.3~0.8 具体场景 确定取值 · 可执行用例 速度 = 55 km/h 距离 = 45 m 附着系数 = 0.4 参数化 实例化 数据反哺:具体场景聚类 → 逻辑场景参数修正 场景五要素(逻辑场景的参数维度) 道路要素 车道/曲率/路口 交通参与者 车/人/障碍物 环境条件 光照/天气/附着 自车任务 跟车/换道/左转 动态行为 速度/加速度/意图 逻辑场景 = 五要素参数化;具体场景 = 五要素取确定值

三、转化方法:从功能场景到具体场景的工程流程

转化不是一次性动作,而是一个“分解—参数化—采样—实例化—验证”的闭环。第一步,功能场景分解:把“路口左转避让”拆成自车左转轨迹、对向直行车辆运动、冲突点位置、感知触发条件等子任务。第二步,逻辑场景参数化:为每个子任务定义参数及其范围,例如对向车速度、距离、路面附着、光照强度。第三步,参数采样:在参数空间中选择代表性取值,常用方法包括边界值采样、正交实验、拉丁超立方和基于风险的采样。第四步,具体场景实例化:把采样结果写成仿真或实车可执行的场景文件。第五步,验证与反哺:用测试结果评估覆盖度和风险,修正逻辑场景的参数范围。

层级 描述方式 典型输出 用途
功能场景 自然语言、能力级 “左转避让对向直行” 需求分析、测试大纲
逻辑场景 参数空间、取值范围 速度 40~60 km/h,距离 30~80 m 覆盖度设计、采样
具体场景 确定参数、可执行 速度 55 km/h,距离 45 m 仿真、实车、回归

四、案例:城市路口左转避让的场景转化

以“城市路口左转避让对向直行车辆”为例。功能场景描述为:自车在无左转专用相位的十字路口左转,需避让对向直行车辆。逻辑场景参数化后,关键参数包括:对向车速度 40~60 km/h、对向车距冲突点距离 30~80 m、自车左转速度 10~20 km/h、路面附着系数 0.3~0.8、光照 10~10000 lux。通过拉丁超立方采样生成 50 组具体场景,其中一组为:对向车 55 km/h、距离 45 m、自车 15 km/h、附着 0.4、夜间小雨。该场景可直接导入仿真平台,也可在封闭场地用假车和喷淋系统复现。

实操建议:具体场景文件建议采用 OpenSCENARIO 或自定义 JSON 格式,保留参数名、单位、取值来源和版本号,便于回归和追溯。

{
  "scenario_id": "SC-URBAN-LEFT-TURN-001-050",
  "parent_logic": "SC-URBAN-LEFT-TURN-001",
  "params": {
    "opponent_speed_kmh": 55,
    "opponent_distance_m": 45,
    "ego_speed_kmh": 15,
    "friction": 0.4,
    "illuminance_lux": 20
  },
  "source": "latin_hypercube",
  "version": "v1.2"
}

五、常见误区与复盘

  • 误区一:把功能场景直接当测试用例。功能场景缺少参数,无法执行,也无法判断通过与否。必须经过参数化和实例化。
  • 误区二:参数范围拍脑袋。逻辑场景的取值范围应来自事故数据、自然驾驶数据和法规要求,而不是凭经验随意设定。
  • 误区三:只做均匀采样。高风险区域往往在参数边界附近,应采用边界值、极值和风险导向采样,提高边缘场景命中率。
  • 误区四:具体场景不可追溯。每个具体场景都应记录其父逻辑场景、采样方法和版本,否则回归时无法定位问题来源。

复盘要点:场景转化链的终点不是“生成多少条用例”,而是“能否用最少的用例覆盖最关键的风险”。建议每轮测试后统计参数覆盖度、冲突类型覆盖度和失效复现率,反向修正逻辑场景的参数空间。

综上,场景要素是描述基础,场景分类是组织框架,功能场景、逻辑场景和具体场景的转化则是把测试需求变成可执行、可回归、可积累的工程资产的核心方法。掌握这条转化链,才能在道路测试与数据闭环中做到既覆盖风险,又控制成本。