跳转到内容

结束条件与失败条件 — 停止仿真,判定结果

两个不同问题,两个不同面板:

  • 结束条件仿真何时停止?
  • 失败条件仿真是否失败?

它们都位于逻辑图的最后一个节点。选中结束条件节点后,属性面板会同时显示两个部分。

结束条件节点的属性面板,上方显示结束条件设为"自动",下方是失败条件区域包含碰撞行

区分这两个概念很重要。仿真在 30 秒后停止并不意味着通过,仿真在 4 秒时碰撞也并不意味着行为错误。结束条件控制时钟,失败条件决定最终判定。

节点在一行摘要中总结自己的状态:

摘要含义
自动没有明确条件。仿真在所有阶段和事件完成后停止。
<名称>结束后导入的 StopTrigger,例如 CutInManeuver 结束后

面板中的**+ 添加条件**可以明确设置。可选项与事件触发条件使用的目录相同,除去立即(无条件)——共 18 种条件

仿真时间 · 与智能体的时间间隔 · 碰撞时间 ·
与智能体的距离 · 行驶距离 · 阶段/事件状态 ·
与点的距离 · 到达位置 · 道路终点 · 智能体速度 ·
相对速度 · 停止 · 智能体加速度 · 碰撞 ·
离开路面 · 场景参数 · 场景变量 · 交通信号

条件通过**全部满足(AND)或…**组合,方式与事件触发条件完全相同。

在导出的 .xosc 文件中,这成为故事板的 StopTrigger,其他 OpenSCENARIO 1.x 工具会尊重这个设置。

最常用的三种结束条件:

  • 编写时保持自动 — 事件完成后仿真自动停止。
  • 仿真时间 — 用于固定长度的仿真,通常用于批量或对比测试。
  • 阶段/事件状态,状态为结束 — 测试的操作一完成就停止,无论耗时多长。

这个部分的说明很清楚:

失败条件 在回放过程中触发时导致仿真失败。

失败条件是一种断言。如果在仿真运行期间的任何时刻触发,仿真会立即以**失败**判定结束,而不是继续运行到结束条件。

新场景会自动创建一个默认失败条件:

[碰撞 ▾] [✕]
智能体 A [任意智能体 ▾]
碰撞(默认)— 新场景自动添加。

这样一来,新绘制的场景已经会在任何碰撞时失败。+ 添加失败条件会增加一行;每行都有**✕**按钮用于删除。新添加的行默认重复前一个条件的类型,添加后需要修改条件类型。

失败条件是 drawtonomy 的专有概念——不属于 ASAM OpenSCENARIO 标准。详见失败条件的存储方式

类型触发条件
碰撞所选智能体与其他实体发生碰撞。任意智能体监控场景中的所有实体。
智能体速度智能体速度满足你设置的规则——绝对速度或相对于另一个智能体。
与智能体的距离两个智能体间的距离低于或超过阈值。
与点的距离智能体到固定点的距离低于或超过阈值。
纵向距离与另一个智能体的沿道路间隔超过阈值,可按前方、后方或双向测量。
持续时间另一个条件连续保持超过给定时长。
仿真时间仿真到达给定时刻——超时。
阶段状态阶段开始正在运行结束
设置可选值
智能体选择任意智能体或具体命名实体
距离规则低于 / 超过
速度规则= 等于 / > 大于 / ≥ 大于等于 / < 小于 / ≤ 小于等于 / ≠ 不等于
速度基准绝对速度 / 相对于智能体
相对速度方向任意方向 / 更快 / 更慢 / 同速
纵向侧向前方或后方 / 前方 / 后方
阶段状态开始 / 正在运行 / 结束

持续时间不是独立条件,而是一个”维持多久”的包装器。选择它后,再从四个条件中选择内部条件:

  • 智能体速度
  • 与智能体的距离
  • 与点的距离
  • 纵向距离

这是如何表达容限的。“间隔在一帧内掉到 5 米以下”通常是噪声;“间隔在两秒内始终保持在 5 米以下”才是真正的发现。用持续时间包装距离条件,你就表达了后者。

运输行的红色 FAIL 徽章,以及时间线上失败条件触发位置的红色叉标记

运输行上的徽章报告仿真的状态:

徽章含义
闲置未运行。没有进行任何评估。
运行中正在运行。尚未触发失败条件。
通过仿真达到结束条件且没有失败条件触发。
失败失败条件被触发。仿真在此停止。

因此,通过意味着”完成且所有断言都未触发”。其意义取决于你设置的失败条件——移除所有条件的场景对几乎任何行为都会报告通过

模式与自动化测试相同:

  1. 设置场景。道路、智能体、阶段、事件。
  2. 说明禁止发生的事。失败条件:无碰撞;间隔不能超过一秒低于 5 米;自主车不能超速;仿真不能超过 30 秒。
  3. 说明何时停止检查。结束条件:仿真时间或被测操作的状态。
  4. 运行并读取徽章。

一些值得尝试的条件:

意图条件
无接触碰撞任意智能体
保持安全间隔持续时间与智能体的距离低于、设置容限
不跟车纵向距离前方低于
遵守限制智能体速度> 大于绝对速度
不让场景卡住仿真时间作为超时
不超车相对速度更快

失败条件超出 ASAM OpenSCENARIO 标准范围,所以 drawtonomy 将它们存储在标准兼容读者会忽略的位置:作为场景 ParameterDeclarations 中的 drawtonomy:failConditions 条目。

值得了解的后果:

  • 该参数仅在你编辑失败条件时被写入。保留默认值的场景导出时不会包含它,所以 .xosc 中不会出现额外内容。
  • 其他 OpenSCENARIO 工具正常读取该文件——未知的参数声明是惯性的。
  • 将同一个文件重新导入 drawtonomy 会完全恢复条件。
  • 从其他地方导入的 .xosc 文件没有失败条件,所以导入的场景永远不会报告你未要求的失败