结束条件与失败条件 — 停止仿真,判定结果
两个不同问题,两个不同面板:
- 结束条件 — 仿真何时停止?
- 失败条件 — 仿真是否失败?
它们都位于逻辑图的最后一个节点。选中结束条件节点后,属性面板会同时显示两个部分。

区分这两个概念很重要。仿真在 30 秒后停止并不意味着通过,仿真在 4 秒时碰撞也并不意味着行为错误。结束条件控制时钟,失败条件决定最终判定。
节点在一行摘要中总结自己的状态:
| 摘要 | 含义 |
|---|---|
自动 | 没有明确条件。仿真在所有阶段和事件完成后停止。 |
<名称>结束后 | 导入的 StopTrigger,例如 CutInManeuver 结束后。 |
面板中的**+ 添加条件**可以明确设置。可选项与事件触发条件使用的目录相同,除去立即(无条件)——共 18 种条件:
仿真时间 · 与智能体的时间间隔 · 碰撞时间 ·与智能体的距离 · 行驶距离 · 阶段/事件状态 ·与点的距离 · 到达位置 · 道路终点 · 智能体速度 ·相对速度 · 停止 · 智能体加速度 · 碰撞 ·离开路面 · 场景参数 · 场景变量 · 交通信号条件通过**全部满足(AND)和或…**组合,方式与事件触发条件完全相同。
在导出的 .xosc 文件中,这成为故事板的 StopTrigger,其他 OpenSCENARIO 1.x 工具会尊重这个设置。
最常用的三种结束条件:
- 编写时保持
自动— 事件完成后仿真自动停止。 仿真时间— 用于固定长度的仿真,通常用于批量或对比测试。阶段/事件状态,状态为结束— 测试的操作一完成就停止,无论耗时多长。
这个部分的说明很清楚:
失败条件 在回放过程中触发时导致仿真失败。
失败条件是一种断言。如果在仿真运行期间的任何时刻触发,仿真会立即以**失败**判定结束,而不是继续运行到结束条件。
新场景会自动创建一个默认失败条件:
[碰撞 ▾] [✕]智能体 A [任意智能体 ▾]碰撞(默认)— 新场景自动添加。这样一来,新绘制的场景已经会在任何碰撞时失败。+ 添加失败条件会增加一行;每行都有**✕**按钮用于删除。新添加的行默认重复前一个条件的类型,添加后需要修改条件类型。
失败条件是 drawtonomy 的专有概念——不属于 ASAM OpenSCENARIO 标准。详见失败条件的存储方式。
八种条件类型
Section titled “八种条件类型”| 类型 | 触发条件 |
|---|---|
| 碰撞 | 所选智能体与其他实体发生碰撞。任意智能体监控场景中的所有实体。 |
| 智能体速度 | 智能体速度满足你设置的规则——绝对速度或相对于另一个智能体。 |
| 与智能体的距离 | 两个智能体间的距离低于或超过阈值。 |
| 与点的距离 | 智能体到固定点的距离低于或超过阈值。 |
| 纵向距离 | 与另一个智能体的沿道路间隔超过阈值,可按前方、后方或双向测量。 |
| 持续时间 | 另一个条件连续保持超过给定时长。 |
| 仿真时间 | 仿真到达给定时刻——超时。 |
| 阶段状态 | 阶段开始、正在运行或结束。 |
各条件类型的选项
Section titled “各条件类型的选项”| 设置 | 可选值 |
|---|---|
| 智能体选择 | 任意智能体或具体命名实体 |
| 距离规则 | 低于 / 超过 |
| 速度规则 | = 等于 / > 大于 / ≥ 大于等于 / < 小于 / ≤ 小于等于 / ≠ 不等于 |
| 速度基准 | 绝对速度 / 相对于智能体 |
| 相对速度方向 | 任意方向 / 更快 / 更慢 / 同速 |
| 纵向侧向 | 前方或后方 / 前方 / 后方 |
| 阶段状态 | 开始 / 正在运行 / 结束 |
持续时间包装另一个条件
Section titled “持续时间包装另一个条件”持续时间不是独立条件,而是一个”维持多久”的包装器。选择它后,再从四个条件中选择内部条件:
- 智能体速度
- 与智能体的距离
- 与点的距离
- 纵向距离
这是如何表达容限的。“间隔在一帧内掉到 5 米以下”通常是噪声;“间隔在两秒内始终保持在 5 米以下”才是真正的发现。用持续时间包装距离条件,你就表达了后者。
读取判定结果
Section titled “读取判定结果”
运输行上的徽章报告仿真的状态:
| 徽章 | 含义 |
|---|---|
闲置 | 未运行。没有进行任何评估。 |
运行中 | 正在运行。尚未触发失败条件。 |
通过 | 仿真达到结束条件且没有失败条件触发。 |
失败 | 失败条件被触发。仿真在此停止。 |
因此,通过意味着”完成且所有断言都未触发”。其意义取决于你设置的失败条件——移除所有条件的场景对几乎任何行为都会报告通过。
将场景转变为检验
Section titled “将场景转变为检验”模式与自动化测试相同:
- 设置场景。道路、智能体、阶段、事件。
- 说明禁止发生的事。失败条件:无碰撞;间隔不能超过一秒低于 5 米;自主车不能超速;仿真不能超过 30 秒。
- 说明何时停止检查。结束条件:仿真时间或被测操作的状态。
- 运行并读取徽章。
一些值得尝试的条件:
| 意图 | 条件 |
|---|---|
| 无接触 | 碰撞、任意智能体 |
| 保持安全间隔 | 持续时间 → 与智能体的距离、低于、设置容限 |
| 不跟车 | 纵向距离、前方、低于 |
| 遵守限制 | 智能体速度、> 大于、绝对速度 |
| 不让场景卡住 | 仿真时间作为超时 |
| 不超车 | 相对速度、更快 |
失败条件的存储方式
Section titled “失败条件的存储方式”失败条件超出 ASAM OpenSCENARIO 标准范围,所以 drawtonomy 将它们存储在标准兼容读者会忽略的位置:作为场景 ParameterDeclarations 中的 drawtonomy:failConditions 条目。
值得了解的后果:
- 该参数仅在你编辑失败条件时被写入。保留默认值的场景导出时不会包含它,所以
.xosc中不会出现额外内容。 - 其他 OpenSCENARIO 工具正常读取该文件——未知的参数声明是惯性的。
- 将同一个文件重新导入 drawtonomy 会完全恢复条件。
- 从其他地方导入的
.xosc文件没有失败条件,所以导入的场景永远不会报告你未要求的失败。