IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ズークス インコーポレイテッドの特許一覧

特開2024-72829調整されたコンポーネントインターフェース制御フレームワーク
<>
  • 特開-調整されたコンポーネントインターフェース制御フレームワーク 図1
  • 特開-調整されたコンポーネントインターフェース制御フレームワーク 図2A
  • 特開-調整されたコンポーネントインターフェース制御フレームワーク 図2B
  • 特開-調整されたコンポーネントインターフェース制御フレームワーク 図3
  • 特開-調整されたコンポーネントインターフェース制御フレームワーク 図4
  • 特開-調整されたコンポーネントインターフェース制御フレームワーク 図5
  • 特開-調整されたコンポーネントインターフェース制御フレームワーク 図6
  • 特開-調整されたコンポーネントインターフェース制御フレームワーク 図7
  • 特開-調整されたコンポーネントインターフェース制御フレームワーク 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024072829
(43)【公開日】2024-05-28
(54)【発明の名称】調整されたコンポーネントインターフェース制御フレームワーク
(51)【国際特許分類】
   G06F 11/34 20060101AFI20240521BHJP
   G06F 11/30 20060101ALI20240521BHJP
【FI】
G06F11/34 161
G06F11/30 140D
【審査請求】有
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2024027639
(22)【出願日】2024-02-27
(62)【分割の表示】P 2021529052の分割
【原出願日】2019-11-20
(31)【優先権主張番号】16/198,621
(32)【優先日】2018-11-21
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/198,653
(32)【優先日】2018-11-21
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】518156417
【氏名又は名称】ズークス インコーポレイテッド
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】ジェイコブ リー アスケランド
(72)【発明者】
【氏名】ライアン マーティン カフーン
(72)【発明者】
【氏名】アンドリュー ルイス キング
(72)【発明者】
【氏名】クリストファー イーツ ブラウン
(57)【要約】
【課題】調整されたコンポーネントインターフェース制御フレームワークを提供する。
【解決手段】フレームワークはデータ処理パイプラインの動作を定期的に再現し得る。フレームワークは、パイプラインのコンポーネントへの入力、パイプラインのコンポーネントからの出力、および/またはパイプラインのコンポーネントの実行を(例えば、インターフェースを介して)制御するコントローラーを含み得る。フレームワークはまた、パイプラインのパフォーマンスを調整し、および/または異なるマシンに渡ってさえ、パイプラインの並行処理を可能にし得るが、パイプラインの動作を定期的に再現する能力を保持する。インターフェースは、コンポーネントを異なるおよび/または更新されたコンポーネントと交換すること、および/またはインターフェースを介してコンポーネントを制御するコントローラーのタイプを変更することを容易にし得る。
【選択図】図5
【特許請求の範囲】
【請求項1】
第1のコントローラーによって、第1のソフトウェアコンポーネントに関連付けられた入力インターフェースに提供される1つまたは複数の変数の値を制御することと、
前記第1のコントローラーによって、メッセージの受信、指定された期間、イベントのシーケンス、またはホライズン時間のうちの少なくとも1つに少なくとも部分的に基づいて、前記第1のソフトウェアコンポーネントを実行させる時間を決定することと、
前記時間に、前記第1のコントローラーによって、前記第1のソフトウェアコンポーネントを実行させることであって、前記第1のソフトウェアコンポーネントの実行は、少なくとも部分的に前記1つまたは複数の変数に基づくことと、
前記第1のコントローラーで、前記第1のソフトウェアコンポーネントから、前記実行の第1の出力を受信することと、
1つまたは複数のサブスクライバに、前記第1のコントローラーによって、前記第1の出力と、前記第1のコントローラーが前記第1のソフトウェアコンポーネントを再実行させる前の期間、または前記第1の出力が、前記第1のコントローラーで受信されたか、または、前記第1のソフトウェアコンポーネントによって生成されたときを示す生成時間のうちの少なくとも1つとを含む第1のメッセージを発行することと
を含む方法。
【請求項2】
前記入力インターフェースへの入力として提供されるセンサーデータ、
前記イベントのシーケンスであって、前記イベントのシーケンスを保存することは、別のソフトウェアコンポーネントでの1つまたは複数のイベントに対する前記第1のソフトウェアコンポーネントでの動作を監視することを含み、前記イベントは、メッセージを受信すること、前記第1のメッセージを発行すること、前記入力インターフェースへの入力、前記実行の開始、前記実行の完了を提供すること、または前記出力を受信することのうちの少なくとも1つを含む、前記イベントのシーケンス、
前記入力インターフェースへの入力として提供されるデータ、
出力インターフェースから出力として受信したデータ、または
前記第1のソフトウェアコンポーネントによって生成され、前記出力インターフェースを介して出力されるキーフレーム
のうちの少なくとも1つをログファイルに保存することをさらに含む、請求項1に記載の方法。
【請求項3】
前記第1のソフトウェアコンポーネントが第1のプロセッサ実行可能命令を含み、
前記方法は、
前記第1のソフトウェアコンポーネントを第2のソフトウェアコンポーネントと置き換えて、前記入力インターフェースが前記第2のソフトウェアコンポーネントに1つまたは複数の変数を提供し、前記第2のソフトウェアコンポーネントが前記コントローラーによって前記時間に実行されるようにすることであって、前記第2のソフトウェアコンポーネントの実行の第2の出力は、出力インターフェースを介して受信されることをさらに含み、
前記第2のソフトウェアコンポーネントは、第2のプロセッサ実行可能命令を含む、請求項1または2に記載の方法。
【請求項4】
第2のソフトウェアコンポーネントに関連付けられた第2のコントローラーで前記第1のメッセージを受信することと、
イベントのシーケンスに少なくとも部分的に基づいて、前記第2のコントローラーによって、前記第1のメッセージを前記第2のソフトウェアコンポーネントに提供する第1の時間を決定することと、
少なくとも部分的に前記シーケンスに基づいて、前記第2のコントローラーによって、前記第2のソフトウェアコンポーネントを実行させる第2の時間を決定することと、
前記第1の時間に、前記第2のコントローラーによって、前記第1のメッセージを前記第2のソフトウェアコンポーネントに提供することと、
前記第2の時間に、前記第2のコントローラーによって、前記第2のソフトウェアコンポーネントを1回または複数回実行させることと、
前記第1のコントローラーで、前記第2のソフトウェアコンポーネントから、前記第2のソフトウェアコンポーネントの実行の第2の出力を受信することと、
前記第2の出力と、第2のホライズン時間、または前記第2の出力が前記第2のコントローラーで受信されたとき、または前記第2の出力を生成した前記第2のソフトウェアコンポーネントの個別の実行を示す第2の生成時間のうちの少なくとも1つとを含む第2のメッセージを、1つまたは複数の第2のサブスクライバに、前記第2のコントローラーによって発行することと
さらに含む、請求項1に記載の方法。
【請求項5】
前記時間を決定することは、前記第1のソフトウェアコンポーネントが別のコントローラーでの別のイベントの前または後に実行されるべきであると決定することであって、前記別のコントローラーでの前記別のイベントは、前記第1のコントローラーでアップストリームコントローラーから受信された第2のメッセージによって、または少なくとも部分的に前記シーケンスに基づいて指定されることを含む、請求項1乃至4のいずれか1項に記載の方法。
【請求項6】
前記第1のソフトウェアコンポーネントを実行させることができる期間を決定することと、
前記時間の前、かつ前記期間が満了すると、前記第1のソフトウェアコンポーネントが実行されるのを防ぐことと
をさらに含む、請求項1乃至5のいずれか1項に記載の方法。
【請求項7】
入力インターフェースを介した入力として、前記1つまたは複数の変数のうちの1つとしてセンサーデータを提供すること、および、
少なくとも部分的にログファイルに基づいて、前記第1のソフトウェアコンポーネントまたは1つまたは複数の他のコンポーネントのうちの少なくとも1つでの1つまたは複数のイベントに関するイベントのシーケンスを決定することに少なくとも部分的に基づいて前記時間を決定すること
に少なくとも部分的に基づいて、前記第1のソフトウェアコンポーネントを介してセンサーデータを処理することをさらに含み、
前記1つまたは複数のイベントは、前記1つまたは複数の他のコンポーネントに関連付けられた1つまたは複数の他のコントローラーから前記第1のコントローラーで受信された1つまたは複数のメッセージによって示される、請求項1乃至6のいずれか1項に記載の方法。
【請求項8】
1つまたは複数のプロセッサと、
プロセッサ実行可能命令を格納する非一時的なメモリと
を備えたシステムであって、前記プロセッサ実行可能命令は前記1つまたは複数のプロセッサによって実行されると、前記システムに、
第1のコントローラーによって、第1のソフトウェアコンポーネントに関連付けられた入力インターフェースに提供される1つまたは複数の変数の値を制御することと、
前記第1のコントローラーによって、メッセージの受信、指定された期間、イベントのシーケンス、またはホライズン時間のうちの少なくとも1つに少なくとも部分的に基づいて、前記第1のソフトウェアコンポーネントを実行させる時間を決定することと、
前記時間に、前記第1のコントローラーによって、前記第1のソフトウェアコンポーネントを実行させることであって、前記第1のソフトウェアコンポーネントの実行は、少なくとも部分的に前記1つまたは複数の変数に基づくことと、
前記第1のコントローラーで、前記第1のソフトウェアコンポーネントから、前記実行の第1の出力を受信することと、
1つまたは複数のサブスクライバに、前記第1のコントローラーによって、前記第1の出力と、前記第1のコントローラーが前記第1のソフトウェアコンポーネントを再実行させる前の期間、または前記第1の出力が、前記第1のコントローラーで受信されたか、または、前記第1のソフトウェアコンポーネントによって生成されたときを示す生成時間のうちの少なくとも1つとを含む第1のメッセージを発行することと
を含む動作を実行させる、システム。
【請求項9】
前記動作は、
前記入力インターフェースへの入力として提供されるセンサーデータ、
前記イベントのシーケンスであって、前記イベントのシーケンスを保存することは、別のソフトウェアコンポーネントでの1つまたは複数のイベントに対する前記第1のソフトウェアコンポーネントでの動作を監視することを含み、前記イベントは、メッセージを受信すること、前記第1のメッセージを発行すること、前記入力インターフェースへの入力、前記実行の開始、前記実行の完了を提供すること、または前記出力を受信することのうちの少なくとも1つを含む、前記イベントのシーケンス、
前記入力インターフェースへの入力として提供されるデータ、
出力インターフェースから出力として受信したデータ、または
前記第1のソフトウェアコンポーネントによって生成され、前記出力インターフェースを介して出力されるキーフレーム
のうちの少なくとも1つをログファイルに保存することをさらに含む、請求項8に記載のシステム。
【請求項10】
前記第1のソフトウェアコンポーネントが第2のプロセッサ実行可能命令を含み、
前記動作は、
前記第1のソフトウェアコンポーネントを第2のソフトウェアコンポーネントと置き換えて、前記入力インターフェースが前記第2のソフトウェアコンポーネントに1つまたは複数の変数を提供し、前記第2のソフトウェアコンポーネントが前記コントローラーによって前記時間に実行されるようにすることであって、前記第2のソフトウェアコンポーネントの実行の第2の出力は、出力インターフェースを介して受信されることをさらに含み、
前記第2のソフトウェアコンポーネントは、第3のプロセッサ実行可能命令を含む、請求項8または9に記載のシステム。
【請求項11】
前記動作は、
第2のソフトウェアコンポーネントに関連付けられた第2のコントローラーで前記第1のメッセージを受信することと、
イベントのシーケンスに少なくとも部分的に基づいて、前記第2のコントローラーによって、前記第1のメッセージを前記第2のソフトウェアコンポーネントに提供する第1の時間を決定することと、
少なくとも部分的に前記シーケンスに基づいて、前記第2のコントローラーによって、前記第2のソフトウェアコンポーネントを実行させる第2の時間を決定することと、
前記第1の時間に、前記第2のコントローラーによって、前記第1のメッセージを前記第2のソフトウェアコンポーネントに提供することと、
前記第2の時間に、前記第2のコントローラーによって、前記第2のソフトウェアコンポーネントを1回または複数回実行させることと、
前記第1のコントローラーで、前記第2のソフトウェアコンポーネントから、前記第2のソフトウェアコンポーネントの実行の第2の出力を受信することと、
前記第2の出力と、第2のホライズン時間、または前記第2の出力が前記第2のコントローラーで受信されたとき、または前記第2の出力を生成した前記第2のソフトウェアコンポーネントの個別の実行を示す第2の生成時間のうちの少なくとも1つとを含む第2のメッセージを、1つまたは複数の第2のサブスクライバに、前記第2のコントローラーによって発行することと
さらに含む、請求項9に記載のシステム。
【請求項12】
前記時間を決定することは、前記第1のソフトウェアコンポーネントが別のコントローラーでの別のイベントの前または後に実行されるべきであると決定することであって、前記別のコントローラーでの前記別のイベントは、前記第1のコントローラーでアップストリームコントローラーから受信された第2のメッセージによって、または少なくとも部分的に前記シーケンスに基づいて指定されることを含む、請求項8乃至11のいずれか1項に記載のシステム。
【請求項13】
前記動作は、
前記第1のソフトウェアコンポーネントを実行させることができる期間を決定することと、
前記時間の前、かつ前記期間が満了すると、前記第1のソフトウェアコンポーネントが実行されるのを防ぐことと
をさらに含む、請求項8乃至12のいずれか1項に記載のシステム。
【請求項14】
前記動作は、
入力インターフェースを介した入力として、前記1つまたは複数の変数のうちの1つとしてセンサーデータを提供すること、および、
少なくとも部分的にログファイルに基づいて、前記第1のソフトウェアコンポーネントまたは1つまたは複数の他のコンポーネントのうちの少なくとも1つでの1つまたは複数のイベントに関するイベントのシーケンスを決定することに少なくとも部分的に基づいて前記時間を決定すること
に少なくとも部分的に基づいて、前記第1のソフトウェアコンポーネントを介してセンサーデータを処理することをさらに含み、
前記1つまたは複数のイベントは、前記1つまたは複数の他のコンポーネントに関連付けられた1つまたは複数の他のコントローラーから前記第1のコントローラーで受信された1つまたは複数のメッセージによって示される、請求項8乃至13のいずれか1項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、調整されたコンポーネントインターフェース制御フレームワークに関する。
【背景技術】
【0002】
(関連出願)
このPCT国際出願は、2018年11月21日に出願され、「Coordinated Component Interface Control Framework」と題された米国特許出願第16/198,621号、および2018年11月21日に出願され、「Executable Component Interface and Controller」と題された米国特許出願第16/198,653号の利益を主張し、これらはいずれも、参照により本明細書に組み込まれる。
【0003】
様々なシステムが、システムを制御するために複雑なデータ処理パイプラインに依存していることがある。例えば、データ処理パイプラインを使用して、製造プロセスを制御し、部屋の中の複数の会話を追跡し、個別の話者を識別しながら音声をテキストに変換し、環境を介して自律型ロボットの動きを制御し、化学的刺激および/またはバイオフィードバックなどを介して微細なナノチューブの動きを調整することができる。ただし、これらのデータ処理パイプラインは非常に複雑であるため、処理パイプラインの1つの要素を改善する変更により、パイプライン全体の出力が実際には悪化する可能性があるため、時々、データ処理パイプラインのパフォーマンスの調整は難しいことがある。さらに、データ処理パイプラインの要素が最適に実行されていない場合、処理パイプラインの複雑さが、その原因である1つまたは複数の要素を曖昧にする可能性がある。
【図面の簡単な説明】
【0004】
詳細な説明は、添付の図面を参照して説明される。図では、参照番号の左端の数字は、その参照番号が最初に現れる図を識別する。異なる図における同じ参照番号は、同様のまたは同等の項目を示す。
【0005】
図1図1は、ネイティブ構成に従って構成されたシステムを含む自律走行車を示す例示的なシナリオを示す。
図2A図2Aは、ネイティブ構成における1つまたは複数のコンポーネントを備える例示的なシステムのブロック図を示す。
図2B図2Bは、システムの1つまたは複数のコンポーネントへの入力、出力、および/または実行状態を制御するための例示的なフレームワークのブロック図を示す。
図3図3は、コンポーネント、入出力インターフェース、およびオンラインコントローラーを備えるフレームワーク実装のブロック図を示す。
図4図4は、コンポーネントにおいてイベントを再現するためのデータストアおよびロガーを実装するための例示的なアーキテクチャのブロック図を示す。
図5図5は、コンポーネント、入出力インターフェース、および再生コントローラーを備えるフレームワーク実装のブロック図を示す。
図6図6は、コンポーネント、入出力インターフェース、調整コントローラー、それに関連する他のコントローラーおよびコンポーネント、ならびに非調整コンポーネントを備えるフレームワーク実装のブロック図を示す。
図7図7は、本明細書で論じられるフレームワークを使用してシステムの性能を調整するための例示的なプロセスの流れ図を示す。
図8図8は、本明細書で論じられるフレームワークを実装する例示的なアーキテクチャのブロック図を示す。
【発明を実施するための形態】
【0006】
上述したように、システムは、処理パイプラインのコンポーネントの問題を覆い隠し、データ処理パイプラインのパフォーマンスを調整するための努力を妨げたり邪魔したりする可能性のある複雑なデータ処理パイプラインを含むことがある。さらに、パイプラインのコンポーネントは、さまざまなタイプのコンポーネントであり得る。第1のコンポーネントは、プロセッサによって実行されたソフトウェアに実装され、2番目のコンポーネントは、フィールドプログラマブルゲートアレイ(FPGA)または特定用途向け集積回路(ASIC)などのハードウェアとして実装され得、若しくは追加または代替の例では、第1のコンポーネントは、オペレーティングシステムのカーネル層に実装され得、第2のコンポーネントは、オペレーティングシステムのアプリケーション層に実装され得、第3のコンポーネントは、異なるオペレーティングシステムのアプリケーション層に実装され得る。コンポーネントは、その機能が異なる可能性があり、したがって、コンポーネントへの入力およびコンポーネントからの出力において機能する。
【0007】
さらに、データパイプラインオフラインの動作を再生しようとすると(すなわち、アクティビティを再現しようとすると)、非決定論的な出力をもたらし得、つまり、特定の入力が与えられると、データパイプラインは常に同じ出力を生成するとは限らない可能性がある。これは、データパイプラインのコンポーネントが異なるコンピューティングノード(例えば、異なるグラフィックスプロセッシングユニット(GPU)パイプラインおよび/または異なるGPU、異なる中央処理装置(CPU)コアおよび/または異なるCPU、ネットワークを介して接続されたさまざまなマシン、さまざまな仮想マシン)上で並列に動作する場合に特に悪化し、これは、自律走行車をリアルタイムで制御するのに役立つ動作速度を達成するために、一部のアプリケーションで必要になり得る。
【0008】
ユースケースに関係なく、この出願は、システムのコンポーネント(例えば、データ処理パイプライン、コンピュータービジョンシステム、知覚コンポーネント)に関する技術を説明する。本明細書で使用される場合、システムは、1つまたは複数のコンポーネントを含み得る。コンポーネントは、それ自体、複数の要素のシステム(例えば、ハードウェアおよび/またはソフトウェアのさまざまな組み合わせ)を含み得る。
【0009】
説明するために、自律走行車のシステムは、例えば、知覚システム、位置特定システム、プランナーシステム、駆動モジュール制御システム、内部動作システムなどの複数のシステムを含む人工知能(AI)スタックを含み得る。これらのシステムのそれぞれは、順番に、数十、数百、さらには数千のコンポーネントを含み得る。知覚システムは、例えば、1つまたは複数のセンサーデータ処理コンポーネント、画像をセグメント化するためのコンポーネント、ライダー(LIDAR)データのポイントをセグメント化するためのコンポーネント、センサーデータにおいて識別されたオブジェクトを分類するためのコンポーネント、オブジェクトを追跡するためのコンポーネントなどを含み得る。さらに、これらのコンポーネントの1つは、ニューラルネットワークおよび/または他の機械学習モデル、プロセッサによって実行可能な命令、および/またはハードウェアなどの複数のサブコンポーネントを含み得る。
【0010】
この出願は、コンポーネントへの入力および/またはコンポーネントからの出力を制御する、および/またはコンポーネントがいつおよび/またはどのくらいの時間動作するかを制御するフレームワークを含む技術を説明する。
【0011】
本明細書で説明されるフレームワークは、システムのコンポーネントによって実行されるアクションが決定論的に再現され得るようにシステムを構成し得、つまり、フレームワークを実装するシステムに提供される同じ入力ごとに、同じ出力がシステムによって生成される。場合によっては、フレームワークは、以前は開発者がパイプラインフローを指定したり、他のコンポーネントの一部を書き直したりする必要があった場合に、「プラグアンドプレイ」方式でシステムのコンポーネントを別のコンポーネントに置き換える機能も容易にする。いくつかの例では、本明細書で論じられる技術は、システムのコンポーネントを代替コンポーネントに置き換えること、および置き換えの前後のシステムの動作を比較することを含む。例えば、フレームワークは、ログデータを使用して上述したAIスタックの動作を再現し得(および/またはシミュレーションデータを使用してAIスタックの動作を決定論的にシミュレートし得)、AIスタックおよび/またはそのコンポーネントからの出力の第1のセットを獲得し得る。AIスタックの知覚システムは、更新された、および/または異なる知覚システムに置き換えてもよく、フレームワークは、同じログデータおよび/またはシミュレーションデータを使用してAIスタックを実行し得、AIスタックの動作/パフォーマンスを置き換えの前後で比較することを可能にする。少なくともいくつかの例では、フレームワークは、異なるコンポーネントを有しているにもかかわらず、あるシステム変数(例えば、内部状態、実行回数など)を保持することを可能にし得る。そのような例では、システムは、必要なシステムリソースに関係なく、コンポーネントがシステム全体の正確さや的確さにどのように影響するかを分類することを可能にし得る。
【0012】
場合によっては、フレームワークは、コンポーネントとコントローラーとの間の入出力インターフェースに信号を提供するコントローラーを含み得る。いくつかの例では、コントローラーは、コンポーネントのすべての入出力機能の宛先およびソースであり得、および/またはコントローラーは、コンポーネントに実行させ得る。他の例では、コンポーネントの少なくとも1つの入力および/または出力は、コントローラーの外部で入力または出力され得る。コンポーネントへの入力および/または出力を制御することに加えて、またはその代わりに、コントローラーは、コンポーネントの実行状態を制御し得る(例えば、コンポーネントの実行を引き起こす、実行を防ぐ、コンポーネントがいつおよび/またはどのくらいの時間実行するかを制御する、指定された内部状態に設定されるコンポーネントの内部状態を引き起こす)。コンポーネントに提供される入力、コンポーネントからの出力、および/またはコンポーネントの実行を制御するために、コントローラーは、信号および/または他のデータを入力/出力インターフェースに提供し得、および/または入力/出力インターフェースのステータスを制御し得る(例えば、コントローラーは、コンポーネントに関連付けられたレジスタに格納された値/フラグを設定し得る。コントローラーは、コンポーネントに関連付けられたプロセスを呼び出し得る)。コンポーネントがプロセッサ実行可能命令を含む例では、コントローラーは、プロセッサ実行可能命令を1つまたは複数のプロセッサによって実行させることによって、コンポーネントを動作させることができる(例えば、コンポーネントのプロセスに関連するアドレスをスタックにプッシュすること、フラグ状態がコンポーネントが実行すべきであることを示していると判断することに応じて、コンポーネントがアドレスをスタックにプッシュするように構成されている入力/出力インターフェースにフラグを設定すること)。
【0013】
場合によっては、入力/出力インターフェースは、コントローラーから1つまたは複数の変数を受け取るように構成された第1の入力インターフェース(「初期化」入力インターフェース)、コントローラーから実行する指示を受け取るように構成された第2の入力インターフェース(「実行」入力インターフェース)(例えば、指示は、実行する期間をさらに含み得、および/または指示は、高い間、コンポーネントを実行させるフラグを含み得る)、コントローラーからキーフレームを受信し、少なくとも部分的にキーフレームに基づいてコンポーネントの内部状態を設定するように構成された第3の入力インターフェース(例えば、これは、内部状態を決定するためキーフレームを逆シリアル化することを含み得る)、少なくとも部分的にコンポーネントの内部状態に基づいてキーフレームを出力する第1の出力インターフェース(例えば、これは、キーフレームを決定するためにコンポーネントの内部状態をシリアル化することを含み得、コンポーネントは、定期的にキーフレームを出力し得(例えば、500回の実行ごと、1000回ごと)、および/または内部状態が、閾値変化度を満たすかまたは超える変化度によって変化するとき)、および/またはコンポーネントの実行の結果を出力する第2の出力インターフェースを含み得る。
【0014】
本明細書で使用される場合、「結果(product)」および「出力」(名詞としての使用において)は、コンポーネントの実行の出力および/またはシステムの出力を指すために交換可能に使用され得ることに留意されたい。例えば、コンポーネントは実行に応じて出力/結果を出力し得る。この出力/結果は、システムによって出力/結果として出力され得、および/またはこの出力/製品は、第2の出力/結果も生成し得るシステムの別のコンポーネントによって受け取られ得る。システムは、追加的または代替的に、第2の出力/結果を出力し得る。「結果(product)」という用語を使用することで、コンポーネントが出力インターフェースを介して出力(名詞)を出力(動詞)し得るという紛らわしい状況を回避する。
【0015】
本明細書で論じられる技術は、様々なタイプのコントローラーを含み得る。例えば、限定されないが、コントローラーのタイプは、オンラインコントローラー、再生コントローラー、および/または調整コントローラーを含み得る。異なるタイプのコントローラーはすべて、コンポーネントへの入力、コンポーネントからの出力、および/またはコンポーネントの実行状態を制御するように構成され得、無意識に(例えば、コントローラーが制御している実物のコンポーネントの知識を必要とせずに)そうするように構成され得る。これにより、第2のコンポーネントは第1のコンポーネントを置き換えることができ、一方、第1のコンポーネントを制御していた同じコントローラーは、置き換え後、コントローラーの動作を変えることなく、または場合によってはコントローラーに変化を通知することなく、第2のコンポーネントを制御するために引き続き使用され得る。場合によっては、入力/出力インターフェースを含むように構成されたコンポーネントは、入力/出力インターフェース、コンポーネント、および/またはコントローラーを再構成することなく、互いに交換され得る。言い換えると、コントローラーは入力/出力インターフェースの反対側のコンポーネントに依存しない(agnostic)ことがある。コントローラーの不可知論(agnosticism)を容易にするために、コントローラーは、以下で説明するように、自律走行車のオンライン動作からキャプチャされたイベントのシーケンス、ユーザー定義のタイミング、デフォルトのタイミング、センサーデータ、および/または他の非決定論的値を含み得るログファイルを受け取り得る。
【0016】
異なるタイプのコントローラーはすべて同じコア機能、例えば、コンポーネントの入力/出力/実行を制御すること、および、それがコントローラーであるコンポーネントの機能に関して依存せずにそうすること、を有し得る。ただし、異なるタイプのコントローラーは、異なる追加機能を含み得る。たとえば、オンラインコントローラーは、コンポーネントの入力/出力/実行状態を制御することに加えて、(他のコンポーネントに関連付けられた)コントローラー間でメッセージをルーティングする場合がある。例えば、オンラインコントローラーは、サブスクライバ(subscriber)コンポーネントおよびパブリッシャ(publisher)コンポーネントを含み得る。オンラインコントローラーは、(例えば、パブリッシュ-サブスクライブ(pub-sub))アーキテクチャにおいて)オンラインコントローラーがサブスクライブするネットワークチャネルおよび/またはトピックからのサブスクライバコンポーネントを介して、別のコントローラー(すなわち、パブリッシング/アップストリームコントローラー)からメッセージを受信し得る。オンライン制御は、追加的または代替的に、ネットワークチャネルおよび/またはトピックを介して1つまたは複数のサブスクライブおよび/またはダウンストリームコントローラーにメッセージを発行し得る。いくつかの例では、メッセージは、トピックおよび/またはチャネルの識別子、コンポーネントの実行の結果、コンポーネントからコントローラーで結果を受信し、結果を含むメッセージがコントローラーによって作成され、および/または結果を含むメッセージが発行された時間(「生成時間」)、および/またはホライズン時間(たとえば、コンポーネントが最も早く再実行されるまでの時間)を含み得る。
【0017】
例えば、第1のコンポーネントは、第1の結果を出力し得、第1のコンポーネントに関連付けられた第1のオンラインコントローラーは、第1のオンラインコントローラーと第1のコンポーネントとの間の第1の入力/出力インターフェースを介して第1の結果を受信し得る。第1のオンラインコントローラーは、第1の結果を含むメッセージを、第2のコンポーネントに関連付けられた第2のオンラインコントローラーに発行し得る。第2のオンラインコントローラーは、第2のコンポーネントへの入力として、第2のオンラインコントローラーと第2のコンポーネントとの間の第2の入力/出力インターフェースを介して、第1の結果を提供し得、第2のオンラインコントローラーは、第2のコンポーネントを第1の結果を使用して実行させ得る。第2のオンラインコントローラーは、第2のコンポーネントの実行に応答して、第2の結果を受け取り得る。第2のオンラインコントローラーは、第2の結果の受信に応答して第2の結果を含む1つまたは複数のサブスクライビングコントローラーに第2のメッセージを発行し得る。
【0018】
場合によっては、オンラインコントローラーは、生成時間をオンラインコントローラーが発行するメッセージに関連付け得る。いくつかの例では、オンラインコントローラーは、入力/出力インターフェースを介したコンポーネントへの入力として、クロック信号、自律走行車から受信されたセンサーデータ、オンラインコントローラーで受信された1つまたは複数の他のコンポーネントの結果、および/または実行中にコンポーネントが使用可能な非決定論的値を提供し得る。たとえば、非決定論的値は、乱数分布、および/または実行ごとに異なる可能性のあるその他の値を含み得る。場合によっては、非決定論的値は、センサーデータおよび/または別のコンポーネントによって生成された結果を含み得る。オンラインコントローラーは、コンポーネントから非決定論的値の呼び出しを受信することに少なくとも部分的に基づいて非決定論的値を生成し得、非決定論的値を生成すると、オンラインコントローラーは非決定論的値をコンポーネントに提供し得る。
【0019】
いくつかの例では、オンラインコントローラーは、追加的または代替的に、コンポーネントで発生するイベントをログファイルに保存し得る。例えば、オンラインコントローラーは、イベントのシーケンス、コンポーネントへの入力として提供されるセンサーデータ、コンポーネントに提供される他の入力、コントローラーによってコンポーネントへの入力として提供される非決定論的値、コンポーネントから受信した出力、コンポーネントの実行に関する診断情報、および/またはコンポーネントから受信したキーフレームをログファイルに保存し得る。場合によっては、入力/出力インターフェースは、コンポーネントの内部状態をキーフレームとしてシリアル化するように構成され得る。内部状態は、出力として渡されない可能性があり、および/または最後の1から5つのメッセージに基づいてコンポーネントを再実行することから回復できない可能性がある内部変数などのオブジェクトの実行に関連する隠されたカプセル化データを含み得る。例えば、内部状態は、カウンター値、第1のコンポーネントの以前の実行に少なくとも部分的に基づく内部変数値、出力コンテキスト(例えば、プランナーは、複数の軌道を生成し、自律走行車を制御するために少なくとも1つを選択し得、かつ、プランナーの各実行に対する車両の各位置および/または軌道によって達成された位置の履歴を保持し得、このデータは、軌道を選択する際に考慮に入れられることがあり、このデータは事後アクティビティおよび/またはデータを記録するため、プランナーの特定の実行時に内部状態を再作成するために、複数の反復が必要になる)などを含み得る。少なくともいくつかの例では、コンポーネントは、ステートフル(たとえば、それらは以前に計算された1つまたは複数の変数に依存する)および/またはステートレス(たとえば、コンポーネントによって実行された計算が以前の計算から独立している)として指定され得る。上記のように、ステートフルコンポーネントは、そのような内部状態の履歴を保持するものとして指定され得る。いくつかの例では、入力/出力インターフェースは、定期的に(例えば、10回の実行ごと、500回の実行ごと、1000回の実行ごと)および/または顕著な状態(例えば、内部状態は、以前の内部状態と比較して、閾値変化度を満たすかまたはそれを超える変化度によって変化する。コンポーネントが指定されたタイプの出力を生成するときはいつでも)を検出すると、キーフレームを生成し得る。
【0020】
いくつかの例では、イベントのシーケンスは、コンポーネントでイベントが発生した順序、および/または別のコンポーネントでのイベントに対してコンポーネントでイベントが発生した順序を定義し得る。
【0021】
上記のように、システムの実行のその後の再生が決定論的かつ再現可能であるために、オンラインコントローラーは、コントローラーによって生成され、および/またはそれに関連するコンポーネントに提供される非決定論的値をキャプチャし得る(例えば、乱数分布、センサーデータ、別のコンポーネントによって決定された結果)。
【0022】
再生コントローラーは、オンラインコントローラーの機能を含み得、追加的または代替的に、コンポーネントで以前のイベントを再生し得る。コンポーネントが以前に動作した方法と同様に(可能な動作許容範囲内で)コンポーネントの動作を再現するために、再生コントローラーは、イベントのシーケンスおよび/または入力データを含む、(例えば、オンラインコントローラーおよび/またはそれに関連するロガーによって生成された)ログファイルを受信し得る。場合によっては、ログファイルは、コンポーネントの動作に関連してオンラインコントローラーによって以前に生成された1つまたは複数の再現性メッセージを含み得る。
【0023】
自律走行車(または他のオンラインシナリオ)で発生したコンポーネントの動作を再現するために再生コントローラーが使用されている例では、再生コントローラーは、コンポーネント(および/またはそれに関連するコントローラー)および/または1または複数の他のコントローラーでのシナリオ中に発生したイベントのシーケンス、および/または自律走行車からのセンサーデータ、アップストリームコンポーネントの出力(ただし、場合によっては、アップストリームコンポーネントの出力は使用され得ず、および/または、ログファイルに保存され得ない)、キーフレーム、および/またはコンポーネントに提供される非決定論的値を含み得る入力データを含むログファイルを受信し得る。場合によっては、イベントのシーケンスは、イベントのシーケンスによって指定された順序に従って、再生コントローラーが読み出し、コンポーネントへの入力として供給し得るデータストアに格納されたデータへの参照を含み得る。
【0024】
いくつかの例では、再生コントローラーは、他のコントローラーと通信し、フレームワークを決定論的にし、シナリオを再現できるようにし、および/または、コンポーネントがダウンストリームコンポーネントの入力に直接出力することを可能にする代わりに、移植可能にすることができ、再生コントローラーは。パイプラインのフローをシミュレートするための相互間でメッセージを送信する。
【0025】
例えば、ネイティブ構成(フレームワークを実装していないデータ処理パイプラインの元の構成)によれば、第1のコンポーネントは、入力としてセンサーからセンサーデータを受け取り得、センサーデータに少なくとも部分的に基づいて実行し得、そして、実行の結果を第2のコンポーネント(ダウンストリームコンポーネント)に出力し得、第2のコンポーネントは、結果を入力として受け取り、少なくとも部分的に結果に基づいて実行し、そして、第2の結果を別のダウンストリームコンポーネントに出力し、および/または第2の結果を出力する。本明細書で論じられるフレームワークによれば、第1のコントローラーは、第1のコンポーネントに関連付けられ得、第2のコントローラーは、第2のコンポーネントに関連付けられ得る。コンポーネントが他のコンポーネントからの入力を受信し、実行し、および/または結果を他のコンポーネントに直接出力できるようにする代わりに、第1のコントローラーはセンサーデータを受信し、センサーデータを入力としていつ提供するか、第1のコンポーネントをいつ、どのくらいの時間実行させるかを決定し得、第1のコンポーネントから結果を受け取り、および/または結果を含むメッセージを第2のコンポーネントに関連付けられた第2のコントローラーにいつ発行するかを決定する。少なくともいくつかの例では、フレームワークは、システム全体のアーキテクチャに少なくとも部分的に基づいてさまざまなコンポーネントの動作の順序を決定し得、計算の順序を最適化して、システム全体の動作の順序を維持しながら、コンポーネント間の最大の並列計算を可能にすることができる。そのような順序は、1つまたは複数のメッセージ内のデータに基づいて実施および/または決定され得る。
【0026】
本明細書で論じられる技術は、記録されたイベントのシーケンスをユーザーが編集できるようにすることによって、またはユーザーがシーケンスを指定できるようにすることによって、イベントの異なるシーケンス(例えば、ユーザーが指定したシーケンス)にしたがって動作するようにユーザーがコンポーネントを強制することを可能にし得る。再生コントローラーは、(オンラインコントローラーによって生成されたイベントのシーケンスに加えて、またはその代わりに)少なくとも部分的にユーザー入力に基づくイベントのシーケンスを受信し得る。いくつかの例では、入力データは、追加的または代替的に、シミュレーションコンポーネントによって生成され、シミュレーションコンポーネントに関連付けられたコントローラーから再生コントローラーに発行されたシミュレートされたセンサーデータを含み得る。
【0027】
フレームワークが決定論的に動作することを保証するために、コントローラーは、生成時間および/またはホライズン時間を、コントローラーが発行するメッセージに関連付け、および/またはコンポーネントへの入力として提供されるメッセージの順序および/または実行の順序を制御し得る。生成時間は、結果がコンポーネントからコントローラーで受信された時間、コントローラーが結果を含むメッセージを生成した時間、および/またはコントローラーがメッセージを発行した時間の識別子を含み得る。ホライズン時間は、コントローラーがコンポーネントを実行するまでの期間を最短で識別する。基本的に、ホライズン時間は、コンポーネントが別のx時間(たとえば、500ミリ秒、100マイクロ秒、1.2秒)の間再実行されないことをコントローラーが別のコントローラーに通知するという約束のように機能する。
【0028】
生成時間および/またはホライズン時間を含むメッセージを受信するコントローラーは、生成時間および/またはホライズン時間を使用して、いつ入力を提供し、および/またはそれに関連するコンポーネントを実行させるかを決定し得る。例えば、コントローラーは、生成時間をイベントのシーケンスと比較し得、コントローラーが複数のメッセージを受信したいくつかの例では、イベントのシーケンスに対応するようにメッセージを並べ替え、イベントのシーケンスに反映されるのと同じ順序でメッセージをコンポーネントへの入力として提供し得、これにより、イベントのシーケンスがコンポーネントで(たとえば、オンラインコントローラーによって記録されたイベントのシーケンスと比較して)複製されることが保証される。少なくともいくつかの例では、実行の順序および/または総数が同じまたは類似である限り、コンポーネントの実行時刻および/または期間は変動し得る。場合によっては、コントローラーは、少なくとも部分的にホライズン時間に基づいて、コンポーネントを実行できるようにする時刻および/または期間を追加的または代替的に決定し得る。例えば、コントローラーは、ホライズン時間が満了するまで、コンポーネントを1回または複数回実行させることを決定し得る。コントローラーが複数のメッセージ、したがって複数のホライズン時間を受信する例では、コントローラーは、複数のホライズン時間のうちの最小ホライズン時間および/または少なくとも複数のホライズン時間のうちの最大ホライズン時間よりも短いホライズン時間まで、コンポーネントを1回または複数回実行させることを決定し得る。そのような方法で動作することにより、(シーケンスに関する)生成時間および/またはホライズン時間に関して、本明細書で論じられるフレームワークは、動作の順序および/またはコンポーネントの状態および/または動作中のシステムを維持することを含み得る、コンポーネントおよび/またはシステムの以前の動作を再現し得る。
【0029】
さらに、フレームワークは、オンライン(ネイティブ)コンピューティング環境とは異なるハードウェアを含むコンピューティング環境で動作することにより、システムを移植可能にすることができ、フレームワークは、システムにネイティブ環境で発生する動作を再現させる。さらに、フレームワークは、分散コンピューティングシステム上で処理されることによって、および/または計算上制限されているコンピューティングデバイスによって、システムを移植可能にすることを可能にする。例えば、本明細書で論じられるフレームワークおよびそれに付随する動作のために、コントローラーは、イベントのシーケンス、生成時間、および/またはホライズン時間に従ってコンポーネントの入力/出力/実行を制御するため、コントローラーおよび/またはコンポーネントを実行するコンピューティングデバイスが、ネイティブコンピューティングデバイスおよび/または互いより遅いか速いかは問題ではない。そうすれば、コンポーネントが別のコンポーネントより「進んで」いることはなく、実行前に受け取るべきである入力がない状態でコンポーネントが残されることもない。
【0030】
調整コントローラーは、特定のコンポーネントに関連付けられる代わりに、複数のコントローラー間の相互作用を調整し得る。例えば、自律走行車の知覚システムなどのシステムは、ネイティブ構成に従ってデータ処理パイプラインを形成する複数のコンポーネントを含み得る。少なくとも1つの例では、コントローラーは、複数のコンポーネントのうちの1つのコンポーネントに関連付けられ得るが、1つのコントローラーが代替的に複数のコンポーネントに関連付けられ得ることが企図される。いくつかの例では、複数のコンポーネントのうちのいくつかのコンポーネントは、入力/出力インターフェースを含まない場合があり、したがって、コントローラーと相互作用するように構成されない場合がある。入力/出力インターフェースを含まないコンポーネントは、本明細書では「非調整コントローラー」と呼ぶ。しかしながら、いくつかの例では、複数のコンポーネントのうちの各コンポーネントは、コントローラーに関連付けられ得、その結果、コントローラー対コンポーネントの比率は1:1である(ただし、他の技術が企図される)。ネイティブ構成では、特定のコンポーネントが1つまたは複数のアップストリームコンポーネントから入力を受け取り、1つまたは複数のダウンストリームコンポーネントに出力する場合がある。ただし、本が明細書で説明する技術によれば、入力/出力インターフェースを含むコンポーネントは、ネイティブ構成のように他のコンポーネントと直接通信し得ず、代わりに、コンポーネントに関連付けられたコントローラーと入力/出力インターフェースを介して排他的に通信し得る。次に、コントローラーは、処理パイプラインパターンに従って、および/または調整コントローラーを介して、互いに直接通信し得る。
【0031】
調整コントローラーを使用する実装では、調整コントローラーは、コントローラーによって発行されたメッセージを受信し得、メッセージをサブスクライバコントローラーに中継し得、および/またはメッセージをイベントのシーケンスに従って中継し得る。例えば、第1のコントローラーからメッセージを受信し、少なくとも部分的にシーケンスに基づいて第2のコントローラーにメッセージを送信する時間を決定し、その時点で第2のコントローラーにメッセージを送信することによって、シーケンスが実施されることを確実にし得る。追加的または代替的に、調整コントローラーは、非調整コンポーネント(例えば、それに関連付けられたコントローラーを持たないコンポーネント)宛てのメッセージを処理し得る。例えば、調整コントローラーは、コントローラーからメッセージを受信し、メッセージが少なくとも1つの非調整コンポーネント宛てであると判定し、メッセージを非調整メッセージタイプに変換し、変換されたメッセージを非調整コンポーネントに送信し得る。これにより、コントローラーによって発行されたメッセージが調整または非調整コンポーネントに送信されるかどうかについて、コントローラーが依存しないこと(agnostic)を可能にし得る。
【0032】
コントローラーを入力/出力インターフェースを含むコンポーネントと関連付ける配置は、本明細書では「フレームワーク」と呼ばれる。上述したように、フレームワークは、入力/出力インターフェースを含む(システムの)各コンポーネントにコントローラーを割り当て得る。システムが非調整コンポーネントを含む場合、フレームワークは、コントローラーと非調整コンポーネントとの相互作用を処理するための調整コントローラーをさらに含み得る。パイプラインのネイティブ構成を避け、本明細書で説明するフレームワークに従ってデータパイプラインを構成することにより、(フレームワーク内の)パイプラインの動作は決定論的であり、移植可能であり、計算リソースを最大化し、および/または計算的に制限されたハードウェア上で複雑なシナリオの再現を可能にし得る。
【0033】
本明細書で説明するフレームワークは、パイプラインが同じ入力を決定論的に処理することを可能にし、つまり、同じ入力データ(例えば、車両から受信したセンサーデータ)がフレームワークに提供されるたびに、フレームワークは毎回同じ出力を生成する。いくつかの例では、本明細書で論じられる技術は、フレームワーク内で第1のコンポーネントが第2のコンポーネントで置き換えられることを容易にする。例えば、コントローラーは、第1のコンポーネントに関連付けられ得、ユーザー選択により、第1のコンポーネントは、もはやコントローラーに関連付けられず、第2のコンポーネントは、すぐにコントローラーに関連付けられる(したがって、コントローラーによって/コントローラーと通信して制御される)ように、第2のコンポーネントに置き換えられ得る。たとえば、第1のニューラルネットワークが第2のニューラルネットワークに置き換えられる可能性がある。この置換は、第2のコンポーネントをメモリにロードすること、第2のコンポーネントに関連付けられたプロセスをスタックにプッシュすること、第1のコンポーネントに関連付けられたアドレスを、コンポーネントに実行させるときにコントローラーが参照するレジスタ内の第2のコンポーネントに関連付けられたアドレスに置き換えること、および/または入力を提供する/出力を受信するときなどを含み得る。「第1のシステム」は、第1のコンポーネントおよび/または他のコンポーネントを含み得、「第2のシステム」は、第1のコンポーネントと置き換えられた第2のコンポーネントおよび/または他のコンポーネントを含み得る。
【0034】
本明細書で論じられる技術は、追加的または代替的に、システムによって出力された結果および/またはコンポーネントによって出力された結果に関連付けられたメトリック、例えば、正確さ、精度、適合率再現率(PR)曲線、受信機動作特性(ROC)曲線、待ち時間、反応時間(例えば、オブジェクトおよび/またはトラックを識別する前の実行の数)、および/または加速度(たとえば、横方向の加速度が横方向の加速度の閾値を満たすかまたは超えるか、前方の加速度が、車両の知覚された「ジャーク」に関連付けられた前方の加速度の閾値を満たすかまたは超えるか)などを決定することを含み得る。場合によっては、技術は、コンポーネントが実行されると、および/またはコンポーネントを含むシステムから出力を受け取ると、正確さ、精度、PR曲線、および/またはROC曲線を決定することを含み得る。
【0035】
場合によっては、技術は、第1のシステムおよび/または第1のコンポーネントに関連付けられた第1のメトリックを決定すること、第1のコンポーネントを第2のコンポーネントに置き換えて第2のシステムを形成すること、および第2のシステムおよび/または第2のコンポーネントに関連付けられた第2のメトリックを決定することを含み得る。場合によっては、技術は、追加的または代替的に、第1のシステムと第2のシステムおよび/または第1のコンポーネントおよび/または第2のコンポーネントとの間の差異を決定し得る。場合によっては、これは、それに関連付けられたメトリックを比較することを含み得る。場合によっては、技術は、第2のメトリックが第1のメトリックに対する改善であると決定すること、および、自律走行車に、少なくとも部分的に第2のメトリックが第1のメトリックに対する改善であるという決定に基づいて、第2のコンポーネントおよび/または第1のコンポーネントを第2のコンポーネントと置き換えるための命令を送信することを含み得る。
【0036】
いくつかの例では、第2のメトリックは、第1のメトリックに対する改善であり得、第2のメトリックは、第1のメトリックによって示される正確さおよび/または精度を満たすかまたは超える正確さおよび/または精度を示し、第2のメトリックは、第1のメトリックによって示されるPR曲線、ROC曲線、および/または加速度よりも曲線により密接に一致するPR曲線、ROC曲線、および/または加速度を示し、および/または第2のメトリックは、第1のメトリックによって示される待ち時間および/または反応時間よりも短い待ち時間および/または反応時間を示す。
【0037】
場合によっては、技術は、ログファイルを受信すること、第1のシステムによってログファイルを処理すること、第1のシステムに関連するメトリックを決定すること、メモリに格納された1つまたは複数の第1のコンポーネントが、第1のシステムの1つまたは複数の第2のコンポーネントに対応すると決定すること、および少なくとも部分的に対応の決定に基づいて、1つまたは複数の第1のコンポーネントのうちの少なくとも1つを、1つまたは複数の第2のコンポーネントのうちの対応する1つで置き換えることを含み得る。たとえば、自律走行車のシステムへの最後の更新の間に、コンポーネントが変更され得る。コンポーネントのこの2番目のバージョンは、バージョン情報に関連付けられたリポジトリに格納され得る。フレームワークを実行しているコンピューティングデバイスは、この変更されたコンポーネントが利用可能であり、以前のコンポーネントに対応していると判定し得る。コンピューティングデバイスは、第1のシステムへの入力として、第1のシステムの動作を再現するためのログデータを提供し、第1のコンポーネントを第2のバージョンのコンポーネントに置き換えて第2のシステムを形成し、ログデータを第2のシステムへの入力として提供し、第2のシステムの動作が第1のシステムと異なるかどうか判定し得る。フレームワークは、システムのオンライン動作中にキャプチャされたイベントのシーケンスに従って、および/またはシミュレートされたイベントのシーケンスに従って、第1のシステムおよび/または第2のシステムを強制的に実行し得る。
【0038】
本明細書に記載の技術は、自律走行車のシステムの性能を改善することにより、自律走行車の安全性および効率を改善し得る。この技術はまた、システムの性能を妨げているコンポーネントを取り除き得、および/またはこの技術は、高度なトラブルシューティングを容易にし得る。本明細書で論じられるフレームワークは、パイプラインが非ネイティブシステム上で動作している場合、および/または異なる機能のコンピューティングデバイスを使用している場合でも、データ処理パイプラインを決定論的に動作させること、および/またはパイプラインの以前の動作を再現することを可能にし得る。さらに、フレームワークは、パイプラインを実行する際の無駄な計算サイクルの数を減らし得、パイプラインの分散実行を可能にし得る(これも決定論的である)。
【0039】
(例示的なシナリオ)
図1は、自律走行車102を含む例示的なシナリオ100を示している。本明細書で論じられる技術によれば、自律走行車102は、自律走行車102のセンサー104からセンサーデータを受信し得る。例えば、センサーデータは、位置信号(例えば、GPS信号)、慣性信号(例えば、加速度計信号、ジャイロスコープ信号など)、磁気計信号、ホイールエンコーダ信号、速度計信号、蓄積されたライダー(LIDAR)および/またはレーダー(RADAR)ポイントのポイントクラウド、画像(または複数の画像)、音声信号、バリアトリック(bariatric)またはその他の環境信号などを含み得る。
【0040】
自律走行車102は、そのようなセンサー104から受信したセンサーデータを1つまたは複数のシステムに提供して、自律走行車の様々な機能を達成し得る。例えば、1つまたは複数のシステムは、乗客の乗車体験を制御し得(例えば、温度/湿度制御、内部ディスプレイ制御、ドア制御機能、座席機能)、位置特定および/またはマッピングシステムは、自律走行車の周囲の地図、および/または地図内の自律走行車102の位置および/または向きを生成し得、知覚システムは、自律走行車の環境内のオブジェクトを検出および追跡し得、予測システムは、環境内のオブジェクトの将来の位置、速度、および/または加速度を予測し得、加速、計画システムは、自律走行車の動きを制御するための軌道を決定し得る。これらのシステムは、順番に、1つまたは複数のコンポーネントを含み得る。これらのコンポーネントは、ソフトウェアおよび/またはハードウェアコンポーネントを含み得る。例えば、コンポーネントは、ニューラルネットワークおよび/またはプロセッサによって実行可能な他の命令などの機械学習モデルを含み得る。
【0041】
例えば、図1は、簡略化された知覚システムを表し得る例示的なシステム106のネイティブ構成(例えば、本明細書で説明されるフレームワークを使用して動作していないデータ処理パイプライン)を示す。例示的なシステム106は、入力として、センサー104からセンサーデータを受信し得、例示的なシステム106によるセンサーデータの処理に少なくとも部分的に基づいて、例示的なシステム106は、境界ボックス108および/または意味ラベル110を出力し得る。境界ボックス108および/または意味ラベル110は、例示的なシステム106の「結果」112(すなわち、例示的なシステム106の動作に応答して生成された出力)であり得る。
【0042】
例示的なシステム106のネイティブ構成によれば、例示的なシステム106は、センサーデータを受信し、正規化し、平滑化し、変換し、および/またはそうでなければ予備的に処理し得るセンサーデータプロセッサ114を備え得る。いくつかの例では、センサーデータプロセッサ114は、例えば、ガウスフィルタ、デジタルアナログ変換器(DAC)、センサードライバなどのサブコンポーネントを備え得る。センサーデータプロセッサ114は、センサーデータプロセッサ114によって生成された出力を1つまたは複数のダウンストリームコンポーネントに送信し得、これは、図示の例では、セグメンテーションコンポーネント116および境界ボックスコンポーネント118を含み得る。セグメンテーションコンポーネント116は、センサーデータプロセッサ114(セグメンテーションコンポーネント116に関連するアップストリームコンポーネントである)から処理されたセンサーデータを受信し得、オブジェクトに起因するものとしてセンサーデータの一部を識別し得る(例えば、オブジェクトに関連付けられているものとして、LIDARポイントクラウドのポイントをラベリングすること、画像の画素を識別すること、LIDARポイントを画像に投影すること、およびオブジェクトに関連付けられているものとして投影されたポイントおよび/または画素を識別すること)。セグメンテーションコンポーネント116は、セグメント化されたセンサーデータをダウンストリームコンポーネントに出力し得、これは、図示の例では、境界ボックスコンポーネント118および意味分類コンポーネント120を含み得る。
【0043】
境界ボックスコンポーネント118は、アップストリームコンポーネント、センサーデータプロセッサ114、およびセグメンテーションコンポーネント116から入力を受け取り得る。境界ボックスコンポーネント118は、処理されたセンサーデータに反映され、セグメンテーションコンポーネントから受信されたセグメント化されたセンサーデータに対応する1つまたは複数のオブジェクトの境界ボックス108を生成し得る。境界ボックスは、生成された境界ボックス108を、オブジェクト識別コンポーネント122を含み得るダウンストリームコンポーネントに送信し得る。
【0044】
意味分類コンポーネント120は、セグメンテーションコンポーネント116から受信されたセグメント化されたセンサーデータに少なくとも部分的に基づいて、セグメント化されているセンサーデータの一部の意味ラベルを生成し得る。例えば、意味ラベルは、例示的な意味ラベル110、「四輪車」、または意味分類コンポーネント120の1つまたは複数の機械学習モデルが評価時に出力するように構成された他の意味ラベル(例えば、「歩行者」、「二輪車」、「自転車」、「駐車車両」)などのラベルを含み得る。
【0045】
オブジェクト識別コンポーネント122は、境界ボックスコンポーネント118によって出力される境界ボックス108および/または意味分類コンポーネント120の意味ラベルを含む、アップストリームコンポーネントから受信された様々な入力を融合して、結果112を1つまたは複数のダウンストリームコンポーネントに出力し得る。例えば、結果112は、自律走行車102の動きを制御するための軌道を生成するために計画システムによって使用可能であり、および/またはセンサーデータ、境界ボックス、および/または124で示されるような意味ラベル110の表現を生成するためにGUIコンポーネントによって使用可能であるプログラミングオブジェクトとしてフォーマットされたオブジェクト識別子を含み得る。
【0046】
知覚システムは、いくつかの例では、より多くのコンポーネントを含み得、および/またはより多くの機能を実行し得ることが企図される。例えば、知覚システムは、センサーデータからオブジェクトを検出するための複数のコンポーネント、オブジェクトの分類を決定するための複数のコンポーネント、オブジェクトの現在および/または将来の進行方向、位置、速度、および/または加速度を決定するための複数のコンポーネント、オブジェクトを追跡するための複数のコンポーネント、環境の地図を生成するための複数のコンポーネント、地図内でオブジェクトをローカライズするための複数のコンポーネント、オブジェクトの境界ボックスを決定するための複数のコンポーネントなどを含み得る。例えば、セグメンテーションコンポーネント116は、それ自体で、例えば、複数の機械学習モデル、プロセッサ実行可能命令、および/またはハードウェア(例えば、FPGAおよび/またはASIC)などの複数のサブコンポーネントを含み得る。
【0047】
例示的なシステム106は、単に「システム」、「コンポーネント」、および/またはサブコンポーネントによって意味されるものについて当業者に与えるために上に例示および説明されている。
【0048】
(例示的なフレームワーク)
図2Aは、ネイティブ構成に従って構成された1つまたは複数のコンポーネントを含む例示的なシステム200のブロック図を示している。例示的なシステム200は、主に、ネイティブ構成を本明細書で説明されるフレームワークと対比するために描かれている。図2Aおよび2Bは、太線で強調されているコンポーネント202の観点から説明される。
【0049】
ネイティブ構成に従って構成された例示的なシステム200は、システム入力204を受信し得る。システム入力204は、センサーデータ、別のシステムの結果などを含み得る。この入力は、アップストリームコンポーネント206(1)-(x)によって処理され得る。場合によっては、コンポーネント202は、1つまたは複数のアップストリームコンポーネント206(1)-(x)の出力をサブスクライブし得、および/またはそうでなければ、1つまたは複数のアップストリームコンポーネント206(1)-(x)の出力を受信し得る。図2Bは、コンポーネント206(1)および206(x)の両方をコンポーネント202に出力を提供するものとして示しているが、第1レイヤのすべてのコンポーネントが必ずしもコンポーネント202に出力を提供し得るわけではない。第1のコンポーネントは、第2のコンポーネントへの入力として第1のコンポーネントの出力を第2のコンポーネントに提供することにより、第2のコンポーネントからの「上流(upstream)」であり得る。したがって、システム入力204を受け取り、そのコンポーネントの出力をコンポーネント202に提供しないコンポーネントは、コンポーネント202の観点から「アップストリーム」コンポーネントとは見なされない場合がある。例えば、独立コンポーネント208の観点から、独立コンポーネント208は、独立コンポーネント208への入力として、コンポーネント206(1)によって生成された出力を受け取らないので、コンポーネント206(1)は、独立コンポーネント208に対するアップストリームコンポーネントではない。
【0050】
独立コンポーネント208は、独立コンポーネント208の出力がコンポーネント202の出力に影響を及ぼさないという点でコンポーネント202から独立しているが、コンポーネント202の動作は、少なくとも部分的に少なくともアップストリームコンポーネント206(1)および206(x)の結果に基づく。
【0051】
アップストリームコンポーネント206(1)および/または206(x)からの結果を入力として受け取ることに少なくとも部分的に基づいて、コンポーネント202は実行され得、実行に応答して、出力を生成し得る。コンポーネント202は、例えば、ダウンストリームコンポーネント210(1)-(y)がサブスクライブするトピックおよび/またはチャネルを介して出力を発行することによって、この出力をダウンストリームコンポーネント210(1)-(y)に提供し得る。この場合も、これらのダウンストリームコンポーネント210(1)-(y)は、入力として、コンポーネント202の出力を受け取り得、コンポーネント202の出力に少なくとも部分的に基づいて実行し得、それぞれの出力を生成し、ダウンストリームコンポーネント210(1)-(y)は、後続のダウンストリームコンポーネント212などに送信し得る。場合によっては、ダウンストリームコンポーネント212は、システム200の最後のレイヤに存在し得、その結果、ダウンストリームコンポーネント212からの出力は、システム200の結果214である。たとえば、システム200が自律走行車の計画システムである場合、結果214は軌道(たとえば、速度、操舵角、および/または舵角比)を含み得、システム200が知覚システムである場合、結果214は検出されたオブジェクトの位置、速度、加速度、および/または分類を含むオブジェクトリストを含み得る。
【0052】
図2Bは、システム200の1つまたは複数のコンポーネントへの入力、1つまたは複数のコンポーネントからの出力、および/または1つまたは複数のコンポーネントの実行状態を制御するための例示的なフレームワーク216のブロック図を示す。場合によっては、フレームワークを実装するために、入力/出力インターフェース218(簡潔にするために図2Bでは「入力/出力218」と呼ばれる)が、決定論的再現およびテストが望まれるコンポーネントに含まれ得、非決定論的な動作を示し得る。場合によっては、例示的なフレームワーク216を実装することは、例示的なフレームワーク216を介して制御される各コンポーネントにコントローラー(220-230)を関連付けることを含み得る。場合によっては、コントローラーは、1:1の比率で入力/出力インターフェース218を含むシステム200の各コンポーネントに割り当てられ得るが、他の構成が企図される(例えば、3つのコンポーネントに関連付けられた1つのコントローラー、パイプラインの1つのレイヤのコンポーネントに関連付けられた1つのコントローラー、システム200内の指定されたタイプのコンポーネントに関連付けられた1つのコントローラー)。図2Bに示される例示的なフレームワーク216は、1:1の比率を示している。
【0053】
コンポーネントがいつでも入力を受信し、実行し、および/または出力を他のコンポーネントに提供することを可能にする代わりに、コントローラー220-230は、これらおよび他の機能を制御し得る。コントローラー220-230は、異なるタイプのコントローラーを含み得、コントローラー220-230は、それぞれのコントローラーが関連付けられているコンポーネントへの入力、そのコンポーネントの実行状態、および/またはそのコンポーネントからサブスクライブしている(ダウンストリーム)コンポーネントへの出力を制御し得る。いくつかの例では、コントローラーによって制御されるコンポーネント(例えば、コンポーネント202はコントローラー224によって制御される)は、他のコンポーネントから分離され得、それに関連付けられたコントローラーは、処理パイプラインによって規定されるように、コンポーネントへの入力およびコンポーネントからの出力を提供し得る。
【0054】
しかしながら、ダウンストリームコンポーネント210(y)などの入力/出力インターフェース218を含まないコンポーネントは、ネイティブ構成に従って、入力を受信し、実行し、および/または出力を送信し得る。このタイプのコンポーネントは、本明細書では「非調整コンポーネント」と呼ばれる。場合によっては、特別なタイプのコントローラー、調整コントローラーは、調整されたコントローラーからの出力が非調整コントローラーによって適切に受信されることを保証し得る(例えば、これは、非調整コントローラーに入力を提供する時間を決定し、メッセージタイプを非調整コントローラーによって使用可能なメッセージタイプへ変換することを含み得る)。後続の図は、コントローラーと入力/出力インターフェース218、および/またはコントローラーが関連付けられているコンポーネントとの相互作用をより詳細に説明している。
【0055】
場合によっては、コントローラー220-230は、1つまたは複数のミドルウェアおよび/またはネットワークトポロジを介して、コントローラー220-230の他のものからデータを受信しおよび/またはデータを送信し得る。例えば、コンポーネント202は、第1のハードウェア上で実行される第1のプロセスに関連付けられ得る。コントローラー224は、
・第2のハードウェア上で実行され、および/または異なるソフトウェア言語を使用しているコンポーネントに関連付けられている第2のコントローラーを備えた第1のタイプのミドルウェア(例えば、データ配布サービス(DDS))を介して
・第1のハードウェア上で実行されているコンポーネントに関連付けられ、および/または第2のプロセスに関連付けられている第3のコントローラーを備えた第2のタイプのミドルウェア(たとえば、ロボットオペレーティングシステム(ROS)、オペレーティングシステムのプロセス間通信(IPC)ツール)を介して
・第1のプロセスにも関連付けられているコンポーネントに関連付けられている第3のコントローラーを備えた第3のタイプのミドルウェア(たとえば、InProcess)を介して
データを受信および/または送信し得る。
【0056】
言い換えれば、コントローラー220-230は、異なるコンピューティングコンテキストに関連付けられた、および/または異なるミドルウェア/プロセス間通信(IPC)の異なる実装を介して、データを受信および/または他のコントローラーに送信するように構成され得る。例えば、オンライン動作中に、コントローラー302は、オペレーティングシステムのIPCを介してメッセージを受信したかもしれないが、オンラインシナリオの再生中に、以下で説明するように、コントローラー302は、コンピュータ可読媒体からメッセージを読み取り得る(例えば、これは、ビデオファイルをデコードすること、および/またはビデオフレームのうちの1つのフレームを一度に再生することを含み得る)。
【0057】
(例示的なフレームワークの動作)
図3-6は、コンポーネント300、入力/出力インターフェース302、および異なるタイプのコントローラー、ならびに異なるタイプのコントローラーのそれぞれのコンポーネントおよび機能のブロック図を示している。いくつかの例では、コンポーネント300は、命令306を含み得る。命令306は、ニューラルネットワーク308を含むものとして示されているが、命令306は、追加的または代替的に、プロセッサ実行可能命令を含み得る。簡単にするために図示されていないが、コンポーネント300は、追加的または代替的に、例えば、DAC、ASIC、FPGAなどのハードウェアを含み得る。
【0058】
いくつかの例では、入力/出力インターフェース302は、初期化入力インターフェース310、実行入力インターフェース312、出力インターフェース314、保存キーフレーム出力インターフェース316、および/またはロードキーフレーム入力インターフェース318を含み得る。一般に、初期化入力インターフェース310は、コントローラーから1つまたは複数の変数を受け取り、それらを入力として命令306に提供し、その結果、命令306の実行は、少なくとも部分的に1つまたは複数の変数に基づき得る。場合によっては、初期化入力インターフェース310は、コンポーネント300および/または命令306の初期状態を設定するように、および/または命令306に初期変数を提供するように構成され得、および/または追加または代替の例では、初期化入力インターフェース310は、コントローラーから変数334を受信し得、命令306の実行の任意の時点でそれらを命令306への入力として提供し得る(例えば、実行前、実行中に、少なくとも部分的には命令306から変数の要求を受信することに基づいて)。少なくともいくつかの例では、そのような変数は、別のインターフェース(例えば、初期化入力インターフェース310に加えて)を介して渡され得る。実行入力インターフェース312は、コントローラーから実行するための命令を受信し、コンポーネント300を実行させ得、そうでなければ、命令を受信せずに、コンポーネント300の実行を一時停止または阻止し得る。出力インターフェース314は、命令306の実行の結果を受け取り得、その結果をコントローラーに提供し得る。保存キーフレーム出力インターフェース316は、コンポーネント300に、コンポーネント300の内部状態をキーフレームとしてシリアル化させ得、キーフレームをコントローラーに出力し得る。例えば、内部状態は、カウンター値、出力コンテキスト(例えば、プランナーは、複数の軌道を生成し、自律走行車を制御するために少なくとも1つを選択し得、プランナーの各実行に対して車両があった各位置、および/または軌道によって達成された位置の履歴を保持し得る。このデータは軌道を選択する際に考慮に入れることができ、このデータは後方活動および/またはデータを記録するため、プランナーの特定の実行時に内部状態を再作成するために複数の反復が必要になる)などを含み得る。ロードキーフレーム入力インターフェース318は、コントローラーからキーフレームを受信し得、コンポーネント300にキーフレームを逆シリアル化させ得、コンポーネント300の内部状態を、逆シリアル化されたキーフレームによって指定された内部状態に設定させ得る。キーフレームをロードすることは、開発者をコンポーネントの個別(「n番目」)の実行にスキップさせ得、実行の決定論を維持しながら、かつ、決定論が維持されるように内部状態を正確に設定するために、最初または最後の数回の実行からすべてのコンポーネントに戻って再実行することなく、その個別の実行中のコンポーネントの動作を正確に再現させ得る。たとえば、コンポーネントの内部状態は、コンポーネント自体および/または他のコンポーネントの最後のm回の実行に依存する場合がある。単にコンポーネントの「n番目」の実行にジャンプし、コンポーネントの内部状態を設定せずにコンポーネントに修正入力を提供することだけでは、コンポーネントの実行はコンポーネントの動作を正確に再現せず、内部状態は非決定論的要素に依存している可能性があるので、決定論が維持されない。いくつかの例では、キーフレームは、キーフレームが関連付けられている個別の実行を指定し得る(たとえば、キーフレームを生成時間に関連付けることによって)。別の例では、実行の98番目のタイムステップを見たいユーザーは、最も近いキーフレーム(例えば、95番目のタイムステップで格納されたもの)に効果的に「早送り」し、単に時間を3単位だけ前進し得る。
【0059】
図3は、コンポーネント300、入力/出力インターフェース302、およびオンラインコントローラー320のブロック図を示している。オンラインコントローラーは、システムのリアルタイム実行中に実装されるコントローラーであり得る。例えば、オンラインコントローラー320は、自律走行車で使用されて、アップストリームコントローラーからコンポーネント300へ、コンポーネント300からダウンストリームコントローラーへのメッセージを提供し得、それによって、コンポーネント300の入力/出力機能を抽象化し、および/またはコンポーネント300がいつ実行されるかを制御し得る。オンラインコントローラー320はまた、他のコントローラータイプがオンラインコントローラー320の1つまたは複数のコンポーネントおよび/または機能を含み得るので、ベースラインコントローラーとみなされ得る。
【0060】
いくつかの例では、オンラインコントローラー320は、オンラインコントローラー320のサブスクライバ326において、アップストリームコントローラー324からメッセージ322を受信し得る。本明細書で論じられる例によれば、フレームワークは、コントローラーが別のコントローラーを具体的にアドレス指定する必要がなく、コントローラーのサブスクライバ326にサブスクリプションを削除および/またはサブスクリプションをチャネルおよび/またはトピックに追加するように指示することによってパイプラインフローを容易に変更できるように、コントローラー間のパブリッシュ-サブスクライブアーキテクチャを含み得る。明確にするために、これは、コンポーネントからの出力を別のコントローラーに中継するために本明細書で論じられる唯一のアーキテクチャであるが、他の任意の適切な送信プロトコルが実装され得ることが理解される。
【0061】
とにかく、サブスクライバ326は、メッセージ322を受信し得、メッセージ322がデータ328および/または生成時間330を含むと判定し得る。生成時間は、結果(例えば、データ328に関連付けられた)が、それに関連付けられたアップストリームコンポーネント332からアップストリームコントローラー324で受信された時間、アップストリームコントローラー324がメッセージ322を生成した時間、アップストリームコンポーネント332およびメッセージ322をもたらした特定の実行を一意に識別する単調に増加する値、および/またはアップストリームコントローラー324がメッセージ322を発行した時間の識別子を含み得る。場合によっては、データ328は、アップストリームコントローラー324に関連付けられたアップストリームコンポーネント332の実行の結果を含み得る。
【0062】
サブスクライバ326は、オンラインコントローラー320から初期化入力インターフェース310に提供される1つまたは複数の変数334の1つとして、データ328またはその少なくとも一部を初期化入力インターフェース310に提供し得る。変数334は、実行するために命令306によって使用可能な値を含み得る。例えば、命令306は、ガウス乱数分布、LIDAR点群、および共分散行列を受信するように構成されたプロセスと、LIDAR点群および意味ラベルを受信するように構成されたニューラルネットワークとを含み得る。オンラインコントローラー320は、非決定論的変数ジェネレータ336で非決定論的変数値を生成し得る。例えば、これは、乱数分布などを生成することを含み得る。言い換えれば、コンポーネント300が決定論的に再現することができなかった値を生成することを可能にする代わりに、非決定論的変数ジェネレータ336は、値を生成し得る。さらに、クロック338は、追加的または代替的に、変数334の1つとして初期化入力インターフェース310にクロック信号を提供し得る。
【0063】
コンポーネント300がオンラインコントローラー320によって制御されるとき、場合によっては、オンラインコントローラー320は、コンポーネント300がいつおよび/またはどのくらいの時間動作するかを制御し得る。例えば、オンラインコントローラー320は、例えば、コンポーネント300に提供された実行可能コードに少なくとも部分的に基づいてコンポーネント300を実行させ得る実行可能コードをコンポーネント300に提供することによって、実行インターフェース312を介してコールバックを実施し得、および/またはいくつかの例では、変数334を含み得る。いくつかの例では、コールバックは同期コールバックであり得るが、オンラインコントローラー320がいつコンポーネント300が実行されるかを制御する限り、コールバックは非同期であり得ることが企図される。追加または代替の例では、オンラインコントローラー320は、実行入力インターフェース312を「高い」値に設定し得、それにより、コンポーネント300は、初期化入力インターフェース310を介して変数334を受信すると、実行することができる。いくつかの例では、実行入力インターフェース312は、オンラインコントローラー320がフラグを、コンポーネント300が実行し得、および/またはコンポーネント300に少なくとも部分的には初期化入力インターフェース310を介して受信された変数334に基づいて実行させることを示す「高い」フラグ値に設定し得る、レジスタ内のフラグを含み得る。逆に、「低い」フラグ値は、フラグが「高い」値に遷移するまで、コンポーネント300の実行を一時停止および/または阻止し得る。追加または代替の例では、オンラインコントローラー320は、命令306に関連するアドレスをスタックにプッシュして、コンポーネント300を実行させ得、および/またはオンラインコントローラー320は、実行入力インターフェース312を呼び出すか、さもなければ通知し得、それに応じて、アドレスをスタックにプッシュし得る。スタックに入ると、1つまたは複数のプロセッサは、スタック内のアドレスに到達すると、アドレスに関連付けられた命令を実行し得る。後者の例では、コンポーネント300は、実行入力インターフェース312が1つまたは複数のプロセッサによる実行のためにアドレスをスタックにプッシュする準備として、アドレス(および/またはコンポーネント300が複数のサブコンポーネントを含む場合は他の任意の関連アドレス)を実行入力インターフェース312に送信し得る。
【0064】
オンラインコントローラー320がコンポーネント300に関連付けられている追加のまたは代替の例では、オンラインコントローラー320は、定期的に(例えば、30MHz、500MHz、1GHzで)、および/または、サブスクライバ326が、コンポーネント300の最後の実行以降、オンラインコントローラー320がサブスクライブしているすべてのアップストリームコントローラーからメッセージが受信されたと判定するときに、コンポーネント300を実行させ得る。
【0065】
出力インターフェース314は、コンポーネント300の実行の結果340を受け取り得、結果340をオンラインコントローラー320のパブリッシャ342に提供し得る。結果340を受信することに少なくとも部分的に基づいて、パブリッシャ342は、データ346(例えば、結果340および/またはその表現を含み得る)、および/または生成時間348を含むメッセージ344を生成し得る。パブリッシャ342はまた、例えば、pub-subアーキテクチャのためのチャネル識別子および/またはトピック識別子などの、メッセージ344を伴う適切なルーティング情報を含み得る。パブリッシャ342は、メッセージ344を発行し得、メッセージ344は、(ダウンストリーム)コントローラー350をサブスクライブすることによって受信し得る。このアプリケーションは、あるコンポーネントの出力を別のコンポーネントの入力に送信するためのpub-subアーキテクチャの使用を主に説明するが、他のネットワーク構成が検討され、および/またはそうでなければパイプライン構成を確立することが理解る。他のネットワーク構成は、例えば、静的IPアドレスをコントローラーおよび/または非調整コンポーネントに割り当てること、仮想ルーティングおよび転送(VRF)スキームなどを使用してコントローラーおよび/または非調整コンポーネントをアドレス指定することを含み得る。
【0066】
場合によっては、パブリッシャ342は、メッセージ344に加えて(または、コンポーネント300がシンク(sink)である場合、すなわち、コンポーネント300が入力をダイジェストするが、出力を別のコントローラー/コンポーネントに送信しない場合、メッセージ344の代わりに)再現性メッセージ352を発行し得る。場合によっては、再現性メッセージ352は、データメッセージ用のチャネル(「データチャネル」)とは異なるロギングチャネルを介して1つまたは複数のコンポーネントから再現性メッセージを受信するロガー354によって受信され得る。メッセージ322および344は、データメッセージの例であり得る。場合によっては、データストア356は、データチャネルを「リッスン」し得、それによって、メッセージ322および/またはメッセージ344などの1つまたは複数のデータメッセージを受信する。データストア356は、いくつかの例では、データチャネルを介して受信されたメッセージを格納し得る。再生コントローラーは、ロガー354によって格納された再現性メッセージおよび/またはデータストア356によって格納されたデータメッセージを使用して、コンポーネント300の動作を決定論的に再現し得る。場合によっては、オンラインコントローラー320は、純粋なトランスポートレイヤとして動作し得、再現性メッセージを生成しないことがある。
【0067】
場合によっては、再現性メッセージ352は、再現性データ358を含み得る。場合によっては、再現性データ358は、コンポーネント300の特定の動作を再現するのに十分な情報(例えば、結果340を出力すること、および/またはメッセージ344を発行することとなった最後の実行など、命令306の特定の実行を再実行するのに十分な情報)を含み得、コンポーネントの動作(例えば、実行)の順序の指示を提供し得る。
【0068】
図4は、データストア356およびロガー354のブロック図、ならびにそれによって受信され、生成され、および/または格納されたそれぞれのデータを示す。いくつかの例では、データストア356は、データチャネルを介してコントローラーによって発行されたメッセージ344などのデータメッセージを受信し得、ロガー354は、ロギングチャネルを介して再現性メッセージ352などの再現性メッセージを受信し得る。場合によっては、データストア356は、受信したデータメッセージ(例えば、1つまたは複数のコンポーネントに関連付けられた1つまたは複数のコントローラーから受信され得るメッセージ344-400)を、非一時的なコンピュータ可読媒体などのデータリポジトリに格納し得、および/またはデータストア356kは、追加的または代替的に、ロギングチャネルを介して受信され、および/またはロガー354から受信された再現性メッセージを格納し得る。
【0069】
場合によっては、メッセージ344などのデータメッセージは、生成時間348、およびコンポーネント300の実行の結果340を含むデータ346を含み得る。場合によっては、生成時間348は、メッセージを生成したコンポーネントおよび/またはメッセージ322をもたらしたコンポーネントの特定の実行を一意に識別する単調に増加する値を含み得る。例えば、コンポーネント300が3,462回目の実行を行った場合、生成時間348は、コンポーネントによる3,462回目の実行の識別子、およびいくつかの例では、コンポーネント自体の個別の識別子を含み得る。
【0070】
場合によっては、再現性メッセージ352などの再現性メッセージは、それに対応するメッセージ344と同じ識別子を含み得、および/またはそうでなければメッセージ344に関連するものとして識別され得る。場合によっては、再現性データ358は、コンポーネント300の動作を決定論的に再現するのに十分な情報を含み得る。例えば、再現性データ358は、イベントのシーケンス402、非決定論的変数ジェネレータ336によって生成され、および/またはコントローラーによってコンポーネントへ入力として提供された非決定論的値、コンポーネントの実行に関する診断情報(例えば、実行時間、コンポーネントの実行に専念するコアおよび/またはスレッドの数、コンポーネントの実行の状態(例えば、成功、失敗、一時停止など))、および/またはコンポーネントから受信したキーフレームを含み得る。非限定的な例として、再現性データ358は、再生時に計算の順序を保存することができるように、計算を実行するために必要な変数/コンポーネントについての情報を含み得る。
【0071】
いくつかの例では、イベントのシーケンス402は、コンポーネント300(および/または入力/出力インターフェース302および/またはオンラインコントローラー320)でイベントが発生した順序、および/または別のコンポーネントでのイベントに関連してコンポーネント300でイベントが発生した順序を含み得る。例えば、イベントのシーケンス402は、入力フェーズ、実行フェーズ、および/または出力フェーズがコンポーネントで発生した順序を定義し得る(場合によっては、別のコンポーネントでの入力フェーズ、実行フェーズ、および/または出力フェーズに関連して)。例えば、入力フェーズは、コンポーネントへ入力を提供すること(例えば、初期化入力インターフェース310、実行入力インターフェース312、および/またはロードキーフレーム入力インターフェース318を介して)を含み得、これは、コンポーネントに提供されるメッセージおよび/または変数の順序、コントローラーでメッセージが受信された順序などを含み得、実行フェーズは、メッセージを受信することおよび/またはコンポーネントに入力を提供することと、コンポーネントを実行させることとの間の遅延、コントローラーがコンポーネントに実行を開始させた相対時間(例えば、別のコントローラーでの他のイベントに関連して)、コンポーネントが実行された期間および/またはコンポーネントの実行回数、実行が終了した、および/またはコンポーネントから出力を受信した相対時間などを含み得、出力フェーズは、コンポーネントから出力を受信すること(たとえば、実行および/またはキーフレームの結果であるかどうか)、出力を含むメッセージを生成すること、および/またはメッセージを発行することを含み得る。イベントのシーケンス402は、追加的または代替的に、オンラインコントローラー320がコンポーネントへの入力としてメッセージを提供した順序、および/または生成時間348および/または404などの入力として提供されたメッセージの識別子を識別し得る。メッセージの識別子は、データストア356に格納された1つまたは複数のメッセージに対応し得る。追加のまたは代替の例では、イベントのシーケンス402は、再現性メッセージ352に関連付けられた出力としてメッセージ344を識別し得る(例えば、イベントのシーケンス402の出力フィールドにメッセージ344の生成時間348を含めることによって)。
【0072】
例えば、図4は、メッセージ344に関連し、コンポーネント300での動作の順序およびそれに関連するメッセージの識別を含むイベントのシーケンス402を示している。例えば、イベントのシーケンス402は、オンラインコントローラー320が実行インターフェース312を介して408でコンポーネント300の実行を開始する前に、オンラインコントローラー320がコンポーネントにメッセージ322を入力したこと(406)を識別する(これは、実行コマンドが410で与えられる前に発生したので、初期化パラメータとして潜在的に)。408でのコンポーネント300の実行に続いて、オンラインコントローラー320は、410でコンポーネント300への入力としてメッセージ400を提供し、次いで、結果340が、412で出力インターフェース314を介して受信され、次いで、オンラインコントローラー320は414でメッセージ344を発行した。
【0073】
いくつかの例では、イベントのシーケンス402によって識別される順序に加えて、イベントのシーケンスは、データストアに格納されているそれに関連付けられたメッセージを識別し得(例えば、生成時間および/または一意の識別子によって識別され、識別されたメッセージは、入力としてコンポーネント300に提供された可能性があり、識別されたメッセージは、実行に応答してコンポーネントによって出力された)、コンポーネント300に提供された非決定論的変数値などの非決定論的データ、コンポーネントに提供されるクロックデータなどを識別および/または格納し得る。例えば、イベントのシーケンス402は、406で、入力としてメッセージ322を提供する相対的な順序を識別し得るだけでなく、生成時間330および/またはデータストア356からメッセージ322を読み出すのに適した他の識別子を含み得る。
【0074】
イベントのシーケンス402は、メッセージ入力、実行の開始、結果の受信、およびメッセージの発行を示すが、本明細書で論じられる入力/出力インターフェース302および/またはオンラインコントローラー320の動作のいずれかがイベントのシーケンス402によって記録され得ることが企図されることに留意されたい。-例えば、本明細書で論じられる入力フェーズ、実行フェーズ、および/または出力フェーズの任意の部分、それらの順序、それに関連するデータへの参照(例えば、データがデータストア356に格納されるとき)、および/またはデータストア356がデータを格納しない場合、および/またはデータが再現性メッセージおよび/またはログファイル416に存在する場合、データ自体。例えば、変数334、結果340、コンポーネントに提供される任意の非決定論的変数値、クロックデータなどは、データストア356に格納され得、イベントのシーケンス402によって参照され得る。別の例を与えるために、イベントのシーケンス402は、コンポーネント300の実行中のウェイポイントに対してメッセージがコンポーネント300に提供される順序を示し得る(例えば、実行に応答してコンポーネント300から受信された要求、ウェイポイントをマークしているコンポーネント300から受信されたメッセージ、コンポーネント300による結果の出力)。
【0075】
場合によっては、ロガー354は、ロガー354で受信された再現性メッセージを格納し得る。ロガー354によって格納された各再現性メッセージは、イベントのそれぞれのシーケンス、非決定論的変数値、コントローラーのクロックによって生成されたクロックデータ(例えば、様々なイベントが発生するまでの期間、その間の遅延、および/または発生した時間)、および/またはそれに関連するコンポーネントの実行に関連付けられたキーフレームを含み得る。追加のまたは代替の例では、ロガー354は、ロガー354で受信された再現性メッセージに少なくとも部分的に基づいて、ログファイル406を生成し得る。ログファイル406は、特定のコンポーネントについてロガー354で受信された再現性メッセージによって示されるイベントのそれぞれのシーケンスから生成されたイベントの全シーケンスを含み得る。場合によっては、ロガー354は、システムの各コンポーネントのログファイルを生成し得、各コンポーネントが、順序および/または関連するメッセージ(および/または非決定論的変数値、クロックデータ、キーフレームなどの他の非決定論的データ)を識別する、それに関連付けられたイベントのシーケンスを有するようにする。追加または代替の例では、ロガー354は、2つ以上のコンポーネントに関連付けられたコントローラーから受信されたシーケンスに少なくとも部分的に基づいて、2つ以上のコンポーネントでのイベントの順序を反映するイベントの全シーケンスを生成し得る。言い換えれば、ログファイル416は、システムの2つ以上のコンポーネントからシステムのすべてのコンポーネントまでのイベントの順序を反映するシーケンスイベントを含み得、その結果、イベントは、すべてのコンポーネントに関して順序付けられる。追加または代替の例では、ログファイル406は、データ346および/または生成時間348を追加的に含み得る。いくつかの例では、ログファイル406は、コンポーネントに関連付けられたコントローラーから受信された再現性メッセージを含み得る。場合によっては、ロガー354はオンラインコントローラー320の一部であり得る。
【0076】
図4は、コンポーネント300、入力/出力インターフェース302、および再生コントローラー400のブロック図を示している。図4は、図3に示される入力フェーズを繰り返し、再生コントローラー400に含まれ得る追加のまたは代替の機能および/またはコンポーネントを詳しく説明する。図5は、図3の実行および/または出力フェーズに関する再生コントローラー400の説明を続ける。再生コントローラー400は、コンポーネント300の動作がそれがキャプチャされたときに発生した動作に可能な限り近く再現され得、動作を決定論的に再現できるように、コンポーネント300の動作をキャプチャする目的で動作し得る。図5は、コンポーネント300、入力/出力インターフェース302、および再生コントローラー500のブロック図を示している。場合によっては、再生コントローラー500は、オンラインコントローラー320の1つまたは複数のコンポーネントおよび/または機能を含み得、追加的または代替的に、決定論的かつ移植可能にコンポーネントで以前のイベントを再生し得る。再生コントローラー500は、ログファイル416および/または別のログファイルを表し得るログファイル502を受信し得る。例えば、オンラインコントローラー320(および/またはそれに関連するロガー354)は、ログファイル502を生成し得、それを、再生コントローラー500によってアクセス可能なメモリに保存し、および/または送信し得る。場合によっては、ログファイル502は、イベントのシーケンス402を含み得る。場合によっては、再生コントローラー500のインスタンス化時に、再生コントローラー500は、ログファイル502を読み出すために、コンポーネント300に関連付けられた一意の識別子を提供し得る。
【0077】
いくつかの例では、再生コントローラー500は、コンポーネント300での動作/イベントを同期させるタイミングエンフォーサ504を含み得、その結果、コンポーネント300を含むシステムの動作は、場合によっては非リアルタイムで、決定論的に、潜在的に再生され得る(例えば、オンラインハードウェアが動作するよりも速くまたは遅く、異なるコンピューティングリソース能力および/または機能を備えた異なる種類のハードウェア上で動作する)。システムの異なるコンポーネントは、実行に異なる長さの時間を要する可能性があるため、システムのコンポーネントの実行を同期するグローバルクロックは、各コンポーネントが実行に使用する入力を持っていること、または実行が発生した後、実行のために受け取るべき入力を各コンポーネントが受け取らないことを保証するには不十分である。
【0078】
さらに、システムは、異なるタイプのソフトウェア上で動作するように構成され得、および/またはフレームワークは、異なる能力、したがって動作速度および/または機能のハードウェアを含み得る分散コンピューティングシステムのノードに対してシステムの処理を分散し得る。たとえば、1つのコンポーネントは、中央処理装置(CPU)上で稼働するサブコンポーネントプロセスを含む場合があるが、第2のコンポーネントは、グラフィックスプロセッシングユニット(GPU)コア/パイプラインによって実行可能な数千のサブコンポーネントスレッドを含む場合がある。サブコンポーネントは複雑さとランタイムが異なるだけでなく、CPUとGPUは、コンピューティングリソースがサブコンポーネントの処理に利用できない場合に異なる動作を示す、異なるコンピューティングリソース管理機能を含み得る。たとえば、CPUは、コンピューティングリソースが利用可能になるまでプロセスを実行からブロックする、高度なスケジューラおよび/またはハイパースレッディングなどのプロセス管理を含み得るが、GPUは、コンピューティングリソースが利用できない場合にスレッドを失敗させ得る、より基本的なシステムを含み得る。このため、CPU、GPU、および/または他のプロセッサのネイティブプロセス管理機能がコンポーネントのスケジューリングを制御する場合、システムが正確に再現されないことがある。
【0079】
タイミングエンフォーサ504を含む、本明細書で論じられるフレームワークは、別のコントローラーによって記録される時間に関してコンポーネントが同期していないことを可能にし得るが、コンポーネントへの入力、コンポーネントからの出力、および/またはコンポーネントの実行のタイミングを制御し得、その結果、システム全体の動作は決定論的なままであり、コンポーネントは実行前に使用する入力を受け取る。フレームワークは、コンポーネントが共通の時間を保持していない場合でも、イベントが記録されたときに発生したのと同じ順序でコンポーネントでイベントを再現し得る。場合によっては、フレームワークのコントローラーは、コンポーネントごとに個別のクロックを備えている場合があり、これらのクロックは、同期が取れたり、同期が外れたりすることが許可されている。
【0080】
コンポーネントの非同時/非同期実行から生じ得る上記の問題を克服するために、再生コントローラー間で送信されるメッセージは、生成時間および/またはホライズン時間など、コントローラーを遡及的に同期するのに十分なデータをさらに含み得る。例えば、アップストリームコントローラー508は、再生コントローラーを含み得、そのパブリッシャは、データ328、生成時間348、および/またはホライズン時間506を含むようにメッセージ344を生成および発行する。いくつかの例では、ホライズン時間506は、コンポーネント300の次の実行が、まだ実行されていないアップストリームコンポーネント332の実行の結果によって影響を受け得ないことを示すために、メッセージ344に提供され得る。
【0081】
いくつかの例では、生成時間および/またはホライズン時間は単調に増加することがある。別の例では、ホライズン時間は、期間および/または実行の数を含み得、単調に増加しないことがある。いくつかの例では、ホライズン時間506は、コンポーネント300および/または再生コントローラー500へのメッセージ344の配信の遅延を考慮して調整され得る。いくつかの例では、ホライズン時間は、コンポーネントが実行される最も早い時間を定義し得、および/または次のメッセージが、コンポーネントの実行に応答してコントローラーによって発行される。ホライズン時間は下限であることがあり、つまり、実際の発行時間はホライズン時間よりも遅いことがある。いくつかの例では、再生コントローラー500は、コンポーネント300の実行の結果を含む第1のメッセージと、パブリッシャ342がコンポーネント300の実行に応答して次のメッセージを発行する最も早い推定時間を識別する第1の生成時間とをパブリッシャ342によって発行し得る。いくつかの例では、パブリッシャ342は、タイミングエンフォーサ504が最も早い時間が以前に推定された時間より遅いと決定した場合、コンポーネント300が再び実行されてホライズン時間を更新する前に、第2のメッセージを発行し得る。これにより、フレームワーク全体で計算リソースの使用が最大化され得る。コンポーネント300はまだ再実行されていないので、第2のメッセージは結果の包含をあきらめ得る。
【0082】
場合によっては、タイミングエンフォーサ504は、メッセージを受信すること(すなわち、メッセージベースの実行)および/または期間が前回の時間ベースの実行以降に経過したと判定すること(すなわち、時間ベースの実行)に少なくとも部分的に基づいて、コンポーネント300を(例えば、実行入力インターフェース312を介して)実行させ得る。コンポーネントの実行は、実行が発生する時間(メッセージベースの実行または時間ベースの実行、あるいはその両方)、実行直前のコンポーネントの内部状態、および初期化入力インターフェース310を介して、実行中/実行時にコンポーネント300に提供される一連のメッセージによって定義され得る。タイミングエンフォーサ504は、コンポーネント300が同期されることを遡及的に保証するための規則で構成され得る。ルールは、(1)将来のイベントが実行が発生する時間を変更できなかった(例えば、実行はタイムセーフ(time-safe)である)、(2)将来のイベントが実行時/実行中にコンポーネントに提示されるメッセージのセットを変更できなかった(例えば、実行はメッセージセーフ(message-safe)である)、および(3)将来のイベントが実行の直前にコンポーネントが保持する内部状態を変更できなかった(例えば、実行は状態セーフ(state-safe)である)、という決定に応じて、コンポーネント300の実行を発生させることを含み得る。タイミングエンフォーサ504は、タイミングエンフォーサ504がコンポーネント300を実行させると決定するまで、コンポーネント300を一時停止させ得る(例えば、内部状態を維持する、コンポーネント300の内部状態が実行の間で変化するのを防ぐ、および/またはコンポーネント300に関連する命令が実行されるのを防ぐ)。
【0083】
場合によっては、メッセージベースの実行は、コンポーネント300の次の実行をトリガーするサブスクライバからの1つまたは複数のメッセージを受信することに少なくとも部分的に基づき得る。例えば、タイミングエンフォーサ504は、コンポーネント300が、第1および第2の発行コントローラーからメッセージの第1のセットと、第3の発行コントローラーからメッセージの第2のセットとを受信するように構成され得ることを決定し得、コンポーネント300は、どちらかまたは両方のセットを使用して実行し得る。コンポーネント300は、初期化入力インターフェース310を介してメッセージのセットの指示を出力し得る。追加または代替の例では、ログファイル502のイベントのシーケンスは、実行の基礎となったメッセージを示し得る。それにより、タイミングエンフォーサ504は、実行するためにコンポーネント300によって使用可能なメッセージのセットを満たすために、メッセージの受信を「期待」し得る。したがって、タイミングエンフォーサ504は、サブスクライバ326が第1のセットおよび/または第2のセットを満たすためにすべてのメッセージを受信したと決定すると、コンポーネント300を実行させ得る。タイミングエンフォーサ504はまた、第1のセットおよび/または第2のセットを満たすメッセージを、初期化入力インターフェース310を介してコンポーネント300に提供し得る。場合によっては、セットは、単一のパブリッシャからの単一のメッセージを含み得るが、セットは、単一のパブリッシャおよび/または複数のパブリッシャからの複数のメッセージを含み得ることが企図される。
【0084】
いくつかの例では、タイミングエンフォーサ504は、次の時間ベースの実行の時間またはホライズン時間と次のメッセージ発行時間とのうちのより短い時間の最小時間を決定することに少なくとも部分的に基づいて、コンポーネントを実行させる次の時間を追加的または代替的に決定し得る)。これは次のように表すことができる:(次の実行時間)=min((次のタイミングベースの実行)∪(min((ホライズン時間、次のメッセージ発行時間):実行をトリガーするパブリッシャごとに)))。
【0085】
場合によっては、タイミングエンフォーサ504は、追加的または代替的に、タイミングエンフォーサ504がコンポーネント300の実行を発生させ、および/または許可し得る期間(510)を決定し得る。例えば、タイミングエンフォーサ504は、期間の満了まで、コンポーネント300を1回または複数回実行させ得る。場合によっては、タイミングエンフォーサ504は、期間がホライズン時間506に対応すると決定し得る。しかしながら、異なるホライズン時間を含み得る複数のメッセージがサブスクライバ326で受信され得る。例えば、図5は、500ミリ秒のホライズン時間514を含む512で第1のメッセージを受信し、300ミリ秒のホライズン時間518を含む516で第2のメッセージを受信することを示す。この例では、タイミングエンフォーサ504を構成する規則は、コンポーネント300を実行する期間が、最小時間であるため、300ミリ秒のホライズン時間518以下であり得ると決定し得る。これは、コンポーネント300を300ミリ秒より長く実行すると、実行の時間安全性、メッセージ安全性、および/または実行安全性を損なうリスクが生じ得るためである。いくつかの例では、タイミングエンフォーサ504は、次の実行がまだ受信されていないメッセージを使用する場合、期間がまだ満了していない場合でも、コンポーネント300が実行されるのを防ぎ得る。
【0086】
場合によっては、タイミングエンフォーサ504は、ログファイル502から読み出されたメッセージおよび/またはイベントのシーケンスに関連する生成時間および/またはホライズン時間に少なくとも部分的に基づいて、入力としてコンポーネント300に提供されるメッセージおよび/またはメッセージのセットを追加的または代替的に順序付けし得る。例えば、アップストリームコンポーネント332は、コンポーネント300よりも迅速かつ/または定期的に実行し得、したがって、サブスクライバ326は、コンポーネント300の次の実行の前に、アップストリームコントローラー508からの複数のメッセージを有し得る。タイミングエンフォーサ504は、生成時間の昇順でメッセージがコンポーネントに提供されることを保証し得る。追加のまたは代替の例では、タイミングエンフォーサ504は、ログファイルからのイベントのシーケンスに対応する順序でメッセージをコンポーネント300に提供し得る。いくつかの例では、タイミングエンフォーサ504は、追加的または代替的に、コンポーネント300の実行を発生させ、および/またはイベントのシーケンス620に従ってメッセージの発行を発生させ得る。
【0087】
いくつかの例では、タイミングエンフォーサ504は、ログファイル502のイベントのシーケンスによって参照される1つまたは複数のメッセージ510を決定し得、データストアからメッセージ510を読み出し得、イベントのシーケンスに従ってコンポーネント300にメッセージ510を提供し得る。例えば、タイミングエンフォーサ504は、ログファイル502に格納された再現性メッセージの識別子が、コンポーネント300の次の実行に対応すること(例えば、コンポーネント300の次の実行は200番目の実行であり、タイミングエンフォーサ504は、ログファイル502が200番目の実行に関連する再現性メッセージを含むことを決定する)、および再現性メッセージがメッセージ510およびその順序を識別することを決定し得る。使用例に応じて、再生コントローラー500は、アップストリームコントローラーからのメッセージ510の受信を待機し得(フレームワークは決定論的であるため、アップストリームコントローラーは、メッセージ510と同じ識別子を有するメッセージを発行する)、および/または再生コントローラー500は、メモリ(例えば、データストア356)からメッセージ510を読み取り得る。タイミングエンフォーサ504は、メッセージ510を入力として提供する順序を決定し得る。さらに、メッセージ510がオンラインコントローラー320によって発行されたメッセージを含む場合、コンポーネント300が変更されていると、以下で説明するように、オンラインコントローラー320によって以前に発行された(およびメッセージ510に含まれた)メッセージは、コンポーネント300の同じ実行(例えば、上記の例では200番目の実行)について、読み出され、コンポーネント300の結果と比較され得る。
【0088】
いくつかの例では、タイミングエンフォーサ504は、追加的または代替的に、ログファイル502(および/またはデータストア356)からの他のデータを、イベントのシーケンスによって指定された順序でコンポーネント300に提供させ得る。例えば、これは、コンポーネント300への入力として、センサーデータ、非決定論的値、クロック信号、コンポーネントの結果などを提供することを含み得る。これは、再生コントローラー500を含むフレームワークが、コンポーネント300を含むシステムの動作中に発生したシナリオを決定論的に再生することを可能にし得る。
【0089】
場合によっては、イベントのシーケンスは、記録されたシーケンスの代わりに、またはそれに加えて、ユーザーによって定義され得る。さらに、ログファイル502に含まれるデータは、オンラインコントローラー、データを定義するユーザー、および/またはシミュレーションコンポーネントから提供され得る。例えば、シミュレーションコンポーネントは、センサーデータおよび/またはコンポーネント300を含むシステムの出力に対する自律走行車の応答をシミュレートするように構成され得る。例えば、シミュレーションコンポーネントは、コンポーネント300を含むシステムのフィードバックループの一部を形成し得る。シミュレーションコンポーネント自体が、コントローラーに関連付けられ得る。
【0090】
図6は、コンポーネント300、入力/出力インターフェース302、第1のコントローラー600、調整コントローラー602、他のコントローラー604(1)-(x)およびそれらに関連付けられたコンポーネント606(1)-(x)、および非調整コンポーネント608を含むフレームワーク実装のブロック図を示す。
【0091】
いくつかの例では、調整コントローラー602は、特定のコンポーネントに関連付けられる代わりに、複数のコントローラー間のアクションを調整し得る。例えば、調整コントローラー602は、他のコントローラー604(1)-(x)からメッセージ610を受信し得、メッセージ610が適切なサブスクライバにルーティングされることを確実にし得る。いくつかの例では、フレームワークのインスタンス化時に、調整コントローラー602は、コントローラー(例えば、第1のコントローラー600および/または他のコントローラー604(1)-(x)のいずれか)からパラメータセットを要求し得る。第1のコントローラー600は、コンポーネント300の入力、実行、および/または出力特性を確認するためにコンポーネント300に問い合わせることに少なくとも部分的に基づいてパラメータセットを生成し得る。第1のコントローラー600は、入力、実行、および/または出力特性の少なくとも一部を保持し得、調整コントローラー602に、コンポーネント300が実行するために使用する入力(例えば、コンポーネントがサブスクライブする他のコンポーネント、コンポーネント300が消費するメッセージ、コンポーネント300が消費する非決定論的変数)、コンポーネントが生成する出力(例えば、メッセージのタイプ、コンポーネント300がメッセージを出力するサブスクライバ)などを指定するパラメータセットを送信し得る。例えば、コンポーネント300が実行するために使用する入力は、コンポーネント300が出力を生成するために消費するメッセージのセットおよび/または非決定論的変数の識別子を含み得る。パラメータセットは、例えば、初期化遅延、(所与の処理周波数での)平均実行時間など、コンポーネント300に関連する遅延時間をさらに含み得る。
【0092】
コントローラーから受信されたパラメータセットは、パイプライン構成に従ってコントローラー間でメッセージをルーティングするように調整コントローラー602を構成するのに十分であり得る。しかしながら、コンポーネントを処理パイプラインフローにさらに依存しないようにするために、調整コントローラー602は、データ処理パイプライン構成を指定する構成を受信し得る。例えば、構成は、フロー内のコンポーネント/コントローラーの相互の相対位置を定義するpub-subパターンを識別し得る(例えば、コンポーネント300がサブスクライブするコンポーネント、コンポーネント300が発行するコンポーネント)。
【0093】
パラメータセットおよび/または構成に少なくとも部分的に基づいて、調整コントローラー602は、他のコントローラー604(1)-(x)から受信したメッセージ610を適切なサブスクライビングコントローラーにルーティングし得る。場合によっては、コンポーネント300に関連付けられたパラメータセットは、実行のための入力としてコンポーネント300によって消費可能なメッセージのセットに対応するものとして識別されたメッセージを収集するように調整コントローラー602を構成し得る。調整コントローラー602は、収集されたメッセージがメッセージのセットを満たすと調整コントローラー602が決定するまでメッセージを収集し得、その時点で、調整コントローラー602は、収集されたメッセージのセット612をコンポーネント300に関連する第1のコントローラー600に送信し得る。いくつかの例では、調整コントローラー602は、メッセージに関連する生成時間、メッセージに関連するホライズン時間、および/またはログファイルに保存されたおよび/またはユーザーによって提供されたイベントのシーケンスに少なくとも部分的に基づいて、第1のコントローラー600へのメッセージの発行を追加的または代替的に遅延させ、および/またはそうでなければ時間を決め得る。例えば、調整コントローラー602は、調整コントローラー602が入力/出力インターフェース302と直接相互作用しないが、むしろ命令および/またはメッセージを第1のコントローラー600に送信し得、次に、入力/出力インターフェース302を介してコンポーネント300にメッセージおよび/または命令を提供し得ることを除いて、上記と実質的に同じ動作を達成するタイミングエンフォーサ504を備え得る。
【0094】
いくつかの例では、調整コントローラー602は、追加的または代替的に、メッセージ614を非調整コンポーネント608と交換し得る。非調整コンポーネント608は、決定論的コンポーネントであり得るか、入力/出力インターフェース302を含み得ないか、および/または調整コントローラー602以外のコントローラーに関連付けられ得ない。いくつかの例では、コントローラー間でpub-subネットワークを介して送信されるメッセージは、非調整コンポーネント608間で送信されるメッセージとフォーマットが異なり得る。さらに、非調整コンポーネント608は、調整コンポーネント(例えば、この例におけるコンポーネント300および/またはコンポーネント606(1)-(x))とは異なるpub-subネットワークのチャネルおよび/またはトピックを介してメッセージを交換し得る。
【0095】
いくつかの例では、調整コントローラー602は、コントローラーからメッセージを受信し得、メッセージを非調整コンポーネントにルーティングする必要があると判断し得(メッセージが調整コンポーネント用にフォーマットされている場合でも)、メッセージを非調整メッセージタイプに変換し得、および/または変換されたメッセージ614を非調整コンポーネントに発行し得る(例えば、pub-subアーキテクチャの非調整コンポーネント部分を介して)。いくつかの例では、メッセージを変換することは、元のメッセージが第1のネットワークチャネルおよび/または第1のトピックを介して受信されたときに第2のネットワークチャネルおよび/または第2のトピックを介して変換されたメッセージを発行すること、および/または調整されたコンポーネントに関連する情報を削除すること(たとえば、ホライズン時間を削除すること、入力/出力インターフェースと対話するための命令を削除すること、入力/出力インターフェースへの参照を削除すること)を含み得る。調整コントローラー602は、非調整コンポーネント608から受信されたメッセージに対してこのプロセスを逆に実施し得る(例えば、調整コントローラー602は、受信時間を、非調整コンポーネントから受信されたメッセージと関連付け得、調整コントローラー602は、pub-subアーキテクチャの調整された部分を介してメッセージを発行し得る)。いくつかの例では、非調整コンポーネント608はコントローラーに関連付けられていないので、調整コントローラー602は、時間安全性および/またはメッセージ安全性が非調整コンポーネント608で違反しないように、非調整コンポーネントにメッセージを提供する時間を決定し得る。
【0096】
いくつかの例では、調整コントローラー602は、調整コントローラー602に関連付けられたコントローラーから受信したパラメータセットを発行すること、およびパラメータセットを他のすべての調整コントローラーから受信するまで他の調整コントローラーからパラメータセットを受信することによって、パイプライン構成のマッピングを発見するための発見動作を実行し得る。
【0097】
(例示的な処理)
図7は、本明細書で論じられるフレームワークを使用してシステムの性能を調整するための例示的なプロセス700の流れ図を示す。システムは、第1のコンポーネント、および/または例えば、プロセッサ実行可能命令、機械学習モデル、および/またはハードウェアなどの他のコンポーネントを含む第1のシステムであり得る。場合によっては、チューニングモデル、調整コントローラー、入力/出力インターフェース、および/または本明細書で論じられる任意のタイプのコントローラーは、例示的なプロセス700の全部または一部を実行し得る。
【0098】
動作702において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、センサーデータおよび/またはイベントのシーケンスを受信することを含み得る。例えば、センサーデータおよび/またはイベントのシーケンスは、ログファイルに格納され得る。いくつかの例では、オンラインコントローラーは、コンポーネントのオンライン動作中にコンポーネントの動作を監視することに少なくとも部分的に基づいて、センサーデータおよび/またはイベントのシーケンスを格納し得る。ログファイルは、1つまたは複数のオンラインコントローラーおよび/またはそれに関連するコンポーネントによって生成され得ることが企図される。追加または代替の例では、センサーデータは、フレームワークによって動作されるコンポーネントによって生成されたシミュレートされたセンサーデータを含み得る。言い換えると、フレームワークのコンポーネントの1つは、フレームワークの他のコンポーネントに対する入力として使用されるデータを生成するシミュレータであり得る。いくつかの例では、少なくとも1つのコンポーネントがソースであり得(例えば、コンポーネントが出力を生成し、入力を消費しない)、および/または少なくとも1つのコンポーネントがシンク(sink)であり得る(例えば、コンポーネントが入力を受け取るが、出力を生成しない)。
【0099】
動作704において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、第1のシステムのコンポーネントをイベントのシーケンスに従って動作させることに少なくとも部分的に基づいて、第1のシステムによってセンサーデータを処理することを含み得る。例えば、第1のシステムのコンポーネントは、上述した規則を実施する再生コントローラー(または任意の他のタイプのコントローラー)に関連付けられ得(例えば、タイミングエンフォーサを介して、生成時間、ホライズン時間などのメッセージデータ)、センサーデータおよび/またはイベントのシーケンスが保存されたときに第1のシステムがセンサーデータを処理したときの第1のシステムの動作の決定論的再現を達成する。いくつかの例では、動作704が達成されるために、本明細書で論じられるフレームワークは、最初に、入力/出力インターフェースおよび/または第1のシステムの非調整コンポーネントとともに調整コントローラーを含むコンポーネントのものと関連付けられたコントローラーによってインスタンス化され得る。いくつかの例では、インスタンス化は、動作704の前に発生し得、上記で論じたように、パラメータセットおよび/または構成を受信することをさらに含み得る。
【0100】
第1のコンポーネントおよび他のコンポーネントをイベントのシーケンスに従って動作させることは、コンポーネントの実行が決定論的出力を生成するように、第1のシステムのコンポーネントへの入力、出力、および/または実行状態を制御することを含み得る。これは、本明細書で論じられるフレームワークが、同じセンサーデータおよび/または同じイベントのシーケンスがフレームワークによって調整される第1のシステムに提供されるたびに、第1のシステムに同じ出力を生成させることを意味する。
【0101】
動作706において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、第1のシステムによってセンサーデータを処理することに少なくとも部分的に基づいて、第1の出力を受信することを含み得る。例えば、第1の出力は、システム全体の出力であり得、これは、第1のシステムの最後のレイヤのコンポーネントの出力であり得る(すなわち、最も下流でありデータ処理パイプラインのフローで出力を生成する最後であるコンポーネントのレイヤ)。別の例では、第1の出力は、調整手順のターゲットに応じて、特定のコンポーネントの出力であり得る。いくつかの例では、特定のコンポーネントのパフォーマンスを改善すると実際にはシステム全体のパフォーマンスが損なわれる可能性があるため、第1の出力はシステムの出力である場合がある。たとえば、特定のコンポーネントがより適切に動作する場合でも、パイプラインの複雑さによってわかりにくくなったという理由で、より長く動作したり、システムの正確さおよび/または精度を低下せる出力を作成したりする場合がある(例えば、ニューラルネットワークおよび/または他の機械学習モデルが、隠されたレイヤ、および/または変更された入力によって刺激され得、出力に変動を引き起こす可能性のある活性化機能を含み得る)。非限定的な例として、新しい検出コンポーネントは、以前のバージョンよりも歩行者の検出率が高いが、オブジェクト全体の検出率は低いことがある。
【0102】
動作708において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、第1の出力に関連する第1のメトリックを決定することを含み得る。例えば、メトリックは、第1の出力に関連する、正確さ、精度、PR曲線、ROC曲線、待ち時間、反応時間(例えば、オブジェクトおよび/またはトラックを識別する前の実行の数)、および/または加速度(例えば、横方向加速度が横方向加速度閾値を満たすかまたは超えているか、前方加速度が車両の知覚された「ジャーク」に関連する前方加速度閾値を満たすかまたは超えているか)などを含み得る。これらのメトリックは、グラウンドトゥルースが知られている可能性のあるさまざまなコンポーネントのパフォーマンスを計量するのに適している場合があるが、追加または代替のメトリクスが、出力および/または任意の入力、グラウンドトゥルースなどに基づいてシステムのパフォーマンスを計量するのに適している場合がある。
【0103】
動作710において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、代替のコンポーネントが利用可能であるかどうかを決定することを含み得る。たとえば、コンポーネントが変更されると、たとえば、ソースコードの開発者による更新、ハードウェアの変更によって、および/または追加の機械学習トレーニング技術によって、変更されたコンポーネントがリポジトリに保存され得る。変更されたコンポーネントは、バージョン管理および/または他の識別子データに関連して格納され得、その結果、動作710において、例示的なプロセス700は、コンポーネントの変更されたバージョンがリポジトリに格納されるかどうかを決定し得る。
【0104】
いくつかの例では、代替コンポーネントが利用できない場合、例示的なプロセスは動作712に遷移し得る。動作712において、例示的なプロセス700は、第1のメトリックが閾値メトリックを満たすかまたは超えているかを決定することを含み得る。閾値メトリックを満たすかまたは超えていることは、第1のシステムの適切なパフォーマンスを示し得る。動作712が、第1のメトリックが閾値メトリックを満たすかまたは超えると判定した場合、例示的なプロセス700は、動作702に戻り得、これは、新しいセンサーデータおよび/またはイベントの新しいシーケンスを受信することを含み得る。
【0105】
しかしながら、閾値が閾値メトリックを満たさず、代替コンポーネントが利用可能でない場合、例示的なプロセスは、動作714に遷移し得る。動作714において、例示的なプロセス700は、第1のシステムが閾値メトリックを満たさないことをユーザーに通知するために、ユーザーインターフェースを介して通知を表示させることを含み得る。追加的または代替的に、動作714は、第1のメトリックがシステムの出力に関連付けられたときに第1のシステムの特定のコンポーネントに関連付けられたメトリックを決定すること、および/またはメトリックが閾値メトリックを満たすかまたは超えるかを判定することを含み得る。
【0106】
動作710に戻ると、動作710は、代替コンポーネントが利用可能であると決定し得る。例えば、この決定は、コンポーネントの修正されたバージョンがリポジトリで利用可能であるという決定、および/またはパイプラインの構成への変更を示す指示がユーザーインターフェースから受信されたという決定を含み得る。追加または代替の例では、ユーザーは、代替コンポーネントを直接供給し得る(例えば、例示的なプロセス700を実行するコンピューティングデバイスにアクセス可能なメモリにコンポーネントを格納すること、およびコンポーネントに関連付けられたアドレスへのポインタを提供することによって、物理的にハードウェアを変更することによって、ASICおよび/またはFPGAのメモリをフラッシュすることによって)。代替コンポーネントが利用可能であると決定することに少なくとも部分的に基づいて、例示的なプロセス700は、動作712に遷移し得る。
【0107】
動作716において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、第1のシステムの第1のコンポーネントを第2のコンポーネントで置き換えて、第2のシステムを形成することを含み得る。したがって、第2のシステムは、第2のコンポーネントと第1のシステムの他のコンポーネントとを含み得る。いくつかの例では、動作716は、実験的制御を維持するために一度に1つのコンポーネントを置き換え得るが、他の置き換え戦略が企図されている。例えば、第2のコンポーネントが第1のシステムに存在しない追加のコンポーネントからの入力を必要とする場合、第1のコンポーネントを第2のコンポーネントで置き換えることは、第1のコンポーネントを第2のコンポーネントと交換すること、および追加のコンポーネントをシステムに追加すること、および/または第1のシステムの別のコンポーネントを追加のコンポーネントで置き換えることを含み得る。一度に複数のコンポーネントを変更し得ることが企図されている。
【0108】
いくつかの例では、動作716は、追加的または代替的に、第1のコンポーネントを第2のコンポーネントで置き換える前に、置き換えのユーザー許可を求めることを含み得る。別の例では、動作716は、代替コンポーネントが動作710で利用可能であると決定することに少なくとも部分的に基づいて、ユーザー入力なしで置き換えおよび後続の動作を自動的に生じさせることを含み得る。例えば、例示的なプロセス700は完全に自動化され得る。例えば、自律走行車は、センサーデータおよび/またはイベントのシーケンスを定期的に記録し、リモートリポジトリをチェックし、および/またはセンサーデータおよび/またはイベントのシーケンスをリポジトリを含むリモートデバイスに送信し得る。次に、リモートデバイスは、例示的なプロセス700を自動的に実行し得る。
【0109】
動作718において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、第2のシステムのコンポーネントをイベントのシーケンスに従って動作させることに少なくとも部分的に基づいて、第2のシステムによってセンサーデータを処理することを含み得る。フレームワークのコントローラー、入力/出力インターフェース、および/または調整コントローラーは、動作704で行ったように動作し得るが、コントローラーの1つは、第1のコンポーネントの代わりに第2のコンポーネントを制御する。いくつかの例では、コントローラーはこの変更にとらわれず、追加のデータを必要としない場合がある。
【0110】
動作720において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、第2のシステムによってセンサーデータを処理することに少なくとも部分的に基づいて、第2の出力を受信することを含み得る。フレームワークは、第1のコンポーネントを第2のコンポーネントと交換することによって、第1のシステムと第2のシステムの両方が決定論的に動作することを可能にするので、第1の出力と第2の出力との間の差異は交換に起因し得る。これにより、フレームワークなしでは不可能な方法でシステムのパフォーマンスを調整することを可能にする。
【0111】
いくつかの例では、フレームワークがシステムを決定論的に動作させるので、第1の出力および第2の出力は、同じ識別子に関連付けられ得る(例えば、上記で定義された、それぞれの出力を含むメッセージに関連付けられた同じ生成時間)。場合によっては、チューニングモデルは、再生コントローラーから第1のメッセージを受信し(例えば、オンラインコントローラーの動作中にキャプチャされたシステムおよび/またはコンポーネントの動作の再生中に)、データストアから、第1のメッセージと同じ生成時間(または他の識別子)を持つオンラインコントローラーの動作中に記録された第2のメッセージを識別し得る。チューニングモデルは、次に、第1のメッセージの第1の出力と第2のメッセージの第2の出力とを比較し、および/または以下でさらに説明するように、第1のメッセージおよび第2のメッセージに関連する1つまたは複数のメトリックを決定し得る。
【0112】
動作722において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、第2の出力に関連する第2のメトリックを決定することを含み得る。
【0113】
動作724において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、第2のメトリックが第1のメトリックに対する改善であるかどうかを決定し得る。第2のメトリックが第1のメトリックに対する改善ではない場合、例示的なプロセス700は、動作702に戻り得る。追加的または代替的に、例示的なプロセス700は、第2のコンポーネントに関連して、第2のメトリックが第1のメトリックおよび/または閾値メトリックに対する改善ではなかったという指示を格納し得る。第2のメトリックが第1のメトリック(および/または閾値メトリック)に対する改善である場合、例示的なプロセス700は、動作726に遷移し得る。第2のメトリックは、第1のメトリックに対する改善であり得、第2のメトリックは、第1のメトリックによって示される正確さおよび/または精度を満たすかまたは超える正確さおよび/または精度を示し、第2のメトリックは、第1のメトリックによって示されるPR曲線、ROC曲線、および/または加速度よりも曲線により密接に一致するPR曲線、ROC曲線、および/または加速度を示し、および/または第2のメトリックは、第1のメトリックによって示される待ち時間および/または反応時間よりも短い待ち時間および/または反応時間を示す。メトリックは、システムおよび/またはコンポーネントのパフォーマンスの他の指標を含み得、したがって、あるメトリック値の別のものに対する改善は、メトリックタイプに応じて変化することが理解される(たとえば、改善は、ときどきより大きな値、ときどきより小さい値、ときどき標準および/または閾値へのより高い適合度によって示される)。メトリックが複数のタイプのメトリックを示すいくつかの例では、さまざまなメトリックは重み付けされ得、差異の重み付き合計が計算され、第2のメトリックが第1のメトリックに対する改善であるかどうかを判定し得る。
【0114】
動作726において、例示的なプロセス700は、本明細書で論じられる技術のいずれかに従って、自律走行車に、第1のコンポーネントを第2のコンポーネントと交換するための命令を送信することを含み得る。
【0115】
(例示的なアーキテクチャ)
図8は、本明細書で論じられるフレームワークを実装する例示的なアーキテクチャのブロック図を示す。場合によっては、システム800は、図1の自律走行車102に対応し得る車両802を含み得る。いくつかの例では、車両802は、米国道路交通安全局が発行したレベル5の分類に従って動作するように構成された自律走行車であり得、これは、トリップ全体ですべての安全上重要な機能を実行することができる車両を記述したものであり、運転者(または乗員)はどんなときでも車両を制御することを期待されていない。しかしながら、他の例では、車両802は、他のレベルまたは分類を有する完全にまたは部分的な自律走行車であり得る。さらに、場合によっては、本明細書に記載の技術は、非自律走行車によっても使用可能であり得る。
【0116】
車両802は、車両コンピューティングデバイス804、1つまたは複数のセンサー806、1つまたは複数のエミッター808、1つまたは複数のネットワークインターフェース810、少なくとも1つおよび/または1つまたは複数の駆動モジュール812を含み得る。
【0117】
場合によっては、センサー806は、光検出および測距(LIDAR)センサー、RADARセンサー、超音波トランスデューサ、ソナーセンサー、位置センサー(例えば、グローバルポジショニングシステム(GPS)、コンパスなど)、慣性センサー(例えば、慣性測定ユニット(IMU)、加速度計、磁気計、ジャイロスコープなど)、カメラ(例えば、赤-緑-青(RGB)、赤外線(IR)、強度、深度、飛行時間など)、マイク、ホイールエンコーダ、環境センサー(例えば、温度センサー、湿度センサー、光センサー、圧力センサーなど)、などを含み得る。センサー806は、これらまたは他のタイプのセンサーのそれぞれの複数のインスタンスを含み得る。例えば、ライダーセンサーは、車両802の角部、前部、後部、側部、および/または上部に位置する個々のライダーセンサーを含み得る。別の例として、カメラは、車両802の外部および/または内部に関する様々な場所に配置された複数のカメラを含み得る。センサー806は、車両コンピューティングデバイス804に入力を提供し得る。
【0118】
車両802はまた、上記のように、光および/または音を放出するためのエミッター808を含み得る。この例におけるエミッター808は、車両802の乗客と通信するための内部オーディオおよびビジュアルエミッターを含み得る。限定ではなく例として、内部エミッターは、スピーカー、ライト、標識、ディスプレイスクリーン、タッチスクリーン、触覚エミッター(例えば、振動および/または力フィードバック)、機械的アクチュエータ(例えば、シートベルトテンショナー、シートポジショナー、ヘッドレストポジショナーなど)などを含み得る。この例におけるエミッター808はまた、外部エミッターを含み得る。限定ではなく例として、この例における外部エミッターは、進行方向を信号で伝えるためのライトまたは車両動作の他のインジケータ(例えば、インジケータライト、標識、ライトアレイなど)、および歩行者または他の近くの車両と聴覚的に通信するための1つまたは複数のオーディオエミッター(例えば、スピーカー、スピーカーアレイ、ホーンなど)を含み得、それらの1つまたは複数は、音響ビームステアリング技術を含む。
【0119】
車両802はまた、車両802と1つまたは複数の他のローカルまたはリモートコンピューティングデバイスとの間の通信を可能にするネットワークインターフェース810を含み得る。例えば、ネットワークインターフェース810は、車両802および/または駆動モジュール812上の他のローカルコンピューティングデバイスとの通信を容易にし得る。また、ネットワークインターフェース810は、追加的または代替的に、車両が他の近くのコンピューティングデバイス(例えば、他の近くの車両、交通信号など)と通信することを可能にし得る。ネットワークインターフェース810は、追加的または代替的に、車両802がコンピューティングデバイス814と通信することを可能にし得る。
【0120】
ネットワークインターフェース810は、車両コンピューティングデバイス804を別のコンピューティングデバイスまたはネットワーク816などのネットワークに接続するための物理的および/または論理的インターフェースを含み得る。例えば、ネットワークインターフェース810は、IEEE800.11規格によって定義された周波数、ブルートゥース(登録商標)などの短距離無線周波数、セルラー通信(例えば、2G、3G、4G、4G LTE、5Gなど)、またはそれぞれのコンピューティングデバイスが他のコンピューティングデバイスとインターフェースできるようにする適切な有線または無線通信プロトコルを介するなどのWi-Fiベースの通信を可能にし得る。場合によっては、車両コンピューティングデバイス804および/またはセンサー806は、所定の期間の経過後、ほぼリアルタイムで、など、ネットワーク816を介して、特定の周波数でセンサーデータをコンピューティングデバイス814に送信し得る。
【0121】
場合によっては、車両802は、1つまたは複数の駆動モジュール812を含み得る。場合によっては、車両802は、単一の駆動モジュール812を有し得る。場合によっては、駆動モジュール812は、駆動モジュール812および/または車両802の周囲の状態を検出するための1つまたは複数のセンサーを含み得る。限定ではなく例として、駆動モジュール812のセンサーは、駆動モジュールの車輪の回転を感知するための1つまたは複数のホイールエンコーダ(例えば、回転エンコーダ)、ドライブモジュール、カメラまたはその他の画像センサーの方向と加速度を測定する慣性センサー(例えば、慣性測定ユニット、加速度計、ジャイロスコープ、磁気計など)、ドライブモジュールの周囲のオブジェクトを音響的に検出する超音波センサー、LIDARセンサー、RADARセンサーなどを含み得る。ホイールエンコーダなどの一部のセンサーは、駆動モジュール812に固有のものであり得る。場合によっては、駆動モジュール812上のセンサーは、車両802の対応するシステム(例えば、センサー806)と重複するか、または補足し得る。
【0122】
駆動モジュール812は、高電圧バッテリー、車両を推進するモーター、バッテリーからの直流電流を他の車両システムによって利用される交流電流へと変換するインバーター、ステアリングモーターおよびステアリングラック(これは、電動であってよい)を含むステアリングシステム、油圧または電気アクチュエータを含むブレーキシステム、油圧および/または空気圧コンポーネントを含むサスペンションシステム、トラクションの損失を軽減し、且つ制御を維持するよう制動力の分散をするスタビリティー制御システム、HVACシステム、照明(例えば、車両の外部周囲を照らすヘッド/テールライトなどの照明)、および1つまたは複数の他のシステム(例えば、冷却システム、安全システム、車載充電システム、DC/DCコンバーター、高電圧ジャンクション、高電圧ケーブル、充電システム、充電ポートなどのその他の電装コンポーネント)を含む多くの車両システムを含み得る。さらに、駆動モジュール812は、センサーからデータを受信し、および前処理をし得る駆動モジュールコントローラーを含み、さまざまな車両システムの動作を制御し得る。場合によっては、駆動モジュールコントローラーは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサと通信可能に結合されたメモリとを含み得る。メモリは、1つまたは複数のモジュールを格納し、駆動モジュール812のさまざまな機能を実行し得る。さらに、駆動モジュール812はまた、それぞれの駆動モジュールによって、1つまたは複数の他のローカルまたはリモートのコンピューティングデバイスと通信を可能にする1つまたは複数の通信接続を含み得る。
【0123】
車両コンピューティングデバイス804は、1つまたは複数のプロセッサ818、および1つまたは複数のプロセッサ818と通信可能に結合されたメモリ820を含み得る。コンピューティングデバイス814はまた、プロセッサ822、および/またはメモリ824を含み得る。プロセッサ818および/または822は、データを処理し、本明細書に記載されるような動作を実行するための命令を実行することができる任意の適切なプロセッサであり得る。限定ではなく例として、プロセッサ818および/または822は、1つまたは複数の中央処理装置(CPU)、グラフィックス処理装置(GPU)、集積回路(例えば、特定用途向け集積回路(ASIC)など)、ゲートアレイ(例えば、フィールドプログラマブルゲートアレイ(FPGA)など)、および/または電子データを処理してその電子データを、レジスタおよび/またはメモリに格納され得る他の電子データに変換する他のデバイスまたはデバイスの一部を含み得る。
【0124】
メモリ820および/または824は、非一時的なコンピュータ可読媒体の例であり得る。メモリ820および/または824は、オペレーティングシステムおよび1つまたは複数のソフトウェアアプリケーション、命令、プログラム、および/またはデータを格納し、本明細書で説明される方法およびさまざまなシステムに起因する機能を実装し得る。さまざまな実装において、メモリは、スタティックランダムアクセスメモリ(SRAM)、シンクロナスダイナミックRAM(SDRAM)、不揮発性/フラッシュタイプメモリ、または情報を格納可能な任意の他のタイプのメモリなど、適切なメモリ技術を用いて実装され得る。本明細書で説明される、アーキテクチャ、システム、および個々のエレメントは、他の多くの論理的、プログラム的、および物理的なコンポーネントを含んでよく、それらのうちの添付図面に示されるものは、単に本明細書での説明に関連する例示に過ぎない。
【0125】
場合によっては、メモリ820および/またはメモリ824は、例えば、一次知覚システム、二次知覚システム、予測システム、ローカリゼーションシステム、マッピングシステム、計画システム、乗車管理システムなどのコンポーネントなどのコンポーネント826および/または834を格納し得る。これらの(および他の)システムは、データ処理パイプラインを構成するさまざまなコンポーネントを含み得る。コンポーネント826および/または834は、メモリ820および/または824に格納されているように示されているが、コンポーネント826および/または834は、プロセッサ実行可能命令、機械学習モデル(例えば、ニューラルネットワーク)、および/またはハードウェアを含み得る。いくつかの例では、本明細書で論じられるフレームワークに従って調整されるべきコンポーネント826および/または834は、入力/出力インターフェース302を含むように構成され得る。
【0126】
本明細書で説明するように、例示的なニューラルネットワークは、入力データを一連の接続されたレイヤに渡して出力を生成する生物学的に着想を得たアルゴリズムである。ニューラルネットワークの各レイヤは、別のニューラルネットワークも含むことができ、または任意の数のレイヤ(畳み込みかどうかに関係なく)を含むことができる。本開示の文脈で理解できるように、ニューラルネットワークは、機械学習を利用でき、これは、学習されたパラメータに基づいて出力が生成されるそのようなアルゴリズムの広範囲のクラスを指すことができる。
【0127】
ニューラルネットワークのコンテキストで説明されているが、この開示と一致して、任意のタイプの機械学習を使用することができる。例えば、機械学習アルゴリズムは、限定はされないが、回帰アルゴリズム(例えば、通常最小二乗回帰(OLSR)、線形回帰、ロジスティック回帰、段階的回帰、多変量適応回帰スプライン(MARS)、ローカル的推定スキャッタープロットの平滑化(LOESS)、例示に基づいたアルゴリズム(例えば、リッジ回帰、最小絶対収縮および選択演算子(LASSO)、弾力ネット、最小角度回帰(LARS)、決定木アルゴリズム(例えば、分類および回帰木(CART)、iterative dichotomiser 3(ID3)、カイ二乗自動相互作用検出(CHAID)、決定切り株、条件付き決定木)、ベイジアンアルゴリズム(例えば、ナイーブベイズ、ガウスナイーブベイズ、多項ナイーブベイズ、Average one-depence estimators(AODE)、ベイジアンビリーフネットワーク(BNN)、ベイジアンネットワーク)、クラスタリングアルゴリズム(例えば、k平均、kメジアン、期待値の最大化(EM)、階層的クラスタリング)、相関ルール学習アルゴリズム(例えば、パーセプトロン、誤差逆伝搬、ホップフィールドネットワーク、動径基底関数ネットワーク(RBFN))、深層学習アルゴリズム(例えば、深層ボルツマンマシン(DBM)、深層ビリーフネットワーク(DBN)、畳み込みニューラルネットワーク(CNN)、積層オートエンコーダ)、次元縮小アルゴリズム(例えば、主成分分析(PCA)、主成分回帰(PCR)、部分最小二乗回帰(PLSR)、サモンマッピング、多次元尺度構成法(MDS)、射影追跡、線形判別分析(LDA)、混合判別分析(MDA)、二次判別分析(QDA)、柔軟判別分析(FDA))、アンサンブルアルゴリズム(例えば、ブースティング、ブートストラップアグリゲーション(バギング)、アダブースト、積層ジェネラリゼーション(ブレンディング)、勾配ブースティングマシン(GBM)、勾配ブースト回帰木(GBRT)、ランダム森)、SVM(サポートベクターマシン)、教師あり学習、教師なし学習、半教師あり学習などを含むことができる。アーキテクチャの追加の例は、ResNet70、ResNet101、VGG、DenseNet、PointNetなどのニューラルネットワークを含む。
【0128】
メモリ820および/または824は、追加的または代替的に、本明細書で論じられるコントローラーのいずれかを含み得るコントローラー828および/または836を格納し得る。例えば、コントローラー828および/または836は、オンラインコントローラー、再生コントローラー、および/または調整コントローラーを含み得る。いくつかの例では、メモリ820および/または824は、例示的なプロセス700の少なくとも一部を実行するように構成され得るチューニングモデル830および/または840を追加的または代替的に格納し得る。例えば、チューニングモデル830は、コンピューティングデバイス814に定期的にクエリを実行して、代替コンポーネント838が利用可能であるかどうかを決定し得る。代替コンポーネント838は、コンポーネント826の修正バージョン、新しいコンポーネント、パイプライン構成の変更などを含み得る。代替コンポーネントが利用可能である場合、チューニングモデル830は、オンラインコントローラーに、代替コンポーネントに対応するコンポーネントを含む車両上のシステムの現在の構成のログファイルを生成させ得る。ログファイルが生成されると、チューニングモデル830は、メモリ824に格納されたチューニングモデル840のログファイルをコンピューティングデバイス814に送信して、例示的なプロセス700を実行し得、および/またはチューニングモデル830は、例示的なプロセス700を車両上で実行し得る。別の例では、チューニングモデル830は、代替コンポーネントの利用可能性に関係なく、ログファイルを定期的に保存し、コンピューティングデバイス814に送信し得る。次に、コンピューティングデバイスは、定期的に受信されるログファイルを使用して、車両上のシステムの現在の構成のパフォーマンスと、代替コンポーネントを組み込んだ第2のシステムのパフォーマンスとの間の差異をテストし得る。
【0129】
メモリ820は、追加的または代替的に、1つまたは複数のシステムコントローラー832を格納し得、これは、車両802のステアリング、推進、ブレーキ、安全、エミッター、通信、および他のシステムを制御するように構成され得る。これらのシステムコントローラー832は、駆動モジュール812および/または車両802の他のコンポーネントの対応するシステムと通信し、および/または制御し得る。
【0130】
場合によっては、コンピューティングデバイス814は、データストア842および/またはロガー844を含み得る。場合によっては、データストア842は、データチャネルを介して発行されたメッセージ(例えば、コンポーネントによる消費のためにコントローラー間で発行されたメッセージ)を格納するように構成され得、ロガー844は、再現性チャネルを介して発行されたメッセージを格納し得る。場合によっては、ロガー844は、それによって受信された再現性メッセージに少なくとも部分的に基づいて、本明細書に記載されるように、追加的または代替的にログファイルを生成し得る。
【0131】
場合によっては、コンポーネント826は、センサーデータを処理し得、それに関連するコントローラー828は、1つまたは複数のネットワーク816を介して、1つまたは複数のコンピューティングデバイスにそれぞれの出力を送信し得る(例えば、特定の頻度で、所定の期間が経過した後、ほぼリアルタイムで、など)。
【0132】
いくつかの例では、コンピューティングデバイス814は、分散コンピューティングシステム(例えば、クラウドコンピューティングアーキテクチャ)の1つまたは複数のノードを含み得る。コンポーネント834に関連付けられたコントローラー836を含むフレームワークは、コンポーネント834の決定論的動作および再現性を維持しながら、コンポーネント834を異種のコンピューティングデバイス上で実行されることを可能にし得る。
【0133】
図8は分散システムとして示されているが、代替の例では、車両802のコンポーネントは、コンピューティングデバイス814に関連付けられ得、および/またはコンピューティングデバイス814のコンポーネントは、車両802に関連付けられ得ることに留意されたい。すなわち、車両802は、コンピューティングデバイス814に関連する1つまたは複数の機能を実行し得、逆もまた同様である。
【0134】
(例示的な節)
A.自律走行車のセンサーからセンサーデータを受信すること、第1のシステムによってセンサーデータを処理し、第1のシステムは、第1のコンポーネントおよび1つまたは複数の他のコンポーネントを含み、処理は、少なくとも部分的に、第1のコンポーネントおよび1つまたは複数の他のコンポーネントの動作を制御することに基づくこと、第1のシステムによるセンサーデータの処理中に第1のコンポーネントに関連付けられた第1のコントローラーから1つまたは複数のメッセージを受信することに少なくとも部分的に基づいてイベントのシーケンスを記録すること、第1のシステムによりセンサーデータを処理することに少なくとも部分的に基づいて、第1の出力を受信すること、第1のコンポーネントを第2のコンポーネントと交換して、第2のコンポーネントおよび1つまたは複数の他のコンポーネントを含む第2のシステムを取得すること、第2のコンポーネントをシーケンスに従って動作させることに少なくとも部分的に基づいて、第2のシステムによってセンサーデータを処理すること、第2のシステムによってセンサーデータを処理することに少なくとも部分的に基づいて、第2の出力を受信すること、および、自律走行車に、第1の出力と第2の出力との間の差を決定することに少なくとも部分的に基づいて、第1のコンポーネントを第2のコンポーネントと交換する命令を送信することを含む方法。
【0135】
B.段落Aの方法であって、イベントは、第1のコンポーネントに入力を提供すること、第1のコンポーネントを実行させること、または第1のコンポーネントから出力を受信することの少なくとも1つを含み、第2のコンポーネントをシーケンスに従って動作させることは、入力を提供すること、出力を送信すること、またはシーケンスによって指定されるように実行することのうちの少なくとも1つを含む。
【0136】
C.段落AまたはBの方法であって、第1の出力に関連する第1のメトリックおよび第2の出力に関連する第2のメトリックのうちの少なくとも1つを決定することをさらに含み、差異を決定することは、第2のメトリックの少なくとも1つが第1のメトリックに対する改善であると決定することを含む。
【0137】
D.段落A-Cのいずれか1つの方法であって、第1のシステムによってセンサーデータを処理することは、第1のコンポーネントに関連する第1のコントローラーで、1つまたは複数のアップストリームに関連する1つまたは複数のアップストリームコントローラーからアップストリームメッセージを受信すること、メッセージはホライズン時間を含み、ホライズン時間はコンポーネントが再実行されるまでの期間を識別すること、第1のコントローラーによって、少なくとも部分的にシーケンスに基づいて、アップストリームメッセージの順序を決定すること、第1のコントローラーによって、少なくとも部分的にホライズン時間に基づいて、期間を決定すること、第1のコントローラーによって、期間中に、順序に従ってコンポーネントへの入力としてアップストリームメッセージを提供すること、第1のコントローラーによって、期間が満了するまで第1のコンポーネントを1回以上実行させること、第1のコントローラーで、第1のコンポーネントの実行に応答する第1のコンポーネントから、出力を受信すること、および、第1のコントローラーによって、1つまたは複数のサブスクライビングコントローラーに、出力、出力をもたらした第1のコンポーネントの個別の実行を識別する生成時間、およびホライズン時間を含む出力メッセージを発行することを含む。
【0138】
E.段落A-Dのいずれか1つの方法であって、1つまたは複数のサブスクライビングコントローラーのうちの1つが、出力メッセージに対する自律走行車の応答をシミュレートするシミュレーションコンポーネントに関連付けられたシミュレーションコントローラーを含む。
【0139】
F.段落Aの方法であって、第1のコンポーネントの個別の実行に少なくとも部分的に基づいて第1のコンポーネントの内部状態を識別するキーフレームを第1のコントローラーから受信することをさらに含み、第2のシステムによってセンサーデータを処理することは、キーフレームで識別された実行と一致する第2のコンポーネントの実行にスキップすること、および、キーフレームによって識別される内部状態と一致するように、第2のコンポーネントの内部状態を設定することを含む。
【0140】
G.1つまたは複数のプロセッサと、第1のコンポーネントと、第1のコンポーネントに関連付けられた第1のコントローラーであって、1つまたは複数のプロセッサによって実行されると、システムに、1つまたは複数の他のコンポーネントの動作に関連する第1のコンポーネントでイベントのシーケンスを受信すること、第1のコントローラーがサブスクライブするアップストリームコントローラーから第1のメッセージを受信することであって、メッセージは、第2のコンポーネントの実行の第1の出力を含むこと、少なくとも部分的にシーケンスに基づいて、1つまたは複数のメッセージの順序を決定することであって、1つまたは複数のメッセージが第1のメッセージを含むこと、第1のコンポーネントへの入力として、順序に従って1つまたは複数のメッセージを提供すること、少なくとも部分的にシーケンスに基づいて、第1のコンポーネントを実行させる時間を決定すること、その時点で、少なくとも部分的に第1のコンポーネントで1つまたは複数のメッセージを受信することに基づいて、第1のコンポーネントを実行させること、第1のコンポーネントの実行に応答して、第1のコンポーネントの出力を受信すること、および、出力を構成するメッセージを、1つまたは複数のサブスクライビングコントローラーに発行すること、を含む動作を実行させる第1のコントローラーとを格納するメモリとを含むシステム。
【0141】
H.段落Gのシステムであって、第1のメッセージは第1のホライズン時間を含み、1つまたは複数のメッセージのうちの少なくとも1つは、第2のホライズン時間を含み、動作は、少なくとも部分的に第1のホライズン時間および第2のホライズン時間に基づいて、第1のコンポーネントを実行できる期間を決定することをさらに含み、この期間は、第1のホライズン時間または第2のホライズンのいずれか短い方であり、第1のコンポーネントはその期間中に実行される。
【0142】
I.段落GまたはHのシステムであって、第1のシステムは、第1のコンポーネントおよび1つまたは複数の他のコンポーネントを含み、メモリは、1つまたは複数のプロセッサによって実行されると、システムに、第1のコンポーネントを第3のコンポーネントに置き換えて、第3のコンポーネントおよび1つまたは複数の他のコンポーネントを含む第2のシステムを取得させ、第3のコンポーネントを使用して第2のシステムに動作を繰り返させる命令をさらに含み、動作は、第3のコンポーネントの実行に応答して、期間中に第3のコンポーネントの第2の出力を受信し、第2の出力を含む第2のメッセージを、1つまたは複数のサブスクライビングコントローラーに発行することを含む。
【0143】
J.段落G-Iのいずれか1つのシステムであって、第1のシステムが、少なくとも部分的に第1のメッセージに基づいて第1の結果を決定し、第2のシステムが、少なくとも部分的に第2のメッセージに基づいて第2の結果を決定し、メモリは、1つまたは複数のプロセッサによって実行されると、プロセッサに、少なくとも部分的に第1の結果に基づいて、第1のメトリックを決定させ、少なくとも部分的に第2の結果に基づいて、第2のメトリックを決定させ、そして、自律走行車に、第2のメトリックが第1のメトリックに対する改善であると少なくとも部分的に決定することに基づいて、第1のコンポーネントを第3のコンポーネントと交換する指示を送信させる命令をさらに含む。
【0144】
K.段落G-Jのいずれか1つのシステムであって、1つまたは複数のサブスクライビングコントローラーのうちの1つのコントローラーは、シミュレーションコンポーネントで1つまたは複数のコンポーネントに関連付けられた1つまたは複数のコントローラーから受信された1つまたは複数のメッセージに対する自律走行車の応答をシミュレートするシミュレーションコンポーネントに関連付けられている。
【0145】
L.段落G-Kのいずれか1つのシステムであって、動作は、少なくとも1つの期間の満了で第1のコンポーネントが実行されるのを防止すること、またはシーケンスが、第1のコンポーネントが実行される前に少なくとも1つの他のコンポーネントが実行されなければならないことを示すことを決定することをさらに含む。
【0146】
M.プロセッサ実行可能命令が格納されている非一時的なコンピュータ可読媒体であって、プロセッサ実行可能命令は1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、センサーデータおよびイベントのシーケンスを含むログデータを受信させ、シーケンスに従って、少なくとも2つのコンポーネントを相互に関連して実行させ、2つのコンポーネントは少なくとも2つのコンポーネントを実行させる2つのコントローラーに関連付けられ、少なくとも部分的に少なくとも2つのコンポーネントを実行させることに基づいて、少なくとも2つのコンポーネントを含む第1のシステムの第1の出力を受信させ、少なくとも2つのコンポーネントのうちの1つを交換用コンポーネントと交換させ、第2のシステムを形成し、第2のシステムのコンポーネントをシーケンスに従って実行させ、第2のシステムのコンポーネントを実行させることに少なくとも部分的に基づいて、第2のシステムの第2の出力を受信させ、第1の出力と第2の出力との間の差異を決定することに少なくとも部分的に基づいて、自律走行車に交換用コンポーネントを使用するための命令を送信させる、非一時的なコンピュータ可読媒体。
【0147】
N.段落Mの非一時的なコンピュータ可読媒体であって、少なくとも2つのコンポーネントをシーケンスに従って実行させることは、コンポーネントに入力を提供する順序を決定すること、コンポーネントから少なくとも2つのコンポーネントのうちの別のコンポーネントに出力を提供すること、または、別のコンポーネントへ入力を提供すること、別のコンポーネントからの出力を少なくとも1つのコンポーネントまたは追加のコンポーネントのうちの1つに提供すること、または別のコンポーネントを実行させることのうちの少なくとも1つに関連してコンポーネントを実行させること、のうちの少なくとも1つを含む。
【0148】
O.段落MまたはNの非一時的なコンピュータ可読媒体であって、差異を決定することは、第1の出力の第1のメトリックおよび第2の出力の第2のメトリックを決定することと、第2のメトリックが第1のメトリックに対する改善であると決定することとを含む。
【0149】
P.段落M-Oのいずれか1つの非一時的なコンピュータ可読媒体であって、命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、少なくとも2つのコンポーネントのうちの第1のコンポーネントを実行させることに少なくとも部分的に基づいて、実行中に第1のコンポーネントの内部状態をシリアル化するキーフレームを受信させ、キーフレームを受信した後、第1のコンポーネントの内部状態をキーフレームの内部状態と一致するように設定させ、少なくとも部分的に内部状態に基づいて第1のコンポーネントに実行を再現させる。
【0150】
Q.段落M-Pのいずれか1つの非一時的なコンピュータ可読媒体であって、命令は、1つまたは複数のプロセッサによって実行されると、プロセッサにさらに、少なくとも2つのコンポーネントの実行中に少なくとも2つのコンポーネントのうちの1つへの入力として提供される非決定論的変数またはクロックのうちの少なくとも1つを格納させ、第2のシステムのコンポーネントを実行させることは、非決定論的変数またはクロックデータのうちの少なくとも1つを読み出すことと、コンポーネントの少なくとも1つの実行中に、非決定論的変数またはクロックデータのうちの少なくとも1つを第2のシステムのコンポーネントのうちの少なくとも1つに提供することを含む。
【0151】
R.段落M-Qのいずれか1つの非一時的なコンピュータ可読媒体であって、少なくとも2つのコンポーネントは、第1のコンポーネントおよび第2のコンポーネントを含み、第1のコントローラーは第1のコンポーネントに関連付けられ、第2のコントローラーは第2のコンポーネントに関連付けられ、シーケンスに従って第1のコンポーネントを実行させることは、第1のコントローラーで、第2のコントローラーから第1のメッセージを受信することであって、第1のメッセージは、第2のコンポーネントの出力および第1のホライズン時間を含むことと、第1のホライズン時間が別のメッセージの別のホライズン時間よりも短いと判定することと、第1のホライズン時間の満了前に第1のコンポーネントを実行させると決定することとをさらに含む。
【0152】
S.段落M-Rのいずれか1つの非一時的なコンピュータ可読媒体であって、命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、実行中の第2のコンポーネントに応じて第2のコンポーネントからの出力を受信させ、出力が第2のコンポーネントから受信された時間と、期間を示す第2のホライズン時間とを含む第2のメッセージを生成させ、1つまたは複数のサブスクライビングコントローラーに第2のメッセージを発行させる。
【0153】
T.段落M-Sのいずれか1つの非一時的なコンピュータ可読媒体であって、少なくとも2つのコンポーネントは、第2のコンポーネントおよび第3のコンポーネントを含み、第1のコントローラーは第2のコンポーネントに関連付けられ、第2のコントローラーは第3のコンポーネントに関連付けられ、第2のコンポーネントは、自律走行車の動作を制御するためにコンピューティングデバイスによって使用可能な出力を生成し、第1のコントローラーは、出力を含むメッセージを第2のコントローラーに送信し、第2のコントローラーはメッセージを受信し、第3のコンポーネントへの入力として出力を提供し、第3のコンポーネントは、自律走行車の応答をエミュレートし、シミュレートされたデータを出力するシミュレーションコンポーネントを含む。
【0154】
U.非一時的なコンピュータ可読媒体は、コントローラーから、第1のソフトウェアコンポーネントおよび1つまたは複数の変数を実行するための指示を受信するように構成された入力インターフェースと、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、少なくとも部分的に1つまたは複数の変数に基づいて、指示の受信に応答して第1のソフトウェアコンポーネントを実行させ、第1のソフトウェアコンポーネントの実行の結果を受け取らせる第1の命令と、結果をコントローラーに出力するように構成された出力インターフェースとを含む第1のソフトウェアコンポーネントを格納し、コントローラーは、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、入力インターフェースに提供される1つまたは複数の変数の値を制御し、実行の結果は少なくとも部分的に値に基づき、第1のソフトウェアコンポーネントが少なくとも部分的に入力インターフェースへの指示を送信することに少なくとも部分的に基づいて実行する時間を制御し、出力インターフェースから結果を受け取ることを含む動作を実施させる第2の命令を含む。
【0155】
V.段落Uの非一時的なコンピュータ可読媒体であって、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに第1のソフトウェアコンポーネントを第2のソフトウェアコンポーネントと交換させる第3の命令をさらに含み、第2のソフトウェアコンポーネントは、入力インターフェースと出力インターフェースを含む。
【0156】
W.段落UまたはVの非一時的なコンピュータ可読媒体であって、第2の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、入力インターフェースを介した入力として、クロック信号、自律走行車のセンサーから受信したセンサーデータ、または第1のソフトウェアコンポーネントによって実行するために使用可能な非決定論的値のうちの少なくとも1つを提供させる。
【0157】
X.段落U-Wのいずれか1つの非一時的なコンピュータ可読媒体であって、第2の命令は、1つまたは複数のプロセッサもしくは1つまたは複数の第2のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、第3のソフトウェアコンポーネントに関連付けられたアップストリームコントローラーから、第3のソフトウェアコンポーネントの第2の結果を含む第2のメッセージを受信させ、入力インターフェースを介した入力として、1つまたは複数の変数のうちの1つとして第2の結果を提供させる。
【0158】
Y.段落U-Xのいずれか1つの非一時的なコンピュータ可読媒体であって、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、キーフレームとして第1のソフトウェアコンポーネントの内部状態をシリアル化させ、出力インターフェースは、キーフレームをコントローラーに出力するように構成される。
【0159】
Z.段落U-Yのいずれか1つの非一時的なコンピュータ可読媒体であって、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、少なくとも1つは定期的に、または、少なくとも部分的に、内部状態の変化の程度が変化の閾値程度を満たすかまたは超えると判定することに基づいて内部状態をシリアル化する。
【0160】
AA.段落U-Zのいずれか1つの非一時的なコンピュータ可読媒体であって、第1の命令は、1つ以上のプロセッサによって実行されると、1つ以上のプロセッサにさらに、キーフレームのシリアル化に続いてキーフレームによって指定される第1のソフトウェアコンポーネントの個別の実行にスキップさせ、キーフレームを逆シリアル化して、キーフレームによってシリアル化された内部状態と一致するように第1のソフトウェアコンポーネントの内部状態を設定させ、個別の実行から始めて、第1のソフトウェアコンポーネントを実行させる。
【0161】
AB.1つまたは複数のプロセッサと、メモリとを備えたシステムであって、メモリは、コンピューティングデバイスによって実行可能な命令を含む第1のコンポーネントであって、命令が、機械制御装置またはデータ処理パイプラインの少なくとも1つの動作を制御するためにコンピューティングデバイスによって少なくとも部分的に使用される結果を生成する第1のコンポーネントと、1つまたは複数の変数を受信するように構成された第1の入力インターフェースと、命令を実行するための指示を受け取る第2の入力インターフェースと、少なくとも部分的に1つまたは複数の変数と指示を受け取ることに基づいて、結果を出力する第1の出力インターフェースとを含むインターフェースと、第1のコンポーネントに関連付けられ、第1の命令を含む第1のコントローラーであって、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、第1の入力インターフェースを介して、1つまたは複数の変数が第1の入力インターフェースに提供される順序を制御させ、指示が第2の入力インターフェースに送信されるとき、第2の入力インターフェースを介して第1のコンポーネントを実行させることを制御させ、第1の出力インターフェースを介して、結果を受け取らせ、結果と、第1のコントローラーで結果が受信された時刻とを含むメッセージを1つまたは複数のダウンストリームコントローラーに発行させる第1のコントローラーと格納する。
【0162】
AC.段落ABのシステムであって、第1のコントローラーはオンラインコントローラーであり、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、ログファイルに、別のコンポーネントでの1つまたは複数のイベントに対するインターフェースでのイベントの順序を格納させ、イベントは、1つまたは複数の変数を第1の入力インターフェースに提供すること、第1のコンポーネントを第2の入力インターフェースを介して実行させること、または第1のコンポーネントから第1の出力インターフェースを介して出力を受信することのうちの少なくとも1つを含む。
【0163】
AD.段落ABまたはACのシステムであって、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、自律走行車のセンサーから受信したセンサーデータ、第1のコンポーネントによって消費される非決定論的データ、または第1のコンポーネントの実行に関する診断情報のうちの少なくとも1つをログファイルに格納させる。
【0164】
AE.段落AB-ADのいずれか1つのシステムであって、第1のコントローラーは再生コントローラーであり、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、1つまたは複数のコンポーネントでのイベントのシーケンスを含むログファイルを受信させ、イベントのシーケンスは、1つまたは複数のコンポーネントが以前に実行されたためにイベントが発生した順序を定義し、1つまたは複数の変数を提供するか、または第1のコンポーネントを実行させることがシーケンスを混乱させると決定することに少なくとも部分的に基づいて、1つまたは複数の変数を受信するかまたは実行することのうちの少なくとも1つから第1のコンポーネントを防がせ、1つまたは複数の変数を提供させるか、第1のコンポーネントを実行させるか、または少なくとも部分的にシーケンスに基づいてメッセージを発行させることの少なくとも1つを生じさせる。
【0165】
AF.段落AB-AEのうちの1つのシステムであって、インターフェースは、第1のコンポーネントの第1の内部状態を第1のキーフレームとしてシリアル化し、第1のキーフレームを出力する第2の出力インターフェースであって、第1の内部状態は、非決定論的変数値、カウンター値、出力コンテキスト、または第1のコンポーネントの以前の実行に少なくとも部分的に基づく内部変数値のうちの少なくとも1つを含む、第2の出力インターフェースと、第2のキーフレームを受信し、第2のキーフレームを第2の内部状態に逆シリアル化し、第1のコンポーネントの内部状態を第2の内部状態に設定させる第3の入力インターフェースとをさらに含む。
【0166】
AG.段落AB-AFのうちの1つのシステムであって、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、第1の入力インターフェースを介した入力として、クロック信号、自律走行車のセンサーから受信したセンサーデータ、または第1のソフトウェアコンポーネントによって使用可能な非決定論的値のうちの少なくとも1つを提供させる。
【0167】
AH.第1のコントローラーによって、第1のソフトウェアコンポーネントに関連付けられた入力インターフェースに提供される1つまたは複数の変数の値を制御することと、第1のコントローラーによって、メッセージの受信、指定された期間、イベントのシーケンス、またはホライズン時間のうちの少なくとも1つに少なくとも部分的に基づいて、第1のソフトウェアコンポーネントを実行させる時間を決定することと、その時点に、第1のコントローラーによって、第1のソフトウェアコンポーネントを実行させることであって、第1のソフトウェアコンポーネントの実行は、少なくとも部分的に1つまたは複数の変数に基づくことと、第1のコントローラーで、第1のソフトウェアコンポーネントから、実行の第1の出力を受信することと、1つまたは複数のサブスクライバに、第1のコントローラーによって、第1の出力と、第1のコントローラーが第1のソフトウェアコンポーネントを再実行させる前の期間、または第1の出力が、第1のコントローラーで受信されたか、または、第1のソフトウェアコンポーネントによって生成されたときを示す生成時間のうちの少なくとも1つとを含む第1のメッセージを発行することとを含む方法。
【0168】
AI.段落AHの方法であって、入力インターフェースへの入力として提供されるセンサーデータ、イベントのシーケンスであって、イベントのシーケンスを保存することは、別のソフトウェアコンポーネントでの1つまたは複数のイベントに対する第1のソフトウェアコンポーネントでの動作を監視することを含み、イベントは、メッセージを受信すること、第1のメッセージを発行すること、入力インターフェースへの入力、実行の開始、実行の完了を提供すること、または出力を受信することのうちの少なくとも1つを含む、イベントのシーケンス、入力インターフェースへの入力として提供されるデータ、出力インターフェースから出力として受信したデータ、または第1のソフトウェアコンポーネントによって生成され、出力インターフェースを介して出力されるキーフレームのうちの少なくとも1つをログファイルに保存することをさらに含む。
【0169】
AJ.段落AHまたはAIの方法であって、第1のソフトウェアコンポーネントが第1のプロセッサ実行可能命令を含み、方法は、入力インターフェースが第2のソフトウェアコンポーネントに1つまたは複数の変数を提供するように第1のソフトウェアコンポーネントを第2のソフトウェアコンポーネントと置き換えることをさらに含み、第2のソフトウェアコンポーネントは、コントローラーによってその時間に実行され、第2のソフトウェアコンポーネントの実行の第2の出力は、出力インターフェースを介して受信され、第2のソフトウェアコンポーネントは、第2のプロセッサ実行可能命令を含む。
【0170】
AK.段落AH-AJのうちの1つの方法であって、第2のソフトウェアコンポーネントに関連付けられた第2のコントローラーで第1のメッセージを受信することと、イベントのシーケンスに少なくとも部分的に基づいて、第2のコントローラーによって、第1のメッセージを第2のソフトウェアコンポーネントに提供する第1の時間を決定することと、少なくとも部分的にシーケンスに基づいて、第2のコントローラーによって、第2のソフトウェアコンポーネントを実行させる第2の時間を決定することと、第1の時間に、第2のコントローラーによって、第1のメッセージを第2のソフトウェアコンポーネントに提供することと、第2の時間に、第2のコントローラーによって、第2のソフトウェアコンポーネントを1回または複数回実行させることと、第1のコントローラーで、第2のソフトウェアコンポーネントから、第2のソフトウェアコンポーネントの実行の第2の出力を受信することと、第2の出力と、第2のホライズン時間、または第2の出力が第2のコントローラーで受信されたとき、または第2の出力を生成した第2のソフトウェアコンポーネントの個別の実行を示す第2の生成時間のうちの少なくとも1つとを含む第2のメッセージを、1つまたは複数の第2のサブスクライバに、第2のコントローラーによって発行することとさらに含む。
【0171】
AL.段落AH-AKのうちの1つの方法であって、時間を決定することは、第1のソフトウェアコンポーネントが別のコントローラーでの別のイベントの前または後に実行されるべきであると決定することであって、別のコントローラーでの別のイベントは、第1のコントローラーでアップストリームコントローラーから受信された第2のメッセージによって、または少なくとも部分的にシーケンスに基づいて指定されることを含む。
【0172】
AM.段落AH-ALのうちの1つの方法であって、第1のソフトウェアコンポーネントを実行させることができる期間を決定することと、時間の前、かつ期間が満了すると、第1のソフトウェアコンポーネントが実行されるのを防ぐこととをさらに含む。
【0173】
AN.段落AH-AMのうちの1つの方法であって、入力インターフェースを介した入力として、1つまたは複数の変数のうちの1つとしてのセンサーデータを提供すること、および、少なくとも部分的にログファイルに基づいて、第1のソフトウェアコンポーネントまたは1つまたは複数の他のコンポーネントのうちの少なくとも1つでの1つまたは複数のイベントに関するイベントのシーケンスを決定することに少なくとも部分的に基づいて時間を決定することに少なくとも部分的に基づいて、前記第1のソフトウェアコンポーネントを介してセンサーデータを処理することをさらに含み、1つまたは複数のイベントは、1つまたは複数の他のコンポーネントに関連付けられた1つまたは複数の他のコントローラーから第1のコントローラーで受信された1つまたは複数のメッセージによって示される。
【0174】
AO.自律走行車のセンサーからセンサーデータを受信することと、第1のシステムによってセンサーデータを処理することであって、第1のシステムは、第1のコンポーネントおよび1つまたは複数の他のコンポーネントを含み、処理することは、第1のコンポーネントおよび1つまたは複数の他のコンポーネントの動作を制御することに少なくとも部分的に基づくことと、第1のシステムによるセンサーデータの処理中に第1のコンポーネントに関連付けられた第1のコントローラーから1つまたは複数のメッセージを受信することに少なくとも部分的に基づいてイベントのシーケンスを記録することと、第1のシステムによりセンサーデータを処理することに少なくとも部分的に基づいて、第1の出力を受信することと、第1のコンポーネントを第2のコンポーネントと交換して、第2のコンポーネントおよび1つまたは複数の他のコンポーネントを含む第2のシステムを取得することと、第2のコンポーネントをシーケンスに従って動作させることに少なくとも部分的に基づいて、第2のシステムによってセンサーデータを処理することと、第2のシステムによってセンサーデータを処理することに少なくとも部分的に基づいて、第2の出力を受信することと、第1の出力と第2の出力との間の差を決定することに少なくとも部分的に基づいて、自律走行車に第1のコンポーネントを第2のコンポーネントと交換する命令を送信することとを含む方法。
【0175】
AP.段落AOの方法であって、イベントは、第1のコンポーネントに入力を提供すること、第1のコンポーネントを実行させること、または第1のコンポーネントから出力を受信することのうちの少なくとも1つを含み、第2のコンポーネントをシーケンスに従って動作させることは、入力を提供すること、出力を送信すること、またはシーケンスによって指定されるように実行することのうちの少なくとも1つを含む。
【0176】
AQ.段落AOまたはAPの方法であって、第1の出力に関連する第1のメトリックおよび第2の出力に関連する第2のメトリックのうちの少なくとも1つを決定することをさらに含み、差異を決定することは、第2のメトリックの少なくとも1つが第1のメトリックに対する改善であると決定することを含む。
【0177】
AR.段落AO-AQのいずれか1つの方法であって、第1のシステムによってセンサーデータを処理することは、第1のコンポーネントに関連する第1のコントローラーで、1つまたは複数のアップストリームに関連する1つまたは複数のアップストリームコントローラーからアップストリームメッセージを受信することであって、メッセージはホライズン時間を含み、ホライズン時間はコンポーネントが再実行されるまでの期間を識別することと、第1のコントローラーによって、少なくとも部分的にシーケンスに基づいて、アップストリームメッセージの順序を決定することと、第1のコントローラーによって、少なくとも部分的にホライズン時間に基づいて、期間を決定することと、第1のコントローラーによって、期間中に、順序に従ってコンポーネントへの入力としてアップストリームメッセージを提供することと、第1のコントローラーによって、期間が満了するまで第1のコンポーネントを1回または複数回実行させることと、第1のコントローラーで、第1のコンポーネントの実行に応答する第1のコンポーネントから、出力を受信することと、第1のコントローラーによって、1つまたは複数のサブスクライビングコントローラーに、出力、出力をもたらした第1のコンポーネントの個別の実行を識別する生成時間、およびホライズン時間を含む出力メッセージを発行することとを含む。
【0178】
AS.段落AO-ARのいずれか1つの方法であって、1つまたは複数のサブスクライビングコントローラーのうちの1つが、出力メッセージに対する自律走行車の応答をシミュレートするシミュレーションコンポーネントに関連付けられたシミュレーションコントローラーを含む。
【0179】
AT.段落AOの方法であって、第1のコンポーネントの個別の実行に少なくとも部分的に基づいて第1のコンポーネントの内部状態を識別するキーフレームを第1のコントローラーから受信することをさらに含み、第2のシステムによってセンサーデータを処理することは、キーフレームで識別された実行と一致する第2のコンポーネントの実行にスキップすることと、キーフレームによって識別される内部状態と一致するように、第2のコンポーネントの内部状態を設定することとを含む。
【0180】
AU.1つまたは複数のプロセッサと、第1のコンポーネントと、第1のコンポーネントに関連付けられた第1のコントローラーであって、1つまたは複数のプロセッサによって実行されると、システムに、1つまたは複数の他のコンポーネントの動作に関連する第1のコンポーネントでイベントのシーケンスを受信すること、第1のコントローラーがサブスクライブするアップストリームコントローラーから第1のメッセージを受信することであって、メッセージは、第2のコンポーネントの実行の第1の出力を含むこと、少なくとも部分的にシーケンスに基づいて、1つまたは複数のメッセージの順序を決定することであって、1つまたは複数のメッセージが第1のメッセージを含むこと、第1のコンポーネントへの入力として、順序に従って1つまたは複数のメッセージを提供すること、少なくとも部分的にシーケンスに基づいて、第1のコンポーネントを実行させる時間を決定すること、その時点で、少なくとも部分的に第1のコンポーネントで1つまたは複数のメッセージを受信することに基づいて、第1のコンポーネントを実行させること、第1のコンポーネントの実行に応答して、第1のコンポーネントの出力を受信すること、および、出力を含むメッセージを、1つまたは複数のサブスクライビングコントローラーに発行すること、を含む動作をシステムに実行させる第1のコントローラーとを格納するメモリとを含むシステム。
【0181】
AV.段落AUのシステムであって、第1のメッセージは第1のホライズン時間を含み、1つまたは複数のメッセージのうちの少なくとも1つは、第2のホライズン時間を含み、動作は、少なくとも部分的に第1のホライズン時間および第2のホライズン時間に基づいて、第1のコンポーネントを実行できる期間を決定することをさらに含み、期間は、第1のホライズン時間または第2のホライズンのいずれか短い方であり、第1のコンポーネントはその期間中に実行される。
【0182】
AW.段落AUまたはAVのシステムであって、第1のシステムは、第1のコンポーネントおよび1つまたは複数の他のコンポーネントを含み、メモリは、1つまたは複数のプロセッサによって実行されると、システムに、第1のコンポーネントを第3のコンポーネントに置き換えて、第3のコンポーネントおよび1つまたは複数の他のコンポーネントを含む第2のシステムを取得させ、第3のコンポーネントを使用して第2のシステムに動作を繰り返させる命令をさらに含み、動作は、第3のコンポーネントの実行に応答して、期間中に第3のコンポーネントの第2の出力を受信し、第2の出力を含む第2のメッセージを、1つまたは複数のサブスクライビングコントローラーに発行することを含む。
【0183】
AX.段落AU-AWのいずれか1つのシステムであって、第1のシステムが、少なくとも部分的に第1のメッセージに基づいて第1の結果を決定し、第2のシステムが、少なくとも部分的に第2のメッセージに基づいて第2の結果を決定し、メモリは、1つまたは複数のプロセッサによって実行されると、プロセッサに、少なくとも部分的に第1の結果に基づいて、第1のメトリックを決定させ、少なくとも部分的に第2の結果に基づいて、第2のメトリックを決定させ、そして、自律走行車に、第2のメトリックが第1のメトリックに対する改善であると少なくとも部分的に決定することに基づいて、第1のコンポーネントを第3のコンポーネントと交換する命令を送信させる命令をさらに含む。
【0184】
AY.段落AU-AXのいずれか1つのシステムであって、1つまたは複数のサブスクライビングコントローラーのうちの1つのコントローラーは、シミュレーションコンポーネントで1つまたは複数のコンポーネントに関連付けられた1つまたは複数のコントローラーから受信された1つまたは複数のメッセージに対する自律走行車の応答をシミュレートするシミュレーションコンポーネントに関連付けられている。
【0185】
AZ.段落AU-AYのいずれか1つのシステムであって、動作は、少なくとも1つの期間の満了で第1のコンポーネントが実行されるのを防止すること、またはシーケンスが、第1のコンポーネントが実行される前に少なくとも1つの他のコンポーネントが実行されなければならないことを示すと決定することをさらに含む。
【0186】
BA.プロセッサ実行可能命令が格納されている非一時的なコンピュータ可読媒体であって、1つまたは複数のプロセッサによって実行されると、プロセッサ実行可能命令は、1つまたは複数のプロセッサが、センサーデータおよびイベントのシーケンスを含むログデータを受信し、シーケンスに従って、少なくとも2つのコンポーネントを相互に関連して実行し、2つのコンポーネントは少なくとも2つのコンポーネントを実行させる2つのコントローラーに関連付けられ、少なくとも部分的に少なくとも2つのコンポーネントを実行させることに基づいて、少なくとも2つのコンポーネントを含む第1のシステムの第1の出力を受信し、少なくとも2つのコンポーネントのうちの1つを交換用コンポーネントと交換して、第2のシステムを形成し、第2のシステムのコンポーネントをシーケンスに従って実行させ、第2のシステムのコンポーネントを実行させることに少なくとも部分的に基づいて、第2のシステムの第2の出力を受信し、自律走行車に、第1の出力と第2の出力との間の差異を決定することに少なくとも部分的に基づいて、交換用コンポーネントを使用するための命令を送信するようにする。
【0187】
BB.段落BAの非一時的なコンピュータ可読媒体であって、少なくとも2つのコンポーネントをシーケンスに従って実行させることは、コンポーネントに入力を提供すること、コンポーネントから少なくとも2つのコンポーネントのうちの別のコンポーネントに出力を提供することの順序を決定すること、または、別のコンポーネントへ入力を提供すること、別のコンポーネントからの出力を少なくとも1つのコンポーネントまたは追加のコンポーネントへ提供することのうちの少なくとも1つに関してコンポーネントを実行させること、または別のコンポーネントに実行させること、のうちの少なくとも1つを含む。
【0188】
BC.段落BAまたはBBの非一時的なコンピュータ可読媒体であって、差異を決定することは、第1の出力の第1のメトリックおよび第2の出力の第2のメトリックを決定すること、および第2のメトリックが第1のメトリックに対する改善であると決定することを含む。
【0189】
BD.段落BA-BCのいずれか1つの非一時的なコンピュータ可読媒体であって、1つまたは複数のプロセッサによって実行されると、命令はさらに1つまたは複数のプロセッサに、少なくとも2つのコンポーネントのうちの第1のコンポーネントを実行することに少なくとも部分的に基づいて、実行中に第1のコンポーネントの内部状態をシリアル化するキーフレームを受信させ、キーフレームを受信した後、第1のコンポーネントの内部状態をキーフレームの内部状態と一致するように設定させ、および、少なくとも部分的に内部状態に基づいて第1のコンポーネントに実行を再現させる。
【0190】
BE.段落BA-BDのいずれか1つの非一時的なコンピュータ可読媒体であって、1つまたは複数のプロセッサによって実行されると、命令はさらにプロセッサに、少なくとも2つのコンポーネントの実行中に少なくとも2つのコンポーネントのうちの1つへの入力として提供される非決定論的変数またはクロックのうちの少なくとも1つをさらに格納させ、第2のシステムのコンポーネントを実行させることは、非決定論的変数またはクロックデータのうちの少なくとも1つを読み出すこと、およびコンポーネントの少なくとも1つの実行中に、非決定論的変数またはクロックデータのうちの少なくとも1つを第2のシステムのコンポーネントのうちの少なくとも1つに提供することを含む。
【0191】
BF.段落BA-BEのいずれか1つの非一時的なコンピュータ可読媒体であって、少なくとも2つのコンポーネントは、第1のコンポーネントおよび第2のコンポーネントを含み、第1のコントローラーは第1のコンポーネントに関連付けられ、第2のコントローラーは第2のコンポーネントに関連付けられ、シーケンスに従って第1のコンポーネントを実行させることは、第1のコントローラーで、第2のコントローラーから第1のメッセージを受信し、第1のメッセージは、第2のコンポーネントの出力および第1のホライズン時間を含むこと、第1のホライズン時間が別のメッセージの別のホライズン時間よりも短いと判定すること、および、第1のホライズン時間の満了前に第1のコンポーネントを実行させると決定することをさらに含む。
【0192】
BG.段落BA-BFのいずれか1つの非一時的なコンピュータ可読媒体であって、命令は、1つまたは複数のプロセッサによって実行されると、さらに1つまたは複数のプロセッサに、実行中の第2のコンポーネントに応じて第2のコンポーネントからの出力を受信させ、出力が第2のコンポーネントから受信された時間と、期間を示す第2のホライズン時間とを含む第2のメッセージを生成させ、1つまたは複数のサブスクライビングコントローラーに第2のメッセージを発行させる。
【0193】
BH.段落BA-BGのいずれか1つの非一時的なコンピュータ可読媒体であって、少なくとも2つのコンポーネントは、第2のコンポーネントおよび第3のコンポーネントを含み、第1のコントローラーは第2のコンポーネントに関連付けられ、第2のコントローラーは第3のコンポーネントに関連付けられ、第2のコンポーネントは、自律走行車の動作を制御するためにコンピューティングデバイスによって使用可能な出力を生成し、第1のコントローラーは、出力を含むメッセージを第2のコントローラーに送信し、第2のコントローラーはメッセージを受信し、第3のコンポーネントへの入力として出力を提供し、第3のコンポーネントは、自律走行車の応答をエミュレートし、シミュレートされたデータを出力するシミュレーションコンポーネントを含む。
【0194】
BI.非一時的なコンピュータ可読媒体は、コントローラーから、第1のソフトウェアコンポーネントおよび1つまたは複数の変数を実行するための指示を受信するように構成された入力インターフェースと、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、少なくとも部分的に1つまたは複数の変数に基づいて、指示の受信に応答して第1のソフトウェアコンポーネントを実行させ、第1のソフトウェアコンポーネントの実行の結果を受け取らせる第1の命令と、結果をコントローラーに出力するように構成された出力インターフェースとを含む第1のソフトウェアコンポーネントを格納し、コントローラーは、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、入力インターフェースに提供される1つまたは複数の変数の値を制御し、実行の結果は少なくとも部分的に値に基づき、第1のソフトウェアコンポーネントが少なくとも部分的に入力インターフェースへの指示を送信することに少なくとも部分的に基づいて実行する時間を制御し、出力インターフェースから結果を受け取ることを含む動作を実施させる第2の命令を含む。
【0195】
BJ.段落BIの非一時的なコンピュータ可読媒体であって、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに第1のソフトウェアコンポーネントを第2のソフトウェアコンポーネントと交換させる第3の命令をさらに含み、第2のソフトウェアコンポーネントは、入力インターフェースと出力インターフェースを含む。
【0196】
BK.段落BIまたはBJの非一時的なコンピュータ可読媒体であって、第2の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、入力インターフェースを介した入力として、クロック信号、自律走行車のセンサーから受信したセンサーデータ、または第1のソフトウェアコンポーネントによって実行するために使用可能な非決定論的値のうちの少なくとも1つを提供させる。
【0197】
BL.段落BI-BKのいずれか1つの非一時的なコンピュータ可読媒体であって、第2の命令は、1つまたは複数のプロセッサもしくは1つまたは複数の第2のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、第3のソフトウェアコンポーネントに関連付けられたアップストリームコントローラーから、第3のソフトウェアコンポーネントの第2の結果を含む第2のメッセージを受信させ、入力インターフェースを介した入力として、1つまたは複数の変数のうちの1つとして第2の結果を提供させる。
【0198】
BM.段落BI-BLのいずれか1つの非一時的なコンピュータ可読媒体であって、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、キーフレームとして第1のソフトウェアコンポーネントの内部状態をシリアル化させ、出力インターフェースは、キーフレームをコントローラーに出力するように構成される。
【0199】
BN.段落BI-BMのいずれか1つの非一時的なコンピュータ可読媒体であって、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、少なくとも1つは定期的に、または、少なくとも部分的に、内部状態の変化の程度が変化の閾値程度を満たすかまたは超えると判定することに基づいて内部状態をシリアル化する。
【0200】
BO.段落BI-BNのいずれか1つの非一時的なコンピュータ可読媒体であって、第1の命令は、1つ以上のプロセッサによって実行されると、1つ以上のプロセッサにさらに、キーフレームのシリアル化に続いてキーフレームによって指定される第1のソフトウェアコンポーネントの個別の実行にスキップさせ、キーフレームを逆シリアル化して、キーフレームによってシリアル化された内部状態と一致するように第1のソフトウェアコンポーネントの内部状態を設定させ、個別の実行から始めて、第1のソフトウェアコンポーネントを実行させる。
【0201】
BP.1つまたは複数のプロセッサと、メモリとを備えたシステムであって、メモリは、コンピューティングデバイスによって実行可能な命令を含む第1のコンポーネントであって、命令が、機械制御装置またはデータ処理パイプラインの少なくとも1つの動作を制御するためにコンピューティングデバイスによって少なくとも部分的に使用される結果を生成する第1のコンポーネントと、1つまたは複数の変数を受信するように構成された第1の入力インターフェースと、命令を実行するための指示を受け取る第2の入力インターフェースと、少なくとも部分的に1つまたは複数の変数と指示を受け取ることに基づいて、結果を出力する第1の出力インターフェースとを含むインターフェースと、第1のコンポーネントに関連付けられ、第1の命令を含む第1のコントローラーであって、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、第1の入力インターフェースを介して、1つまたは複数の変数が第1の入力インターフェースに提供される順序を制御させ、指示が第2の入力インターフェースに送信されるとき、第2の入力インターフェースを介して第1のコンポーネントを実行させることを制御させ、第1の出力インターフェースを介して、結果を受け取らせ、結果と、第1のコントローラーで結果が受信された時刻とを含むメッセージを1つまたは複数のダウンストリームコントローラーに発行させる第1のコントローラーと格納する。
【0202】
BQ.段落BPのシステムであって、第1のコントローラーはオンラインコントローラーであり、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、ログファイルに、別のコンポーネントでの1つまたは複数のイベントに対するインターフェースでのイベントの順序を格納させ、イベントは、1つまたは複数の変数を第1の入力インターフェースに提供すること、第1のコンポーネントを第2の入力インターフェースを介して実行させること、または第1のコンポーネントから第1の出力インターフェースを介して出力を受信することのうちの少なくとも1つを含む。
【0203】
BR.段落BPまたはBQのシステムであって、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、自律走行車のセンサーから受信したセンサーデータ、第1のコンポーネントによって消費される非決定論的データ、または第1のコンポーネントの実行に関する診断情報のうちの少なくとも1つをログファイルに格納させる。
【0204】
BS.段落BP-BRのいずれか1つのシステムであって、第1のコントローラーは再生コントローラーであり、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、1つまたは複数のコンポーネントでのイベントのシーケンスを含むログファイルを受信させ、イベントのシーケンスは、1つまたは複数のコンポーネントが以前に実行されたためにイベントが発生した順序を定義し、1つまたは複数の変数を提供するか、または第1のコンポーネントを実行させることがシーケンスを混乱させると決定することに少なくとも部分的に基づいて、1つまたは複数の変数を受信するかまたは実行することのうちの少なくとも1つから第1のコンポーネントを防がせ、1つまたは複数の変数を提供させるか、第1のコンポーネントを実行させるか、または少なくとも部分的にシーケンスに基づいてメッセージを発行させることの少なくとも1つを生じさせる。
【0205】
BT.段落BP-BSのうちの1つのシステムであって、インターフェースは、第1のコンポーネントの第1の内部状態を第1のキーフレームとしてシリアル化し、第1のキーフレームを出力する第2の出力インターフェースであって、第1の内部状態は、非決定論的変数値、カウンター値、出力コンテキスト、または第1のコンポーネントの以前の実行に少なくとも部分的に基づく内部変数値のうちの少なくとも1つを含む、第2の出力インターフェースと、第2のキーフレームを受信し、第2のキーフレームを第2の内部状態に逆シリアル化し、第1のコンポーネントの内部状態を第2の内部状態に設定させる第3の入力インターフェースとをさらに含む。
【0206】
BU.段落BP-BTのうちの1つのシステムであって、第1の命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさらに、第1の入力インターフェースを介した入力として、クロック信号、自律走行車のセンサーから受信したセンサーデータ、または第1のソフトウェアコンポーネントによって使用可能な非決定論的値のうちの少なくとも1つを提供させる。
【0207】
BV.第1のコントローラーによって、第1のソフトウェアコンポーネントに関連付けられた入力インターフェースに提供される1つまたは複数の変数の値を制御することと、第1のコントローラーによって、メッセージの受信、指定された期間、イベントのシーケンス、またはホライズン時間のうちの少なくとも1つに少なくとも部分的に基づいて、第1のソフトウェアコンポーネントを実行させる時間を決定することと、その時点で、第1のコントローラーによって、第1のソフトウェアコンポーネントを実行させることであって、第1のソフトウェアコンポーネントの実行は、少なくとも部分的に1つまたは複数の変数に基づくことと、第1のコントローラーで、第1のソフトウェアコンポーネントから、実行の第1の出力を受信することと、1つまたは複数のサブスクライバに、第1のコントローラーによって、第1の出力と、第1のコントローラーが第1のソフトウェアコンポーネントを再実行させる前の期間の、または第1の出力が、第1のコントローラーで受信されるか、また、第1のソフトウェアコンポーネントによって生成されたときを示す生成時間のうちの少なくとも1つとを含む第1のメッセージを発行することとを含む方法。
【0208】
BW.段落BVの方法であって、入力インターフェースへの入力として提供されるセンサーデータ、イベントのシーケンスであって、イベントのシーケンスを保存することは、別のソフトウェアコンポーネントでの1つまたは複数のイベントに対する第1のソフトウェアコンポーネントでの動作を監視することを含み、イベントは、メッセージを受信すること、第1のメッセージを発行すること、入力インターフェースへの入力、実行の開始、実行の完了を提供すること、または出力を受信することのうちの少なくとも1つを含み、入力インターフェースへの入力として提供されるデータと、出力インターフェースから出力として受信したデータと、または第1のソフトウェアコンポーネントによって生成され、出力インターフェースを介して出力されるキーフレームとのうちの少なくとも1つをログファイルに保存することをさらに含む。
【0209】
BX.段落BVまたはBWの方法であって、第1のソフトウェアコンポーネントが第1のプロセッサ実行可能命令を含み、方法は、入力インターフェースが第2のソフトウェアに1つまたは複数の変数を提供するように第1のソフトウェアコンポーネントを第2のソフトウェアコンポーネントと置き換えることをさらに含み、第2のソフトウェアコンポーネントは、コントローラーによってその時点で実行され、第2のソフトウェアコンポーネントの実行の第2の出力は、出力インターフェースを介して受信され、第2のソフトウェアコンポーネントは、第2のプロセッサ実行可能命令を含む。
【0210】
BY.段落BV-BXのうちの1つの方法であって、第2のソフトウェアコンポーネントに関連付けられた第2のコントローラーで第1のメッセージを受信することと、イベントのシーケンスに少なくとも部分的に基づいて、第2のコントローラーによって、第1のメッセージを第2のソフトウェアコンポーネントに提供する第1の時間を決定することと、少なくとも部分的にシーケンスに基づいて、第2のコントローラーによって、第2のソフトウェアコンポーネントを実行させる第2の時間を決定することと、第1の時間に、第2のコントローラーによって、第1のメッセージを第2のソフトウェアコンポーネントに提供することと、第2の時間に、第2のコントローラーによって、第2のソフトウェアコンポーネントを1回または複数回実行させることと、第1のコントローラーで、第2のソフトウェアコンポーネントから、第2のソフトウェアコンポーネントの実行の第2の出力を受信することと、第2の出力と、第2のホライズン時間、または第2の出力が第2のコントローラーで受信されたとき、または第2の出力を生成した第2のソフトウェアコンポーネントの個別の実行を示す第2の生成時間のうちの少なくとも1つとを含む第2のメッセージを、1つまたは複数の第2のサブスクライバに、第2のコントローラーによって発行することさらに含む。
【0211】
BZ.段落BV-BYのうちの1つの方法であって、時間を決定することは、第1のソフトウェアコンポーネントが別のコントローラーでの別のイベントの前または後に実行されるべきであると決定することであって、別のコントローラーでの別のイベントは、第1のコントローラーでアップストリームコントローラーから受信された第2のメッセージによって指定され、または少なくとも部分的にシーケンスに基づくことを含む。
【0212】
CA.段落BV-BZのうちの1つの方法であって、第1のソフトウェアコンポーネントを実行させる期間を決定することと、第1のソフトウェアコンポーネントが時間の前に、かつ期間が満了すると実行されるのを防ぐこととをさらに含む。
【0213】
CB.段落BV-CAのうちの1つの方法であって、入力インターフェースを介した入力として、1つまたは複数の変数のうちの1つとしてのセンサーデータを提供することに少なくとも部分的に基づいて、第1のソフトウェアコンポーネントを介してセンサーデータを処理することと、少なくとも部分的にログファイルに基づいて、第1のソフトウェアコンポーネントまたは1つまたは複数の他のコンポーネントのうちの1つでの1つまたは複数のイベントに関するイベントのシーケンスを決定することに少なくとも部分的に基づいて時間を決定することであって、1つまたは複数のイベントは、1つまたは複数の他のコンポーネントに関連付けられた1つまたは複数の他のコントローラーから第1のコントローラーで受信された1つまたは複数のメッセージによって示されることをさらに含む。
【0214】
(結論)
発明の主題は、構造的な特徴および/または方法的な活動に特有の言語で説明されてきたが、添付の特許請求の範囲の中で画定される発明の主題は、必ずしも説明される特定の特徴、または活動に限定されるものではないことを理解されたい。むしろ、特定の特徴、および活動は、特許請求の範囲を実施する例示的形態として開示される。
【0215】
本明細書で説明されるモジュールは、任意のタイプのコンピュータ可読媒体に格納し得、且つソフトウェアおよび/またはハードウェアにおいて実装し得る命令を表現する。上述の方法、およびプロセスのすべては、1つもしくは複数のコンピュータまたはプロセッサ、ハードウェア、またはそれらのいくつかの組み合わせによって実行されるソフトウェアコードモジュールおよび/またはコンピュータ実行可能命令を介して完全に自動化し得る。あるいは、方法のうちの一部またはすべては、専門のコンピュータハードウェアで具現化し得る。
【0216】
そうではないと特に明記されていない限り、特に「可能である」、「得る」、「できる」、または「してよい」などの条件付きの用語は、とりわけ、他の例示が含まないある特徴、要素および/またはステップをある例示が含み、提示することの文脈内で理解される。したがって、そのような条件付きの用語は、概して、ある特徴、要素および/またはステップが、1つまたは複数の例示に任意の方法で要求されるか、またはその1つまたは複数の例示が、ユーザーのインプット、またはプロンプトを用いて、または用いずに、ある特徴、要素および/またはステップが任意の具体的な例示に含まれるか、または実行されるべきであるかを判断するための論理を必ずしも含むことを暗示することは意図されていない。
【0217】
「X、Y、またはZのうちの少なくとも1つ」という句などの接続詞は、そうではないと特に明記されていない限り、項目、用語などがX、Y、またはZのいずれか、またはそれぞれの要素の集合を含む、それらの任意の組み合わせであってよいと理解されるべきである。単数として明示的に説明されていない限り、「ある」は、単数、および複数を意味する。
【0218】
本明細書で説明され、および/または添付の図に示したフロー図における任意のルーティンの説明、要素、またはブロックは、ルーティンにおける特定の論理機能、または要素を実装するための1つまたは複数のコンピュータ実行可能命令を含むコードのモジュール、セグメント、または部分を潜在的に表現するものとして理解されるべきである。代替的な実装は、本明細書に説明される例示の範囲内に含まれ、その中で、要素または機能は、当業者によって理解されるように、関係する機能に応じて、実質的に同時、または逆の順序を含む、図示されたもの、または説明されたものと順不同で、削除され、実行されることが可能である。さらに、フロー図におけるそのような要素および/またはブロックは、連続して描かれる場合、追加的または代替的に、任意の順序で配置され、および/または並列に実行され得る。
【0219】
上述の例示に対して多くの変形例、および修正例を作成することが可能であることを強調すべきであり、それらの要素は、他の容認できる例示の中にあるものとして理解されるべきである。このような変更例、および変形例のすべてが本開示の範囲内で本明細書に含まれ、以下の特許請求の範囲によって保護されることが意図される。
図1
図2A
図2B
図3
図4
図5
図6
図7
図8