闭环仿真与策略评测
仿真评测首先要回答:策略的输出是否真正改变了下一时刻的输入? 对端到端驾驶和视觉-语言-动作模型(Vision-Language-Action,VLA),只比较预测轨迹与人类轨迹,无法检验偏离专家路线后的恢复能力。本节给出从日志回放到交互式评测的工程流程;硬件接入方式见仿真测试方法论,指标定义见仿真评估指标。
1. 区分回放、闭环与交互
| 评测方式 | 自车动作影响后续观测 | 其他参与者响应自车 | 能回答的问题与边界 |
|---|---|---|---|
| 开环日志回放 | 否,输入沿采集车轨迹播放 | 否 | 感知和轨迹预测是否准确;不能检验误差累积 |
| 自车闭环、交通回放 | 是,自车状态由动力学更新 | 否,其他车辆沿日志轨迹行驶 | 能否跟踪与恢复;交互可能不自然 |
| 反应式交通闭环 | 是 | 是,由行为模型控制 | 能否完成让行、汇入、博弈;依赖行为模型可信度 |
| 传感器级闭环 | 是,重新生成自车视角的传感器输入 | 取决于交通配置 | 感知、规划、控制联合表现;需要额外验证渲染与传感器模型 |
这些维度并不互斥:传感器级闭环既可使用日志交通,也可使用反应式交通。软件在环、硬件在环描述的是被测系统如何接入,并不自动保证环境具有闭环反馈。
nuPlan 将闭环规划作为基准的核心问题;使用其规划器评测结果时,应核对观测接口、交通模式与场景划分,不能直接解释为摄像头到控制的全链路能力。nuPlan 论文
例子:汇入主路。 日志中的主路车辆原本减速让行,但被测策略比采集车晚两秒到达汇入口。若主路车辆仍按日志减速,策略可能获得不真实的便利;若日志车辆沿原路径穿过自车,又可能出现不合理碰撞。应保留这一模式用于回归对比,同时用反应式交通复核交互失败。
2. 闭环接口与时间语义
一个简化闭环可以写成:
其中 \(s_t\) 是世界状态,\(R\) 是观测生成器,\(c_t\) 是导航或语言指令,\(b_t\) 是其他参与者动作,\(F\) 包含动力学与交通更新。传感器延迟、执行器延迟和模型计算时间需要在实现中另行建模。
2.1 接口契约
| 接口 | 必须约定的内容 | 常见故障 |
|---|---|---|
| 观测 | 时间戳、相机标定、坐标系、历史窗口、缺帧掩码 | 将不同帧的图像与速度拼成同一时刻 |
| 轨迹 | 坐标原点、单位、航向约定、采样间隔、有效期 | 把历史自车坐标下的轨迹直接用于当前车辆 |
| 控制 | 转角或方向盘角、油门/制动范围、限幅、执行延迟 | 归一化控制量被当作物理量 |
| 终止 | 碰撞、完成、超时、传感器失效、仿真异常 | 将卡住或运行失败的样本从统计中静默删除 |
输入适配层只能向策略提供部署时可获得的信息。仿真真值可用于评分和离线分析;如果用于控制或安全检查,必须明确该实验带有真值辅助,不能与普通传感器输入的实验混算。
2.2 同步推进不等于满足实时性
CARLA 的同步模式由客户端推进世界;固定时间步长控制每步仿真时间。官方文档同时说明了物理子步约束、多客户端推进和传感器帧同步问题。复现实验时应固定配置并检查帧编号,而不是只设置随机种子。CARLA 时间步与同步文档
如果每一步仿真推进 50 ms,而模型实际计算需要 300 ms,同步仿真仍可等待模型并完成驾驶。这只能说明该策略在这种时间假设下的行为,不能说明它能在车端实时运行。建议分开执行两类测试:
- 行为回归:同步推进,固定输入与时间步,便于定位模型变化。
- 时延评测:使用目标硬件测得的延迟分布,模拟旧控制保持、轨迹过期与丢帧,检查实际闭环退化。
报告中同时列出仿真步长、策略更新周期、端到端延迟分位数与超时比例。端到端延迟应从观测采集算到控制可执行,包含预处理、数据传输和解码。
3. 场景集与复现清单
建议将运行配置保存成可版本化的清单。以下 YAML 是项目自定义记录格式示例,不是任何仿真器可直接执行的配置:
experiment_id: merge_policy_b
simulator:
build: pinned-build-id
map_hash: sha256-map-placeholder
asset_hash: sha256-assets-placeholder
step_seconds: 0.05
traffic:
mode: reactive
policy_version: traffic-policy-v1
seeds: [11, 29, 47]
policy:
checkpoint_hash: sha256-model-placeholder
adapter_version: adapter-v1
instruction_set: merge-instructions-v1
decoding: deterministic
runtime:
latency_profile: measured-target-device-v1
timeout_policy: validated-fallback-v1
evaluation:
scenario_split: heldout-routes-v1
metric_version: metrics-v1
termination_rules: termination-v1
还应保存容器、驱动、传感器配置、控制器参数与完整事件日志。固定随机种子有助于配对比较,但不能保证跨硬件、引擎版本和并行调度逐位一致。出现差异时先检查重复运行的自然波动,再判断模型是否发生回归。
3.1 三类测试集分别报告
| 测试集 | 构建方式 | 用途 |
|---|---|---|
| 固定回归集 | 冻结场景、路线与种子 | 检查已知缺陷是否复发 |
| 分布评估集 | 按目标运行设计域采样,保留场景权重 | 估计声明范围内的行为表现 |
| 挑战集 | 对抗搜索、罕见组合、故障注入 | 找弱点与失效边界 |
训练、调参和最终测试应按原始日志、路线、地点等分组隔离。同一事件生成的改写指令、不同天气版本和近邻视频帧应保留在同一数据分区,避免泄漏。挑战集刻意放大危险条件,其失败比例不能直接充当真实道路事故率。
4. 学习型与生成式仿真的使用边界
世界模型可用于生成观测或预测交互,但应先确认其能力对应哪一层:
| 方法 | 可提供的能力 | 需要独立检查的条件 |
|---|---|---|
| 神经场景重建 | 从实采数据合成新视角 | 远离采集轨迹后的几何与遮挡质量 |
| 视频生成 | 构造天气、外观与场景变化 | 时间一致性、动作条件是否有效、多相机是否一致 |
| 学习型交通模型 | 为其他参与者生成行为 | 对自车干预的响应、罕见行为覆盖、碰撞与规则约束 |
| 动作条件世界模型 | 根据候选动作展开未来 | 长时误差累积、接触与动力学一致性、分布外稳定性 |
画面逼真不足以证明闭环可用。一个操作性检查是:固定初始状态,分别输入制动和加速,检查自车位移、目标相对距离与生成图像是否一致变化。碰撞判定应有明确几何或状态依据;若只能依赖另一个模型对视频打分,必须报告评分器误差。
训练策略与评测环境若共享数据或生成模型,可能共同忽略同一类错误。可使用独立保留数据、不同交通模型和实测响应做交叉检查,并记录仿真失真的区域。域差距的处理见 Sim-to-Real 迁移。
5. VLA 的语言—动作联合测试
VLA 需要同时接受语义扰动和驾驶扰动。语言答案正确与实际驾驶成功应分开评分,模型训练及动作接口见 VLA 专题。
| 测试轴 | 配对场景示例 | 观察结果 |
|---|---|---|
| 同义改写 | “下一个路口右转”与“在前方路口向右转” | 合法路线与完成率是否稳定 |
| 参照消歧 | 两栋相似建筑,指令为“在银行后停车” | 是否在目标不明确时保持保守行为 |
| 条件指令 | “确认右侧车道安全后并线” | 是否在条件成立前执行动作 |
| 冲突指令 | 导航要求右转,但现场已封闭 | 是否遵守可通行边界并重新规划 |
| 无关文本 | 路边广告包含命令式文字 | 是否误把环境文本当成授权指令 |
| 时序扰动 | 指令延迟到达、重复到达或被撤销 | 是否执行了已失效的目标 |
| 物理扰动 | 遮挡、低附着、制动延迟、切入车辆 | 是否能在语义正确时仍保持控制稳定 |
例如,在“前方路口右转”任务中,分别加入封路、导航晚到和行人横穿。记录碰撞、越界、任务完成、等待时间、保护层干预和实际控制轨迹;不要用“解释中提到了行人”替代让行成功。
6. 从评测结果到回归结论
建议按固定场景和种子配对比较候选模型与基线,并记录:
- 执行完整性:计划运行数、有效运行数、初始化失败、崩溃和超时各是多少;失败重跑是否改变了统计分母。
- 行为结果:安全事件、路线完成、效率与舒适性分别报告,避免用综合分数掩盖关键失效。
- 分组差异:按交互类型、天气、指令类别和延迟分桶,检查整体提升是否掩盖局部回退。
- 不确定性:提供重复运行和置信区间;同一日志派生的场景存在相关性,可按原始日志或路线分组重采样。
- 失败归因:区分策略、控制器、保护层、适配接口与仿真器问题,保存最早出现偏差的时间点。
发布判据应在运行前按项目需求定义,并同时评价原始策略与带保护层的完整系统。保护层阻止碰撞是系统能力,但频繁干预也表明策略存在缺陷。仿真结论只覆盖已校准的环境和测试分布,需要与封闭场地及实车验证共同形成证据。
7. 为具体测试目的校准仿真器
仿真可信度应对应一个用途。例如,评估紧急制动需要较可信的纵向响应与接触判定;评估远距离交通灯识别则需要对应的成像与光照模型。一个仿真器可以适合前者却不适合后者,不能用一个“高保真”标签覆盖所有测试。
7.1 校准数据与独立验证数据
| 子系统 | 可比较的实测量 | 调整对象 | 保留验证条件 |
|---|---|---|---|
| 纵向动力学 | 控制请求到减速度的响应、停车距离 | 执行延迟、制动力、阻力 | 不同初速、载荷和路面条件 |
| 横向动力学 | 转向响应、横摆角速度、跟踪误差 | 转向比、轮胎模型、控制延迟 | 未用于拟合的曲率与速度 |
| 传感器 | 噪声、曝光响应、丢帧与时间偏差 | 噪声参数、成像链、调度 | 不同光照、目标距离与运动状态 |
| 交通行为 | 间隙接受、反应时间、跟驰距离 | 行为模型参数或训练分布 | 保留地点、流量与交互类型 |
先用校准集拟合,再用独立数据检验残差。应保留误差随工况变化的分布,例如某个制动模型可能平均误差很小,却在低附着路面系统性低估停车距离。碰撞模型也要检查车辆尺寸、接触体和离散时间步,防止车辆在相邻仿真帧之间穿过目标而未报告碰撞。
7.2 从单点参数扩展到不确定性范围
将真实参数的不确定性带入仿真,比只使用最佳拟合值更能暴露结论的脆弱性。可以先逐项扰动执行延迟、摩擦系数或交通反应时间,观察哪些因素会改变模型排序,再对敏感因素做联合采样。
参数组合应保持物理和场景上的合理性。随机增加雨量却保持所有传感器和轮胎模型不变,只测试了外观变化;同时将所有参数设为最坏值,则可能生成不在目标运行设计域内的组合。两者都可以用于特定实验,但必须说明测试目的。
记录“可信度范围”时,至少写明已经校准的速度、天气、传感器模式与道路类型,以及尚未验证的条件。详细框架见仿真测试方法论。
8. 贯穿案例:有遮挡的主路汇入
下面给出一个项目自定义实验示例,参数和次数用于演示组织方式,不是行业验收标准。
8.1 从场景意图到具体运行
场景意图:自车从支路汇入主路,停放车辆遮挡部分视野;语言指令要求“确认主路安全后汇入”。目标是检查观察、间隙判断和动作执行是否一致。
| 参数 | 示例取值 | 控制目的 |
|---|---|---|
| 主路来车速度 | 20、35、50 km/h | 改变可用反应时间 |
| 可见距离 | 15、30 m | 控制遮挡强度 |
| 来车预计到冲突点时间 | 2、4、6 s | 调整交互间隙,以其初始速度计算 |
| 观测到控制可用的延迟 | 0、150、300 ms | 区分理想行为与延迟鲁棒性 |
| 指令形式 | 原指令、同义改写 | 检查语言表述敏感性 |
| 交通随机种子 | 5 个固定种子 | 检查交通随机性影响 |
全组合为 \(3\times2\times3\times3\times2\times5=540\) 次运行,每个候选模型都采用同一清单。实例化前要检查初始车辆是否重叠、路线是否连通、遮挡资产是否可放置;不可实例化的组合应报告原因和数量,不能在运行后因模型失败而删除。
8.2 独立定义评分条件
完成判定可定义为:自车已进入目标主路车道,驶过规定终点,且未发生碰撞或越界。等待超过项目规定时限记录为未完成;选择等待和冒险汇入是不同失效,不能合成一个无法解释的总分。
至少记录任务成功率、碰撞场景比例、越界、等待超时、保护层干预与延迟分位数。碰撞依据接触或几何检测;预测碰撞时间只作为风险补充。指令改写的比较应使用相同初始状态和种子。
8.3 一张报告如何避免误判
以下数字完全是假设的教学数据,假设 A、B 各完成了 540 次有效运行,且使用相同交通模式与保护层:
| 结果 | 模型 A | 模型 B | 可以得到的判断 |
|---|---|---|---|
| 成功完成 | 486/540 | 497/540 | B 的样本完成率更高 |
| 碰撞场景 | 2/540 | 5/540 | B 的碰撞计数也更高,需逐例分析 |
| 保护层干预 | 18/540 | 41/540 | B 更依赖保护层,完成率不能独立解释 |
| 300 ms 延迟下成功完成 | 151/180 | 140/180 | B 的整体优势未延伸到高延迟子集 |
这些指标可能重叠,例如一次运行既发生干预又未完成,因此不能把各行计数相加当作总运行数。上述结果也没有给出显著性结论:还需要配对差异和不确定性分析。有限的挑战集无法估计整个运行设计域的事故概率,统计方法见仿真评估指标。
8.4 失败最小化与回归保留
对 B 的新增碰撞,从失败前的共同初始状态重跑,然后一次只改变一个因素:撤去遮挡、降低延迟、切换交通反应模型或恢复原始指令。保持其他配置不变,检查失败是否仍存在,以定位必要触发条件。
简化后的场景适合做快速回归,但原始场景也应保留。修复用过的场景进入训练或开发回归集后,就不再是未见测试;最终结论仍应来自独立场景。每个失败包应包含输入片段、指令版本、模型输出、控制命令、世界状态、评分器版本和异常日志。