1. 课程导入
智能驾驶系统的安全性,不能仅靠“跑了很多公里”来证明。真正决定系统能否上路的,是它是否见过足够多样、足够危险、足够边缘的场景,并且在这些场景中做出了正确响应。本课程围绕场景覆盖与里程验证两条主线,建立一套可量化、可复现、可审计的工程方法体系。
一、学习目标
完成本课程后,学习者应能独立完成以下工作:
- 理解场景、场景库、场景覆盖度、ODD(运行设计域)等核心概念及其工程含义;
- 掌握从功能定义到场景抽取、参数化、泛化的完整场景构建流程;
- 能够设计里程验证方案,区分真实里程、仿真里程与等效里程的统计意义;
- 使用覆盖率、暴露率、危险场景命中率等指标评估验证充分性;
- 识别“里程堆砌”“场景过拟合”“长尾遗漏”等常见验证误区。
二、核心概念与整体框架
智能驾驶验证的本质,是在有限资源下回答一个问题:系统在多大范围、多高概率的场景空间中已被证明安全?这需要三个层次的概念支撑。
第一层是ODD,即运行设计域,它定义了系统被允许工作的道路、天气、光照、交通、速度等边界条件。第二层是场景,即在ODD内对自车、他车、行人、静态设施及其交互关系的一次具体描述。第三层是场景覆盖,即已测试场景集合相对于目标场景空间的占比与分布质量。
里程验证则从统计角度补充场景验证:通过真实路测、仿真回放和影子模式积累里程,用暴露率与故障率估计系统风险。场景覆盖回答“测全了没有”,里程验证回答“测够了没有”,二者缺一不可。
核心公式:验证充分性 ≈ 场景覆盖度 × 里程置信度 × 场景危险度权重。任何一项偏低,整体验证结论都不可信。
三、方法流程:从场景到里程的验证链路
工程实践中,验证链路通常按以下步骤推进:
- 功能与ODD定义:明确系统要解决哪些驾驶任务,在哪些条件下允许激活。
- 场景抽取:从事故数据库、自然驾驶数据、专家经验中提取功能场景与逻辑场景。
- 参数化与泛化:对车速、距离、角度、摩擦系数等参数进行组合采样,生成具体场景。
- 场景筛选与优先级排序:按危险度、暴露率、可测性排序,优先覆盖高风险场景。
- 仿真与实车执行:在仿真平台批量运行,在封闭场地和公开道路验证关键场景。
- 里程积累与统计:记录真实里程、仿真里程和等效里程,计算暴露率与故障率。
- 覆盖度评估与缺口分析:对比目标场景空间,识别未覆盖区域并迭代补充。
场景验证配置示例(YAML)
scenario:
name: cut_in_highway
odd: highway_day_dry
parameters:
ego_speed: [80, 100, 120] # km/h
cutin_gap: [10, 20, 30] # m
cutin_speed_diff: [-20, -10, 0]
priority: high
target_coverage: 0.95
mileage:
real_km: 50000
sim_km: 2000000
equivalent_km: 350000
exposure_rate: 0.012
四、案例与场景:一次高速切入验证
以“高速前车切入”为例。若只在晴天、干燥路面、车速100km/h、切入间距20m的条件下测试,即使跑十万公里,也不能证明系统在雨天、夜间、间距10m、相对速度-20km/h时安全。正确的做法是:先定义逻辑场景“相邻车道车辆切入自车前方”,再对天气、光照、路面、车速、间距、相对速度进行参数泛化,形成数百个具体场景,并按危险度排序执行。
里程验证则回答另一个问题:这些场景在真实世界中出现的频率有多高?如果切入场景的暴露率是1.2%,那么要积累足够多的切入样本,就需要相应规模的里程。仿真可以放大危险场景比例,但必须通过等效里程折算,避免高估验证效果。
五、常见误区与复盘
| 误区 | 表现 | 后果 | 纠正方法 |
|---|---|---|---|
| 里程堆砌 | 只追求总里程数字 | 长尾场景仍未被覆盖 | 按场景覆盖度分配里程 |
| 场景过拟合 | 只测已知危险场景 | 未知边缘场景漏测 | 引入随机泛化与对抗生成 |
| 仿真里程虚高 | 直接累加仿真里程 | 置信度被高估 | 使用等效里程折算 |
| ODD边界模糊 | 未明确天气与道路边界 | 验证结论无法复用 | 先固化ODD再建场景库 |
不要用“总里程”作为唯一验收指标。没有场景覆盖度支撑的里程,只是重复暴露,不是有效验证。