阶段与事件 — 场景逻辑如何组织
屏幕底部的 LOGIC 卡片是场景行为所在的地方。本页面解释其各部分是什么,以及它们运行的顺序。

该图表嵌套了四个东西,从最外到最内。
| 层级 | 是什么 | OpenSCENARIO |
|---|---|---|
| 阶段 | 一个具有启动条件的命名容器。 | Act |
| 角色行 | 每个参与该阶段的实体占一行。 | ManeuverGroup(其 entityRef) |
| 事件 | 一个触发条件加一个或多个动作。 | Event |
| END CONDITIONS | 图表末尾的节点。决定何时停止运行。 | 故事板的 StopTrigger |
点击 + Phase 添加一个。该按钮在场景至少有一个角色之前是禁用的 — 其提示文本为先添加一个角色。
新阶段不会是空的。一次点击会产生 Phase 1、你的实体的一个角色行,以及携带默认改变速度动作和默认模拟时间触发条件的 Event_1。事件编辑器会同时在右侧打开。
导入的场景保留原始阶段名称,所以一个阶段可能被称为 CutInAndBrakeAct 之类的,而不是 Phase 1。
每个阶段都有一个启动行,有三个选项:
| 选项 | 含义 |
|---|---|
| 在场景开始时 | 阶段在运行开始时立即变为活跃。 |
| 延迟后… | 阶段在运行开始后的固定秒数后变为活跃。 |
| 自定义… | 任何触发条件 — 与事件触发条件使用相同的目录。 |
阶段的启动条件独立于在其上方绘制的阶段。两个都设置为在场景开始时的阶段都在 t=0 时变为活跃。 顺序来自你设置的启动条件,而不是卡片的垂直顺序。
阶段卡片上的小 × 删除它,以及其中的每个事件、动作和触发条件 — 不会弹出确认提示。用 Ctrl+Z 或工具栏中的 ↶ 按钮撤销。
右键单击阶段会显示 Add Event (actor) 和 Delete Phase。
事件是行为的单位:一个触发条件,一个或多个动作,应用于一个角色。
用角色行中的 + Event 添加一个。每个新事件都带有与第一个相同的默认值 — 一个改变速度动作和一个在 0.00 s 的模拟时间触发条件。两个都在 0.00 s 的事件会同时触发,所以在继续前设置触发条件。
读取事件卡片
Section titled “读取事件卡片”每个卡片有两行:
- 上一行 — 事件名称、它触发的模拟时间(
t=2.05s),以及一次完成后的✓。 - 下一行 — 动作的摘要,例如
8.3 m/s · 用时 2 s、1 → · 用距 30 m、同车道 Ego · 用时 3 s、或平行 0 m/s · @-4 m/s²。
触发时间和复选标记在播放期间填入,所以该图表也可作为运行日志。
选择一个卡片会在右上方打开编辑器,标题为角色 › 事件。

| 部分 | 包含内容 |
|---|---|
| ACTOR | 事件作用的实体。 |
| TRIGGER | 一个或多个条件,分组排列。见触发条件。 |
| ACTION | 触发条件触发时发生什么。见动作。 |
| + Action | 向同一事件添加另一个动作 — 所有动作在触发条件触发时运行。 |
| ADVANCED | 下面的属性。 |
ADVANCED
Section titled “ADVANCED”| 字段 | 选项 | OpenSCENARIO |
|---|---|---|
| PROFILE | Linear / Cubic / Sinusoidal / Step | dynamicsShape |
| PRIORITY | Auto / overwrite / parallel / skip | Event@priority |
| REPEAT (EVENT) | 事件重复多少次 | Event@maximumExecutionCount |
| REPEAT (GROUP) | 角色的组重复多少次 | ManeuverGroup@maximumExecutionCount |
| MANEUVER | 事件属于的机动名称 | Maneuver@name |
| DELAY AFTER MET | 触发条件满足后要等待的秒数 | Condition@delay |
PRIORITY 决定当此事件在同一角色上仍在运行另一个事件时触发时会发生什么:overwrite 停止运行的事件,parallel 让两者都继续,skip 丢弃新事件。Auto 让 drawtonomy 决定。
MANEUVER 主要是为了往返。drawtonomy 不将机动或机动组绘制为单独的框,但它保留其名称,以便导入的场景在导出时具有相同的结构。
什么时候运行
Section titled “什么时候运行”- 运行开始。每个其启动条件已经满足的阶段变为活跃。
- 在活跃阶段内,每个事件每步评估其TRIGGER。当触发条件满足时 — 加上任何DELAY AFTER MET — 事件的动作开始。
- 动作根据其DYNAMICS(在一段时间内、在一段距离内或以一个速率)运行至完成。
- 当 END CONDITIONS 节点满足时,运行停止。如果保留为
自动,这意味着”当一切都完成时”。 - 如果FAIL CONDITION在任何时刻触发,运行结束时显示
FAIL判定,而不是成功。
见结束和失败条件了解步骤 4 和 5。
LOGIC 卡片上的 {x} 按钮打开 PARAMETERS 和 VARIABLES 面板 — OpenSCENARIO 的 ParameterDeclarations 和 VariableDeclarations。参数在运行开始时固定;变量可以在运行中用设置变量和修改变量动作改变。
一个需要注意的地方,在面板本身中声明:编辑参数不会改变用字面值导入的动作,因为参数引用在导入时解析。