(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022165991
(43)【公開日】2022-11-01
(54)【発明の名称】自律走行車シミュレーションのためのシナリオ記述言語
(51)【国際特許分類】
G08G 1/00 20060101AFI20221025BHJP
G08G 1/09 20060101ALI20221025BHJP
B60W 60/00 20200101ALI20221025BHJP
G16Y 10/40 20200101ALI20221025BHJP
G16Y 40/30 20200101ALI20221025BHJP
【FI】
G08G1/00 A
G08G1/09 F
B60W60/00
G16Y10/40
G16Y40/30
【審査請求】有
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2022116396
(22)【出願日】2022-07-21
(62)【分割の表示】P 2019519980の分割
【原出願日】2017-10-12
(31)【優先権主張番号】15/405,649
(32)【優先日】2017-01-13
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/408,641
(32)【優先日】2016-10-14
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】518156417
【氏名又は名称】ズークス インコーポレイテッド
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】ライアン マーティン カフーン
(72)【発明者】
【氏名】ギャリー リンスコット
(72)【発明者】
【氏名】アドリアン トゥルイユ
(57)【要約】 (修正有)
【課題】シミュレーションのためのシナリオ記述言語に関する技法により、自律走行車が遭遇することがあり得るシナリオを正確に再生する。
【解決手段】ドメイン固有言語またはSDL(シナリオ記述言語)を使用して環境内のオブジェクトのシナリオを列挙する。プリミティブ110を使用して、インスタンス化されるオブジェクト、オブジェクトによって実行される動作を定義する。SDLの使用を通して、プリミティブ110を結合して組み合わせることにより、多数のシナリオの簡単な作成ができる。SDLによって特定のシナリオを地図内のすべての可能な位置にわたって自動的にインスタンス化する。インスタンス化によりユーザーは地図特徴について知らずにいることができる。
【選択図】
図1
【特許請求の範囲】
【請求項1】
シナリオに含まれるオブジェクト、オブジェクト挙動、条件、または作動のうちの少なくとも1つを表す値のセットを受信することと、
値の前記セットに少なくとも部分的に基づいて、値の組み合わせを決定することと、
地図における前記オブジェクトに関連付けられたセマンティック座標を受信することと、
値の前記組み合わせと前記セマンティック座標とに少なくとも部分的に基づいて、実行のための前記シナリオを生成することと、
前記シナリオを実行することに少なくとも部分的に基づいて、前記シナリオに対する自律的コントローラーによる応答を示す結果データを決定することと
を備えることを特徴とする方法。
【請求項2】
前記オブジェクトは、定義された寸法を含むもの、姿勢、または前記シナリオにおいて前記オブジェクトを描画するメッシュのうちの少なくとも1つに関連付けられることを特徴とする請求項1に記載の方法。
【請求項3】
前記シナリオは、前記オブジェクトと前記地図との間の相互作用を表すことを特徴とする請求項1に記載の方法。
【請求項4】
前記地図における前記オブジェクトに関連付けられた前記セマンティック座標は、道路の交差点の種類を示すことを特徴とする請求項1に記載の方法。
【請求項5】
前記シナリオの実行中、前記オブジェクトと、条件、作動、障害、またはノイズのうちの少なくとも1つとの間において、逐次順に行われる複数のステップのシーケンスを定義することをさらに備えることを特徴とする請求項1に記載の方法。
【請求項6】
前記シーケンスは、線形時相論理に少なくとも部分的に基づき、
前記結果データは、前記線形時相論理の評価に少なくとも部分的に基づくことを特徴とする請求項5に記載の方法。
【請求項7】
前記オブジェクトは、静的オブジェクトまたは動的オブジェクトを含むことを特徴とする請求項1に記載の方法。
【請求項8】
前記シナリオは、第1のシナリオを含み、値の前記組み合わせは、前記第1のシナリオに関連付けられた値の第1の組み合わせと、第2のシナリオに関連付けられた値の第2の組み合わせとを含み、前記方法は、
値の前記第1の組み合わせと値の前記第2の組み合わせとが同一の結果データに関連付けられるかどうかを決定することと、
値の前記第1の組み合わせと値の前記第2の組み合わせとが前記同一の結果データに関連付けられるとき、前記第1のシナリオまたは前記第2のシナリオのうちのいずれか1つのみを実行すること、または
値の前記第1の組み合わせと値の前記第2の組み合わせとが前記同一の結果データに関連付けられないとき、前記第1のシナリオおよび前記第2のシナリオを実行すること
のうちの少なくとも1つを行うことと
をさらに備えることを特徴とする請求項1に記載の方法。
【請求項9】
前記シナリオは、シミュレーション環境に関連付けられることを特徴とする請求項1に記載の方法。
【請求項10】
1つまたは複数のプロセッサによって実行可能な命令を格納する非一時的なコンピューター読取り可能媒体であって、前記命令は、実行されると、前記1つまたは複数のプロセッサに、
シナリオに含まれるオブジェクト、オブジェクト挙動、条件、または作動のうちの少なくとも1つを表す値のセットを受信することと、
値の前記セットに少なくとも部分的に基づいて、値の組み合わせを決定することと、
地図における前記オブジェクトに関連付けられたセマンティック座標を受信することと、
値の前記組み合わせと前記セマンティック座標とに少なくとも部分的に基づいて、実行のための前記シナリオを生成することと、
前記シナリオを実行することに少なくとも部分的に基づいて、前記シナリオに対する自律的コントローラーによる応答を示す結果データを決定することと
を含む動作を行わせることを特徴とする非一時的なコンピューター読取り可能媒体。
【請求項11】
前記オブジェクトは、定義された寸法を含むもの、姿勢、または前記シナリオにおいて前記オブジェクトを描画するメッシュのうちの少なくとも1つに関連付けられることを特徴とする請求項10に記載の非一時的なコンピューター読取り可能媒体。
【請求項12】
前記姿勢は、慣性座標系、地図ベースの座標系、または走路ベースの座標系のうちの少なくとも1つに少なくとも部分的に基づくことを特徴とする請求項11に記載の非一時的なコンピューター読取り可能媒体。
【請求項13】
前記シナリオは、シミュレーション環境に関連付けられることを特徴とする請求項10に記載の非一時的なコンピューター読取り可能媒体。
【請求項14】
前記シナリオは、前記オブジェクトと地図との間の相互作用を表すことを特徴とする請求項10に記載の非一時的なコンピューター読取り可能媒体。
【請求項15】
前記オブジェクトは、静的オブジェクトまたは動的オブジェクトを含むことを特徴とする請求項10に記載の非一時的なコンピューター読取り可能媒体。
【請求項16】
1つまたは複数のプロセッサと、
前記1つまたは複数のプロセッサによって実行可能な命令を格納する1つまたは複数の非一時的なコンピューター読取り可能媒体であって、前記命令は、
シナリオに含まれるオブジェクト、オブジェクト挙動、条件、または作動のうちの少なくとも1つを表す値のセットを受信することと、
値の前記セットに少なくとも部分的に基づいて、値の組み合わせを決定することと、
地図における前記オブジェクトに関連付けられたセマンティック座標を受信することと、
値の前記組み合わせと前記セマンティック座標とに少なくとも部分的に基づいて、実行のための前記シナリオを生成することと、
前記シナリオを実行することに少なくとも部分的に基づいて、前記シナリオに対する自律的コントローラーによる応答を示す結果データを決定することと
を含む動作を行うように前記1つまたは複数のプロセッサをプログラムする、非一時的なコンピューター読取り可能媒体と
を備えたことを特徴とするシステム。
【請求項17】
前記オブジェクトは、定義された寸法を含むもの、姿勢、または前記シナリオにおいて前記オブジェクトを描画するメッシュのうちの少なくとも1つに関連付けられることを特徴とする請求項16に記載のシステム。
【請求項18】
前記シナリオは、シミュレーション環境に関連付けられることを特徴とする請求項16に記載のシステム。
【請求項19】
前記セマンティック座標は、道路の交差点の種類を含むことを特徴とする請求項16に記載のシステム。
【請求項20】
前記自律的コントローラーが前記シナリオにどのように応答するかを示す前記結果データを決定することは、前記シナリオを与えられた前記自律的コントローラーの作動空間を決定することを含むことを特徴とする請求項16に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、シナリオを生成する方法およびシステムに関し、より詳細には、シミュレーション環境における、シナリオを生成する方法およびシステムに関する。
【背景技術】
【0002】
関連出願の相互参照
本PCT国際出願は、2017年1月13日に出願された「SCENARIO DESCRIPTION LANGUAGE」と題する米国出願第15/405649号明細書に関し、2016年10月14日に出願された米国仮出願第62/408641号明細書の利益を主張し、内容全体が参照によって本明細書に組み込まれる。
【0003】
指定された開始条件を与えられた環境におけるオブジェクト同士の相互作用を、一般に、シナリオと呼ぶことができる。システムの様々なパラメーター、例えばロバスト性などを、システムからの入力を与えられたシナリオの結果(すなわち、最終結果)に基づいて、カテゴライズすることができる。しばしば、特定のシナリオの物理的なテストまたは検証は、実行可能でも可能でもない。十分に単純なシナリオに対して、必要に応じて物理的な近似を含む、テストまたは検証の目的のために解析解を得ることができることが可能である。しかしながら、状況があまりに複雑になると、解析解は、実行可能でないことがある。上記の状況において、テストおよび検証は、シミュレーションの使用を通して行われる。
【発明の概要】
【0004】
一実施例として、シミュレーションは、自律走行車のための操作ソフトウェアをテストするために使用されている。交通および歩行者の中でソフトウェアを安全にテストすることが不可能であるので、シミュレーションが必要である。加えて、まったく同じ条件を使用して、上記のテストを繰り返すことは、事実上不可能である。例えば、自律走行車が、安全上の懸念と繰り返すことができることとの両方のために、幹線道路上の酔っ払った運転手を何度も回避する状況を、正確に再現することは、ほぼ不可能であろう。さらにまた、物理的なテストは、また、テストをすることができるシナリオの実行可能な回数についての制限を提示する(例えば、数百万回、ある結果をテストして出すことは、実現可能でないことがある)。したがって、今述べたシミュレーションは、自律走行車が遭遇することがあり得るシナリオを正確に再生するために、世界および世界の中の障害物を再現することを試みる。
【図面の簡単な説明】
【0005】
本明細書において説明される技法を、例として、同様の番号が同様の要素を示す、添付の図面を参照して、今から説明するものである。
【0006】
【
図1】シナリオ記述言語を使用してシナリオがどのように定義されるかを説明するブロック図の一例を例示する図である。
【
図2】シナリオ記述言語を使用して作成することができるシナリオ例を示す図である。
【
図4A】シナリオ記述言語を使用してユーザーによって定義されるようなプリミティブを結合して組み合わせることによって作成される多くのシナリオのうち第1のシナリオ例を示す図である。
【
図4B】
図4Aのように多くのシナリオのうち第2のシナリオ例を示す図である。
【
図4C】
図4Aのように多くのシナリオのうち第3のシナリオ例を示す図である。
【
図4D】
図4Aのように多くのシナリオのうち第4のシナリオ例を示す図である。
【
図4E】
図4Aのように多くのシナリオのうち第5のシナリオ例を示す図である。
【
図5】シナリオ記述言語を使用してシナリオを定義するためにおよび/またはシナリオ記述言語を使用して定義されたシナリオをシミュレートするために使用することができるコンピューティングシステムの例を例示する図である。
【
図6】シミュレーション環境においてシナリオを構成する処理の例を例示する図である。
【
図7】シナリオ記述言語を使用してユーザーによって定義されるようなプリミティブを結合して組み合わせることによって多数のシナリオを生成する処理の例を例示する図である。
【
図8】有用な情報を提供するシナリオを決定し有用な情報を提供しない他のシナリオを取り除く処理の例を例示する図である。
【発明を実施するための形態】
【0007】
以下の詳細な説明は、シミュレーションを構成する際に使用するドメイン固有言語を作成する技法に向けられる。説明される技術は、一般に、様々なシミュレーション環境に適用できることが可能であるが、簡潔にする目的のために、詳細な説明は、自動車を含む実施例に向けられる。上述したように、多くの産業が、テストおよび検証のために、シミュレーション環境を使用する。制限でない実施例として、シミュレーションを使用して、自律走行車上に実行されるソフトウェア(すなわち、自律的なコントローラー)を検証して、ソフトウェアが上記の自律走行車を安全に制御することができることを保証することができる。追加および/または代替の実施例において、シミュレーションを使用して、ソフトウェアに基づいて走行する自律走行車の制約について学習することができる。例えば、シミュレーションを使用して、路面状態、環境騒音、欠陥部品などを考慮して、自律走行車の作動空間(すなわち、自律的なコントローラーが自律走行車を効果的に制御するパラメーターのエンベロープ)を理解することができる。さらに、シミュレーションは、自律走行車の作動および設計を改善するためのフィードバックを生成するのに役立つことができる。例えば、いくつかの例において、シミュレーションは、自律的コントローラーにおいて必要とされる冗長性の量を決定するために、またはシミュレーションを通して学習されることに基づいて自律的コントローラーの挙動をどのように変更するかを決定するために、役立たせることができる。さらにまた、追加および/または代替の実施例において、シミュレーションは、自律走行車のハードウェア設計、例えば自律走行車上におけるセンサーの配置を最適化することなどの情報を提供するのに役立たせることができる。
【0008】
テストおよび検証を実行するためにシミュレーション環境を作成する場合、様々および特定の実施例を用いて、環境を具体的に列挙することが可能である。上記の環境の各インスタンス化は、一意的であり、定義し得る。すべての可能なシナリオを手動で列挙することは、途方もない時間を必要とすることあり得るし、もしすべての可能なシナリオが構成されないならば、様々なシナリオが、未テストになり得る。加えて、多数のシナリオを記述することができるけれども、シナリオの追加があらゆる追加の役立つ情報を提供するという保証はない。例えば、交差点におけるシミュレートされる自動車の開始する位置の違いが増えていくことは、コンピューターコードの特定のセットを与えられるシナリオにおいて応答する自律走行車の能力について、あるとしても追加の大して役に立たない情報を提供するしかできない。
【0009】
本明細書において説明される技法は、ユーザーに、シミュレートされるためのシナリオを、簡潔に、高水準に記述することできるようにするドメイン固有言語に向けられる。ドメイン固有言語は、シミュレーション環境においてシナリオをインスタンス化するために、コンピューティングシステムによって実行できることが可能である。一実施例において、ドメイン固有言語を使用して、役立ちそうにないシナリオを取り除くことができるよう、役立つシナリオの結果を定義することができる。こうして、ドメイン固有言語を使用して、どれが役立つ情報を提供するであろうかをシミュレートする、限られた数のシナリオを決定することができる。そして、役立つ情報を提供すると決定されたシナリオを、シミュレーション環境においてインスタンス化することができる。上記のドメイン固有言語は、検証およびテストのために役立つ情報を提供する特定のシナリオにわたって最適化することによって、計算の複雑性、メモリ要件、および処理時間を減らす。
【0010】
少なくとも1つの実施例において、シミュレーション環境を、例えば地図など、環境と相互作用するプリミティブの使用を通して構成することができる。プリミティブは、制限はしないが、(静的か動的かのいずれかであることが可能である)エンティティ、エンティティ挙動、作動、条件、ノイズ、障害などを含むことができる。少なくとも1つの実施例において、シナリオは、地図と相互作用する1つまたは複数のプリミティブを含むことができる。いくつかの実施例において、エンティティを、座標系(例えば、2次元または3次元の座標系)、例えば、慣性座標系、走路に基づく座標系、または地図に基づく座標系などに関連付けることができて、エンティティの位置および/または速度を記述することができる。上記のシナリオを、SDF(Scenario Definition Format)において列挙することができる。加えて、以下に詳細に説明するように、プリミティブを、線形時相論理を介して接続することができる。制限でない実施例として、ある寸法および速度を有しており、さらに、指定された寸法および速度を有するシミュレートされるテスト自律走行車の前に、車道に沿って予め決められた距離にあるよう位置付けされている1つのエンティティ、例えば、自動車として、1つのシナリオを、定義することができる。
【0011】
上述したように、SDFは、無数のシナリオを列挙することが可能である。しかしながら、作成することができるシナリオの多くは、非物理的であるか、または他のシナリオと比較して、情報の利益を僅かに提供するかのいずれかである。例えば、シナリオを作成するために、プリミティブの未熟な使用は、プリミティブエンティティが互いに交わるシナリオをもたらすことができる。上記のシナリオは、非物理的であろう。加えて、上述したように、上のシナリオを開始する位置の変化が増えていくことは、他のシナリオと比較して、役立つデータを提供しないことがある。
【0012】
以下に説明するように、ドメイン固有言語を使用して、コマンドをほとんど使用することなく、多数のシナリオを容易にインスタンス化することができるよう、高水準のシナリオを指定することができる。したがって、多数のシナリオを、環境に関連付けられたパラメーター空間を網羅的かつ効率的に探索することができる。少なくとも1つの実施例において、今述べたことは、シナリオのインスタンス化の間において相違だけを指定する必要があるよう、シナリオを「テンプレート化」することによって達成することができる。シナリオを作成するためのドメイン固有言語、またはSDL(シナリオ記述言語)の使用を通して、有用を提供するシナリオがインスタンス化されるよう、プリミティブシナリオを、容易に列挙することができる。少なくとも1つの実施例において、SDLは、高水準の定義セットを使用して環境におけるプリミティブの明記を可能にする、ドメイン固有言語である。いくつかの実施例において、SDLは、ユーザー定義されたやり方において、プリミティブを結合して組み合わることを可能にする。一実施例において、SDLの使用は、シミュレーションを介してテストされる実現可能な興味深いシナリオセットを提供する。
【0013】
上述したように、プリミティブを、例えば地図内など、環境内においてインスタンス化することができる。少なくとも1つの実施例において、SDLは、例えば、地図のトポロジーまたは「セマンティック座標(semantic coordinates)」に関してプリミティブをインスタンス化することによって、地図座標とは独立したやり方において表現することができる場所に、自動的な地図上のインスタンス化を可能にする。制限でない実施例として、SDLにより、(ユーザーに、特定の2次元または3次元の座標を入力することを必要とするのとは対照的に)プリミティブのインスタンス化がT字路におけるものであることをユーザーが指定することを可能にする。地図のトポロジーを使用して高水準のシナリオを定義することによって、ユーザーは、地図について何も知る必要がない。加えて、例えば、交差点の種類に関してインスタンス化を定義することによって、与えられた種類のすべての交差点を、同様のプリミティブを用いて実質的に同時にインスタンス化することができる。SDLを使用すると、テストシナリオの簡潔な定義を有することが可能であり、コンピューターコードに、高度に読み取り可能であることを可能にし、地図データが更新されるたびに、テストシナリオの大規模なスイートの迅速な更新を可能にする。だから、SDLは、システムを開発するときユーザーに頻繁にテストを実行することを可能にするだけでなく、条件にわたる「網羅的で列挙的な」探索を実行することを可能にする。加えて、メモリおよび処理要件を、有用な情報を提供するシナリオにわたって反復することによる繰り返し処理を制限することによって、減らす。さらなる詳細は、
図1~8を参照して以下に提供する。
【0014】
プリミティブ
上述したように、SDLは、プリミティブセットに基づいて構成される、高水準のシナリオを容易に定義することを可能にする。少なくとも1つの実施例において、プリミティブを、地図内など、環境内においてインスタンス化することができる。地図は、2次元または3次元であることが可能である。2次元および/または3次元の地図は、例えば、制限でないが、(例えば交差点などの)トポロジー、街路、山脈、道路、地形、および一般的な環境などの、環境についての情報を提供することが可能なあらゆる数のデータ構造であることが可能である。説明の目的のために、プリミティブは、シミュレーション環境の特定の側面を定義する。プリミティブの制限でない例は、座標系、条件、動作、エンティティ、エンティティ挙動、ノイズ、障害などを含む。
【0015】
座標系を利用して、シナリオにおけるエンティティの位置および/または速さ(もしくは速度)を記述することができる。座標系は、慣性座標系、走路ベースの座標系、または地図ベースの座標系などを含むことができる。慣性座標系は、何らかの局所的または大域的な座標系に関する座標系であることが可能である。走路ベースの座標系は、例えば道路の断片などの走路上における何らかの位置に関する座標系であることが可能である。地図ベースの座標系は、上述したようなセマンティック座標を利用することができる。
【0016】
少なくとも1つの実施例において、様々なプリミティブは、コンピューティングシステム上において実行可能なシミュレーションアプリケーションに命令を提供することができる。以下に説明するシミュレーションアプリケーションを、本明細書において、「シミュレーター」と呼ぶことができる。
【0017】
少なくとも1つの実施例において、条件プリミティブは、条件プリミティブに関連付けられた条件が満たされるまで遅延させられる、何らかの動作の実行または他の何らかの条件の評価の実行を引き起こすことができる。条件プリミティブは、制限でないが、「wait」条件、「wait for」条件、「distance between or near」条件、「speed」条件、「in region」条件などを含むことができる。加えて、および/または、代替えとして、「inversion modifier」条件は、条件を反対にすることができる。さらに、条件は、プリミティブとしての多数の条件を組み合わせることができるよう、ブール演算子、例えば、制限でないが、and、or、not、xor、nor、nandなどを含むこともできる。以下に説明する条件の名前は、制限でなく、条件を、追加および/または代替の実施例において、同じ名前または異なる名前によって呼ぶことができることに注意すべきである。
【0018】
「wait」条件は、何らかの動作の実行または他の何らかの条件の評価の実行を、開始するまでに指定された時間間隔だけ遅延させるよう、シミュレーターに命令することができる。すなわち、時間間隔が経過すると、「wait」条件を、満たすことができる。「wait for」条件は、別の条件が満たされるまで、あらゆる動作をとらないよう、シミュレーターに命令することができる。すなわち、別の条件が満たされると、「wait for」条件を、満たすことができる。
【0019】
「distance between or near」条件は、2つのエンティティの間の距離が何らかのユーザー指定された値を下回るまで、何らかの動作の実行または他の何らかの条件の評価の実行を、遅延させるよう、シミュレーターに命令することができる。すなわち、指定されたエンティティ間の距離が距離の閾値以内になったと決定されると、「distance between or near」条件を、満たすことができる。少なくとも1つの実施例において、指定されたエンティティ間の距離が距離の閾値以内になると、2つのエンティティ間の距離が何らかのユーザー指定された値を下回ったことを示すブールシグナリング(Boolean signaling)を、シミュレーターに伝えることができる。
【0020】
「speed」条件は、エンティティの速さ(または速度)が指定された値よりも小さく(もしくは大きく)なるまで、または指定された値に達するまで、何らかの動作の実行または他の何らかの条件の評価の実行を遅延させるよう、シミュレーターに命令することができる。すなわち、エンティティの速さ(または速度)が指定された値よりも小さく(もしくは大きく)なると、または指定された値に達すると、「speed」条件を、満たすことができる。少なくとも1つの実施例において、エンティティの速さ(または速度)が指定された値よりも小さく(もしくは大きく)なると、または指定された値に達すると、エンティティの速さ(または速度)が指定された値よりも小さく(もしくは大きく)なったこと、または指定された値に達したことを示すブールシグナリングを、シミュレーターに伝えることができる。
【0021】
「in region」条件は、エンティティが指定された領域内にある間、何らかの動作の実行または他の何らかの条件の評価の実行を遅延させるよう、シミュレーターに命令することができる。すなわち、少なくともエンティティの一部が指定された領域に対応するシーン(例えば、環境)の空間の容積内にあることに基づいて、「in region」条件を、満たすことができる。少なくとも1つの実施例において、少なくともエンティティの一部が指定された領域に対応するシーン(例えば、環境)の空間の容積内にあることに基づいて、エンティティが指定された領域内にあることを示すブールシグナリングを、シミュレーターに伝えることができる。
【0022】
少なくとも1つの実施例において、動作プリミティブに対応する動作は、シーケンスのインスタンス化の間に遭遇すると、シミュレーターが実行することができる。動作は、トリガーをオンまたはオフにすることを含むことができる。さらにまた、動作は、例えば、テストの最後に、成功または失敗を識別することを含むことができる。少なくとも1つの実施例において、動作は、呼び出されるとシミュレーターに関連付けられたディスプレイにメッセージを提供するために、ログ(表示)メッセージを生成することを含むことができる。さらに、動作は、エンティティを作成および/または破壊すること、および/またはエンティティ(例えば、サイズ、形状、型など)を変更することを含むことができる。少なくとも1つの実施例において、動作は、遠隔操作の動作(すなわち、仮想オペレーターからコマンドを伝えること)を容易にすることを含むことができる。
【0023】
少なくとも1つの実施例において、エンティティのプリミティブは、シーンのエンティティに対応することができる。エンティティの例は、自動車、歩行者、バイク、建物などを含むことができる。各エンティティは、与えられた寸法、型、姿勢、およびシミュレートされる環境におけるエンティティとして描画するためのメッシュに関連付けることができる。寸法は、エンティティの長さ、幅、および高さに対応することができる。エンティティの型は、エンティティが静的(動かない)でも動的(動く)でも示すことができる。静的なエンティティの例は、建物を含むことができる。動的なエンティティの例は、自動車、歩行者、バイクなどを含むことができる。
【0024】
エンティティのプリミティブに関連付けられた姿勢は、座標系(例えば、慣性座標系、走路ベースの座標系、地図ベースの座標系など)における対応するエンティティの場所および/または向きを示すことができる。例えば、エンティティの姿勢を、座標(x,y)および角度オフセット(偏揺れ)を使用して、2次元慣性座標系において記述することができる。同様に、3次元座標系におけるエンティティの姿勢を、向き(横揺れ、縦揺れ、偏揺れ)だけでなく、座標(x,y,z)により記述することができる。または、エンティティの姿勢を、走路ベースの座標系において、座標(s,t,[yaw_offset])を用いて記述することができ、ここで、「s」は、走路の軌道に沿ったオフセットであり、「t」は、走路の軌道と垂直のオフセットであり、yaw_offsetは、走路に沿った走行の方向に関連する。地図ベースの座標系において、姿勢を、セマンティック座標によって定義することができる。セマンティック座標は、他の知られた姿勢に関するエンティティの姿勢に対応することができる。
【0025】
エンティティ挙動のプリミティブは、エンティティが環境においてどのように振る舞うかを示すことができる。エンティティ挙動のプリミティブは、制限しないが、「止まる」挙動、「動く」挙動、「道路を辿る」挙動、「道路を横切る」挙動、「エンティティに追従する」挙動などを含むことができる。「止まる」挙動は、エンティティを動かすことを止めるよう、シミュレーターに示すことができる。「動く」挙動は、慣性座標に基づいてエンティティを動かすよう、シミュレーターに示すことができる。いくつかの実施例において、「動く」挙動は、速さ(または速度)に関連付けることができる。「道路を辿る」挙動は、地図内の道路に沿ってエンティティを動かし続けるよう、シミュレーターに示すことができる。いくつかの実施例において、「道路を辿る」挙動は、もしエンティティが交差点に接近したならば、エンティティをどのようにナビゲートするかを(すなわち、どの分岐を選ぶかを)シミュレーターに示すことができる。いくつかの実施例において、「道路を辿る」挙動は、速さ(または速度)に関連付けることができる。「道路を横切る」挙動は、地図の道路を横方向に横切ってエンティティを動かすよう、シミュレーターに示すことができる。いくつかの実施例において、「道路を横切る」挙動は、速さ(または速度)に関連付けることができる。「エンティティに追従する」挙動は、第2のエンティティに追従するよう第1のエンティティを動かすべきであることを、シミュレーターに示すことができる。少なくとも1つの実施例において、「エンティティに追従する」挙動は、速さ(または速度)、および第1のオブジェクトと第2のオブジェクトとの間の距離であるオフセット値に関連付けることができる。
【0026】
上述したエンティティ挙動の名前は、制限でなく、追加および/または代替の実施例において、エンティティ挙動を、同じ名前または異なる名前によって呼ぶことができること注意すべきである。さらにまた、代替の実施例において、エンティティ挙動を、それ自体のプリミティブの代わりにエンティティのプリミティブに、マッピングする、またはその他のやり方により関連付けることができる。
【0027】
ノイズは、環境におけるガウス雑音または他の遮蔽を表すことができる。すなわち、ノイズプリミティブは、シミュレートされる環境において特定のノイズを生じるよう、シミュレーターに示すことができる。
【0028】
障害は、エンティティおよび/または環境に関連付けられた不具合を表すことができる。例えば、制限でない実施例として、障害は、エンティティに関連付けられたセンサーの不具合、エンティティに関連付けられたタイヤの不具合、またはエンティティに関連付けられた別のコンポーネントの不具合を表すことができる。障害プリミティブは、シミュレートされる環境においてそれぞれの障害を生じるよう、シミュレーターに示すことができる。
【0029】
前述の段落は、座標系、条件、動作、エンティティ、エンティティ挙動、ノイズ、障害などを含む、プリミティブの制限でない実施例を説明したが、本明細書において説明されるようなシナリオを生成するために、追加および/または代替のプリミティブを使用することができることに注意すべきである。
【0030】
シナリオ記述言語
図1は、一実施例における、SDLを用いてシナリオがどのように生成されるかを大まかに例示するブロック
図100である。示すように、プリミティブ110は、エンティティ112と、動作114と、条件116と、他のあらゆるプリミティブ型118(例えば、エンティティ挙動、ノイズ、障害など)を含むことができる。シナリオは、シナリオ記述言語120を使用して、高水準に定義することができる。シナリオ記述言語120は、前述のプリミティブ110に基づいてシナリオの容易な作成を可能にする。シナリオ記述言語120は、ユーザーに、1つまたは複数のプリミティブ110についての仕様を定義することを可能にする。例えば、ユーザーは、エンティティ挙動をエンティティ112に割り当てることによりエンティティのある速さ(または速度)を指定するだけでなく、ある寸法、姿勢を有するエンティティ112を(例えば、走路座標、慣性座標、またはセマンティック座標を使用して)定義することもできる。少なくとも1つの実施例において、少なくとも1つのプリミティブを、「自律走行車」として指定することができ、自律的なコントローラーに関連付けられて、シミュレーションの出力が上記の自律的コントローラーによって制御されるだろう自律走行車の挙動を検証するようにすることができる。
【0031】
加えて、シナリオ記述言語120は、例えば、線形時相論理を使用して、あるプリミティブを互いにどのように関連付けるかを、ユーザーが指定することを可能にする。一実施例において、ユーザーは、シーケンスを指定することによって、プリミティブ間のアソシエーションを定義する。シーケンスは、多数のステップを含み、シミュレーターによって逐次順に実行することができる。少なくとも1つの実施例において、シーケンスは、シーケンスの1つのステップが別のシーケンスのステップであるよう、互いに入れ子にすることができる。制限でない実施例として、シーケンスは、「wait for」条件と、後続する「wait」条件と、後続する「追従」挙動を含むことができる。
【0032】
シナリオ記述言語120は、ユーザーによって定義されたやり方において組み合わされるプリミティブ110を使用して、1つまたは複数のシナリオ122a~122nを作成することができる。プリミティブ110が各シナリオ122a~122nのために組み合わされるやり方を、上述したように、線形時相論理によって定義することができる。少なくとも1つの実施例において、各シナリオ122a~122nを、例えば結果124a~124nなどの結果に関連付けることができる。結果は、シミュレーション環境において作成されたシナリオが与えられると、自律的コントローラーがどのように応答すべきかを示すことができる。各々の結果を使用して、自律的コントローラーが、シミュレーション環境において、作成されたシナリオが与えられた結果に矛盾しない応答(例えば、成功)か、結果に矛盾する応答(例えば、失敗)かをするのを、決定することができる。
【0033】
高水準のシナリオ122a~122nの各々を、シミュレーションにおいて、プロセッサ(例えば、GPU(グラフィックス処理ユニット)など)を使用して、上記のシミュレーションを実行する多数のコンピューターを使用して、または組み合わせて、実質的に同時および/または並列に実行することができる。だから、多くの結果を、実質的に同時に生成することができる。
【0034】
図2は、ユーザーが作成することができる例示的なシナリオ200のブロック図を例示する。例示的なシナリオ200は、
図1を参照して上述したシナリオ122a~122nのうちいずれか1つに対応することができる。開始位置210を、
図2に示すが、上記の開始位置210を、定義する必要はない。シナリオ200の開始時に、ユーザーは、シミュレーターによってインスタンス化されるための1つまたは複数のプリミティブ220を指定および定義することができる。すなわち、ユーザーは、シナリオのプリミティブ220を定義する命令を提供することができる。
図2に例示する例において、上記のプリミティブは、試験自動車222と、観察自動車226とを含む。試験自動車222を、サイズ、交差点に関する位置、速さ(または速度)、動きの方向(時計回り(CW))などを有するとして定義することができる。試験自動車222は、プリミティブ224として表される挙動(「交差点に向かう」)に関連付けることができる。さらに、観察自動車226を、サイズ、交差点に関する位置、速さ(または速度)、動きの方向(反時計回り(CCW))などを有するとして定義することができる。一連の接続として示すが、プリミティブ220を、あらゆる順においてインスタンス化すること、または実質的に同時にインスタンス化することができる。
【0035】
さらに例示するように、ひとたびインスタンス化されると、シミュレーターに、シーケンス228を実行するように命令することができる。上述したように、シーケンス228は、線形時相論理を使用して、プリミティブ220間のアソシエーションを定義することができる。プリミティブ220およびシーケンス228は、
図1を参照して上述したシナリオ記述言語120に対応することができる、シナリオ記述言語230によって定義することができる。シーケンス228は、オプションとして、シーケンス開始232を有することができる。上記のシーケンス開始232は、シーケンス228が開始されようとしていることを、シミュレーターに示すことができる。制限でない実施例において、シーケンス228を、「wait for」条件234、「wait」条件236、および「エンティティに追従する」挙動238として定義することができる。上記のシーケンス228に関連付けられた命令は、最初に試験自動車222が交差点に接近するのを待ち、1秒待ち、次に試験自動車222が観察自動車226に追従するよう、シミュレーターに命令する。
【0036】
図3は、シミュレーターにおいて実行されるだろう、
図2において定義されたシナリオ例300を示す。示すように、大きい方のブロックは、例えば地図などの環境に位置付けられた、試験自動車222を表し、小さい方のブロックは、観察自動車226を表す。ブロックの上方の線320は、試験自動車222の動きを表す。示すように、試験自動車222は、シーケンス228によって規定されたように、交差点310に接近し、待ち、次に、観察自動車226に追従し始める。
【0037】
直積
上の実施例は、どのようにSDLによりユーザーが単一のシナリオを容易に指定することができるようにするかを示したが、さらに、SDLは、ユーザーによって、より高水準の(すなわち、より一般的な)記述を与えられた多数のシナリオを、ユーザーに、即座に生成することができるようにする。高水準のユーザー記述に基づく多数のシナリオの今述べた作成は、直積と呼ばれる。直積は、テストシナリオを生成するために組み合わされる値を定義する、任意の個数の名づけられた引数を受け入れる。名づけられた各引数は、変数に対応することができる。変数の制限でない実施例は、道路上の車線における位置、時間、路面状態などを含むことができる。いくつかの実施例において、変数は、プリミティブに関連付けることができる。すなわち、プリミティブは、異なるシナリオを生成するために変化させることができる、いくつかの側面に関連付けることができる。名づけられた各引数は、対応する変数についての可能な値のリストを受け取る。少なくとも1つの実施例において、可能な値のリストの可能な値は、可能な値の範囲であることが可能である。そして、値のすべての組み合わせに対して割り当てられたパラメーターを保有する反復変数が、割り当てられる。各反復を、より特定的なシナリオに関連付けることができ、各シナリオを、テストおよび検証のためのシミュレーションにおける使用に対して出力することができる。
【0038】
式1を、上述した直積の制限でない実施例として、以下に提供する。
式1
パラメーター(変数1=[値1,値2],変数2=[値3,値4])
【0039】
式1において、パラメーター()は、直積に対応する。変数1および変数2は、変数の例である。直積は、上で説明されたように、任意の数の変数を有することができる。各変数は、1つまたは複数の可能な値を含むことができる。式1において、値1および値2は、変数1のための可能な値であり、値3および値4は、変数2のための可能な値である。シミュレーターは、値の異なる組み合わせに基づいて、異なるシナリオを生成することができる。すなわち、シミュレーターは、可能な値からなる各可能な組み合わせの順列を作成することができる。例えば、表1は、式1の直積に基づいてシナリオの制限でない実施例を生成することができることを示す。
【0040】
【0041】
制限でない実施例として、
図2および
図3に関して上に説明されたシナリオについて考察する。上記のシナリオにおいて、「wait」条件236は、1秒の値に関連付けられる。しかしながら、上述した結合する組み合わせを達成するために、「wait」条件236に関連付けられた時間を、変化させることができる。例えば、時間は、1秒または5秒の値であるすることができる。シナリオにおける第2の変数は、観察自動車226の速さ(または速度)に対応することができる。例えば、観察自動車226の速さ(または速度)を、変化させることができる。観察自動車226は、時速10マイル(mph)または30mphで走行していることが可能である。上述した結合する組み合わせに従うと、第1のシナリオは、観察自動車226が10mphで走行しているときに、1秒の値に関連付けられた「wait」条件236に対応することができ、第2のシナリオは、観察自動車226が10mphで走行しているときに、5秒の値に関連付けられた「wait」条件236に対応することができ、第3のシナリオは、観察自動車226が30mphで走行しているときに、1秒の値に関連付けられた「wait」条件236に対応することができ、第4のシナリオは、観察自動車226が30mph)で走行しているときに、5秒の値に関連付けられた「wait」条件236に対応することができる。
【0042】
図4A~4Eは、直積の能力を示す。制限でない実施例として、開始する位置の範囲と、インスタンス化されるための数々の他のプリミティブ(例えば、関連付けられた寸法、速度、およびカテゴリを有するエンティティ)の範囲とをユーザーが指定する、直積について考察する。例えば、直積の第1の変数は、開始する位置に対応することができ、異なる開始する位置に関連付けられた可能な値が、第1の変数に関連付けられ、直積の第2の変数は、数々のプリミティブに対応することができ、数々のプリミティブに関連付けられた可能な値が、第2の変数に対応することができる。
【0043】
図4A~4Eに示すように、多数のシナリオを、単一の直積によって作成することができ、すべては、単一のT字路と、単一の試験自動車222とを有することによってカテゴライズされる。
図4Aによって表されるシナリオ400は、第1の開始する位置において、試験自動車222を含む。2人の歩行者402A、402Bが存在し、他の自動車は存在しない。
図4Bによって表されるシナリオ404は、第2の開始する位置において、試験自動車222を含み、2つの他の自動車406A、406Bが存在する。
図4Cによって表されるシナリオ408は、第3の開始する位置において、試験自動車222を含み、1つの他の自動車410が存在する。
図4Dによって表されるシナリオ412は、第4の開始する位置において、試験自動車222を含み、他の自動車または歩行者は存在しない。
図4Eによって表されるシナリオ414は、第5の開始する位置において、試験自動車222を含み、1つの他の自動車416が存在する。先に注意したように、多くの他のシナリオの中のシナリオの各々を、コンピューターコードの単一のラインを使用して作成することができる。
【0044】
少なくとも1つの実施例において、直積に含まれる変数を、検証およびテストのためにどのシナリオが作成されるかを制限するよう、最適化することができる。追加および/または代替の実施例において、生成された値の組み合わせをフィルタリングして、検証およびテストのためにどのシナリオが作成されるかを制限するために、発見的手法を利用することができる。少なくとも1つの実施例において、直積に含まれる変数の組み合わせを、「有用なシナリオ」に関連付けるために決定された変数に制限することができ、機械学習アルゴリズムによって決定することができる。
【0045】
機械学習は、受け取ったデータから学習する1つまたは複数のプログラムということができる。例えば、機械学習メカニズムは、例示的な入力から作成されるデータモデルを構築し、変更し、または利用することができ、データモデルを使用して、予測または決定を行う。現在の実施形態において、機械学習メカニズムを使用して、シナリオおよび/または値の組み合わせが冗長な結果を出力するかどうかを予測することができる。すなわち、機械学習メカニズムは、(事前定義された基準ごとに)どのシナリオが合格(すなわち、成功)であるか、または不合格(すなわち、不成功)であるかに関連付けられたデータをレバレッジすることができ、どのシナリオセットが集合的に合格であり、または不合格であるかを決定することができる。上述の決定に基づいて、機械学習メカニズムは、シナリオセットのシナリオは冗長であると決定することができる。データモデルを、教師あり学習アルゴリズム(例えば、人工ニューラルネットワーク、ベイジアン統計、サポートベクトルマシン、決定木、分類器、k-最近傍など)、教師なし学習アルゴリズム(例えば、人工ニューラルネットワーク、相関ルール学習、階層的クラスタリング、クラスタ分析など)、半教師あり学習アルゴリズム、ディープラーニングアルゴリズムなどを使用してトレーニングすることができる。
【0046】
少なくとも1つの実施例において、検証およびテストのためにどのシナリオが作成されるかを制限することにより、必要とされる計算の回数を減らすことができる。すなわち、検証およびテストのためにどのシナリオが作成されるかを制限することにより、有用な情報を出力する可能性が高いシナリオに実行される、必要とされる計算の回数を減らすことができる。
【0047】
コンピューター化されたシステム
手短に
図5を参照すると、コンピューター化されたシステム500は、本明細書において説明される技法を実装することができる例示的なコンピューター化されたシステムとして示す。コンピューター化されたシステム500は、ストレージ560と、プロセッサ570と、メモリ540と、オペレーティングシステム520とを有する、コンピューターシステム510を示す。ストレージ560、プロセッサ570、およびオペレーティングシステム520は、通信インフラストラクチャ550を介して、通信可能に結合することができる。オプションとして、コンピューターシステム510は、I/Oデバイス530を介してユーザーと、および通信インフラストラクチャ550を介してネットワーク580と対話することができる。オペレーティングシステム520は、アプリケーション502を制御するために、他のコンポーネントと対話することができる。アプリケーション502は、上で説明されたSDLに基づいてシナリオを生成するよう、プロセッサ570によって実行できることが可能である、シミュレーションアプリケーション504と、シミュレーション環境において作成されたシナリオに応答するよう、プロセッサ570によって実行できること可能である、自律的コントローラー506とを含むことができる。少なくとも1つの実施例において、自律的コントローラー506は、上で説明したように、さらに、自律走行車上において実行されるソフトウェアに対応する。したがって、自律的コントローラー506の応答は、自律走行車が実際の環境においてどのように応答する可能性が高いかを表すことができる。
【0048】
本明細書において説明されるシステムおよび方法は、ソフトウェアもしくはハードウェア、またはあらゆる組み合わせにおいて実装することができる。本明細書において説明されるシステムおよび方法は、物理的もしくは論理的に互いに別々であることが可能であり、またはそうでなくてよい1つまたは複数のコンピューティングデバイスを使用して、実装することができる。方法を、オンプレミス型ハードウェア、オンプレミス型仮想システム、またはホスティング型プライベートインスタンスのいずれかとして配置されるコンポーネントによって実行することができる。加えて、本明細書において説明される方法の様々な側面は、他の機能に組み合わせる、または結合させることができる。
【0049】
本明細書において説明される技法を実装するための例示的なコンピューター化されたシステムを、
図5に示す。プロセッサまたはコンピューターシステムは、本明細書において説明される技法のうちいくつかまたはすべてを特に実行するよう、構成することができる。いくつかの実施例において、本明細書に説明される技法を、1つまたは複数のコンピューターまたはプロセッサによって、部分的または全体的に自動化することができる。本明細書において説明される技法を、ハードウェア、ファームウェア、および/またはソフトウェアのいずれかの組み合わせを使用して実装することができる。本方法(またはあらゆる部分もしくは機能)を、ハードウェア、ソフトウェア、ファームウェア、または組み合わせを使用して実装することができ、1つまたは複数のコンピューターシステムまたは他の処理システムにおいて実装することができる。いくつかの実施例において、示されたシステム要素は、単一のハードウェアデバイスに組み合わせることができ、または多数のハードウェアデバイスに分離することができる。もし多数のハードウェアデバイスを使用するならば、ハードウェアデバイスを、物理的に互いに接近して、または互いに遠く離して配置することができる。説明され、例示される方法の実施例は、実例であり、制限でないことを意図する。例えば、方法のステップのうちいくつかまたはすべてを、異なる実施例において、組み合わせ、再配置し、および/または省略することができる。
【0050】
例示的な一実施例において、本明細書に説明される技法を、オペレーティングシステム(O/S)520を介して本明細書に説明される機能性を実施することが可能な1つまたは複数のコンピューターシステムに向けることができる。例示的なコンピューティングシステムは、制限しないが、あらゆるオペレーティングシステム、例えば、制限しないが、Microsoft(商標)Windows(商標)などを実行するPC(パーソナルコンピューター)システムであるすることができる。しかしながら、本明細書において説明される技法は、これらのプラットフォームに制限されない。代わりに、本明細書において説明される技法は、あらゆる適切なオペレーティングシステムを実行するあらゆる適切なコンピューターシステム上に実装することができる。さらに、本明細書において説明される技法の他のコンポーネント、例えば、制限しないが、コンピューティングデバイス、通信デバイス、モバイルフォン、テレフォニーデバイス、電話、PDA(パーソナルデジタルアシスタント)、PC(パーソナルコンピューター)、ハンドヘルドPC、iTV(対話型テレビジョン)、DVD(デジタルビデオレコーダー)、クライアントワークステーション、シンクライアント、シッククライアント、プロキシサーバー、ネットワーク通信サーバー、リモートアクセスデバイス、クライアントコンピューター、サーバーコンピューター、ルーター、ウェブサーバー、データ、メディア、オーディオ、ビデオ、テレフォニーまたはストリーミング技術サーバーなどは、コンピューティングデバイスを使用して実装することができる。サービスを、例えば、制限はしないが、iTV(対話型テレビジョン)、VOD(ビデオオンデマンドシステム)を使用して、およびDVR(デジタルビデオレコーダー)、または他のオンデマンド視聴システムを介して、オンデマンドにより提供することができる。
【0051】
コンピューティングシステム510は、1つまたは複数のプロセッサ570を含むことができる。プロセッサ570は、例えば、制限しないが、通信バス、クロスオーバーバー、またはネットワークなどの通信インフラストラクチャ550に接続することができる。処理およびプロセッサは、同じ物理的はロケーションに配置する必要はない。言い換えると、処理は、例えば、LANまたはWAN接続を介した1つまたは複数の地理的に遠くのプロセッサにおいて実行することができる。コンピューティングシステムは、ディスプレイユニット上の表示のために、通信インフラストラクチャからグラフィックス、テキスト、および他のデータを転送することができるディスプレイインターフェースを含むことができる。
【0052】
さらに、コンピューティングシステム510は、制限はしないが、メインメモリ、RAM(ランダムアクセスメモリ)、およびセカンダリメモリなどを含む、メモリ540を含むことができる。セカンダリメモリは、例えば、ハードディスクドライブ、および/または例えばコンパクトディスクドライブCD-ROMなどのリムーバブルストレージドライブを含むことができる。リムーバブルストレージドライブは、リムーバブルストレージユニットから読み取ること、および/またはリムーバブルストレージユニットに書き込むことができる。理解することができるように、リムーバブルストレージユニットは、コンピュータソフトウェアおよび/またはデータを格納しているコンピューター使用可能な記憶媒体を含むことができる。いくつかの実施例において、マシンアクセス可能な媒体は、コンピューターによってアクセス可能なデータを格納するのに使用されるあらゆるストレージデバイスということができる。マシンアクセス可能な媒体の例は、例えば、制限はしないが、磁気ハードディスク、フロッピーディスク、CD-ROM(コンパクトディスクリードオンリメモリ)もしくはDVD(デジタル多用途ディスク)などの光ディスク、磁気テープ、および/またはメモリチップなどを含むことができる。
【0053】
さらに、プロセッサ570は、例えばデータを格納するための1つまたは複数のデータストレージデバイスなどのストレージ560を含むことができ、またはストレージ560と通信するように作動可能に結合することができる。上記のデータストレージデバイスは、制限でない実施例として、(内臓型ハードディスクおよびリムーバブルディスクを含む)磁気ディスク、光磁気ディスク、光ディスク、リードオンリーメモリ、ランダムアクセスメモリ、および/またはフラッシュストレージを含むことができる。さらに、コンピュータープログラム命令およびデータを有形に具現するのに適したストレージデバイスは、例えば、EPROM、EEPROM、およびフラッシュメモリデバイスなどの半導体メモリデバイス、例えば、内臓型ハードディスクおよびリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ならびにCD-ROMおよびDVD-ROMディスクを含む、すべての形の不揮発性メモリを含むことができる。プロセッサおよびメモリは、ASIC(特定用途向け集積回路)によって補完すること、またはASICに組み込むことができる。
【0054】
加えて、および/または代替えとして、ストレージ560は、コンピューター化されたデータストレージシステムであることが可能である。データストレージシステムは、非リレーショナルデータストア、または例えばMySQL(商標)もしくは他のリレーショナルデータベースなどのリレーショナルデータストアを含むことができる。他の物理的および論理的データベース型を、使用することができる。データストアは、例えば、Microsoft SQL Server(商標)、Oracle(商標)、IBM DB2(商標)、SQLITE(商標)、またはリレーショナルもしくは別のやり方のあらゆる他のデータベースソフトウェアなどの、データベースサーバーであることが可能である。データストアは、構文タグを識別する情報、および構文タグに基づいて操作するのに必要なあらゆる情報を格納することができる。いくつかの実施例において、処理システムは、オブジェクト指向プログラミングを使用することができ、オブジェクトにデータを格納することができる。今述べた実施例において、コンピューティングシステム510は、リレーショナルデータベースにデータオブジェクトを格納するために、ORM(オブジェクト-リレーショナルマッパー)を使用することができる。本明細書において説明されるシステムおよび方法を、あらゆる個数の物理的なデータモデルを使用して実装することができる。一実施例において、RDBMSを、使用することができる。今述べた例において、RDBMSのテーブルは、座標を表す列を含むことができる。経済システムの場合において、会社、製品などを表すデータを、RDBMSのテーブルに格納することができる。テーブルは、それらの間の事前定義された関係を有することができる。さらに、テーブルは、座標に関連付けられた付属物を有することができる。
【0055】
代替の例示的な例において、メモリ540は、コンピュータープログラムまたは他の命令をコンピューティングシステム510にロードすることを可能にするための他の類似のデバイスを含むことができるセカンダリメモリを含むことができる。上記のデバイスは、例えば、リムーバブルストレージユニットおよびインターフェースを含むことができる。上記の例は、(例えば、制限しないが、ビデオゲームデバイスに見出されるものなどの)プログラムカートリッジおよびカートリッジインターフェース、(例えば、制限しないが、EPROM(erasable programmable ROM)またはPROM(プログラマブルPROM)および関連付けられたソケット、ならびにソフトウェアおよびデータをリムーバブルストレージユニットからコンピューターシステムに転送することを可能にすることができる、他のリムーバブルストレージユニットおよびインターフェースなどの)リムーバブルメモリチップを含むことができる。
【0056】
さらに、コンピューティングシステム510は、I/O(入力/出力)デバイス530を含むことができる。I/Oデバイス530の例は、例えば、制限しないが、マウス、または例えばデジタイザなどの他のポインティングデバイス、およびキーボード、または他のデータ入力デバイス(図示せず)などの入力デバイスを含むことができる。I/Oデバイス530の別の例は、例えば、制限しないが、ディスプレイおよびディスプレイインターフェースなどの出力デバイスを含むことができる。さらにまた、I/Oデバイス530は、制限はしないが、通信インターフェース、ケーブル、および通信経路などを含むことができる。今述べたデバイスは、制限はしないが、ネットワークインターフェースカード、およびモデムを含むことができる。通信インターフェースは、ソフトウェアおよびデータをコンピューターシステムと外部デバイスとの間において転送することを可能にすることができる。
【0057】
1つまたは複数の実施例において、本実施例は、例えばネットワーク580など、1つまたは複数のコンピュータネットワークの環境において実施される。ネットワーク580は、プライベートネットワーク、もしくはパブリックネットワーク(例えば、以下で説明されるような、インターネット)、または両方の組み合わせを含むことができる。ネットワーク580は、ハードウェア、ソフトウェア、または両方の組み合わせを含む。
【0058】
電気通信指向の観点から、ネットワーク580は、通信設備によって相互接続されたハードウェアノードのセットとして説明することができ、1つまたは複数のプロセス(ハードウェア、ソフトウェア、または組み合わせ)が、上記の各ノードにおいて機能する。プロセスは、プロセス間通信経路を使用して、それらの間の通信経路を介して、互いに相互通信を行い、情報を交換することができる。今述べた経路上に、適切な通信プロトコルを、使用する。
【0059】
本実施例に従った例示的なコンピューターおよび/または電気通信ネットワーク環境は、ハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせを含むことができるノードを含むことができる。ノードは、通信ネットワークを介して相互接続されることができる。各ノードは、ノード内に組み込まれるプロセッサによって実行可能な1つまたは複数の処理を含むことができる。例えば、単一の処理が、多数のプロセッサによって実行されることができ、または多数の処理は、単一のプロセッサによって実行されることができる。加えて、ノードの各々は、ネットワークと外部世界との間のインターフェースポイントを提供することができ、サブネットワークの集まりを含むことができる。
【0060】
例示的な実施例において、プロセスは、あらゆる通信プロトコルを通して通信をサポートするプロセス間通信経路を通して、互いに通信することができる。経路は、順次的または並列に、連続的または断続的に機能することができる。経路は、多くのコンピューターによって使用される標準的な並列命令セットに加えて、通信ネットワークに関して本明細書において説明される、通信規格、プロトコル、または技術のいずれかを使用することができる。
【0061】
ノードは、処理機能を実行することが可能なあらゆるエンティティを含むことができる。例とともに使用されることができる上記のノードの例は、(例えば、パーソナルコンピューター、ワークステーション、サーバー、もしくはメインフレームなどの)コンピューター、(PDA(パーソナルデジタルアシスタント)、処理能力を有するモデムセルフォン、BlackBerry(商標)デバイスを含む無線電子メールデバイスなどの)ハンドヘルド無線デバイスおよび有線デバイス、(例えば、スキャナ、プリンター、ファクシミリ機、もしくは多機能文書マシンなどの)文書処理デバイス、または説明されたようなプロセッサの集まりがそれらに接続される(例えば、ローカルエリアネットワークもしくはワイドエリアネットワークなどの)複雑なエンティティを含む。例えば、本明細書において説明される本技法についての文脈において、ノード自体が、WAN(ワイドエリアネットワーク)、LAN(ローカルエリアネットワーク)、VPN(仮想プライベートネットワーク)などのプライベートネットワーク、またはネットワークの集まりであることができる。
【0062】
ノード間の通信は、通信ネットワークによって可能にされることができる。ノードは、通信ネットワークと連続的または断続的に接続されることができる。例として、本明細書において説明される本技法についての文脈において、通信ネットワークは、適切な帯域幅および情報セキュリティを提供するデジタル通信インフラストラクチャであることが可能である。
【0063】
通信ネットワークは、あらゆる型の規格、プロトコル、または技術を使用する、あらゆる周波数における、有線通信能力、無線通信能力、または両方の組み合わせを含むことができる。加えて、本実施例において、通信ネットワークは、プライベートネットワーク(例えば、VPN)、またはパブリックネットワーク(例えば、インターネット)であることが可能である。
【0064】
通信ネットワークによって使用される例示的な無線プロトコルおよび技術の非包括的なリストは、Bluetooth(商標)、GPRS(汎用パケット無線サービス)、CDPD(セルラデジタルパケットデータ)、MSP(モバイルソリューションプラットフォーム)、MMS(マルチメディアメッセージングサービス)、WAP(ワイヤレスアプリケーションプロトコル)、CDMA(符号分割多元接続)、SMS(ショートメッセージサービス)、WML(ワイヤレスマークアップ言語)、HDML(ハンドヘルドデバイスマークアップ言語)、BREW(無線用バイナリランタイム環境)、RAN(無線アクセスネットワーク)、およびPS-CN(パケット交換コアネットワーク)を含むことができる。様々な世代の無線技術も含まれる。通信ネットワークによって使用される主に有線プロトコルおよび技術の例示的な非包括的なリストは、ATM(非同期転送モード)、EIGRP(拡張インテリアゲートウェイルーティングプロトコル)、FR(フレームリレー)、HDLC(ハイレベルデータリンク制御)、ICMP(インターネット制御メッセージプロトコル)、IGRP(インテリアゲートウェイルーティングプロトコル)、IPX(ネットワーク間パケット交換)、ISDN、PPP(ポイントツーポイントプロトコル)、TCP/IP(伝送制御プロトコル/インターネットプロトコル)、RIP(ルーティング情報プロトコル)、およびUDP(ユーザーデータグラムプロトコル)を含む。当業者が認識するように、あらゆる他の知られたまたは予想される無線または有線プロトコルおよび技術が使用されることができる。
【0065】
本明細書において説明される本技法の実施例は、本明細書における作動を実行するための装置を含むことができる。装置は、所望の目的のために特別に構成されることができ、またはそれは、デバイス内に記憶されたプログラムによって選択的にアクティブ化または再構成される汎用デバイスを含むことができる。
【0066】
1つまたは複数の実施例において、本実施例は、マシン実行可能命令において具現される。命令は、命令を用いてプログラムされる処理デバイス、例えば、汎用または専用プロセッサに、本明細書において説明される本技法のステップを実行させるために使用されることができる。代替えとして、本明細書において説明される本技法のステップは、ステップを実行するための配線論理を含む特定のハードウェアコンポーネントによって、またはプログラムされるコンピュータコンポーネントおよびカスタムハードウェアコンポーネントのあらゆる組み合わせによって実行されることができる。例えば、本明細書において説明される本技法は、以下で説明されるように、コンピュータープログラム製品、アプリケーションなどとして提供されることができる。環境において、実施例は、命令がその上に記憶されたマシン読み取り可能な媒体を含むことができる。命令は、例示的な本実施例に従って処理または方法を実行するよう、あらゆる1つまたは複数のプロセッサ(または他の電子デバイス)をプログラムするために使用されることができる。加えて、本明細書において説明される本技法は、ダウンロードされ、コンピュータープログラム製品上に記憶されることもできる。ここで、プログラムは、搬送波または他の伝搬媒体内に具現されるデータ信号によって、通信リンク(例えば、モデムまたはネットワーク接続)を介して、リモートコンピューター(例えば、サーバー)から要求しているコンピューター(例えば、クライアント)に転送されることができ、最終的に、上記の信号は、後続の実行のためにコンピューターシステム上に記憶されることができる。
【0067】
方法は、コンピューターまたはあらゆる命令実行システムによって使用するための、またはそれらと関連したプログラムコードを提供する、コンピューター使用可能なまたはコンピューター読み取り可能な記憶媒体から入手可能なコンピュータープログラム製品に実装することができる。コンピューター使用可能なまたはコンピューター読み取り可能な記憶媒体は、コンピューターもしくは命令実行システム、装置、またはデバイスによって使用するための、またはそれらと関連したプログラムを含むこと、または記憶することができる、あらゆる装置であることができる。アプリケーション502は、ファンクション、タスク、アクティビティなどを実行するように指定されたコンピュータープログラム製品であることが可能である。いくつかの実施例において、アプリケーション502は、1つまたは複数のモジュールを含むことができ、それらは、一般に、それらが指定された入力を使用して有用なデータまたは他の出力を生成することができるように機能する。
【0068】
対応するプログラムコードを記憶および/または実行するのに適したデータ処理システムは、メモリ要素などのコンピューター化されたデータストレージデバイスに直接的または間接的に結合された少なくとも1つのプロセッサを含むことができる。(制限はしないが、キーボード、ディスプレイ、ポインティングデバイスなどを含む)I/O(入力/出力)デバイスが、システムに結合されることができる。データ処理システムが、介在するプライベートまたはパブリックネットワークを通して、他のデータ処理システム、またはリモートプリンターもしくはストレージデバイスに結合されることを可能にするために、ネットワークアダプタがシステムに結合されることもできる。ユーザーとの対話を提供するために、LCD(液晶ディスプレイ)などのディスプレイデバイス、または情報をユーザーに表示するための別の種類のモニター、ならびにユーザーがそれによって入力をコンピューターに提供することができる、キーボード、およびマウスまたはトラックボールなどの入力デバイスを用いて、特徴がコンピューター上において実施されることができる。
【0069】
コンピュータープログラムは、コンピューターにおいて直接的または間接的に使用されることができる命令のセットであることができる。本明細書において説明されるシステムおよび方法は、コンパイラ型またはインタープリタ型言語を含む、Flash(商標)、JAVA(商標)、C++、C、C#、Python、Visual Basic(商標)、JavaScript(商標)PHP、XML、HTMLなどのプログラミング言語、またはプログラミング言語の組み合わせを使用して実装することができ、スタンドアロンプログラム、またはモジュール、コンポーネント、サブルーチン、もしくはコンピューティング環境において使用するのに適した他のユニットを含むあらゆる形において配備されることができる。ソフトウェアは、制限はしないが、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むことができる。プログラミングモジュール間のインターフェースを実施する際に、SOAP/HTTPなどのプロトコルが使用されることができる。本明細書において説明されるコンポーネントおよび機能性は、仮想化または非仮想化環境において動作する、ソフトウェア開発に適したあらゆるプログラミング言語を使用する、制限しないが、Microsoft Windows(商標)、Apple(商標)Mac(商標)、iOS(商標)、Unix(商標)/X-Windows(商標)、Linux(商標)などの異なるバージョンを含む、あらゆるデスクトップオペレーティングシステム上に実装することができる。システムは、Ruby on Railsなどのウェブアプリケーションフレームワークを使用して実装することができるだろう。
【0070】
命令からなるプログラムの実行に適したプロセッサは、制限はしないが、汎用および専用マイクロプロセッサ、ならびにあらゆる種類のコンピューターの唯一のプロセッサまたは多数のプロセッサもしくはコアのうち1つを含む。プロセッサは、例えば、リードオンリーメモリ、ランダムアクセスメモリ、その両方、または本明細書において説明されるデータストレージデバイスのあらゆる組み合わせなどのコンピューター化されたデータストレージデバイスから、命令およびデータを受け取り、記憶することができる。プロセッサは、電子デバイスの作動および実行を制御するように作動する、あらゆる処理回路または制御回路を含むことができる。
【0071】
本明細書において説明されるシステム、モジュール、および方法は、ソフトウェア要素またはハードウェア要素のあらゆる組み合わせを使用して実装することができる。本明細書において説明されるシステム、モジュール、および方法は、単独で、または互いに組み合わさって作動する、1つまたは複数の仮想マシンを使用して実装することができる。物理的なコンピューティングマシンプラットフォームを、ハードウェアコンピューティングプラットフォームまたはホスト上において実行する仮想化ソフトウェアの制御下で実行される仮想マシンにカプセル化するために、あらゆる適用可能な仮想化ソリューションが使用されることができる。仮想マシンは、仮想システムハードウェアおよびゲストオペレーティングシステムソフトウェアの両方を有することができる。
【0072】
本明細書において説明されるシステムおよび方法は、データサーバなどのバックエンドコンポーネントを含むコンピューターシステム、またはアプリケーションサーバもしくはインターネットサーバなどのミドルウェアコンポーネントを含むコンピューターシステム、またはグラフィカルユーザインターフェースもしくはインターネットブラウザを有するクライアントコンピューターなどのフロントエンドコンポーネントを含むコンピューターシステム、またはあらゆる組み合わせにおいて実装することができる。システムのコンポーネントは、通信ネットワークなど、デジタルデータ通信のあらゆる形態または媒体によって接続されることができる。通信ネットワークの例は、例えば、LAN、WAN、ならびにインターネットを形成するコンピューターおよびネットワークを含む。
【0073】
本明細書において説明される技法の1つまたは複数の例は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースまたはプログラマブル家電製品、ミニコンピューター、メインフレームコンピューターなどを含む、他のコンピューターシステム構成を用いて実施されることができる。本明細書において説明される技法は、ネットワークを通してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境において実施されることもできる。
【0074】
「コンピュータープログラム媒体」および[コンピューター読み取り可能な媒体]という用語は、例えば、制限しないが、リムーバブルストレージデバイス、ハードディスクドライブ内に取り付けられたハードディスクなどの媒体を一般に指すために使用されることができる。これらのコンピュータープログラム製品は、ソフトウェアをコンピューターシステムに提供することができる。本明細書において説明される技法は、上記のコンピュータープログラム製品を対象とすることができる。
【0075】
「一実施例」、「実施例」、「様々な実施例」などに対する言及は、そのように説明される本明細書において説明される技法の例が、特定の特徴、構造、または特性を含むことができることを示すことができるが、あらゆる実施例が、必ずしも特定の特徴、構造、または特性を含むわけではない。「一実施例において」または「例示的な実施例において」という句が繰り返し使用される場合、それは、同じ実施例であるすることもできるが、必ずしも同じ実施例に言及しているわけではない。
【0076】
説明および請求項において、「結合される」および「接続される」という語が、それらの活用形とともに、使用されることができる。これらの語は、互いに同義語として意図されることはできないことを理解すべきである。むしろ、特定の実施例において、「接続される」は、2つ以上の要素が、互いに物理的または電気的に直接接触していることを示すために使用されることができる。「結合される」は、2つ以上の要素が、物理的または電気的に直接接触していることを意味することができる。しかしながら、「結合される」は、2つ以上の要素が、互いに直接接触していないが、それでもなお互いに協力または相互作用することを意味することもできる。
【0077】
アルゴリズムは、ここでは、および一般に、所望の結果をもたらす動作または動作の自己矛盾のないシーケンスであると見なされることができる。これらは、物理的量の物理的操作を含む。必ずではないが、通常、これらの量は、記憶され、転送され、組み合わされ、比較され、および他のやり方により操作されることが可能な電気的または磁気的信号の形態をとる。主に共通使用の理由で、これらの信号をビット、値、要素、シンボル、文字、項、または数などと呼ぶことが時には便利であることが分かっている。しかしながら、これらおよび同様の語のすべては、適切な物理的量に関連付けられるべきであり、これらの量に適用される便利なラベルであるにすぎないことを理解すべきである。
【0078】
他に別段の指摘がない限り、本明細書全体にわたって、「処理する」、「計算する」、「算出する」、または「決定する」などの語は、コンピューティングシステムのレジスタおよび/またはメモリ内の電子的など物理的量として表されるデータを、コンピューティングシステムのメモリ、レジスタ、または他の上記の情報ストレージ、送信デバイスまたはディスプレイデバイス内の物理的量として同様に表される他のデータにするように操作および/または変換する、コンピューターもしくはコンピューティングシステムまたは類似の電子的なコンピューティングデバイスの作動および/または処理に言及していることが理解されることができる。
【0079】
同様に、「プロセッサ」という用語は、レジスタおよび/またはメモリからの電子データを処理して、電子データを、レジスタおよび/またはメモリ内に記憶されることができる他の電子データに変換する、あらゆるデバイスまたはデバイスの部分を指すことができる。「コンピューティングプラットフォーム」は、1つまたは複数のプロセッサを有することができる。本明細書において使用される場合、「ソフトウェア」処理は、例えば、タスク、スレッド、およびインテリジェントエージェントなど、仕事を経時的に実行するソフトウェアおよび/またはハードウェアエンティティを含むことができる。また、処理は、順次的または並列に、連続的または断続的に命令を実施するための多数の処理を指すことができる。本明細書において、「システム」および「方法」という語は、システムが1つまたは複数の方法を具現することができ、方法がシステムと見なされることができる限りにおいて、交換可能に使用される。
【0080】
例示的な処理
図6~8は、本明細書において説明されるSDLを利用して、シミュレーション環境においてシナリオを構成する例示的な処理を例示する。
図6~8は、
図1~5の文脈において説明されるが、上記の文脈に制限しない。
【0081】
図6は、シミュレーション環境においてシナリオを構成する例示的な処理600を例示する。
【0082】
ブロック602は、シミュレートされる環境におけるシナリオにおいてインスタンス化されるためのプリミティブを定義する命令を受け取ることを例示する。少なくとも1つの実施例において、ユーザーは、SDLを使用して、シナリオにおいてインスタンス化されるための1つまたは複数のプリミティブを定義することができる。シミュレーションアプリケーション504は、シナリオにおいてインスタンス化されるための1つまたは複数のプリミティブを定義する命令を受け取ることができる。上述したように、プリミティブは、シミュレーション環境の特定の側面を定義する。プリミティブの制限でない実施例は、座標系、条件、動作、エンティティ、エンティティ挙動、ノイズ、障害などを含む。少なくとも1つの実施例において、シミュレーションアプリケーション504は、1つまたは複数のプリミティブについての詳細を受け取ることができる。例えば、ユーザーは、SDLを使用して、エンティティ挙動をエンティティに割り当てることによりエンティティのある速さ(または速度)を指定するだけでなく、(例えば、走路座標、慣性座標、またはセマンティック座標を使用して)ある寸法、姿勢を有するエンティティ112を定義することができる。少なくとも1つの実施例において、少なくとも1つのプリミティブは、「自律走行車」として指定することができ、上述したようにシミュレーションの出力が自律的コントローラーによって制御される自律走行車の挙動を検証するよう、自律的コントローラー506に関連付けることができる。
【0083】
ブロック604は、個々のプリミティブ間のアソシエーションを定義するシーケンスを定義する命令を受け取ることを例示する。上述したように、SDLは、あるプリミティブが、例えば、線形時相論理を使用して、互いにどのように関連付けられるかをユーザーが指定することを可能にする。一実施例において、ユーザーは、シーケンスを指定することによって、プリミティブ間のアソシエーションを定義する。上記の実施例において、シミュレーションアプリケーション504は、シーケンスを定義する命令を受け取ることができる。少なくとも1つの実施例において、シーケンスは、シミュレーションアプリケーション504によって逐次順に実行されることになる多数のステップを含むことができる。少なくとも1つの実施例において、シーケンスの1つのステップが別のシーケンスであるように、シーケンスは別のものを含むことができる。
【0084】
ブロック606は、シナリオを生成するために、環境内においてシーケンスをインスタンス化することを例示する。少なくとも1つの実施例において、シミュレーションアプリケーション504は、シナリオを生成するために、環境内においてシーケンスをインスタンス化するための、1つまたは複数のプロセッサ(例えば、プロセッサ570)によって実行可能な命令を含むことができる。上述したように、いくつかの実施例において、環境は、地図であることが可能である。地図は、2次元または3次元であることが可能である。2次元および/または3次元の地図は、例えば、制限しないが、(例えば交差点などの)トポロジー、街路、山脈、道路、地形、および一般的な環境などの環境についての情報を提供することが可能なあらゆる個数のデータ構造であることが可能である。シナリオは、地図内においてシーケンスをインスタンス化するシミュレーションアプリケーション504に少なくとも部分的に基づいて生成することができる。
【0085】
ブロック608は、シナリオに関連付けられた情報を決定することを例示する。地図内においてシーケンスをインスタンス化することに少なくとも部分的に基づいて、シミュレーション環境において作成されたシナリオを与えられた自律的コントローラー506がどのように応答するかに基づく様々な情報を、学習することができる。上述したように、さらに、自律的コントローラー506は、自律走行車上において実行されるソフトウェアに対応することができる。地図内においてシーケンスをインスタンス化することに少なくとも部分的に基づいて、自律的コントローラー506が上記の自律走行車を安全に制御することができることを検証するために、自律的コントローラー506がどのように応答するかに関する情報を、学習することができる。追加および/または代替の実施例において、地図内においてシーケンスをインスタンス化することに少なくとも部分的に基づいて、自律的コントローラー506に基づいて走行する自律走行車の制約についての情報を、学習することができる。例えば、地図内においてシーケンスをインスタンス化することに少なくとも部分的に基づいて、路面状態、周囲ノイズ、欠陥部品などを考慮して、自律走行車の作動空間を理解するために、シミュレーションを、使用することができる。また、情報は、自律走行車の作動および設計を改善するためのフィードバックを生成するために有用であることが可能である。例えば、いくつかの実施例において、地図内においてシーケンスをインスタンス化することに少なくとも部分的に基づいて、自律的コントローラー506において必要とされる冗長性の量を決定するための、または学習されたことに基づいて自律的コントローラー506の挙動をどのように変更するかを決定するための情報を、学習することができる。
【0086】
図7は、シナリオ記述言語を使用してユーザーによって定義されたようなプリミティブを結合して組み合わせることによって多数のシナリオを生成する例示的な処理700を例示する。
【0087】
ブロック702は、プリミティブの可能な組み合わせのサブセットを定義する命令を受け取ることを例示する。上述したように、直積は、テストシナリオを生成するために組み合わされる値を定義する、あらゆる個数の名づけられた引数を受け入れる。名づけられた各引数は、変数に対応することができる。いくつかの実施例において、変数は、プリミティブに関連付けることができる。すなわち、プリミティブは、異なるシナリオを生成するために変化させることができるいくつかの側面に関連付けることができる。少なくとも1つの実施例において、名づけられた各引数は、対応する変数についての可能な値のリストを受け取る。少なくとも1つの実施例において、ユーザーは、名づけられた引数と、名づけられた各引数についての可能な値とを定義することができる。ユーザーによって定義された直積の制限でない実施例は、式1を参照して上に示す。シミュレーションアプリケーション504は、名づけられた引数と、名づけられた各引数についての可能な値とを受け取ることができる。
【0088】
ブロック704は、プリミティブの各組み合わせの順列を作成することを例示する。シミュレーションアプリケーション504は、値のあらゆる組み合わせのために割り当てられたパラメーターを保有する反復変数を割り当てることができる。すなわち、シミュレーションアプリケーション504は、プリミティブに関連付けられた可能な値の組み合わせについての順列を生成することができる。直積からもたらされる順列の制限でない実施例は、表1を参照して上に示す。
【0089】
ブロック706は、環境内において順列のうちの各順列をインスタンス化することを例示し、各順列はシナリオに対応する。少なくとも1つの実施例において、シミュレーションアプリケーション504は、多数のシナリオを生成するために、環境内において、直積を考慮して、シーケンスをインスタンス化するための、1つまたは複数のプロセッサ(例えば、プロセッサ570)によって実行可能な命令を含むことができる。上述したように、いくつかの実施例において、環境は、地図であることが可能である。各順列は、異なるシナリオを生成することができる。すなわち、可能な値の様々な順列を考慮して、地図内においてシーケンスをインスタンス化するシミュレーションアプリケーション504に少なくとも部分的に基づいて、多数のシナリオを、生成することができる。そして、各反復は、より特定的なシナリオに関連付けることができる。
【0090】
ブロック708は、各シナリオについての結果を決定することを例示する。少なくとも1つの実施例において、シミュレーションアプリケーション504は、テストおよび検証のためのシミュレーションにおいて使用する各シナリオを出力することができる。上述したように、地図内において順列をインスタンス化することに少なくとも部分的に基づいて、シミュレーション環境において作成されたシナリオを与えられた自律的コントローラー506がどのように応答するかに基づく様々な情報を、学習することができる。少なくとも1つの実施例において、シミュレーションアプリケーション504は、自律的コントローラー506がどのように動作したか(すなわち、応答したか)を示すデータにアクセスすることができ、データを予め決定された結果(例えば、結果124a~124n)と比較することができる。自律的コントローラー506が予め決定された結果に一致して動作した(すなわち、自律的コントローラー506がすると仮定されたあらゆることをした)と決定されることに少なくとも部分的に基づいて、シミュレーションアプリケーション504は、自律的コントローラーが成功したことを決定することができる。自律的コントローラー506が予め決定された結果に一致せずに動作した(すなわち、自律的コントローラー506がすると仮定されなかったあることをした)と決定されることに少なくとも部分的に基づいて、シミュレーションアプリケーション504は、自律的コントローラーが失敗したことを決定することができる。したがって、地図内において順列をインスタンス化することに少なくとも部分的に基づいて、上述したように、自律的コントローラー506が各シナリオにどのように応答したかについての情報を、学習することができる。
【0091】
図8は、有用な情報を提供するシナリオを決定し、有用な情報を提供しない他のシナリオを取り除く例示的な処理800を例示する。
【0092】
ブロック802は、2つ以上の順列が、同じ、類似する、または実質的に類似する結果に関連付けられることを決定することを例示する。
図7を参照して上述したように、環境内において順列をインスタンス化することに少なくとも部分的に基づいて、シミュレーション環境において作成された(1つまたは複数の)シナリオを与えられた自律的コントローラー506がどのように応答するかに基づく様々な情報を、学習することができる。少なくとも1つの実施例において、シミュレーションアプリケーション504は、自律的コントローラー506がどのように動作したかを示すデータにアクセスすることができ、データを予め決定された結果(例えば、結果124a~124n)と比較することができる。自律的コントローラー506が予め決定された結果に一致して動作した(すなわち、自律的コントローラー506がすると仮定されたあらゆることをした)と決定されることに少なくとも部分的に基づいて、シミュレーションアプリケーション504は、自律的コントローラーが成功したことを決定することができる。自律的コントローラー506が予め決定された結果に一致せずに動作した(すなわち、自律的コントローラー506がすると仮定されなかったあることをした)と決定されることに少なくとも部分的に基づいて、シミュレーションアプリケーション504は、自律的コントローラーが失敗したことを決定することができる。
【0093】
少なくとも1つの実施例において、シミュレーションアプリケーション504は、順列のうちの2つ以上のインスタンス化において自律的コントローラー506がどのように動作したかに関連付けられたデータが、順列のうちの2つ以上が同じ結果に関連付けられることを示すことを決定することができる。すなわち、シミュレーションアプリケーション504は、順列のうちの2つ以上が成功の結果または不成功の結果に関連付けられることを決定することができる。追加および/または代替の実施例において、シミュレーションアプリケーション504は、順列のうちの2つ以上が何らかの他の共有される結果(例えば、信頼レベル、推奨など)に関連付けられることを決定することができる。
【0094】
ブロック804は、2つ以上の順列が冗長であることを決定することを例示する。シミュレーションアプリケーション504が順列のうちの2つ以上が同じ結果に関連付けられることを決定することに少なくとも部分的に基づいて、シミュレーションアプリケーション504は、2つ以上の順列が冗長であることを決定することができる。すなわち、少なくとも1つの実施例において、シミュレーションアプリケーション504は、順列のうちの2つ以上が、自律的コントローラー506がシナリオにおいて応答する能力について、あるとしても追加の大して有用でない情報を提供するだけの違いが増えていくことに関連付けることを決定することができる。
【0095】
ブロック806は、将来のインスタンス化において、2つ以上の順列の代わりに、2つ以上の順列のうちの1つの順列をインスタンス化することを例示する。順列のうちの2つ以上が冗長であることをシミュレーションアプリケーション504が決定することに少なくとも部分的に基づいて、シミュレーションアプリケーション504は、2つ以上の順列のうちの1つまたは複数を取り除くことができる。すなわち、シミュレーションアプリケーション504は、2つ以上の順列についての代表的な順列を識別することができる。結果として、将来のインスタンス化において、2つ以上の順列の各々をインスタンス化する代わりに、代表的な順列を、インスタンス化することができる。したがって、シミュレーションアプリケーションは、検証およびテストのために有用な情報を提供する特定のシナリオにわたって最適化を行うことによって、計算の複雑性、メモリ要件、および処理時間を減らすために、有用な情報を提供すると決定されるシナリオをインスタンス化することができる。
【0096】
実施例条項
A.シミュレーション環境におけるシナリオを生成するためのコンピューターに実装される方法であって、コンピューターに実装される方法は、シナリオにおいてインスタンス化されるための少なくとも第1のプリミティブを定義する命令を受け取ることであって、第1のプリミティブが自律走行車に対応し、第1のプリミティブに割り当てられる1つまたは複数の値に関連付けられる命令を受け取ることと、1つまたは複数の値に少なくとも部分的に基づいて、第1のプリミティブに関する順列のセットを作成することであって、各順列が1つまたは複数の値のうちの異なる値に関連付けられ、複数のシナリオを生成するために地図内において順列の各々をインスタンス化することであって、各シナリオが順列のセットのうちの順列に対応し、複数のシナリオのうちのシナリオに関連付けられた情報を決定することであって、情報が、自律走行車に関連付けられた、シミュレーション環境において作成されたシナリオを与えられた自律的コントローラーがどのように応答するかを記述する、を含む。
【0097】
B.段落Aに記載のコンピューターに実装される方法であって、第1のプリミティブは、寸法の定義されたセット、姿勢、またはシミュレーション環境において第1のプリミティブを描画するためのメッシュを有するもののうちの1つまたは複数に関連付けられる。
【0098】
C.段落Bに記載のコンピューターに実装される方法であって、姿勢は、慣性座標系、地図ベースの座標系、または走路ベースの座標系によって定義される。
【0099】
D.段落BまたはCに記載のコンピューターに実装される方法であって、第1のプリミティブは、第1のプリミティブがシナリオにおいてどのように振る舞うことになるかを示すエンティティ挙動に関連付けられる。
【0100】
E.段落A~Dのいずれかに記載のコンピューターに実装される方法であって、命令は、第1のプリミティブと少なくとも第2のプリミティブとの間のアソシエーションを定義するシーケンスをさらに含み、シーケンスが逐次順に実行される多数のステップを含む。
【0101】
F.段落Eに記載のコンピューターに実装される方法であって、第2のプリミティブは、第2のエンティティに対応する。
【0102】
G.段落Fに記載のコンピューターに実装される方法であって、第2のエンティティは、静的エンティティまたは動的エンティティである。
【0103】
H.段落E~Gのいずれかに記載のコンピューターに実装される方法であって、第2のプリミティブは、条件、動作、障害、またはノイズに対応する。
【0104】
I.プロセッサによって実行されると段落A~Hのいずれかに記載の方法を実行するようにコンピューターを構成する命令を用いて符号化された1つまたは複数のコンピューター読み取り可能な媒体。
【0105】
J.1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行されると段落A~Hのいずれかに記載のコンピューターに実装される方法を実行するようコンピューターを構成する命令を用いて符号化された1つまたは複数のコンピューター読み取り可能な媒体とを有するデバイス。
【0106】
K.シミュレーション環境におけるシナリオを生成するためのコンピューターに実装される方法であって、コンピューターに実装される方法は、シナリオにおいてインスタンス化されるための少なくとも第1のプリミティブを定義する命令を受け取る手段であって、第1のプリミティブが自律走行車に対応し、第1のプリミティブに割り当てられる1つまたは複数の値に関連付けられる命令を受け取る手段と、1つまたは複数の値に少なくとも部分的に基づいて、第1のプリミティブに関する順列のセットを作成する手段であって、各順列が1つまたは複数の値のうちの異なる値に関連付けられ、複数のシナリオを生成するために地図内において順列の各々をインスタンス化する手段であって、各シナリオが順列のセットのうちの順列に対応し、複数のシナリオのうちのシナリオに関連付けられた情報を決定する手段であって、情報が、自律走行車に関連付けられた、シミュレーション環境において作成されたシナリオを与えられた自律的コントローラーがどのように応答するかを記述する、を含む。
【0107】
L.段落Kに記載のコンピューターに実装される方法であって、第1のプリミティブは、寸法の定義されたセット、姿勢、またはシミュレーション環境において第1のプリミティブを描画するためのメッシュを有するもののうちの1つまたは複数に関連付けられる。
【0108】
M.段落Lに記載のコンピューターに実装される方法であって、姿勢は、慣性座標系、地図ベースの座標系、または走路ベースの座標系によって定義される。
【0109】
N.段落LまたはMに記載のコンピューターに実装される方法であって、第1のプリミティブは、第1のプリミティブがシナリオにおいてどのように振る舞うことになるかを示すエンティティ挙動に関連付けられる。
【0110】
O.段落K~Nのいずれかに記載のコンピューターに実装される方法であって、命令は、第1のプリミティブと少なくとも第2のプリミティブとの間のアソシエーションを定義するシーケンスをさらに含み、シーケンスが逐次順に実行される多数のステップを含む。
【0111】
P.段落Oに記載のコンピューターに実装される方法であって、第2のプリミティブは、第2のエンティティに対応する。
【0112】
Q.段落Pに記載のコンピューターに実装される方法であって、第2のエンティティは、静的エンティティまたは動的エンティティである。
【0113】
R.段落O~Qのいずれかに記載のコンピューターに実装される方法であって、第2のプリミティブは、条件、動作、障害、またはノイズに対応する。
【0114】
S.シミュレーション環境におけるシナリオを生成するためのシステムであって、システムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行可能な命令を格納する1つまたは複数の非一時的なコンピューター読み取り可能な媒体とを有し、命令は、シミュレーション環境における少なくとも1つのシナリオにおいてインスタンス化されるためのプリミティブセットを定義する命令を受け取ることと、プリミティブセットのうちの個々のプリミティブ間のアソシエーションを定義する第1のシーケンスを受け取ることと、第1のシナリオを生成するためにシミュレーション環境内において第1のシーケンスをインスタンス化することと、第1のシナリオに関連付けられた情報を決定することであって、情報が、シミュレーション環境において作成された少なくとも1つのシナリオを与えられた自律的コントローラーがどのように応答するかを記述する、を含む動作を実行するよう1つまたは複数のプロセッサをプログラムする。
【0115】
T.段落Sに記載のシステムであって、第1のシーケンスは、少なくとも1つのサブシーケンスを含む。
【0116】
U.段落SまたはTに記載のシステムであって、第1のシーケンスは、線形時相論理を使用して定義される。
【0117】
V.段落S~Uのいずれかに記載のシステムであって、動作は、第1のシーケンスに関連付けられた直積を受け取ることであって、直積が2つ以上の変数と2つ以上の変数のうちの各変数に関連付けられた2つ以上の可能な値とを含み、2つ以上の変数のうちの各変数がプリミティブセットのうちのプリミティブに関連付けられ、2つ以上の変数のうちの各変数に関連付けられた2つ以上の可能な値の各可能な組み合わせを含む順列のセットを作成することと、シミュレーション環境内において順列のセットのうちの各順列をインスタンス化することであって、各順列が新しいシナリオに対応し、各新しいシナリオについての結果を決定することであって、結果が成功または不成功である、をさらに含む。
【0118】
W.段落S~Vのいずれかに記載のシステムであって、動作は、プリミティブセットのうちの個々のプリミティブ間の異なるアソシエーションを定義する第2のシーケンスを受け取ることと、第2のシナリオを生成するためにシミュレーション環境内において第2のシーケンスをインスタンス化することとをさらに含む。
【0119】
X.段落Wに記載のシステムであって、動作は、第1のシーケンスおよび第2のシーケンスを実質的に同時にインスタンス化することをさらに含む。
【0120】
Y.段落S~Xのいずれかに記載のシステムであって、第1のシナリオに関連付けられた情報を決定することは、シミュレーション環境において作成された少なくとも1つのシナリオを与えられた自律的コントローラーがどのように応答するかを検証することを含む。
【0121】
Z.段落S~Yのいずれかに記載のシステムであって、第1のシナリオに関連付けられた情報を決定することは、シミュレーション環境において作成された少なくとも1つのシナリオを与えられた自律的コントローラーの作動空間を決定することを含む。
【0122】
AA.段落S~Zのいずれかに記載のシステムであって、第1のシナリオに関連付けられた情報を決定することは、シミュレーション環境において作成された少なくとも1つのシナリオを与えられた自律的コントローラーがどのように応答するかを考慮して、自律的コントローラーの作動または設計の少なくとも一方を改善するためのフィードバックを生成することを含む。
【0123】
AB.実行されると1つまたは複数のプロセッサに、少なくとも1つのシミュレートされるシナリオを生成するためのシーケンスの一部としてプリミティブの可能な組み合わせのサブセットを受け取ることと、順列のセットを作成することであって、各順列がプリミティブの可能な組み合わせのサブセットからのプリミティブの1つの可能な組み合わせを含み、地図内において順列のセットのうちの各順列をインスタンス化することであって、各順列がシミュレートされるシナリオに対応し、各シミュレートされるシナリオについての結果を決定することであって、結果が成功または不成功である、を含む動作を実行させる命令のセットを有する非一時的なコンピューター読み取り可能な媒体。
【0124】
AC.段落ABに記載の非一時的なコンピューター読み取り可能な媒体であって、動作は、順列のセットのうちの2つ以上の順列が同じ結果に関連付けられると決定することと、2つ以上の順列が冗長であると決定することと、将来のインスタンス化において2つ以上の順列のうちの各順列の代わりに2つ以上の順列のうちただ1つの順列をインスタンス化することとをさらに含む。
【0125】
AD.段落ABまたはACに記載の非一時的なコンピューター読み取り可能な媒体であって、地図内においてプリミティブの各順列をインスタンス化することは、実質的に同時に並列して実行される。
【0126】
結論
本明細書において説明される技法の1つまたは複数の実施例を説明したが、それらの様々な改変、追加、置換、および同等物は、本明細書において説明される技法の範囲内に含まれる。
【0127】
実施例の説明において、一部を形成する添付の図面に対する参照が行われ、図面は、特許請求される主題の具体的な例を実例として示している。他の例が使用されることができること、および例えば構造変更などの変更および改変が行われることができることが理解されるべきである。上記の例、変更または改変は、必ずしも、意図された特許請求される主題に関する範囲からの逸脱でない。本明細書におけるステップは、ある順序において提示されることができるが、いくつかの場合において、説明されるシステムおよび方法の機能を変更することなく、異なる時間に、または異なる順序において、ある入力が提供されるよう、順序付けは変更されることができる。開示される手順は、異なる順序で実行されることもできる。加えて、本明細書における様々な計算は、開示された順序において実行される必要はなく、計算の代わりの順序を使用する他の例が、容易に実施されることができる。並べ替えられるのに加えて、計算は、同じ結果を有するサブ計算に分解されることもできる。
【符号の説明】
【0128】
100 ブロック図
300 シナリオ例
500 システム
600 処理
700 処理
800 処理