コンテンツにスキップ

終了条件と失敗条件 — 実行を停止して判定する

異なる 2 つの質問、異なる 2 つのパネル:

  • END CONDITIONS — いつ実行が止まるのか?
  • FAIL CONDITIONS — 実行は失敗だったのか?

どちらもロジックグラフの最後のノードに配置されます。 END CONDITIONS ノードを選択すると、属性パネルに両セクションが表示されます。

END CONDITIONS ノードの属性パネル。上部に END CONDITIONS を Automatic に設定、その下に Collision の行がある FAIL CONDITIONS セクションが表示

この 2 つを区別することが重要です。30 秒後に停止した実行が成功したわけではなく、4 秒で衝突で終了した実行が正しく動作したわけでもありません。終了条件は時間を制御し、失敗条件は判定を決めます。

ノードは 1 行で自分自身を要約します:

要約意味
Automatic明示的な条件なし。すべてのフェーズとイベントが完了したら実行が停止します。
After <name> endsインポートされた StopTrigger。例えば After CutInManeuver ends

パネルの + Add condition で明示的に設定できます。選択肢は イベントトリガ で使う同じカタログですが、Immediately (no condition) を除いた 18 種類の条件:

Simulation time · Time gap to actor · Time to collision ·
Distance to actor · Traveled distance · Phase / event state ·
Distance to point · Reach position · End of road · Actor speed ·
Relative speed · Stand still · Actor acceleration · Collision ·
Off-road · Scenario parameter · Scenario variable · Traffic signal

条件は ALL OF (AND)or… で組み合わさります。イベントトリガと全く同じです。

エクスポートされた .xosc では、ストーリーボードの StopTrigger になるため、他の OpenSCENARIO 1.x ツールもこれに従います。

大多数の作業をカバーする 3 つの終了条件:

  • Automatic のまま 。作成中は、イベントが完了したら自動で停止します。
  • Simulation time 。固定時間の実行用。バッチやテスト比較で通常選ばれます。
  • Phase / event state、状態 ends 。テスト対象の操作が完了したらすぐに停止。時間は問いません。

セクションはこう説明しています:

FAIL CONDITIONS 再生中にトリガーされたら、シミュレーションを失敗させます。

失敗条件はアサーションです。実行中のある時点で失敗条件がトリガーされたら、実行は終了条件に達する代わりに FAIL 判定で終了します。

新しいシナリオは 1 つで開始します:

[Collision ▾] [✕]
ACTOR A [Any actor ▾]
Collision (default) — added automatically for new scenarios.

つまり新しく描画したシナリオは、デフォルトで衝突時に失敗します。 + Add fail condition で別の行を追加します。各行に ボタンで削除できます。新しく追加された行は default と同じ型を繰り返すため、追加後に型を変更してください。

失敗条件は drawtonomy 独自の概念です。ASAM OpenSCENARIO 標準には含まれていません。詳しくは 失敗条件の保存方法 を参照してください。

いつ失敗するか
Collision選択されたアクタが他のエンティティと衝突します。Any actor はシナリオのすべてのエンティティを監視します。
Actor speedアクタの速度が設定したルールを満たします — 絶対値、または他のアクタに相対的な値。
Distance to actor2 つのアクタ間の距離が閾値未満、または超過します。
Distance to pointアクタの固定点までの距離が閾値未満、または超過します。
Longitudinal distance to actor他のアクタへの縦方向距離が閾値を超えます。前方、後方、またはいずれかで測定。
Duration別の条件が与えられた時間より長く継続します。
Simulation time実行が特定の時刻に達します — タイムアウト。
Phase stateフェーズが startsis running、または ends
設定選択肢
Actor selectionAny actor、または指定エンティティ
Distance rulefalls below / exceeds
Speed rule= equals / > greater than / ≥ greater or equal / < less than / ≤ less or equal / ≠ not equal
Speed basisAbsolute speed / Relative to actor
Relative speed directionAny direction / Faster / Slower / Same speed
Longitudinal sideAhead or behind / Ahead / Behind
Phase statestarts / is running / ends

Duration は別の条件をラップします

Section titled “Duration は別の条件をラップします”

Duration はそれ自身の条件ではなく、「どのくらいの期間」というラッパーです。Duration を選んでから、4 つから内部条件を選びます:

  • Actor speed
  • Distance to actor
  • Distance to point
  • Longitudinal distance to actor

これで 許容範囲 を表現します。「ギャップが 5 m 未満に 1 フレーム落ちた」はノイズ; 「ギャップが 5 m 未満で 2 秒間保持」は重要。ギャップ条件を Duration でラップすれば、後者が表現されます。

トランスポート行に赤い FAIL バッジと、失敗条件がトリガーされたタイムラインの位置に赤い X マーカーが表示

トランスポート行のバッジは実行状態をレポートします:

バッジ意味
IDLE実行中ではありません。何も評価されていません。
RUN実行中。まだ失敗条件がトリガーされていません。
PASS実行が終了条件に達し、失敗条件がトリガーされていません。
FAIL失敗条件がトリガーされました。実行はそこで停止しました。

したがって PASS は「完了し、アサーションが発火していない」という意味です。これは書いた失敗条件と同じくらい有意義です — 条件を削除したシナリオはほぼすべての動作に対して PASS をレポートします。

パターンは自動化テストで使うものと同じです:

  1. 状況をセットアップします。 道路、アクタ、フェーズ、イベント。
  2. 起こってはいけないことを言います。 失敗条件: 衝突なし; ギャップが 1 秒以上 5 m 未満に落ちない; ego が速度制限を超えない; 実行が 30 秒以上かかることはない。
  3. いつまで見るかを言います。 終了条件: シミュレーション時間、またはテスト対象操作の状態。
  4. 実行してバッジを読みます。

試してみる価値のある条件:

意図条件
接触なしCollisionAny actor
安全な距離を保つDurationDistance to actorfalls below、許容範囲付き
追従しないLongitudinal distance to actorAheadfalls below
制限を守るActor speed> greater thanAbsolute speed
シナリオを停止させないSimulation time をタイムアウトとして
追い越さないRelative speedFaster

失敗条件は ASAM OpenSCENARIO 標準外です。drawtonomy はそれらを、標準に準拠したリーダーが無視する場所に保持します: シナリオの ParameterDeclarations 内の drawtonomy:failConditions エントリとして。

知っておく価値のある結果:

  • パラメータは 失敗条件を編集したときのみ 書き込まれます。デフォルトのままのシナリオは追加がないままエクスポートされるため、.xosc に何も余分なものは表示されません。
  • 他の OpenSCENARIO ツールはファイルを通常どおり読みます — unknown パラメータ宣言は無効です。
  • drawtonomy に同じファイルを再インポートすると、条件が正確に復元されます。
  • 他の場所からインポートされた .xosc失敗条件なしで 開始します。そのためインポートされたシナリオは、要求していない FAIL をレポートしません。