1. 课程导入
在自动驾驶与智能网联系统的研发流程中,仿真测试已经成为连接算法开发与实车验证的关键环节。ScenarioRunner 作为 CARLA 仿真生态中的核心场景执行引擎,承担着把抽象测试场景转化为可重复、可度量、可批量运行的仿真任务的重要职责。本课程围绕 ScenarioRunner 自动场景测试工程展开,目标是帮助学习者从零建立一套完整的场景测试工程能力,而不是停留在“会跑一个示例脚本”的层面。
一、为什么需要 ScenarioRunner:核心价值
传统实车测试成本高、周期长、危险场景难以复现。一个“前车急刹导致追尾”的边缘场景,在真实道路上可能几个月都遇不到一次,但在仿真环境中可以按需构造、反复执行、精确控制变量。ScenarioRunner 的价值正体现在这里:它把场景定义、参与者行为、触发条件、评价指标统一到一套可编程框架中,使测试从“人工驾驶观察”转变为“自动执行与判定”。
具体而言,ScenarioRunner 提供了以下关键能力:
- 场景原子化: 将复杂交通行为拆解为可复用的场景元素,如车辆、行人、红绿灯、路径点与触发条件。
- 执行自动化: 通过脚本批量加载场景、启动仿真、控制参与者并收集结果。
- 评价标准化: 基于碰撞、偏离车道、超速、到达目标等指标自动判定通过或失败。
- 工程可集成: 可接入 CI/CD 流程,形成每日回归测试与版本质量门禁。
因此,学习 ScenarioRunner 不仅是学习一个工具,更是学习一种“把测试需求工程化”的方法。
二、整体知识框架:从场景到工程的五层结构
本课程的知识体系可以划分为五个层次,它们之间是逐层支撑的关系。下图展示了从底层仿真平台到上层测试工程的整体结构,以及各层之间的数据与控制流向。
这五层结构贯穿整个课程。前几章会从平台层和描述层入手,帮助学习者建立对 CARLA 与场景 XML 的基本认识;随后进入执行引擎与评价体系;最后把单场景测试组织成完整的自动化测试工程。
三、实战路线图:从单场景到回归测试
为了让学习路径清晰可执行,本课程设计了一条由浅入深的实战路线。下表列出了各阶段的主要任务、关键产出与常见难点,学习者可以对照自己的进度进行自检。
| 阶段 | 主要任务 | 关键产出 | 常见难点 |
|---|---|---|---|
| 阶段一:环境与基础 | 搭建 CARLA 与 ScenarioRunner 运行环境,跑通第一个示例场景 | 可运行的仿真环境与示例日志 | 版本匹配、Python 依赖、端口冲突 |
| 阶段二:场景描述 | 理解 XML 场景结构,编写简单车辆与行人场景 | 自定义场景 XML 文件 | 坐标系统、触发条件、参与者角色 |
| 阶段三:执行与调试 | 加载场景、控制参与者、观察行为并定位异常 | 可稳定复现的场景执行脚本 | 时序竞争、同步模式、帧率设置 |
| 阶段四:评价与判定 | 配置碰撞、偏离、超速等评价指标,输出通过/失败结论 | 带判定结果的测试报告 | 指标阈值设定、误报与漏报 |
| 阶段五:工程化集成 | 批量运行场景集,接入 CI/CD,形成回归测试 | 自动化测试流水线与统计报表 | 资源调度、并行执行、结果聚合 |
四、典型场景案例:前车急刹测试
为了把抽象框架落到具体对象上,这里给出一个贯穿课程的典型案例:前车急刹测试。测试目标是验证自车在跟车过程中,当前车突然减速时能否及时制动并保持安全距离。
场景要素:
- 地图:Town04 高速公路
- 自车:vehicle.ego,初始速度 60 km/h
- 前车:vehicle.lead,位于自车前方 30 m
- 触发条件:仿真时间 5 s 时,前车以 -6 m/s² 减速至停止
- 评价指标:最小车距 > 5 m,无碰撞,自车减速度不超过 -8 m/s²
- 判定结果:PASS / FAIL
这个案例看似简单,却覆盖了场景描述、触发调度、参与者控制、评价判定四个核心环节。后续章节会逐步拆解它的实现方式,并在此基础上扩展出切入、变道、行人横穿等更复杂的场景。
五、常见误区与学习建议
初学者在学习 ScenarioRunner 时,容易陷入几个典型误区。第一,把 ScenarioRunner 当成单纯的“脚本运行器”,忽视场景描述与评价体系的工程意义;第二,只关注场景能否跑通,不关注结果是否可复现、可统计;第三,在单场景上反复调试,却没有建立批量执行与回归测试的意识。
因此,本课程建议的学习方式是:每学完一个模块,就把该模块的能力接入到自己的测试工程中。例如,学完场景描述后,不只写一个 XML,而是写一组参数化场景;学完评价判定后,不只输出一个 PASS,而是输出结构化结果文件。这样,课程结束时,学习者得到的不是零散知识点,而是一套可以继续扩展的自动场景测试工程。
接下来的章节将按照上述五层框架和实战路线逐步展开,从环境搭建与第一个场景运行开始,进入 ScenarioRunner 的完整工程世界。