概要
[0024] 環境内のロボットのルートのプラニングなど、マルチエージェント・プラニングを実行する時に、ロボットは、それらがデッドロック状態になる位置またはロボットが進行できなくなる状態に達する可能性がある。図1は、交差点150にある4つのロボット110、120、130、および140のデッドロックを含むシナリオ100を示す。エッジ112、122、132、および142は、交差点150で一緒になる。シナリオ100では、エッジ112、122、132、および142のそれぞれが、方向付けされず、小道の全幅を表し、エッジに沿った二方向移動を許す。
[0025] 一例では、ロボット110、120、130、および140のそれぞれは、交差点150の近くのそれぞれの二方向エッジ112、122、132、および142上にあり、それぞれの左旋回114、124、134、および144を行うように指示されている。たとえば、ロボット110は、エッジ112上にあり、エッジ142への旋回114を行うように指示されている。しかし、エッジ142は、ロボット140によって占有され、このロボット140は、エッジ132への左旋回144を行うように指示されている。しかし、エッジ132は、ロボット130によって占有され、このロボット130は、エッジ122への左旋回を行うように指示されている。しかし、エッジ122は、ロボット120によって占有され、このロボット120は、エッジ112への左旋回を行うように指示されている。しかし、エッジ112は、ロボット110によって占有され、このロボット110は、エッジ142への左旋回を行うように指示されている(既に言及したように)。したがって、ロボット110、120、130、および140は、進行することができず、したがって、デッドロック状態160に達する。
[0026] 関連するシナリオでは、ロボット110、120、130、および140の4つすべてが、同時に交差点150に進入することを試みる可能性がある。ロボット110、120、130、および140のいくつかまたはすべてが、交差点150内にいる間に旋回を試みるか、交差点150を通ってまっすぐ移動することを試みる場合には、ロボット110、120、130、および140のうちの2つ以上が衝突する可能性がある。
[0027] デッドロック状態160などのデッドロックを回避するマルチエージェント・プランナを、本明細書で説明する。マルチエージェント・プランナは、まず、N≧1であるN個のエージェントを含む既存環境の道路地図を受け取ることができる(N=1であるケースが自明な例である可能性があることに留意されたい)。非自明な例に関して、環境は、少なくとも2つのロボットR1およびR2を有することができる。道路地図は、一方向「レーン」L1、L2、…Lnによって接続された交差点を有することができ、第1のレーンL1が、レーンのサイクル(すなわち、グラフ理論の意味で接続されたレーンのグループすなわち、レーンのすべての対LaおよびLbについて、LaからLbへの経路がある)の一部である。レーンを、下でより詳細に説明する。マルチエージェント・プランナは、ロボットR1に優先順位P1を、ロボットR2に優先順位P2を割り当てることができ、優先順位P1は、優先順位P2より高い優先順位を表し、したがって、この例では、ロボットR1は、ロボットR2より高優先順位のロボットである。優先順位P1が優先順位P2より高いので、マルチエージェント・プランナは、環境を通るルートRT1をロボットR1の排他的使用のために予約することができる。ロボットR1の排他的使用のためのルートRT1の予約の一部として、ロボットR1は、レーンと、RT1上のレーンの間の、交差点などの衝突領域との排他的使用を有することができる。したがって、ロボットR1は、RT1の衝突領域の排他的使用がロボットR1のために予約されているので、その衝突領域内で別のロボットと衝突しない。
[0028] たとえば、ルートRT1が、レーンL1を含み、ロボットR2が、レーンL1上のより高優先順位のロボットR1をブロックし、その結果、ロボットR1が、ルートRT1に沿ってさらに移動することができなくなると仮定する。マルチエージェント・プランナは、レーンL1を含むレーンのサイクルに沿って移動するようにロボットR2に指示することができ、したがって、ロボットR2は、最終的にレーンL1を去り、その後、ロボットR1は、ルートRT1に沿ってレーンL1に沿って前進することができる。ロボットR1がレーンL1をトラバースした後に、マルチエージェント・プランナは、必要に応じてロボットR2がレーンL1に戻ることを可能にするために、ロボットR1のためのレーンL1の予約を解放することができる。
[0029] マルチエージェント・プランナは、1つまたは複数のコンピューティング・デバイスによって実行可能なソフトウェア・マルチエージェント・プランナを使用して実施され得る。マルチエージェント・プランナ・ソフトウェアは、N≧1であるN個のエージェントを含む環境を表す道路地図上で動作している間のデッドロックを回避するマルチエージェント・プランナ・アルゴリズムを含むことができる。これらのエージェントの例は、車両およびロボット(移動ロボット・デバイスなど)を含むが、これに限定はされない。道路地図は、N個のエージェントのルートを決定するために1つまたは複数のレーンによって注釈を付けられた連結グラフを含むことができる。レーンは、レーン上のエージェントが任意の他のレーン上のエージェントと衝突しないような、道路地図の期待される移動経路である。レーンとして分類され得ない道路地図の部分の例は、曲がり角エッジ、エージェントのルートの出発位置および/または目的地位置を含むエッジ、および交差点横断を含む。いくつかの例で、レーンは、1つのエージェントのみに十分な幅であると仮定される、すなわち、1つのレーン内での追い越しは許容されない。特にこれらの例では、追い越しは、すべてが同一方向に進む、複数の隣接する別個のレーンの使用によって達成され得る。しかし、点Aから点Bに向けられた1つのレーンL_ONLYだけがあり、ロボットR1がレーンL_ONLY上でロボットR2の背後にある場合には、R1がR2を追い越せる唯一の形は、R1がL_ONLYを去ることによる。それを行う際に、R1は、おそらくはその方向に反してレーンL_ANOTHERをトラバースすることを含めて、非レーン空間をトラバースすることができる(この場合に、R1はL_ANOTHER上にあるとは考えられない)。
[0030] 任意の所与の時に、エージェントは、レーン上である、またはレーン上ではないが、レーンにたどり着くのに十分な面積をブロックしている、のいずれかである可能性がある。言い換えると、エージェントは、レーン上またはレーンへの途中のいずれかである。エージェントが、何らかの理由でレーンから外れる時に、マルチエージェント・プランナは、エージェントがレーンから離れて課題を実行するため、およびエージェントがレーン(同一レーンまたは異なるレーン)に戻ることを可能にするために、課題実行エリアを計算し、予約することができる。たとえば、「ピック・アンド・プレース」動作すなわちロボットが積荷を得(ピック・アップし)、目的地位置にその積荷を置く(プレース)動作の場合に、課題実行エリアは、ピックの前のエッジ、ピック動作を実行するのに必要なエリア、ピックの後のエッジ、およびピックの後のエッジからレーン・エッジまでの(レーン・エッジを含む)少なくとも1つの経路を含むことができる。交差点横断の場合に、エージェントがレーンから外れるや否や、ブロックされる課題実行エリアは、その交差点を形成するすべてのエッジ/レーンを含むことができる。課題実行エリアは、エージェントが反対側のレーンに達するまで、ブロックされたままになることができる。いくつかの場合に、課題実行エリアは、エージェントがその課題実行エリアを通って進行する時に、縮小することができる。少なくともいくつかの場合に、曲がり角エッジ、ピックの前のエッジ、ピックの後のエッジ、および交差点横断が、レーンではないことに留意されたい。
[0031] 道路地図グラフが、レーン領域および非レーン領域を用いて注釈を付けられ、レーンが、交差点から十分遠くで終わり、レーン・グラフが連結グラフであり、エージェント予約がレーン・エッジへの経路を含む(前の数段落で説明したように)場合に、そのような形で制限されたマルチエージェント・プラニング問題は、計算的に御しやすいものである可能性がある。さらに、レーンへの制限は、多くの実用的なプラニング問題にとって妥当である可能性がある。マルチエージェント・プラニング問題の解は、1つまたは複数の非レーン領域をトラバースする可能性がある、出発位置から目的地位置までの1つまたは複数のエッジおよび/またはレーンの集合として指定され得るルートの発見を含むことができる。
[0032] マルチエージェント・プランナは、エージェントに優先順位を割り当てることができる。優先順位は、デッドロックを解決するためにエージェントを順序付けるのに使用され得、たとえば、エージェント優先順位は、衝突エリアを横切るエージェントの順序を指定するのに使用され得る。より高優先順位のエージェントは、経路を予約し、より低優先順位のエージェントの前に衝突エリアを横切ることができ、より低優先順位のエージェントは、より高優先順位のエージェントのために経路を空け、かつ/またはより高優先順位のエージェントが通過するのを待つように指示され得る。いくつかの例では、エージェント優先順位は、単調増加する値をとることができ、たとえば、エージェントの優先順位は、同一のままになるか増加することができるが、エージェントがその課題および/またはルートを完了するまでは減少しない。単調増加する値の例は、エージェントがそのルートに沿って移動した時間の長さであり、たとえば、最も長い間ルート上にあったエージェントが、通行権を有する。ロボットRの単調増加する値の別の例は、ロボットRがそのルート上でスタートして以降にそれぞれのルート上でスタートした複数のロボットのルート−スタート値であり、たとえば、ロボットRのルート−スタート値は、当初は0になるはずであり、他のロボットがそのルート上でスタートする時に、ルート−スタート値は経時的に増加し、減少はせず、したがって、ルート−スタート値は、単調に増加している。優先順位としての使用に適切である、他の単調増加する値または単調増加する値を生成する関数も可能である。
[0033] エージェントが、目的地位置で動作を完了し、もう一度動き始める時に、マルチエージェント・プランナは、目的地位置の周囲のエリアを、エージェントが目的地位置にいる間のブロックされた状態からブロック解除された状態に変更し、したがって、より多数の、おそらくはより短い経路を他のエージェントのために使用可能にすることができる。したがって、エージェントが目的地位置にどれほど長く留まるのかの推定値は、目的地位置の周囲のエリアがどれほど長くブロックされたままになるのかを制限することができる。その後、マルチエージェント・プランナは、エージェントが目的地位置にどれほど長く留まるのかの1つまたは複数の推定値を判定することができる。1つの極端として、第1の推定値は、エージェントが目的地位置に永久に留まると仮定することができる。別の極端として、第2の推定値は、エージェントが目的地位置に最小限の時間、たとえば1時間単位以下だけ留まると仮定することができる。ヒストリカル値が、目的地でのエージェントの推定時間を判定するのに使用され得、たとえば、複数の以前のエージェントが、動作O1を完了するのにX時間単位の平均値を要し、エージェントA1が、動作O1の完了を試みつつある場合に、A1は、動作O1を完了するのにX時間単位を要すると推定され得る。さらに別の例では、マルチエージェント・プランナは、エージェントが目的地位置にどれほど長く留まるのかの推定値を、たとえば、コマンド・ラインへの引数として、グラフィカル・ユーザ・インターフェース(GUI)を介して、ウェブ・ブラウザによってなど、ユーザ・インターフェースを介して提供することができる。エージェントのために位置をブロックする例の方法を、下で図8の文脈で説明する。エージェント位置の他の推定値も可能である。
[0034] エージェントは、そのルートを完了した時に、その優先順位をたとえば0または他の最低優先順位値にリセットさせることができる。いくつかの例では、エージェントは、目的地位置に達した時に、ルートを完了したと考えられ得る。他の例では、エージェントは、目的地位置でピック・アンド・プレース動作などの動作の一部またはすべてを完了する時に、ルートを完了したと考えられ得る。その後、エージェントがその現在の動作を終了した後に、マルチエージェント・プランナは、そのエージェントの優先順位をリセットすることができる。エージェントが、レーンに戻るのに十分なエリアを予約するので、エージェントは、他のエージェントが通り過ぎるのを可能にするように操作するのに十分な余地を既に有する。優先順位のリセットの際に、動作を完了したばかりのエージェントR1は、低優先順位のエージェントになる。その後、R1は、道を空け、かつ/または1つもしくは複数のより高優先順位のエージェントR2…Rnの道から外れて待つようにマルチエージェント・プランナによって指示され得る。エージェントR1の優先順位リセットの前に、エージェントR2…Rnは、エージェントR1のために経路を空けるように指示された。エージェントR1の優先順位リセットの後に、エージェントR2…Rnのうちの少なくとも1つは、おそらくは1つまたは複数のエージェントR2…Rnのルートをブロックすることを回避するためにエージェントR1のルートを変更することによって、その目的地位置に達することができる。エージェントR1がルートに沿って前進する時に、R1の優先順位は高まり、その結果、R1は、相対的に高優先順位のエージェントになり、1つまたは複数のより低優先順位のエージェントR3…Rmは、道を空け、かつ/またはR1のルートから外れて待つように指示され得る。R1がその目的地に達した後に、R1の優先順位は、リセットされ得る。目的地に達するまでルートに沿ってその優先順位が増加するエージェントの例の優先順位サイクルが、下で図9の文脈で議論される。
[0035] 衝突領域は、交差点または道路地図のうちでレーンを用いて注釈を付けられていない部分など、レーンの間の位置である。2つのレーンAおよびBが、衝突領域によって分離される場合に、衝突領域を通る非レーン経路(またはエッジ)が、レーンAおよびBを接続することができ、ここで、レーンとして分類されていないすべての経路は、非レーン経路と呼ばれ得る。例として、二方向経路は、非レーン経路であり、あるいは、エージェントを別のエージェントとの衝突に導く可能性がある経路は、非レーン経路である。いくつかの例では、道路地図は、レーンおよび衝突領域を有することができる。これらの例のいくつかでは、少なくとも2つのレーン、たとえばレーンAおよびレーンBを有する道路地図Rに関して、条件Cが存在することができる。たとえば、レーンAおよびレーンBがレーンAとBとの間の衝突領域CR1をトラバースする非レーン経路NLP1によって接続されるものとする。すると、NLP1によってトラバースされる衝突領域CR1内のレーンL1ごとに、経路NLP1の始めまたは衝突領域の外のいずれかへのレーンのみの経路がある時に、条件Cが道路地図R内に存在することができる。CR1などの衝突領域の例が、下で、図2の下側部分内の衝突領域250の文脈で議論される。
[0036] 条件Cを満足する道路地図に関して、マルチエージェント・ルート・プラニングでデッドロックを回避する御しやすい解決策を入手することができる。NP困難マルチエージェント・ルート・プラニング問題を、レーンベースの道路地図を使用するプラニング問題に制限することによって、結果の制限された問題を、計算的に御しやすいものにすることができる。さらに、レーンへの制限は、多くの実用的プラニング問題にとって妥当である可能性がある。マルチエージェント・プラニング問題の解は、1つまたは複数の衝突領域をトラバースする可能性がある、出発位置から目的地位置までの1つまたは複数のエッジおよび/またはレーンの集合として指定され得るルートの発見を含むことができる。
[0037] マルチエージェント・プランナは、マルチエージェント・プラニングに関する既存環境の道路地図Rを受け取り、使用することができ、ここで、Rは、複数N(N>0)のエージェントによって使用されるM個のレーン(M>0)の有向連結グラフとすることができ、Nは、出発構成で、すべてのレーン上で少なくとももう1つのエージェントを入れるのに十分な余地があるようにするために、十分に小さくすることができ、あるいは、いくつかの関連する場合に、Nは、道路地図内のレーンのすべてのサイクルに少なくとももう1つのエージェントを入れるのに十分な余地があるように選択される。MおよびNは、エージェントがピック・アンド・プレース動作などの動作を実行するのに十分に大きい道路地図内の少なくとも1つの領域があるようにするように選択され得る。
[0038] 道路地図Rを使用して、マルチエージェント・プランナは、エージェントA1を、レーン上のその現在位置CLから同一レーンまたは別のレーン上の別の位置ALまでルーティングすることができる。道路地図Rが連結グラフなので、CLとALとの間にレーンのサイクルCYがある。前の段落で述べたように、CY上に少なくとも1つの空のスポットがある。エージェントを、CYを回ってCLとALとの間で移動することによって、マルチエージェント・プランナは、エージェントA1が位置ALに達するまで、エージェントと共に空のスポットを移動することができる。レーンのサイクルを回るエージェントの移動は、下でより詳細に、たとえば、図3に示されたシナリオ300のロボット330および図5A〜図5Fに示されたシナリオ500のロボット530の文脈で、議論される。N個すべてのエージェントがたまたまCY上にある場合であっても、エージェントA1は、多項式時間でALに移動され得る。この循環シフトの終りに、1サイクルあたり少なくとも1つの空のスポットが、まだある。エージェントA1が位置ALで終わった後に、マルチエージェント・プランナは、エージェントAの優先順位をリセットすることができ、別のエージェントA2が、たとえばエージェントA2の相対的に高い優先順位に基づいて、選択され得、エージェントA2は、エージェントA1と同様の形でルーティングされ得る。この循環シフト・アルゴリズムは、レーンベースのグラフの制限とエージェントの優先順位順序付けとの組み合わせが、一般的なマルチエージェント・プラニング問題を、デッドロックなしでマルチエージェント・プランナによって多項式時間で解かれ得る問題に縮小するのに十分であることを論証する。
[0039] 一般に、道路地図R1は、レーン・エッジと非レーン・エッジとの両方を有する連結グラフとすることができる。エージェントが、レーンから外れることを必要とする時には必ず、エージェントは、ハイパーエッジすなわち、衝突判定のためにまとめて扱われる、レーン上で終わるエッジのシーケンスを予約することができる。非レーン・エッジをレーンの間のハイパーエッジの一部と考えることによって、一般的なレーン対応グラフR1を、レーンのみのグラフとして扱うことができ、したがって、道路地図R1上の一般的なマルチエージェント・プラニング問題をも、デッドロックなしに多項式時間で解くことができる。
[0040] すべてのエージェントの初期位置および要求された目的地を与えられて、マルチエージェント・プランナは、上で説明したようにすべてのエージェントに優先順位を割り当てる。次に、マルチエージェント・プランナは、N個すべてのエージェントの解を構築する。解は、エージェントごとに、対応する終了時間と共にハイパーエッジのシーケンスを指定する。解は、すべてのエージェントがデッドロックなしに多項式的に有界な長さの時間でその目的地に達するように構築される。いくつかの場合に、より低優先順位のエージェントは、より高優先順位のエージェントが通過することを可能にするために迂回するように指示され得る。その後、より低優先順位のエージェントは、その目標位置に前進するように指示される。いくつかの場合に、より高優先順位のエージェントは、より低優先順位のエージェントがより高優先順位のエージェントの道から外れるのを待つように指示される。
[0041] いくつかの例で、マルチエージェント・プランナは、N個のエージェントのそれぞれについて優先順位順で計画することができる。エージェントごとに、マルチエージェント・プランナは、すべての以前の(より高優先順位の)エージェントのプランを尊重し、しかしおそらくは続く(より低優先順位の)エージェントの位置を詳細に調べながら、その出発位置または現在位置からその目的地位置までのルートを判定することができる。部分的プランからのエッジから出発するエージェントのルートの始まりが、コミットされ得る。エージェントのルートが、続くエージェントの最後の位置を調べた後に、そのルートは、試験的なものになることができる。したがって、マルチエージェント・プランナは、優先順位順で最初のエージェントA_HIGHEST_PRIが、他のすべてのエージェントの前にルーティングされるので、A_HIGHEST_PRIがその目的地までルーティングされ得ることを保証することができる。A_HIGHEST_PRIのルートは、その最後でエージェントA_HIGHEST_PRIの優先順位がリセットされる、3D(2D平面+1D時間)の最終経路であると考えられ得る。
[0042] マルチエージェント・プランナは、続くエージェントごとのルートを前のエージェントの3D経路の「下で」計画する。あるエージェントのルートは、待機と目的地位置での優先順位リセットとを含めて、前のエージェントの経路の下に完全におさまることができる。いくつかの場合に、あるエージェントのルートは、待避のためのルーティングすなわち、より高優先順位のエージェントの道を外れ、その後に前にルーティングされたエージェントの優先順位リセットを待ち、その後に待避を元に戻すためにサイクル・バックするためのハイパーエッジを含むことができる。極端な場合に、エージェントは、有界な回数(すなわち、より高優先順位のエージェントの個数)だけ待避する可能性がある。これらの待避が実行された後に、すべてのより高優先順位のエージェントは、そのそれぞれの優先順位をリセットさせ、相対的に高優先順位を有するエージェントを残し、これは、そのエージェントがそのルートに沿ってその目的地位置に前進することを可能にする。
[0043] エージェントは、相対的に高優先順位のエージェントとして目的地位置で要求されるすべての動作を完了するために、ある時間期間の間だけ目的地位置に留まることができ、その後、そのエージェントの優先順位はリセットされ得る。たとえば、相対的に高優先順位のエージェントは、プラニングから消滅することができ、新しい最低優先順位のエージェントが、同一位置に現れることができる。いくつかの例では、新しい最低優先順位のエージェントは、当初に課題を割り当てられず、したがって、そのエージェントが課題を割り当てられるまで、ルート・プラニングの対象ではない。したがって、新しい最低優先順位のエージェントは、衝突チェックに関してのみ、すなわち、新しい最低優先順位のエージェントがより高優先順位のエージェントのルートをブロックしていないことを保証するためにのみ、プラニングされる。この場合に、新しい最低優先順位のエージェントは、より高優先順位のエージェントを待避すると仮定される。いくつかの例では、すべてのエージェントが同一速度で動作する(エージェントがお互いを追い越さないことを暗示する)と仮定され得、したがって、待避は、ブロックするエージェントを迂回する唯一の形である可能性がある。他の例では、この同一速度仮定が緩和され得、これは、エージェントの追い越しを可能にすることができる。
[0044] 動作中に、道路地図は、たとえば障害物、保守を必要とするエージェント、その他によってブロックされた1つまたは複数のレーンを有する可能性がある。レーン・ブロックは、道路地図の区分につながる可能性があり、たとえば、道路地図の2つの部分P1およびP2が1つのレーンL1によって接続され、レーンL1がブロックされる場合に、その道路地図は、部分(新しい区画)P1およびP2に区分される。そのようなブロック(または他の理由)が、道路地図を区分させ、エージェントA_BLOCKの出発位置をその目的地位置から分離する場合に、マルチエージェント・プランナは、他のエージェントが考慮されない場合であっても、エージェントA_BLOCKのルートがないと判定することができる。この場合に、マルチエージェント・プランナは、エージェントA_BLOCKのルーティングに問題があることを示すために、例外を送出することができる。その例外に対する反応として、エージェントA_BLOCKは、道路地図の接続された部分内に留まる新しい課題を割り当てられ得(たとえば、A_BLOCKが、道路地図が区分される時に部分P2内にある場合に、A_BLOCKは、そのルートがP2内にある新しい課題に割り当てられ得る)かつ/またはブロックされたレーンL1の近くのエリアなどの道路地図のなんらかのエリアが、ブロックされているまたは遮断されているものとして宣言され得る。そうではないと示されない限り、マルチエージェント・プランナによって使用される道路地図は、接続されていると仮定される。
[0045] エージェントが、1つまたは複数のより高優先順位のエージェントの道を空けるように指示される場合に、そのエージェントは、1つのルート上の同一位置を複数回再訪問する場合がある。そのような挙動を浪費的な循環ルートから区別するために、エージェントA_LOPRIは、より高優先順位のエージェントA_HIPRIが将来のいつかにレーンL1(エッジE1)上で移動するように割り当てられる場合に、レーンL1(エッジE1)を再訪問することを許される。いくつかの場合に、エージェントA_LOPRIは、より高優先順位のエージェントの個数+1回までレーンL1(エッジE1)を訪問することを許され得、たとえば、A_LOPRIが、上から10番目の優先順位のエージェントである場合に、A_LOPRIは、待避のために9回+それ自体の目的のために1回、レーンL1(エッジE1)を訪問することができ、したがって、A_LOPRIは、合計10回レーンL1(エッジE1)を訪問することができる。
[0046] マルチエージェント・プランナは、道路地図のハイパーエッジをトラバースするエージェントにプランを提供することができる。マルチエージェント・プランナが、上で議論したように優先順位順でエージェントごとにルートを決定した後に、エージェントごとに1つの、ハイパーエッジのN個の時間順序付けされたシーケンスの集合が生成される。ハイパーエッジは、その完了時刻の順で考慮され得る。その後、プランは、各追加されるエッジが、他のエージェントのプランに既に含まれるいずれのエッジとも衝突しないように、最初に完了されるハイパーエッジから始めて作成され得る。
[0047] 一般に、マルチエージェント・プラニングは、交差し衝突するエージェントを避けてエージェントを順序付ける必要に起因してNP困難問題であり、したがって、デッドロックを回避する最適解への到達は、多項式時間で可能である可能性が低い。しかし、ロボットをルーティングするマルチエージェント・プラニング・アルゴリズムは、ロボットの間の衝突および/またはデッドロックを回避することができる。さらに、上で議論したように、レーンと、エージェントがそのルートに沿って移動していた時間の長さに基づくエージェント優先順位などのエージェントの単調に増加する優先順位とを含む連結グラフを利用するそのようなマルチエージェント・プラニング・アルゴリズムは、計算的に御しやすいものである可能性がある。したがって、本明細書で説明される技法は、倉庫環境などの環境内のロボットのルーティングなどの複数の例で実行可能なレーン関連制限を有する道路地図を使用するマルチエージェント・プラニング問題に対する計算的に御しやすい解を可能にすることができる。
デッドロックなしのマルチエージェント・プラニングのためのレーン注釈付けされた道路地図の使用
[0048] 図2は、例の実施形態による、一方向レーン(L)210、212、220、222、230、232、240、および242の交差点246にある4つのロボット214、224、234、および244を含むシナリオ200を示す。図2の上側部分は、北から南に向けられたレーン210上のロボット214、東から西に向けられたレーン220上のロボット224、南から北に向けられたレーン232上のロボット234、および西から東に向けられたレーン242上のロボット244を示す。レーン210は、南から北に向けられたレーン212と平行し、レーン220は、西から東に向けられたレーン222と平行し、レーン232は、北から南に向けられたレーン230と平行し、レーン242は、東から西に向けられたレーン220と平行する。
[0049] 図2の下側部分に示されているように、シナリオ200は継続し、ロボット224が、交差点246内に進み続け、交差点246は、今は衝突領域(CR)250を含む。衝突領域は、レーン、たとえばレーンAとレーンBとの間の、(i)レーンAとレーンBとの間の経路の始めへまたは(ii)衝突領域から出るのいずれかのレーンのみの経路がある領域とすることができる。この2つの条件のうちの第1の条件に関して、図2の下側部分は、レーン232からレーン222への経路が、衝突領域250内のレーン232とレーン222との間の経路の始めであるレーン232を含むことを示す。この2つの条件のうちの第2の条件に関して、図2の下側部分は、レーン220からレーン240に延びるレーンのみの経路が、衝突領域250を通過し、これから出ること、ならびに、レーン242からレーン222に延びるレーンのみの経路が、衝突領域250を通過し、これから出ることを示す。交差点246が、同時に複数の衝突領域を含むことができ、たとえば、交差点246が、衝突領域250ならびにレーン210とレーン230との間の平行衝突領域を含むことができることに留意されたい。すなわち、交差点は、1つまたは複数の衝突領域の例とすることができるが、衝突領域は、交差点とは異なる可能性がある。交差点とは異なる衝突領域の別の例として、衝突領域は、図7A〜図7Dに示された例の道路地図720など、レーンによって注釈を付けられず、複数の交差点を含む道路地図の部分を含むことができる。衝突領域の他の例も可能である。
[0050] 図3は、例の実施形態による、レーンのサイクルを使用する2つのロボット330および332を含むシナリオ300を示す図である。図3の最上部は、交差点(I)312および314を介して接続されたレーン320および322を含むレーン・サイクル324を有する道路地図310を示す。道路地図310は、ロボット330および332を含む既存環境の道路地図とすることができる。レーン320および324のそれぞれは、それぞれのギャップ326および328に達する前に停止し、ギャップ326および328は、それぞれのレーン320および322の端で停止したロボットがそれぞれの交差点312および314を通って移動するロボットと干渉することから可能にする。
[0051] 図3の上から2番目の部分は、両方ともマルチエージェント・プランナによってレーン320上で東から西に移動するように指示される2つのロボット330および332によって部分的に占有される道路地図310のレーン・サイクル324を示す。シナリオ300では、マルチエージェント・プランナは、ロボットがそのルートに沿って移動していた時間の長さに基づいてロボットの優先順位を判定する。シナリオ300のこの段階では、ロボット330は、図3で「優先順位=2」によって示されるように2の現在優先順位を有し、ロボット332は、図3で「優先順位=3」によって示されるように3の現在優先順位を有する。したがって、ロボット332は、ロボット330より高い優先順位を有し、これは、ロボット332が、そのルートに沿ってロボット330より長く移動したことを示す。
[0052] シナリオ300の環境内には2つのロボットだけがあるので、ロボット332の優先順位は、この環境内のすべてのロボットにまたがる最高優先順位である。ロボット332の優先順位が最高優先順位であると判定した後に、マルチエージェント・プランナは、ロボット332がレーン322上でその目的地に達することができるようにするために、ロボット332による使用のためにレーン320、交差点312、およびレーン322を含むルートを予約することができる。
[0053] 図3の上から2番目の部分は、ロボット330の目的地がレーン320の西端に近いが、ロボット332の目的地がレーン322の中央に近いことをも示す。すなわち、より低優先順位のロボット330は、その目的地に相対的に近いが、より高優先順位のロボット332は、その目的地から相対的に遠い。しかし、より低優先順位のロボット330が、その目的地(または、ロボット332がその目的地に達する前の、道路地図310のレーン・サイクル324上の他所)で停止する場合に、これは、レーン320(またはおそらくはレーン322)をブロックし、その結果、より高優先順位のロボット332は、その目的地に達することができなくなる。より高優先順位のロボット332がその目的地に前進することを可能にするために、マルチエージェント・プランナは、ロボット330がロボット332をブロックしないようにするために、より低優先順位のロボット330に、その目的地で停止する前に、レーン・サイクル324を介して移動するように指示する。
[0054] 図3の上から2番目の部分は、道路地図310のレーン・サイクル324が、ロボット330および332のそれぞれに十分な空間と、少なくとも1つの追加のロボット(図3には図示せず)に十分な空間とを含むことをも示す。さらに、レーン・サイクル324は、ロボットの間の最小追従距離を維持するのに十分な空間を含み、この最小追従距離は、ロボット330の周囲の泡334によって表され、泡334は、ロボット330と他のエージェント/ロボットとの間の衝突を回避するためにロボット330のために予約される空間の領域である。他のシナリオでは、空間の同様の泡が、ロボット332のために提供され得る。
[0055] シナリオ300は進み、図3の下から2番目の部分に示されているように、より低優先順位のロボット330が、その目的地を過ぎて進み、その結果、より高優先順位のロボット332が、レーン322上でその目的地に前進する間にレーン320をブロックしなくなる。ロボット330とロボット332との両方が、ルート上でより多くの時間を費やすので、マルチエージェント・プランナは、両方のロボットの優先順位をそれぞれ3および4に高める。
[0056] 図3の最下部は、ロボット332が、マルチエージェント・プランナによって指示された目的地で停止し、マルチエージェント・プランナが、ロボット332がその目的地に達した後にその優先順位を0にリセットすることを示す。また、マルチエージェント・プランナは、ロボット330に、その目的地に接近するために交差点314を介してレーン・サイクル324のレーン322および320に沿って前進するように指示済みである。レーン・サイクル324のレーン322および320に沿っておよび交差点314を介して移動する間に、マルチエージェント・プランナは、ロボット330の優先順位を5に高めた。ロボット330がその目的地に達した後に、マルチエージェント・プランナは、ロボット330に、その目的地で停止するように指示することができ、シナリオ300は、完了され得る。
[0057] ロボットは、積荷、認可されないエージェント、認可されない人、および/または動作不能な機械類などの障害物がルートに沿って見つかる時に、再ルーティングされ得る。そのようなシナリオでは、マルチエージェント・プランナが、ロボット330および/または332をブロックするレーン320上の障害物など、ロボットをブロックする障害物がルート上にあると判定する時に、マルチエージェント・プランナは、障害物の存在を示す警告メッセージを生成することができ、そのルートが障害物によってブロックされるロボットの新しいルートを判定することができる。たとえば、マルチエージェント・プランナが、ロボット332がシナリオ300中に交差点314内にいる間に障害物がレーン320をブロックしたと判定する場合に、ロボット330のルートは、障害物によって影響される可能性があるが、ロボット332のルートは、影響されないはずである(ロボット332は、その目的地に達するために交差点314を通過し、レーン332に沿って移動することだけを必要とするので)。ロボット330のルートが障害物によって影響される場合には、マルチエージェント・プランナは、ロボット332を再ルーティングし、障害物がレーン320上で検出されたことの警告メッセージおよび/もしくは他の指示を生成し、人間または他のエージェントが障害物についてレーン320を点検することの要求を送り、かつ/または障害物に対処し、かつ/もしくはこれを取り除くことを試みるために他のアクションを実行することができる。
[0058] 図4A〜図4Eは、例の実施形態による、交差点450で旋回するロボットを含むシナリオ400を示す。シナリオ400は、両方が交差点450のトラバースを含む2つのフェーズを有する。図4Aに示されたシナリオ400の第1のフェーズでは、マルチエージェント・プランナは、交差点450を通るそれぞれの右旋回を行うようにロボット414、424、436、および446に指示する。図4B、図4C、図4D、および図4Eに示されたシナリオ400の第2のフェーズでは、マルチエージェント・プランナは、交差点450を通るそれぞれの左旋回を行うようにロボット470、472、474、および476に指示する。
[0059] 図4Aは、8つのレーンすなわち、北から交差点450に入るレーン410、北に向かって交差点450を去るレーン412、東から交差点450に入るレーン420、東に向かって交差点450を去るレーン422、南から交差点450に入るレーン432、南に向かって交差点450を去るレーン430、西から交差点450に入るレーン442、および西に向かって交差点450を去るレーン440の交差点450を有する道路地図402を示す。シナリオ400の第1のフェーズに関する図4A内の道路地図402によって表される環境は、8つのロボットすなわち、レーン410上のロボット414、レーン412上のロボット416、レーン420上のロボット424、レーン422上のロボット426、レーン430上のロボット434、レーン432上のロボット436、レーン440上のロボット444、およびレーン442上のロボット446を含む。
[0060] これら8つのロボットのうちで、4つのロボットすなわちロボット414、424、436、および446は、シナリオ400の第1のフェーズ中にマルチエージェント・プランナによって交差点450を通る旋回を実行するように指示される。シナリオ400の第1のフェーズ中に、交差点450は、4つの衝突領域すなわち、レーン410および440を接続する衝突領域452aと、レーン420および412を接続する衝突領域452bと、レーン442および430を接続する衝突領域452cと、レーン432および422を接続する衝突領域452dとに分割され得る。
[0061] シナリオ400は進み、マルチエージェント・プランナが、レーン410からレーン440への右旋回418を行うようにロボット414に指示する。この右旋回を実行するために、マルチエージェント・プランナは、ロボット414のために衝突領域452aを予約し、レーン440上で右旋回418を行うために、交差点450のうちで衝突領域452aを含む部分を通って前進するようにロボット414に指示する。交差点450がレーンを全く含まないので、交差点450の少なくとも一部、たとえば衝突領域452aが、他のロボットが交差点450のレーン410とレーン440との間の部分に入るのをブロックするために予約されなければならない。
[0062] 同様に、ロボット424、436、および446のそれぞれは、マルチエージェント・プランナによって指示された通りに、それぞれのレーン420、432、および442からそれぞれのレーン412、422、および430へのそれぞれの右旋回428、438、および448を実行している。これらの右旋回を実行するために、マルチエージェント・プランナは、ロボット424のために衝突領域452bを予約し、ロボット436のために衝突領域452dを予約し、ロボット446のために衝突領域452cを予約する。上で言及したように、交差点450がレーンを全く含まないので、交差点450の少なくとも一部、たとえば衝突領域452b、452c、および452dが、それぞれのレーン420とレーン412と、レーン423とレーン422と、ならびにレーン442とレーン430との間での旋回428、438、および448を可能にするために、他のロボットが交差点450の一部に入るのをブロックするために予約されなければならない。ロボット424、436、および446は、交差点450のうちでそれぞれの衝突領域452b、452d、および452cを含むそれぞれの部分を通って前進して、それぞれのレーン412、422、および430へのそれぞれの右旋回428、438、および448を行う。衝突領域452a、452b、452c、および452dのどれもがオーバーラップしないので、旋回418、428、438、および448の一部またはすべては、並列に実行され得る。
[0063] 他のシナリオでは、衝突領域452a、452b、452c、および452dの一部またはすべての形状を、図4Aに示されたものとは異なるものとすることができる。たとえば、衝突領域452a〜452dの一部またはすべては、衝突領域452a〜452dのそれぞれがレーンの間の右旋回を可能にするが、交差点450の中央をカバーしなくなるように、サイズにおいて縮小され得る。
[0064] シナリオ400の第2のフェーズでは、ロボット470、472、474、および476は、図4B、図4C、図4D、および図4Eに示されているように、交差点450を通る左旋回を行うようにマルチエージェント・プランナによって指示される。シナリオ400の第2のフェーズの環境は、図4B〜図4Eの道路地図402によって表され、4つのロボットすなわち、ロボット470、ロボット472、ロボット474、およびロボット476を含む。図4Bは、シナリオ400のこの段階で、4つのロボットが交差点450すぐ外すなわち、ロボット470がレーン410内、ロボット472がレーン420内、ロボット474がレーン432内、ロボット476がレーン442内にあることを示す。シナリオ400の少なくとも第2のフェーズ中に、マルチエージェント・プランナは、ロボットがそのルートに沿って移動していた時間の長さに基づいて、ロボットの優先順位を判定する。具体的には、マルチエージェント・プランナは、ロボット470が3の優先順位を有し、ロボット472が4の優先順位を有し、ロボット474が2の優先順位を有し、ロボット476が1の優先順位を有するというように、ロボット470〜476に優先順位を割当済みである。したがって、ロボット472は、これら4つのロボットのうちで最高の優先順位を有する。
[0065] シナリオ400は継続し、マルチエージェント・プランナが、衝突領域454の外側で停止するようにロボット470、472、および474に指示し、この衝突領域454は、図4B〜図4Eでは、太い黒線で輪郭を示され、衝突領域454は、交差点450を含む。マルチエージェント・プランナは、ロボット470、474、および476のそれぞれの優先順位のそれぞれが、ロボット472の優先順位より低いので、ロボット470、474、および476を衝突領域454の外側で停止させ、その結果、ロボット470、474、および476は、少なくともロボット472が衝突領域454をトラバースし終えるまで待つ。ロボット472が、衝突領域454にあるロボットのうちで最高の優先順位を有するので、マルチエージェント・プランナは、ロボット472の排他的使用のために衝突領域454を予約し、その後、レーン420から衝突領域454を通ってレーン430への左旋回460を行うようにロボット472に指示する。衝突領域454がレーンを全く有しないので、衝突領域454は、ロボット472がレーン420とレーン430との間で移動する間にロボット470、474、および476が入るのをブロックするために予約されなければならない。
[0066] 図4Cに示されているように、シナリオ400は継続し、ロボット472が、左旋回460を完了し、レーン430内で南向きに進み続ける。マルチエージェント・プランナは、ロボット470、472、474、および476の優先順位を4、5、3、および2というそれぞれの値に更新する。ロボット470が、衝突領域454の使用を待っている3つのロボット(ロボット470、474、および476)のうちで最高優先順位を有するので、マルチエージェント・プランナは、ロボット470の排他的使用のために衝突領域454を予約し、その後、レーン410から衝突領域454を通ってレーン422への左旋回462を行うようにロボット470に指示する。衝突領域454がレーンを全く有しないので、衝突領域454は、ロボット470がレーン410とレーン422との間を移動する間にロボット474および476が入るのをブロックするために予約されなければならない。
[0067] 図4Dに移ると、シナリオ400は継続し、ロボット470が、左旋回462を完了し、レーン422内で東向きに進み続ける。マルチエージェント・プランナは、少なくともロボット470、474、および476の優先順位を5、4、および3というそれぞれの値に更新する。ロボット474が、衝突領域454の使用を待っている2つのロボット(ロボット474および476)のうちで最高優先順位を有するので、マルチエージェント・プランナは、ロボット474の排他的使用のために衝突領域454を予約し、その後、レーン432から衝突領域454を通ってレーン440への左旋回464を行うようにロボット474に指示する。衝突領域454がレーンを全く有しないので、衝突領域454は、ロボット474がレーン432とレーン440との間を移動する間にロボット476が入るのをブロックするために予約されなければならない。
[0068] 図4Eに示されているように、シナリオ400は継続し、ロボット474が、左旋回464を完了し、レーン440内で西向きに進み続ける。マルチエージェント・プランナは、少なくともロボット474および476の優先順位を5および4というそれぞれの値に更新する。ロボット476が、衝突領域454の使用を待っている最高優先順位のロボットなので、マルチエージェント・プランナは、ロボット476の排他的使用のために衝突領域454を予約し、その後、レーン442から衝突領域454を通ってレーン412への左旋回466を行うようにロボット476に指示する。衝突領域454がレーンを全く有しないので、衝突領域454は、ロボット476がレーン442とレーン412との間を移動する間に他のロボットが入るのをブロックするために予約されなければならない。左旋回466の完了時に、マルチエージェント・プランナは、ロボット476のための衝突領域454の予約を除去することができ、ロボット476は、レーン412上で北向きに前進することができ、シナリオ400は、完了することができる。
[0069] シナリオ400の第2のフェーズは、シナリオ100を鏡映し、シナリオ100では、4つのエッジの交差点にある4つのロボットは、それぞれの左旋回を行うことを試みたが、デッドロック状態で終わった。対照的に、シナリオ400の第2のフェーズの4つすべてのロボットは、上で議論したようにデッドロックなしに成功裡の左旋回を行った。したがって、シナリオ400の第2のフェーズは、一方向エッジの道路地図に基づいて優先順位付けされたロボットに指示するマルチレベル・プランナが、少なくともいくつかの以前には回避不能であったデッドロックを回避できることを示す。
[0070] いくつかの他のシナリオでは、ブロックされた領域は、エージェントがブロックされた領域をトラバースした時に、エージェントの背後で少なくとも部分的に解放され得る。たとえば、ロボット476が、旋回466を行いながらレーン422および442の北に移動し終えた後に、衝突領域454のうちでレーン440とレーン442との間の分割線(および/またはレーン420とレーン422との間の分割線)の南の部分は、解放され得るが、衝突領域454のうちでその分割線の北の部分は、ブロックされ/ロボット476のために予約されたままになる可能性がある。衝突領域454のうちでその分割線の南の部分を解放する際に、ロボット476が左旋回466を終了する間に交差点450のいくつかの右旋回およびトラバースが行われ得、したがって、1つまたは複数のロボットがレーンの間で移動する際の安全性を維持すると同時に追加のトラフィック・フローを可能にする。
[0071] 図5A〜図5Fは、例の実施形態による、複数のレーンを有する環境内でナビゲートするロボットを含むシナリオ500を示す。シナリオ500では、道路地図502によって表される環境は、それぞれがマルチエージェント・プランナによってそれぞれの目的地にルーティングされ、3、1、および2のそれぞれの優先順位を有するロボット510、520、および530を有する。ロボット510が、この3つのロボットの最高優先順位を有するので、マルチエージェント・プランナは、図5Aに示されているように、ロボット510の排他的使用のために衝突領域540と衝突領域542との間のレーン504を予約する。ロボット520は、ロボット510より低い優先順位を有するが、ロボット510がロボット520に到達できる前に、その目的地に達するためにレーン504の一部を利用することができる。したがって、マルチエージェント・プランナは、図5Bおよび図5Cに示されているように、その相対的に低い優先順位にかかわりなく、ロボット520がその目的地へ前進することを可能にする。具体的には、マルチエージェント・プランナは、ロボット510の排他的使用のための衝突領域542の予約を解放し、ロボット520の排他的使用のために衝突領域542を予約し、衝突領域542を通ってレーン508へとロボット520に指示し、衝突領域542の予約を解放する。
[0072] やはり図5Bおよび図5Cに見られるように、ロボット530は、ロボット510がレーン506上でその目的地に向かって前進する時にロボット510のために予約されたレーン504をブロックするので、レーン504上でその目的地を通り過ぎるようにマルチエージェント・プランナによって指示される。具体的には、マルチエージェント・プランナは、ロボット530の排他的使用のために衝突領域542を予約し、衝突領域542を通ってレーン506へとロボット530に指示し、衝突領域542の予約を解放し、ロボット510の排他的使用のために衝突領域542を予約する。したがって、マルチエージェント・プランナは、より高優先順位のロボットのためのレーンをブロックすることを回避するために、ロボット520および530などのより低優先順位のロボットがレーン504などのレーンを去ることを可能にするために、ロボット510などのより高優先順位のロボットのための衝突領域542などの衝突領域の予約を解放することができる。
[0073] このシナリオでは、ルートは、レーンならびに出発と終了目的地との間のレーン上での待機時間のシーケンスを含む。マルチエージェント・プランナは、ロボット520が、より高優先順位のロボット510の前に衝突領域542を通って前進することを可能にすることによってレーン504上でのロボット520の待機時間を変更する(すなわち、待機時間を短縮する)ことによってロボット510のためのレーン504のブロックを回避するために、ロボット520のルートを変更した。また、マルチエージェント・プランナは、より高優先順位のロボット510がレーン506上の目的地に達することを可能にするためにロボット530がレーン504および506をトラバースできるようにするために、ロボット530のルートにレーン・サイクルおよび対応する待機時間を追加することによって、ロボット510のためのレーン504のブロックを回避するために、ロボット530のルートを変更した。図5D、図5E、および図5Fは、ロボット530がレーン504上の目的地に達する前にレーン・サイクルを回って前進することを示す。ロボット530がその目的地に達した後に、シナリオ500は終了することができる。
[0074] シナリオ500は、図5Aに示されているように、ロボット510が東向きに衝突領域540に向かって進み、ロボット520および530が東向きにレーン504上で衝突領域540から衝突領域542に向かって進む状態で始まり、ロボット520は、ロボット530より衝突領域542に近い。ロボット510の目的地は、衝突領域542から南向きに向けられたレーン506上にあり、ロボット520の目的地は、衝突領域542の北のレーン508上にあり、ロボット530の目的地は、衝突領域542の真西のレーン504上にある。
[0075] シナリオ500中に、マルチエージェント・プランナは、ロボットがそのルートに沿って移動していた時間の長さに基づいてロボットの優先順位を判定する。シナリオ500の初めに、マルチエージェント・プランナは、各それぞれのロボットがそのそれぞれのルート上で移動する間に費やした時間の長さに基づいて、ロボット510に3の優先順位、ロボット520に1の優先順位、ロボット530に2の優先順位を割り当てた。ロボット510は、3つのロボットの最高優先順位を有するので、マルチエージェント・プランナは、ロボット510による使用のために、衝突領域540、レーン504、衝突領域542、およびレーン506を含むルートを予約する。また、マルチエージェント・プランナは、ロボット530に、レーン504上でその目的地を過ぎて前進し、レーン504上でその目的地に達する前に衝突領域542、546、544、および540を(この順で)通る時計回りのレーン・サイクルをとるように指示する。マルチエージェント・プランナは、ロボット520とロボット530との両方が、ロボット510が衝突領域542を通って前進することを可能にするために衝突領域542を通って前進しなければならない(レーン504上での追い越しが実現可能ではないので)ことをも認識し、したがって、ロボット520のために衝突領域542を一時的に予約する。マルチエージェント・プランナは、レーン508がどのロボットまたは他のエージェントによっても利用されないことをさらに認識し、したがって、ロボット520に、その目的地に達するために衝突領域542を通ってレーン508に前進するように指示する。したがって、ロボット520が、ロボット510、520、および530の最低優先順位を有するにもかかわらず、ロボット520は、ロボット510および530の前の位置にあり、その結果、ロボット520は、ロボット510またはロボット530のいずれかが衝突領域542に達する前に、衝突領域542を通って(レーン508に)前進することができるようになる。したがって、低優先順位ロボット520は、より高優先順位のロボット510および530の前に、レーン504および衝突領域542を「こっそり通る」ことができ、目的地に到達できる。
[0076] 図5Bは、ロボット520が、レーン504から衝突領域542を通ってレーン508への左旋回を行い、ロボット530が、東向きに衝突領域542に向かってレーン504上で前進し、ロボット510が、衝突領域540を通ってレーン504に向かってまっすぐに(東向きに)前進することを示す。
[0077] 図5Cは、ロボット520が、レーン508上でその目的地に達し、その優先順位を0にリセットされたことを示す。ロボット520は、シナリオ500の残りの持続時間の間、その目的地に留まる。図5Cは、ロボット530が、レーン504から衝突領域542を通ってレーン506への右旋回を行い、衝突領域546に向かってレーン506上で南向きに向けられていることをも示す。ロボット530がその時計回りのレーン・サイクル上で前進することを可能にするために、マルチエージェント・プランナは、衝突領域546、544、および540と、それぞれの接続するレーンとをロボット530による使用のために予約した。また、ロボット520および530が衝突領域542を通過した後に、マルチエージェント・プランナは、ロボット510のために衝突領域542を予約する。
[0078] 図5Dに移って、シナリオ500は継続し、ロボット530が、レーン506の終りまで前進し、衝突領域546を通って右に旋回し、衝突領域544に向かって西向きに前進する。ロボット530がレーン506および衝突領域546を通過した後に、マルチエージェント・プランナは、レーン506および衝突領域546に対するロボット530のためのすべての関連する予約を除去し、ロボット530が衝突領域544に向かう西向きレーンの予約を有することを保証する。
[0079] また、ロボット510は、前進して、レーン504から衝突領域542を介するレーン506への右旋回を行う。ロボット510がレーン504を通過した後に、マルチエージェント・プランナは、レーン504に対するロボット510のための予約を除去し、ロボット510が、その目的地に向かう衝突領域542の予約およびレーン506の予約を有することを保証する。
[0080] 図5Eは、ロボット510が、レーン506上の目的地に達し、その優先順位を0にリセットされたことを示す。ロボット510は、シナリオ500の残りの持続時間の間、その目的地に留まる。図5Cは、ロボット530が、衝突領域544を通る右旋回を行い、衝突領域540に向かって北向きに向けられていることをも示す。ロボット530が衝突領域544を通過した後に、マルチエージェント・プランナは、ロボット530のための衝突領域544の予約を除去することができ、ロボット530が衝突領域544から衝突領域540への北向きのレーンの予約を有することを保証することができ、ロボット530のために衝突領域540を予約することができる。シナリオ500のこの段階で、ロボット550が、道路地図502によって表される環境に入り、衝突領域540に向かって東向きに前進する。ロボット550が、ロボット530の6という現在の優先順位より低い1の優先順位を有し、ロボット530が、衝突領域540(ロボット530の使用のために予約済み)に相対的に近いので、マルチエージェント・プランナは、ロボット550に、衝突領域540に達する前に停止するように指示する。すなわち、ロボット550は、衝突領域540に関するロボット530および550の相対位置に起因して、衝突領域540をこっそり通ることをマルチエージェント・プランナによって許可されない。
[0081] 図5Fは、ロボット530が、衝突領域540を通るレーン504への右旋回を行い、その目的地まで前進したことを示す。ロボット530が衝突領域540を通る右旋回を開始する前に、マルチエージェント・プランナは、ロボット530がレーン504の予約を有することを保証し、ロボット530がその目的地まで前進することを可能にする。その後、ロボット530が衝突領域540を通る右旋回を完了した後に、マルチエージェント・プランナは、ロボット530のための衝突領域540の予約を除去し、ロボット550のために衝突領域540を予約する。その後、ロボット550は、図5Fに示されているように、衝突領域540を通る左旋回を行い、衝突領域544に向かって南向きに前進するように指示される。ロボット530がその目的地に達した後に、シナリオ500は完了することができる。
[0082] 図6A〜図6Fは、例の実施形態による、衝突領域630として表された交差点を通過する2つのロボット610および620を含むシナリオ600を示す。シナリオ600中に、マルチエージェント・プランナは、ロボットがそのルートに沿って移動した時間の長さに基づいて、ロボットの優先順位を判定する。図6Aは、シナリオ600の初めに、道路地図602によって表される環境内で、マルチエージェント・プランナが、ロボット620に割り当てられた1の優先順位より高い3の優先順位をロボット610に割り当てる。
[0083] 道路地図602は、衝突領域630に向かって東向きに向けられたレーン632、衝突領域630から離れて西向きに向けられたレーン642、衝突領域630から離れて東向きに向けられたレーン634、衝突領域630に向かって西向きに向けられたレーン644、衝突領域630に向かって南向きに向けられたレーン636、および衝突領域630から離れて北向きに向けられたレーン646を含む。
[0084] ロボット610が、環境内のすべてのエージェントの最高優先順位を有するので、マルチエージェント・プランナは、ロボット610がレーン646上のその目的地に達することを可能にするために、ロボット610のためにレーン632、衝突領域630、およびレーン646を予約する。また、マルチエージェント・プランナは、ロボット620に、レーン644上のその位置で停止するように指示する。シナリオ600では、ロボット610とロボット620との両方が、レーン646上に共通の目的地を有する。
[0085] 図6Bは、シナリオ600が継続し、ロボット610が、レーン646上の共通の目的地に前進することを示す。この時に、ロボット620は、衝突領域630がまだロボット610のために予約されているので、レーン644上で待つままになる。シナリオ600は進み、マルチエージェント・プランナは、ロボット610が4時間単位の間、共通の目的地にいた後に、ロボット620のために衝突領域630を予約する。シナリオ600では、マルチエージェント・プランナは、ロボット610が共通の目的地で課題を完了するのに少なくとも4つの時間単位を要すると推定するので、ロボット610が共通の目的地に来た後に4時間単位だけ待つ。ロボット610とロボット620との両方が、レーン646上の共通の目的地を有するので、マルチエージェント・プランナは、ロボット610が共通の目的地で有する可能性がある課題(1つまたは複数)をロボット610が完了するために、ある時間(たとえば、4時間単位)を割り振る。というのは、ロボット610が共通の目的地を去るまでは、ロボット610が、ロボット620の目的地に達することからロボット620をブロックするからである。他のシナリオでは、マルチエージェント・プランナは、ロボット(または他のエージェント)がその目的地に達した後に、より多数またはより少数の時間単位の後に衝突領域の予約を変更することができる。図6Cは、ロボット610がその目的地に来た後、ロボット620のために衝突領域630を予約する前に、マルチエージェント・プランナが4時間単位だけ待った後の道路地図602によって表される環境を示す。
[0086] 図6Dは、ロボット610がレーン646上の共通の目的地でその課題を完了し、ロボット610がレーン646上で北向きに移動し始めたので、マルチエージェント・プランナが、レーン644に沿って衝突領域630に向かって前進するようにロボット620に指示した後に、シナリオ600が前進することを示す。マルチエージェント・プランナは、共通の目的地でのロボット610の課題の完了時に、ロボット610の優先順位を0(すなわち、最低の可能な優先順位)にリセットもした。
[0087] 図6Eによって示されるように、シナリオ600は進み、ロボット620が、レーン646上の共通の目的地に達する。共通の目的地に達する際に、ロボット620は、共通の目的地で、ピック・アンド・プレース動作(1つまたは複数)などの1つまたは複数の課題を実行し始める。
[0088] 図6Fによって示されるように、シナリオ600は進み、ロボット620が、レーン646上の共通の目的地で課題(1つまたは複数)を実行する。マルチエージェント・プランナは、共通の目的地でのロボット620の課題(1つまたは複数)の完了時に、ロボット620の優先順位を0にリセットする。マルチエージェント・プランナがロボット620の優先順位を0にリセットした後に、シナリオ600は終了することができる。
[0089] 道路地図は、上で示したようにレーンを含むことができる。いくつかの場合に、道路地図がレーンを全く含まない場合がある。その場合に、道路地図は、レーンを含むように「注釈を付けられ」またはマークされ得る。すなわち、既存の道路地図は、道路地図の一部またはすべてのエッジがレーンとしてマークされ得るようにするために、注釈を付けられ得る。道路地図の一部をレーンとして注釈を付けるために、注釈を付けられる部分/レーンは、1つまたは複数のレーン指向要件を満足することができる。例のレーン指向要件は、以下を含むが、これに限定はされない。
・レーン上のエージェントが任意の他のレーン上の任意の他のエージェントと衝突しないように、レーンが、他のレーンから十分に分離されたグラフの一方向エッジであるという要件。たとえば、潜在的なレーンL_HIT1上のロボットR_HIT1が、おそらくは潜在的なレーンL_HIT2上のロボットR_HIT2と衝突する可能性がある場合、すなわち、潜在的なレーンL_HIT1およびL_HIT2の幾何形状が、L_HIT1およびL_HIT2が可能な衝突を回避するためにはお互いに近すぎる場合に、ロボットR_HIT1は、ロボットR_HITと衝突し、したがって、潜在的なレーンL_HIT1およびL_HIT2は、このレーン指向要件を満足しない。
・レーンが、衝突領域のブロックを回避するために衝突領域から十分に離れて終わる、すなわち、レーンが、交差点トラバースを可能にするために交差点から十分に離れて終わるという要件。
・道路地図内のレーンが、レーンの少なくとも1つのサイクルを形成するという要件。関連するレーン指向要件は、道路地図内のすべてのレーンが、レーンのサイクルの一部であることである。
・道路地図内のすべてのレーンの合計長が、道路地図によって表される環境内のすべてのエージェント+少なくとも1つの他のエージェントのための追加の空間を収めるのに十分に大きくされ得るという要件。関連するレーン指向要件は、道路地図内のすべてのレーンの合計長が、道路地図によって表される環境内のすべてのエージェント+少なくとも1つの他のエージェントのための追加の空間および+衝突を回避するためのエージェントの間の「泡」または空間のためのさらなる追加空間を収めるのに十分に大きくされ得ることである。
他のレーン指向要件も可能である。
[0090] いくつかの実施形態では、コンピューティング・デバイス上で実行するユーザ・インターフェースおよび/または他のソフトウェアは、レーンを用いる道路地図の注釈付けを使用可能にすることができる。具体的には、ユーザ・インターフェースおよび/または他のソフトウェアは、道路地図に注釈を付ける時に、上で述べたレーン指向要件の一部またはすべてを実施することができる。
[0091] いくつかの道路地図とエージェントの集合とに関して、レーン注釈付けは、柔軟になり得る。1つの極端で、上で述べた合計長要件を満足するために、道路地図内のごく少数のエッジだけがレーンとしてマークされ得る。しかし、少数のレーンを有することは、エージェントが相対的に大きい衝突エリアを予約することにつながる可能性がある。いくつかの例で、レーンには、レーンにオーバーラップし、およびおそらくはレーンと反対方向に移動する非レーンが付随する可能性がある。非レーンは、エージェントが別のレーンへの衝突領域全体を予約する限り、エージェントが目的地エージェントへのより短い非レーン・ルートを採用することを可能にすることができる。たとえば、レーンが道路地図上の反時計回りループを形成する場合に、エージェントがレーンの安全性に戻るのに十分に大きい領域を予約できるならば、エージェントは、非レーンを使用するループの一部に関して時計回りに進むことができる。すなわち、エージェントは、レーンに沿った増分進行を行うことができるが、非レーン/衝突領域トラバースに関して、エージェントは、非レーン/衝突領域全体をトラバースするようにルーティングされるか、非レーン/衝突領域全体を回避するようにルーティングされるかのいずれかが可能である。
[0092] 道路地図は、駐車場、ディープレーン(deep lane)、その他など、特定の位置の環境の残りに戻る前にエージェントが待つことを可能にする1つまたは複数の待機レーンを用いて注釈を付けられ得る。たとえば、倉庫内で、積み降ろしプラットフォームは、人気のある目的地位置である可能性がある。積み降ろしプラットフォームに待機レーンを有することは、エージェントが、タスクを完了した後の再割当されるプロセスにある間に待機レーン上で待つことを可能にする。その上で待つべきレーンがなければ、エージェントは、別のエッジおよびおそらくはエッジの間の衝突領域を予約しなければならず、これは、他のエージェントから積み降ろしプラットフォームの少なくとも一部をブロックすることにつながる可能性が高い。待機レーンは、待機レーンが少なくとも1つのエージェントに対処できる限り、任意の長さを有することができる。いくつかの例では、待機レーンは、1つまたは複数の非レーン・エッジを介して道路地図の残りに接続され得る。
[0093] 図7A〜図7Dは、例の実施形態による、これらの図では道路地図エディタ710として示されたコンピューティング・デバイスのユーザ・インターフェースが、レーンを用いて道路地図720に注釈を付けるのに使用されるシナリオ700を示す図である。シナリオ700中に、ユーザ・インターフェースは、レーンを用いて既存道路地図に漸進的に注釈を付け、注釈付けされた道路地図のレーン指向要件に関する情報を提供するのに使用される。
[0094] 図7Aは、コンピューティング・デバイス702によって道路地図エディタ710として提供されるシナリオ700のユーザ・インターフェースを示す。道路地図エディタ710は、メニュー730、編集領域732、図7Aでは734aとしてラベルを付けられたダイアログ、およびシステム・バー736を含む。メニュー730は、編集領域732内に表示されて図示された道路地図720などの道路地図に関する複数のセレクションをリストし、ここで、メニュー730のセレクションは、選択された時に、道路地図エディタ710に、選択されたセレクションに関する1つまたは複数の動作を実行させることができる。
[0095] 図7Aは、メニュー730が、地図取得セレクション712、地図保存セレクション714、エッジ注釈付けモード・セレクション716、および終了セレクション718を含むことを示す。図7A、図7B、図7C、および図7Dに示されたもの以外の実施形態では、メニュー730は、より多数、より少数、および/または異なるメニュー・セレクションを提供することができる。さらなる他の実施形態では、プルダウン・メニュー、アイコン、および/またはダイアログなどの他のグラフィカル要素が、メニュー730の1つまたは複数のセレクションと共に使用され、かつ/またはこれを置換することができる。
[0096] 地図取得セレクション712は、データ・ストレージから道路地図を取り出し、取り出された道路地図を道路地図エディタ710にロードするのに使用され得る。地図保存セレクション714は、道路地図エディタ710に現在ロードされている道路地図をデータ・ストレージに記憶するのに使用され得る。たとえば、道路地図は、1つまたは複数のファイルとして不揮発性データ・ストレージ内に記憶され得、不揮発性データ・ストレージは、下で図14Aのデータ・ストレージ1404の文脈で議論される。
[0097] エッジ注釈付けモード716は、編集領域732がレーンとしてエッジに注釈を付けるのに使用されている場合には使用可能にされ、編集領域732がレーンとしてエッジに注釈を付けるのに使用されていない場合には使用不能にされ得る。図7Aでは、エッジ注釈付けモード716のメニュー・アイテムは、エッジ注釈付けモード716が使用可能にされている(たとえば、編集領域732内に表示される道路地図のエッジが、レーンとして注釈を付けられ得る)ことを示すために太字で示される。たとえば、道路地図のエッジEは、道路地図エディタ710を介して選択され得、エッジ注釈付けモード716が使用可能にされている場合には、エッジEの一部またはすべてが、レーンとして注釈を付けられ得る。終了セレクション718は、道路地図エディタ710の実行を打ち切る(たとえば道路地図エディタ710のアプリケーションを終了する)のに使用され得る。他のシナリオでは、エッジ注釈付けモード716が、使用不能にされ得、これらのシナリオでは、エッジ注釈付けモード716は、通常の(すなわち、非太字)フォントで表示され得る。さらなる他のシナリオでは、カラー、フォント・サイズ、および/または太字以外のフォント品質などの他のグラフィカル技法が、使用可能にされた注釈付けフォント・モードと使用不能にされた注釈付けフォント・モードとの間で区別するのに使用され得る。
[0098] 編集領域732は、道路地図を作成し、再検討し、更新するのに使用され得る。たとえば、道路地図は、レーンに注釈を付けること、ならびに/または編集領域624内に表示された道路地図のエッジ、レーン、および/もしくは交差点を作成すること、再検討すること、更新すること、および/もしくは削除することによって更新され得る。道路地図の作成、再検討、および/または更新の後に、道路地図は、たとえば地図保存セレクション714を選択することによって、後の使用のためにデータ・ストレージに保存され得る。シナリオ700では、地図保存セレクション714は、最近に選択され、したがって、道路地図720は、最近にデータ・ストレージに保存された。他のシナリオでは、カラー、フォント・サイズ、および/または太字以外のフォント品質などの他のグラフィカル技法が、最近に保存された道路地図と最近に保存されてはいない道路地図との間で区別するのに使用され得る。
[0099] ダイアログ734aは、注釈付けされた道路地図のレーン指向要件に関する情報などであるがこれに限定されない、編集されつつある道路地図に関する情報を提供することができる。たとえば、図7Aに表示された道路地図720は、二方向非レーン・エッジ(NLE)738を含み、2つのレーンすなわち、道路地図720の最上部のレーン722および道路地図720の最下部のレーン724を用いて注釈を付けられている。これらの注釈に応答して、道路地図エディタ710は、道路地図720が、上で議論したものおよび/またはレーン指向要件に関する他の情報など、1つまたは複数のレーン指向要件を満足するかどうかを判定し、ダイアログ734aなどのダイアログを介してまたはたとえばポップアップ、別々の情報ペインもしくはスクリーンなど、他のユーザ・インターフェース技法を介して、その情報を提供することができる。たとえば、道路地図720にレーンを追加することを試みる時に、道路地図エディタ710は、新しいレーンが上で述べたレーン指向要件を満足すること、たとえば、新しいレーンが一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わるかどうかをチェックすることができる。図7Aに示された特定の例では、ダイアログ734aは、「レーン・サイクルが検出されない」すなわち、レーン722および724がサイクルを形成しないことと、レーン722および724が「約4個のエージェントだけを保持できる」こととを示す。シナリオ700では、約12個のエージェントが、道路地図720によって表される環境内で動作すると期待され、したがって、4つのエージェントだけを保持するレーンは、道路地図720のレーンが少なくとも12個の(期待される)エージェント/ロボットのための十分な空間を有しなければならないというレーン指向要件に違反すると考えられ得る。
[0100] いくつかの例で、道路地図エディタ710は、新しいレーンに適切な道路地図720上の1つまたは複数の位置を判定し、その後、コンピューティング・デバイスを使用して新しいレーン(1つまたは複数)を用いて道路地図上の位置(1つまたは複数)に注釈を付けることを試みることができる。たとえば、道路地図エディタ710は、少なくとも1つのロボットが移動するのに十分に幅広い廊下または他のエリアと思われる位置を見つけ、その後、1つまたは複数の新しいレーンを用いてその位置に注釈を付けることを試みることができる。(潜在的な)新しいレーンの位置を見つけるための他の技法も可能である。
[0101] システム・バー736は、三角形、円、および正方形を示し、これらは、三角形を選択することによって道路地図エディタ710の前に実行した前のアプリケーションに戻るのに、円を選択することによってホーム・スクリーンに戻るのに、および正方形を選択することによってすべての実行されるアプリケーションのリスティングを提供するのに使用され得る。メニュー732のセレクション、レーン、エッジ、交差点、および編集領域732内に示されるダイアログ、ならびにシステム・バー736の三角形、円、および正方形などのグラフィカル要素は、コンピューティング・デバイス702のユーザ入力デバイスを使用して選択され得る。例のユーザ入力デバイスは、下で図14Aに示されたユーザ・インターフェース・モジュール1401の文脈で説明される。
[0102] レーン722および724を用いる道路地図720の注釈付けは、道路地図720を3つの領域すなわち、レーン722を含む注釈付けされた領域、レーン724を含む別の注釈付けされた領域、およびレーン722とレーン724との間の注釈付けされていない領域(UR)726に分割する。マルチエージェント・プランナが、ロボットに指示するのに図7Aに示された道路地図720を使用する場合に、マルチエージェント・プランナは、注釈付けされていない領域726のすべてを1つの(大きい)衝突領域と考えることができる。その場合に、注釈付けされていない領域726を介してロボットR_UNをルーティングするために、マルチエージェント・プランナは、ロボットR_UNの排他的使用のために注釈付けされていない領域726のすべてを予約することができる。
[0103] シナリオ700は継続し、道路地図720が、追加のレーンを用いて注釈付けされ、その後、道路地図720が保存される。図7Bは、レーン722および724だけを用いて前に注釈を付けられた道路地図720が、レーン740、742、および744を用いて注釈を付けられたことを示す。
[0104] これらの注釈付けに応答して、道路地図エディタ710は、道路地図720が、上で議論したものおよび/またはレーン指向要件に関する他の情報など、1つまたは複数のレーン指向要件を満足するかどうかを判定し、その情報を、ダイアログ734bなどのダイアログを介してまたは図7Aの文脈で述べたものなどの他のユーザ・インターフェース技法を介して提供することができる。図7Bに示された特定の例では、ダイアログ734bは、「レーン・サイクルが検出されない」すなわち、レーン722、724、740、742、および744がサイクルを形成しないことと、レーン722、724、740、742、および744が集合的に「約10個のエージェントだけを保持できる」こととを示す。シナリオ700では、約12個のエージェントが、道路地図720によって表される環境内で動作すると期待され、したがって、4つのエージェントだけを保持するレーンは、道路地図720のレーンが少なくとも12個の(期待される)エージェント/ロボットのための十分な空間を有しなければならないというレーン指向要件に違反すると考えられ得る。
[0105] レーン740、742、および744を用いる道路地図720の注釈付けは、道路地図720を6つの領域すなわち、(1)レーン722に関する注釈付けされた領域、(2)レーン724に関する注釈付けされた領域、(3)レーン744に関する注釈付けされた領域、(4)レーン740、レーン742、および非レーン・エッジ738を含む部分的に注釈付けされた領域、(5)レーン722とレーン724との間の注釈付けされていない領域746、および(6)レーン740および742の右側の注釈付けされていない領域748に分割すると考えられ得る。マルチエージェント・プランナが、ロボットに指示するのに図7Bに示された道路地図720を使用する場合に、マルチエージェント・プランナは、注釈付けされていない領域746のすべてを1つの(大きい)衝突領域と考え、注釈付けされていない領域748のすべてを、レーン740および742を含む部分的に注釈付けされた領域によって注釈付けされていない領域から分離された別の(大きい)衝突領域と考えることができる。いくつかの例では、マルチエージェント・プランナは、注釈付けされていない領域746から注釈付けされていない領域748に進むのにレーン740および742を使用することによって、部分的に注釈付けされた領域を介してロボットをルーティングし、注釈付けされていない領域748から注釈付けされていない領域746へのルーティングに非レーン・エッジ738を一方向の形で使用する(非レーン・エッジ738が二方向エッジである場合であっても)ことができる。
[0106] シナリオ700は継続し、道路地図720が、追加のレーンを用いて注釈を付けられ、その後、道路地図720が保存される。図7Cは、前にレーン722、724、740、742、および744を用いて注釈を付けられ、今は追加のレーン750a、752a、754a、756a、758a、および760aを用いて注釈を付けられた道路地図720を示す。レーン750a、752a、754a、756a、758a、および760aは、衝突領域として扱われ得る介在する非レーン領域と一緒に、レーン・サイクル754を形成することができる。また、レーン750a、752a、754a、756a、758a、および760aの追加は、注釈付けされていない領域746(図7Bに図示)のサイズを、エッジ754a、756a、740、742、および724の間にある、より小さい注釈付けされていない領域760に縮小する。さらに、ダイアログ734aおよび734bと比較して、ダイアログ734cは、レーン・サイクルが検出されないとの警告または12個未満のエージェントが道路地図720のレーンによって保持され得るとの警告をもはや含まず、ダイアログ734cは、道路地図720のレーンが今や「約16個のエージェントを保持できる」と述べる。シナリオ700では、注釈付けされた道路地図のレーン指向要件は、各エッジがレーン・サイクルの一部であることであり、したがって、ダイアログ734cは、「すべてのレーンがレーン・サイクルに含まれるのではない」との「警告」を述べ、たとえば、少なくともレーン740、742、および744は、レーン・サイクルの一部ではない。
[0107] マルチエージェント・プランナが、ロボットに指示するのに図7Cに示された道路地図720を使用する場合に、マルチエージェント・プランナは、注釈付けされていない領域760のすべてを1つの(大きい)衝突領域と考え、注釈付けされていない領域748のすべてを、レーン740および742を含む部分的に注釈付けされた領域によって注釈付けされていない領域から分離された別の(大きい)衝突領域と考えることができる。マルチエージェント・プランナは、ロボット/エージェントがレーン・サイクル754を含む道路地図720の上側部分内でデッドロックなしに前進することを可能にするために、介在する衝突領域/非レーン・エッジのブロックおよびブロック解除を含めて、レーン・サイクル754を回ってロボット/エージェントをルーティングすることもできる。
[0108] シナリオ700は継続し、道路地図720が、追加のレーンを用いて注釈を付けられ、その後、道路地図720が保存される。図7Dは、道路地図720が、追加のレーンを用いて注釈を付けられ、その結果、レーン・サイクル754が、1つの二方向レーン・サイクル、またはレーン・サイクルの対(時計回りの方向での移動を可能にする、レーン754aおよび756aと介在する非レーン領域(上で言及したように、衝突領域と考えられ得る)とを含むレーンの第1のサイクルと、反時計回りの方向での移動を可能にする、レーン754bおよび756bと介在する非レーン領域(上で言及したように、衝突領域と考えられ得る)とを含むレーンの第2のサイクルと)のいずれかと考えられ得る。ダイログ734dは、道路地図720のレーンが、今は「約24個のエージェントを保持できる」と述べ、「すべてのレーンがレーン・サイクルに含まれるのではない」との「警告」を再発行し、たとえば、レーン740、742、および744は、それでもレーン・サイクルの一部ではない。
[0109] マルチエージェント・プランナは、図7Cに示された道路地図720に類似する形で、ロボットに指示するのに図7Dに示された道路地図720を使用することができる。しかし、図7Dに示された道路地図720は、レーン上のエージェントのための追加の空間と、レーン・サイクル754を含む道路地図72
0の上側部分内でのロボットをルーティングするための追加の柔軟性とを提供する。図7Dに示された道路地図720が保存された後に、シナリオ700を完了することができる。
[0110] レーン、衝突領域、注釈付けされた領域、注釈付けされていない領域、部分的に注釈付けされた領域、エッジ、および道路地図の他のモデルも可能である。いくつかの実施形態で、ロボットの運動学モデルなどのモデルが、レーンの端に達する前に止まるのではなく、ロボット・デバイスが止まらなければならない1つまたは複数の位置を判定するのに使用され得る。
[0111] エージェントが目的地位置で動作を開始する時に、マルチエージェント・プランナは、目的地位置の周囲のエリアがどれほど長くブロックされたままになるのかを判定するために、エージェントが目的地位置にどれほど長く留まるのかを推定することができる。目的地位置がブロックされている間に、マルチエージェント・プランナは、おそらくは他のエージェントにより長いルートをとらせる、ブロックされた目的地位置を回避するために、他のエージェントを再ルーティングすることができる。その後、エージェントが目的地位置を利用する1つまたは複数の動作を完了した時など、目的地位置が再び使用可能になった後に、マルチエージェント・プランナは、目的地位置の周囲のエリアに対するブロックを開放でき、その結果、目的地位置の周囲のエリアは、ブロック解除され得るようになる。目的地位置がブロック解除される時に、マルチエージェント・プランナは、ブロックされた目的地位置エリアを使用し、おそらくは他のエージェントにより短いルート 目的地位置エリア をとらせるために他のエージェントを再ルーティングすることができる。
[0112] 図8は、例の実施形態による、位置のブロックおよびブロック解除の方法800の流れ図である。方法800は、下で少なくとも図14Aの文脈で説明されるコンピューティング・デバイス1400などのコンピューティング・デバイスによって実行され得る。具体的には、コンピューティング・デバイス1400は、方法800を実行するために本明細書で説明されるマルチエージェント・プランナを実施するソフトウェアを実行することができる。方法800は、ロボットを用いる動作に関して説明されるが、方法800の技法は、一般にエージェントに適用可能である。
[0113] ブロック810では、マルチエージェント・プランナが、ロボットRがロボットRを含む複数のエージェントを有する環境の位置Lに接近しつつあることを判定することができる。
[0114] ブロック820では、マルチエージェント・プランナが、ロボットRの使用のために位置Lを予約することができ、位置Lを使用するようにロボットRに指示することができる。たとえば、ロボットRは、相対的に高優先順位のエージェントとすることができる。ロボットRのために位置Lを予約することによって、マルチエージェント・プランナは、他のより低優先順位のロボットが、位置Lにいる間にロボットRをブロックせず、他の形で干渉しないことを保証することができる。
[0115] ブロック830では、マルチエージェント・プランナが、任意の他のロボットが、ロボットRが位置Lにいる間に位置Lを使用することを計画しているかどうかを判定することができる。マルチエージェント・プランナは、ロボットRが位置Lにどれほど長く留まるのかの推定値に基づいてこの判定を行うことができ、その推定値に基づいて、マルチエージェント・プランナは、位置Lがどれほど長くブロックされるのかの推定値を判定することができる。たとえば、ロボットRが位置Lに60秒間いると推定され、ロボットRが位置Lで停止し、再始動し、位置Lから去るのに5秒を要すると推定される場合に、マルチエージェント・プランナは、位置Lが(約)65秒間ブロックされると推定することができる。ある位置がどれほど長くブロックされるのかの推定のための他の技法も可能である。
[0116] マルチエージェント・プランナが、ロボットR以外の1つまたは複数のロボットが、ロボットRが位置Lにいる間に位置Lを使用することを計画していると判定する場合に、マルチエージェント・プランナは、ブロック840に進むことができる。そうではない場合には、マルチエージェント・プランナは、ロボットRだけが、ロボットRが位置Lにいる間に位置Lを使用することを計画していると判定することができ、ブロック850に進むことができる。
[0117] ブロック840では、マルチエージェント・プランナが、ブロック830で議論したロボットRが位置Lにいる間に位置Lを使用することを計画しているロボットR以外の1つまたは複数の他のロボットであるロボットR1、R2、…、Rnを、位置Lから離れて再ルーティングすることができる。
[0118] ブロック850では、マルチエージェント・プランナが、位置Lを使用するようにロボットRに指示することができる。位置Lに達した時に、ロボットRは、位置Lで動作OPを実行することができる。動作OPの例は、位置Lのトラバース、位置Lにいる間に衝突領域および/またはレーンの予約を待つこと、および位置Lでのピック・アンド・プレース動作を含むが、これに限定はされない。いくつかの例で、より多数、より少数、および/または異なる動作が、位置Lで動作OPとして用いられ得る。その後、マルチエージェント・プランナは、ロボットRが位置Lで動作OPを完了したと判定することができ、たとえば、ロボットRが、動作OPが完了されたとマルチエージェント・プランナに知らせることができ、かつ/またはマルチエージェント・プランナが、ロボットRが位置Lで動作OPを完了するための時間の長さを推定することができ、推定された長さの時間が満了し終える可能性がある。
[0119] ブロック860では、マルチエージェント・プランナが、動作OPが位置Lにいる間にロボットRによって完了されたと判定した後に、位置Lを去るようにロボットRに指示することができる。ロボットRが位置Lを去ったと判定する時に、マルチエージェント・プランナは、ロボットRの使用のための位置Lの予約を除去することができる。
[0120] ブロック870では、位置Lの予約を除去した後に、マルチエージェント・プランナが、いずれかのロボットのいずれかのルートが位置Lを介する再ルーティングによって改善され得るかどうかを判定することができる。マルチエージェント・プランナは、位置Lを使用するルートR_WITH_Lの推定時間T_WITH_Lを判定することと、推定時間T_WITH_Lを位置Lを使用しない対応するルートR_WITHOUT_Lの推定時間と比較することとに基づいてこの判定を行うことができる。T_WITH_LがT_WITHOUT_L未満である場合には、マルチエージェント・プランナは、ルートR_WITH_Lを使用するようにロボットを再ルーティングすることが、対応するルートR_WITHOUT_Lより改善するはずであると判定することができる。ロボットのルートが改善され得るかどうかを判定するための他の技法、たとえば、時間以外の判断基準および/または追加の判断基準に基づいて改善を判定する技法も可能である。
[0121] マルチエージェント・プランナが、ロボットR以外の1つまたは複数のロボットが、ロボットRが位置Lにいる間に位置Lを使用することを計画していると判定する場合に、マルチエージェント・プランナは、ブロック880に進むことができる。そうではない場合には、マルチエージェント・プランナは、位置Lを使用するようにロボットを再ルーティングすべきではないと判定することができ、方法800は、完了され得る。
[0122] ブロック880では、マルチエージェント・プランナが、位置Lを使用するように、対応するロボットR3、R4、…、Rmの1つまたは複数のルートを更新することができる。というのは、これらの更新されるルートが、ブロック870で改善されると判定されたからである。マルチエージェント・プランナは、位置Lを使用するようにルーティングされるロボットR3、R4、…、Rmの最高優先順位のロボットR_HIPRIを判定し、ロボットR_HIPRIの使用のために位置Lを予約することができる。ブロック880の手順の完了時に、補法800は完了され得る。
[0123] 図9は、例の実施形態による、エージェントの優先順位サイクル900を示す。優先順位サイクル900は、図9でロボットR1として示されるエージェントによって実行され得、ロボットR1に指示するマルチエージェント・プランナは、R1を含む複数のエージェントを有する環境内で動作している。優先順位サイクル900は、ロボットを用いる動作に関して説明されるが、優先順位サイクル900の技法は、一般にエージェントに適用可能である。いくつかの例では、マルチエージェント・プランナと環境内のエージェントの一部またはすべてとが、優先順位サイクル900などの優先順位サイクルを実行しつつある可能性がある。
[0124] 優先順位サイクル900は、マルチエージェント・プランナが、新しいルートから始めるようにR1に指示する時に始まることができる。この時に、R1は、最小の優先順位、たとえば0の優先順位値を割り当てられ、優先順位は、非負の数を使用して示され、上で図3〜図6Fの文脈で議論した優先順位など、10より高い優先順位値を表す12の優先順位値など、より大きい優先順位値は、より高い優先順位を示す。ロボットは、初期優先順位として(たとえば、ロボットR1がその最初のルートに関してスケジューリングされる時)最小優先順位値を割り当てられ得、またはエージェントがそのルートを完了する時に発生する優先順位リセットの一部として割り当てられ得るのいずれかである。
[0125] ロボットR1がそのルートに沿って前進する時に、ロボットR1の優先順位値は、上で少なくとも図3および図4B〜図6Fの文脈で議論したように、ロボットがそのルート上で費やした時間の長さに基づくR1の優先順位値など、単調に増加することができる。途中で、ロボットR1は、上で少なくとも図3〜図6Fの文脈で議論したように、より高優先順位のロボット(1つまたは複数)がそのルートに沿って前進することを可能にするために、道を空け、かつ/または1つもしくは複数のより高優先順位のロボットR2…Rnの道を外れて待つようにマルチエージェント・プランナによって指示され得る。ロボットR1がそのルートに沿って前進する時に、R1の優先順位は増加し、その結果、R1は、相対的に高優先順位のロボットになり、1つまたは複数のより低優先順位のロボットR3…Rmは、道を空け、かつ/またはR1のルートから外れて待つように指示され得る。R1がその目的地に達した後に、R1の優先順位は、リセットされ得、優先順位サイクル900の反復は、完了され得る。
[0126] 図9は、優先順位サイクル900の反復が、ブロック910で始まることができ、ここで、マルチエージェント・プランナは、ロボットR1に新しいルートを割り当てることができる。ロボットR1は、初期の問題として、たとえばロボットR1が最初に可動状態にされる時または前のルートの完了時に、新しいルートを割り当てられ得る。R1がそのルートを始める時に、その優先順位P1には、最小の優先順位値、たとえば図9に示されているように0がセットされ得る。R1がそのルートに沿って移動する時に、P1は増加することができ、R1が当初にそのルートを開始する時に、P1は、0の最小優先順位値より大きいLowPri1の優先順位値に増加することができる。
[0127] ブロック920では、マルチエージェント・プランナが、優先順位P1=LowPri1を有するR1に、その優先順位P2がLowPri1より高い、より高優先順位のロボットR2を待ち、かつ/またはR2の道から外に移動するように指示することができる。ロボットR1が待ち、かつ/またはロボットR2の道から外に移動する時に、優先順位P1は、LowPri1より大きいLowPri2の値に増加する。
[0128] ブロック930では、ロボットR1が、そのルートを進み続ける。優先順位P1は、ロボットR1が途中である時に、LowPri2より大きいMediumPriの優先順位値に増加する。
[0129] ブロック940では、マルチエージェント・プランナが、優先順位P1=MediumPriを有するR1に、その優先順位P3がMediumPri未満であるより低優先順位のロボットR3が待ち、かつ/またはロボットR1の道から外に移動する間にそのルートに沿って前進するように指示することができる。R1がそのルートに沿って前進する時に、優先順位P1は、MediumPriより大きいHiPri1の値に増加する。
[0130] ブロック950では、ロボットR1が、そのルートを進み続ける。優先順位P1は、ロボットR1が途中である時に、HiPri1より大きいHiPri2の優先順位値に増加する。いくつかの例では、ロボットR1は、環境内の最高優先順位のロボットになることができ、環境内の他のすべてのロボットは、マルチエージェント・プランナによって、待ち、かつ/またはロボットR1の道から外に移動するように指示され得る。
[0131] ブロック960では、ロボットR1が、ルートの目的地位置に達することによって、そのルートを完了する。いくつかの例では、ロボットR1は、途中でおよび/または目的位置で、1つまたは複数のピック・アンド・プレース動作など、1つまたは複数の動作の一部またはすべてを実行することができる。特定の例では、ロボットR1などのエージェントのルートは、エージェントがルートの目的地位置に達した時に完了されたと考えられ得る。他の例では、エージェントのルートは、エージェントが目的地位置ですべての動作を完了した時に完了されたと考えられ得る、すなわち、ルートは、エージェントが新しいルートの準備ができた時に完了される。さらなる他の例では、エージェントのルートは、エージェントが目的地位置に達し、目的地位置を去る準備ができまたは少なくともある長さの時間だけ目的地位置にいたのいずれかである時に、完了されたと考えられ得る。時間の長さは、エージェントが目的位置ですべての動作を完了するのにどれほど長い時間を必要とするのかの推定値に基づく、および/または他の形で判定される(たとえば、別のルートが使用可能になるまで待つ時間の長さ)時間の所定の長さ(たとえば、5秒、60秒、3分)とすることができる。ルートの完了時に、ロボットR1の優先順位P1は、最小の優先順位値にリセットされ得る。
[0132] ブロック970では、マルチエージェント・プランナが、新しいルートがロボットR1に関して使用可能であるかどうかを判定することができる。新しいルートがR1に関して使用可能である場合には、マルチエージェント・プランナおよびR1は、ブロック910に進み、優先順位サイクル900の別の反復を開始することができる。新しいルートがR1に関して使用可能ではない場合には、マルチエージェント・プランナは、ルート上での前進に関連しない1つまたは複数の動作を実行する(たとえば、シャット・ダウンし、診断/保守を実行し、待機エリアに進む、ことによって優先順位サイクル900を終了する)ようにR1に指示することができる。他の例では、マルチエージェント・プランナおよび/またはR1は、ブロック970に示された、新しいルートが使用可能ではないこと以外の理由(たとえば、R1が保守のためにスケジューリングされている、環境内の障害物の存在がマルチエージェント・プランナによって指示されるエージェントの個数を減らす、ピック・アンド・プレース動作に関する材料が使用可能ではないなど)から優先順位サイクル900を終了することができる。
ロボット・デバイスのシステム設計
[0133] 図10は、例の実施形態による、システム1000のブロック図である。システム1000は、プラニング・システム1010およびロボット・デバイス1020を含む。プラニング・システム1010は、環境内で動作する1つまたは複数のロボット・デバイスの動きを調整することのできるオフボード・プランナ1012を含むことができる。オフボード・プランナ1012は、道路地図プランナ1014を含むことができる。オフボード・プランナ1012および/または道路地図プランナ1014は、ロボット・デバイス1020などのロボット・デバイスが環境内で動作している間に従うべき1つまたは複数の非同期経路1016を生成することができる。
[0134] 道路地図グラフ、プロトタイプ・グラフ、または下で図12の文脈で議論するプロトタイプ・グラフ1200など、環境を表す他の道路地図が、受け取られ、判定され、または他の形でプラニング・システム1010、オフボード・プランナ1012、および/または道路地図プランナ1014に供給され得る。非同期経路1016は、道路地図グラフ、プロトタイプ・グラフ、または他の道路地図に基づく1つまたは複数の経路とすることができる。たとえば、道路地図グラフ、プロトタイプ・グラフ、または他の道路地図が、複数の交差点を接続する複数のエッジを有する場合に、非同期経路1016は、複数のエッジおよび/または複数の交差点に関して指定され得る。
[0135] いくつかの例で、オフボード・プランナ1012および/または道路地図プランナ1014は、マルチエージェント・プランナの本明細書で説明される機能性の一部またはすべてを含むことができる。これらの例では、道路地図グラフ、プロトタイプ・グラフ、または他の道路地図は、複数の交差点を接続する複数のエッジおよび/または複数のレーンを有することができ、たとえば、オフボード・プランナ1012および/または道路地図プランナ1014は、道路地図310、402、502、602、および720のうちの1つまたは複数を利用するマルチエージェント・プランナとして働くことができる。特にこれらの例では、非同期経路1016のうちの1つまたは複数が、1つまたは複数のレーン、非レーン・エッジ、および/またはハイパーエッジを含むことができ、ここで、ハイパーエッジは、上で、少なくとも上の図1の文脈で議論される。特にこれらの例では、非同期経路1016のうちの1つまたは複数は、1つのエージェントのハイパーエッジの時間順序付けされたシーケンスを含むことができ、ここで、ハイパーエッジの時間順序付けされたシーケンス内のハイパーエッジは、その完了時間の順であると考えられ得る。他の例では、1つまたは複数のロボット・デバイス1020は、ロボット110、120、130、140、214、224、234、244、330、332、414、416、424、426、434、436、444、446、470、472、474、476、510、520、530、550、610、および620のうちの1つまたは複数の本明細書で説明される機能性を実行することができる、すなわち、ロボット110〜620のうちの1つまたは複数は、ロボット・デバイス1020として実施され得る。
[0136] ロボット・デバイス(1つまたは複数)1020は、オンボード・ソフトウェア1030および/またはハードウェア1050を含むことができる。オンボード・ソフトウェア1030は、位置特定サブシステム1032、障害物検出サブシステム1034、走行距離計測サブシステム1036、経路追従サブシステム1038、および軌道追従サブシステム1042のうちの1つまたは複数を含むことができる。位置特定サブシステム1032は、ロボット・デバイスの位置を特定するすなわち、環境内のロボット・デバイスの位置を判定するのに使用され得る。位置特定サブシステム1032は、ロボット・デバイスの位置を特定し、ロボット・デバイスが非同期経路1016などの経路に追従するのを援助し、かつ/またはロボット・デバイスが軌道1040などの軌道に追従するのを援助するのに使用され得る、ロボット・デバイスおよび/または他の物体の位置推定値を生成することができる。位置推定値が生成された後に、位置特定サブシステム1032は、位置推定値を経路追従サブシステム1038に供給することができる。
[0137] 非同期経路または省略して経路は、ロボット・デバイス1020が出発点SPから終点EPへどのように移動できるのかを示す時間不変のプランまたは他の情報とすることができる、すなわち、(非同期)経路は、時間を考慮に入れない。対照的に、軌道は、ロボット・デバイス1020がプラニング時間間隔の間に従うことのできるステアリング角の値およびトラクション・モーター速度の値を含むことができる。
[0138] プラニング時間間隔は、ロボット・デバイスが経路、ルート、および/または移動に従うために案内されまたは計画される、使用される時間の持続時間とすることができる。いくつかの実施形態で、プラニング時間間隔は、所定の長さの時間、たとえば5秒、1秒、0.2秒、0.1秒とすることができる。具体的には、所定のプラニング時間間隔は、プラニング時間間隔の値を指定するユーザ入力に基づいて決定され得る。他の実施形態では、プラニング時間間隔は、1つまたは複数の他の値、たとえば、ステッチ時間、均一なエッジ(または経路)コストに関連する時間、軌道に沿って移動するための推定時間に基づいて決定され得る。プラニング時間間隔およびプラニング時間間隔の値を決定するための他の技法も可能である。
[0139] 次に、1つの軌道が、ロボット・デバイス1020が時間変動する形で出発点SPから終点EPへどのように移動できるのかを記述するのに使用され得る。いくつかの実施形態では、軌道は、ロボット・デバイス1020の他の運動学変数(たとえば、速度および加速度)およびロボット・デバイス1020のアクチュエータ位置などであるがこれに限定されない、プラニング時間間隔にわたるステアリング角およびトラクション・モーター速度以外の変数の値に関する情報をも提供することができる。
[0140] 一例として、位置「自宅」から位置「職場」まで自動車を運転する経路は、人または自律車両の制御デバイスなどの制御エンティティが自宅から職場まで自動車を運転するのに使用できる街路の順序付きリスティングを含むことができる。この例では、自宅から職場までの軌道は、制御エンティティが自宅から職場まで自動車を運転するのに使用できる速度および/または加速度を指定する1つまたは複数の命令を含むことができる。いくつかの例で、軌道は、交通、障害物、気象、および他の時間に敏感な条件を考慮に入れることができ、たとえば、自宅から職場に行く軌道は、制御エンティティが「20MPH以下で10秒間右に旋回し」、「55MPHまで加速し、3秒間直進し」、「30秒以内に20MPHまで減速し」、「20MPH以下で10秒間左に旋回する」ことなどを示すことができる。いくつかの実施形態で、軌道は、たとえば障害物、経路の変化などを考慮に入れるために、進行中に変更され得る。
[0141] 障害物検出サブシステム1034は、1つまたは複数の障害物がロボット・デバイス1020の経路および/または軌道をブロックしているかどうかを判定することができる。これらの障害物の例は、パレット、パレットから落ちた可能性がある物体、ロボット・デバイス、および環境内で働いている人間のオペレータを含むことができるが、これに限定はされない。障害物が検出される場合に、障害物検出サブシステム1034は、障害物検出を示す1つまたは複数の通信を経路追従サブシステム1038に供給することができる。障害物検出を示す1つまたは複数の通信は、障害物検出サブシステム1034によって検出された1つもしくは複数の障害物の1つもしくは複数の位置に関する位置情報および/または障害物検出サブシステム1034によって検出された1つもしくは複数の障害物に関する識別情報を含むことができる。走行距離計測サブシステム1036は、サーボ・ドライブ1052からのデータなどのデータを使用して、ロボット・デバイス1020の位置の1つまたは複数の経時的な変化を推定することができる。
[0142] 経路追従サブシステム1038および/または軌道追従サブシステム1042は、ロボット・デバイス1020に搭載されたプランナとして働くことができる。このオンボード・プランナは、位置特定サブシステム1032によって供給される位置推定値に基づいて、非同期経路1016などの1つまたは複数の経路に追従することができる。
[0143] 経路追従サブシステム1038は、非同期経路1016、位置特定サブシステム1032からの位置推定値入力、障害物検出サブシステム1034からの1つもしくは複数の障害物の1つもしくは複数の位置に関する位置情報、および/または走行距離計測サブシステム1036からの1つまたは複数の位置変化に関する情報を受け取り、出力として1つまたは複数の軌道1040を生成することができる。
[0144] ハードウェア1050は、サーボ・ドライブ1052および/またはモーター1054を含むことができる。サーボ・ドライブ1052は、1つまたは複数のサーボ・ドライブを含むことができる。サーボ・ドライブ1052は、1つまたは複数のサーボ機構に電力を供給するのに使用される電子増幅器を含むことができ、かつ/またはサーボ機構(1つまたは複数)からのフィードバック信号を監視することができる。サーボ・ドライブ1052は、オンボード・ソフトウェア1030から軌道1044などの制御信号を受け取ることができ、制御信号に比例する動きを作るためにサーボ機構(1つまたは複数)に電流を供給することができる。いくつかの実施形態で、サーボ・ドライブ1052は、サーボ機構(1つまたは複数)から受け取られた状況情報を軌道1044によって指令された期待される状況と比較することができる。その後、サーボ・ドライブ1052は、受け取られた状況情報と期待される状況との間の逸脱を補正するために、供給される電流の電圧周波数またはパルス幅を調整することができる。他の実施形態では、サーボ・ドライブ1052は、フィードバック信号および/または位置関連情報などの情報をオンボード・ソフトウェア1030に供給することができる。
[0145] 1つまたは複数のモーター1054は、サーボ・ドライブ1052によって電力を供給されるサーボ機構(1つまたは複数)の一部またはすべてとすることができる。たとえば、モーター1054は、サーボ・ドライブ1052によって供給される電流を使用して、ロボット・デバイス1020の一部またはすべてを駆動する機械力を生成することができ、たとえば、モーター1054は、ロボット・デバイス1020を推進させる力を供給し、かつ/またはロボット・デバイス1020の1つまたは複数のエフェクタを駆動することができる。
[0146] 倉庫、オフィス・ビルディング、もしくは家などの屋内セッティングおよび/または公園、駐車場、もしくは庭などの屋外セッティングを含む環境などの環境内のロボット・デバイスの経路プラニングは、道路地図グラフに関して実行され得、この道路地図グラフは、ロボット・デバイス(ロボット)などのエージェントが追従できる経路および/またはレーンの連結グラフである。自由空間手法を採用するのではなく環境内のエージェント・ルーティングを計画するのに道路地図グラフを使用することは、総プラニング状態空間を縮小し、したがって、大規模マルチ・エージェント調整を御しやすいものにすることができる。さらに、道路地図グラフの使用は、オペレータが、ロボット・デバイスがその中でナビゲートすることを可能にされるエリアを直観的に制御することを可能にすることができる。そのような経路プラニングは、少なくとも部分的に、本明細書で説明されるマルチエージェント・プランナによって実行され得る。
[0147] 道路地図グラフ生成は、まず、プロトタイプ・グラフの生成を含むことができ、このプロトタイプ・グラフは、レーンのおおまかな位置および移動の方向を示す。いくつかの例で、プロトタイプ・グラフは、ロボット・デバイスのレーンおよび移動の方向を示す有向グラフとすることができる。他の例では、プロトタイプ・グラフは、環境の地図または図面に基づいて手作業で生成され得る。さらなる例では、プロトタイプ・グラフは、上で図7A〜図7Dの文脈で議論したものなど、1つまたは複数のレーンを用いて注釈を付けられた道路地図とすることができる。
[0148] 図11は、例の実施形態による、1つまたは複数の倉庫を運営するシステム1100を示す。システム1100は、倉庫管理システム1110、プラニング・システム1010、およびロボット・デバイス1020を含む。倉庫管理システム1110は、倉庫に関連する1つまたは複数の物流要求1112、たとえば、倉庫内に1つもしく複数の品目を貯蔵する要求および/または倉庫から1つもしく複数の品目を出荷する要求を受け取ることができる。倉庫管理システム1110は、物流要求1112を1つまたは複数のアクション1114に変換することができ、ここで、アクション1114は、1つまたは複数の指定されたエージェントを1つまたは複数の指定された位置に移動する「〜に移動」アクションと、1つまたは複数の品目を1つまたは複数の指定された位置に運ぶ「輸送」アクションとを含むことができるが、これに限定はされない。いくつかの例で、アクション1114は、{エージェントID、目的地}の形の、〜に行くコマンドとすることができるが、「パレットを移動」などの他のアクションが可能である。しかし、これらは、通常は〜に移動コマンドに分解可能である(ピック位置に移動、プレース位置に移動)。
[0149] プラニング・システム1010は、オフボード・プランナ1012およびエクスキュータ1120を含む。オフボード・プランナ1012は、入力としてアクション1114を受け取り、倉庫内で動作する1つまたは複数のエージェント、たとえば複数のロボット・デバイスがアクション1114を実行するための1つまたは複数の調整された経路1116を生成することができる。調整された経路1116は、倉庫内のすべてのエージェントが物流要求1112を満足するための調整されたアクション・プランの一部とすることができる。調整されたアクション・プランは、エージェントの先行を考慮に入れることができ、たとえば、ロボット・デバイスRD1およびRD2が、両方ともほぼ同時にある点に達すると期待される場合に、ロボット・デバイスの一方は、ロボット・デバイスRD2がその点を通過するのを待つロボット・デバイスRD1(またはその逆)など、他方に対する先行または優先順位を有することができる。エクスキュータ1120は、物流要求1112を満足するためにアクション1114を実行するために調整されたアクション・プランのロボット・デバイス1020の部分を達成する際にロボット・デバイス1020に指示するために、調整された経路1116を受け取り、衝突しない副経路1122を生成することができる。
[0150] いくつかの例で、オフボード・プランナ1012は、マルチエージェント・プランナとして働き、倉庫内で動作する1つまたは複数のエージェントの調整されたアクション・プランを生成することができる。これらの例では、オフボード・プランナ1012は、少なくとも、1つまたは複数のエージェントのそれぞれのルートを含む調整されたアクション・プランを判定することができ、各エージェントに単調増加する優先順位値、たとえば上で少なくとも図3、図4B〜図6F、および図9の文脈で議論した、エージェントがそのルート上で費やした時間の長さを割り当てることができる。また、オフボード・プランナ1012は、上で少なくとも図3〜図7Dの文脈で議論したように、1つまたは複数のレーンを含む道路地図に基づいて調整されたアクション・プランを判定することができる。その後、1つまたは複数のレーンを含む道路地図を使用することと、単調増加する優先順位値を有するエージェントのルートを判定することとによって、オフボード・プランナ1012は、上で図2〜図9の文脈で説明した技法を使用して、1つまたは複数のエージェントの間でのデッドロックを回避する調整されたアクション・プランを判定することができる。
[0151] 上で図11に示されているように、オフボード・プランナ1012およびエクスキュータ1120を含むプラニング・システム1010は、ロボット・デバイス1020と通信することができる。いくつかの実施形態では、ロボット・デバイスは、たとえば任意の米国労働安全衛生局(OSHA)クラス1またはクラス3動力式産業車両などのフォーク・トラックとすることができる。他の実施形態では、プラニング・システム1010は、「クラウド」(たとえば、1つまたは複数のネットワーク接続されたコンピューティング・デバイス)内に配置され、かつ/またはロボット・デバイス1020と同一位置に配置された敷地上のどこかに配置された1つまたは複数のネットワーク接続されたコンピューティング・デバイスを使用して実行するソフトウェアを含むことができる。
[0152] 図12は、例の実施形態による、ネットワーク1218を使用して接続された、物流インターフェース1210、倉庫管理システム1110、および1つまたは複数のロボット・デバイス1020を含むシステム1200を示す。物流インターフェース1210は、倉庫管理システム1110へのパレットなどの物体および/またはロボット・デバイスの移動に関する在庫調べ課題命令をネットワーク1218を介して倉庫管理システム1110に供給することができる。例の在庫調べ課題は、タイプBの品目を含むパレットAを位置Cに持ってくることとすることができる。
[0153] 倉庫管理システム1110は、物流インターフェース1210から在庫調べ課題命令を受け取り、1つまたは複数の課題/任務命令(たとえば、パレットBを位置Cから位置Dに移動する、ロボット・デバイスAへの命令)および/または在庫調べ課題命令を実行するためにロボット・デバイス(1つまたは複数)1020を制御するためのプランを生成することができる。課題/任務命令および/またはプランは、1つもしくは複数の経路および/または1つもしくは複数の軌道に関する情報を含むことができ、課題/任務命令(1つまたは複数)、プラン(1つまたは複数)、経路(1つまたは複数)、および軌道(1つまたは複数)は、図10および図11の文脈で議論した技法を使用して、倉庫管理システム1110のプラニング・システム1010によって生成される。
[0154] たとえば、倉庫管理システム1110は、1つまたは複数のコンピューティング・デバイス、たとえばサーバ・コンピューティング・デバイス上で走行し、これを使用してデータを記憶する、集中化された制御サービスとすることができる。これらの課題を実行するために、倉庫管理システム1110は、WMSミドルウェアを含むことができ、システム1200を監視し、管理するツールへのアクセスを提供するためにユーザ・インターフェースを提供することができる。WMSミドルウェアおよび/または倉庫管理システム1110の他のコンポーネントは、ロボット・デバイスの経路、ポーズ、および/または軌道への課題/任務命令(たとえば、パレットBを位置Cから位置Dに移動する、ロボット・デバイスAへの命令)の間の変換、在庫調べ課題と課題/任務命令との間の変換、ならびにアプリケーション・プログラミング・インターフェース(API)の間の変換のためのプロトコル変換APIなど、1つまたは複数のAPIを使用することができる。
[0155] 倉庫管理システム1110によって提供されるユーザ・インターフェースは、ロボット・デバイス(1つまたは複数)1020の監視、たとえば1つまたは複数のロボット・デバイスの位置、バッテリ状況、充電の状況などに関するデータを提示することと、在庫調べ課題命令(1つまたは複数)、課題/任務命令(1つまたは複数)、プラン(1つまたは複数)、経路(1つまたは複数)、および/または軌道(1つまたは複数)の生成およびロボット・デバイス(1つまたは複数)1020のうちの1つまたは複数への送出を可能にすることと、1つまたは複数の倉庫地図、パレット、ネットワーク、および/またはプラニング・システム(たとえば、プラニング・システム1010、倉庫管理システム1110、および/または物流インターフェース1210)に関するデータの再検討、更新、削除、および/または挿入とを含むがこれに限定されない、システム1200の1つまたは複数のユーザ・インターフェース機能を提供することができる。
[0156] いくつかの実施形態では、倉庫管理システム1110は、物流インターフェース1210とロボット・デバイス(1つまたは複数)1020との間ならびにロボット・デバイス(1つまたは複数)1020のうちの2つ以上の間で通信をルーティングし、ロボット・デバイス(1つまたは複数)1020のうちの1つまたは複数に搭載されたオンボード・システム1220などの1つまたは複数のオンボード・システムを管理することができる。他の実施形態では、倉庫管理システム1110は、ロボット・デバイス(1つまたは複数)1020のうちの1つまたは複数による課題/任務命令の完了に関するデータと、ロボット・デバイスが初期化され/ブートされた位置を示すデータを含む、ロボット・デバイス(1つまたは複数)1020の一部またはすべての位置および/またはポーズに関するデータと、人間のアクション、インシデント分析、および/またはデバッグのための1つまたは複数の監査証跡に関するデータと、状態追跡のためのデータなどであるがこれに限定されない、システム1200に関するデータを記憶し、生成し、読み取り、書き込み、更新し、かつ/または削除することができる。他の実施形態では、倉庫管理システム1110は、ロボット・デバイス(1つまたは複数)1020および1つまたは複数のアダプタと通信する中央メッセージ・ルータ/永続マネージャを含むことができる。1つまたは複数のアダプタのそれぞれは、倉庫管理システム1110から使用可能なシステム1200のデータおよび/または通信へのアクセスを提供することができ、上述のユーザ・インターフェースのためのユーザ・インターフェース・サービス・アダプタ、システム1200に関する情報へのワールド・ワイド・ウェブ(WWW)/インターネット・アクセスを可能にするウェブ・コンテンツ・サービス・アダプタ、メッセージ・プロキシ・アダプタ、ならびに/またはAPIおよび/もしくはWMSの間の通信の間の媒介物として働くWMSアダプタを含むことができるが、これに限定はされない。
[0157] さらなる他の実施形態では、プラニング・システム1010および/または倉庫管理システム1110は、上で図7A〜図7Dの文脈で議論した道路地図エディタ710などの道路地図エディタの機能性の一部またはすべてを含むことができる。
[0158] 図12は、1つまたは複数のロボット・デバイス1020のそれぞれが、オンボード・システム1220、ネットワーク・スイッチ1230、車両コントローラ1232、プログラマブル論理コントローラ(PLC)1234、車両マスタ1236、1つまたは複数のデバイス・センサ1238、および1つまたは複数のドライブ1240のうちの1つまたは複数を含むことができることを示す。
[0159] オンボード・システム1220は、ロボット・デバイス1020への設置およびこれと共の使用のために構成された、ロボット・プラニング用の計算およびセンサ・パッケージとすることができ、オンボード・システム1220は、オンボード・センサ1222および1つまたは複数のプラニング/実行プロセッサ1224を含むことができる。図12はまた、オンボード・システム1220が、少なくとも、プラニング・システム1010(ネットワーク1218を介して)、デバイス・センサ1238、および/またはロボット・デバイス1020の1つもしくは複数のアクチュエータと通信するのにネットワーク・スイッチ1230を使用するように構成されていることを示す。
[0160] オンボード・システム1220は、ロボット・デバイス1020の位置特定と、倉庫管理システム1110によって提供される経路および/または軌道に沿ったプランおよび/または移動を実行するためのローカル軌道の生成と、1つまたは複数の(ローカル)軌道に追従するためのドライブ1240へのコマンドの生成と、ロボット・デバイス1020のアクチュエータ(1つまたは複数)を制御するコマンドの生成と、倉庫管理システム1110へのポーズ、状況、および/または他の情報の報告とのうちの1つまたは複数の責任を負うものとすることができる。
[0161] オンボード・センサ1222は、ナビゲーションおよび/またはオンボード・システム1220の制御のための、1つまたは複数のナビゲーション・レーザー、レーザー・スキャナ、カメラ、および/または他のセンサを含むことができる。たとえば、ロボット・デバイス(1つまたは複数)1020のロボット・デバイスは、ドイツ国ヴァルトキルヒのSICK AG、日本国大阪の北陽電機株式会社、および/または日本国大阪の株式会社キーエンスによって提供される1つまたは複数のレーザー・スキャナなどの1つまたは複数のレーザー・スキャナを含むことができる。レーザー・スキャナは、ロボット・デバイスの移動の方向ならびにロボット・デバイスの側面、角、および/または背面に沿った障害物検出および/または障害物回避に使用され得る。レーザー・スキャナは、反射器ベースの位置特定を使用してロボット・デバイスの位置を特定するのにも使用され得る。いくつかの実施形態では、レーザー・スキャナの代わりにまたはこれと共に、カメラおよび/または他のセンサが、障害物検出、障害物回避、および/または位置特定に使用され得る。
[0162] プラニング/実行プロセッサ(1つまたは複数)1224は、少なくともオンボード・センサ1222に接続された1つまたは複数のコンピュータ・プロセッサを含むことができる。プラニング/実行プロセッサ(1つまたは複数)1224は、オンボード・センサ1222からデータを読み取り、ロボット・デバイス1020を動かすためにローカル軌道および/またはドライブ(1つまたは複数)1240へのコマンドを生成し、倉庫管理システム1110と通信することができる。ローカル軌道は、ロボット・デバイス1020が開始ポーズで開始し、ある時に終了ポーズに達する軌道である。いくつかの例で、開始ポーズは、暗黙のうちに指定され得、たとえば、開始ポーズは、ロボット・デバイス1020の現在のポーズとすることができ、したがって、ローカル軌道は、その開始ポーズがロボット・デバイス1020の現在のポーズであるという仮定に基づくものとすることができる。
[0163] プラニング/実行プロセッサ(1つまたは複数)1224は、コンポーネント・フレームワークを利用することができる。コンポーネント・フレームワークは、米国バージニア州オナンコックのboost.orgによって提供される「boost::asio」ソフトウェア・ライブラリおよび「boost::signals2」ソフトウェア・ライブラリなど、ロボット・デバイス1020の一貫した非同期モデルを提供するように構成された入出力(I/O)およびシグナリングのためのソフトウェア・ライブラリ上で構築されたマルチスレッド・ジョブ・スケジューリングおよびメッセージ・パッシング・システムとすることができる。コンポーネント・フレームワークは、ソフトウェア・コンポーネントがスレッド・セーフな形で並列に実行され得るようにするために、ソフトウェア・コンポーネント(またはモジュール)の間の通信を可能にすることができる。
[0164] コンポーネント・フレームワークは、状態機械コンポーネント、位置特定コンポーネント、プラニング・コンポーネント、および軌道追従コンポーネントのうちの1つまたは複数を含むことができる。状態機械コンポーネントは、車両初期化、車両指令、および障害処理のためにロボット・デバイス1020の状態を管理することができる。状態機械コンポーネントは、ロボット・デバイスの状態を管理するのに決定性有限オートマトンまたは他の状態機械を使用することができる。
[0165] 位置特定コンポーネントは、車両センサからデータを読み取り、ロボット・デバイス1020のポーズを判定するためにロボット・デバイス1020の以前の状態情報を統合することができる。車両センサ・データは、車両センサによって検出された1つまたは複数のランドマーク/関心地点を示すことができる。代替案では、車両センサからのデータは、位置特定コンポーネントが車両センサ・データに基づいて1つまたは複数のランドマーク/関心地点を検出するように、処理を必要とする場合がある。ポーズは、パレットまたは他の物体など、1つまたは複数の検出されたランドマーク/関心地点に対して相対的に判定され得る。プラニング・コンポーネントは、倉庫管理システム1110から1つまたは複数の目標を受け取り、これらの目標を達成するためにロボット・デバイス1020のローカル軌道を判定することができる。いくつかの実施形態で、ローカル軌道は、ロボット・デバイス1020が所定の長さの時間(たとえば、100ミリ秒、200ミリ秒、500ミリ秒、1秒、5秒)に追従すべき短期軌道とすることができる。軌道追従コンポーネントは、プラニング・コンポーネントによって生成されたローカル軌道を受け取り、ローカル軌道に沿って移動するためのドライブ制御命令を生成することができる。ドライブ制御命令はその後、ドライブ1240に中継され、ロボット・デバイス1020のトラクション・モーターおよび他のアクチュエータを制御する。
[0166] ネットワーク・スイッチ1230は、ロボット・デバイス(1つまたは複数)1020の通信を可能にすることができる。これらの通信は、オンボード・システム1220とロボット・デバイス1020の残り(たとえば、デバイス・センサ1238およびドライブ1240)との間の通信、ならびにネットワーク1218を介する倉庫管理システム1110との通信を含むことができるが、これに限定はされない。たとえば、ネットワーク・スイッチ1230は、有線ネットワークへのイーサネットおよび/もしくは他の有線通信インターフェース(1つまたは複数)を介して、ならびに/または台湾新北市のPLANET Technology CorporationによるPLANET Ethernet Switchなどの無線ネットワークへのWi−Fi(商標)および/もしくは他の無線通信インターフェース(1つまたは複数)を介して、伝送制御プロトコル/インターネット・プロトコル(TCP/IP)ベースの通信を可能にすることができる。
[0167] いくつかの実施形態では、ロボット・デバイス(1つまたは複数)1020とプラニング・システム1010との間の通信は、リモート・プロシージャ・コール(RPC)を含むことができる。リモート・プロシージャ・コールは、プラニング・システム1010のソフトウェアによるロボット・デバイス(1つまたは複数)1020のうちの1つまたは複数に常駐するソフトウェア手続き、メソッド、および/または関数の呼出しおよびその逆の呼出しを可能にすることができる。リモート・プロシージャ・コールは、TCP/IP、HTTP 1.0および/もしくはHTTP 2.0などのハイパーテキスト転送プロトコル(HTTP)、ならびに/または別の通信プロトコルなどの通信プロトコルに基づくものとすることができる。リモート・プロシージャ・コールの一部またはすべては、暗号化されたデータを含むことができ、そのようなデータは、Secure Sockets Layer(SSL)、Transport Layer Security(TLS)、ならびに/または1つもしくは複数の他の暗号化アルゴリズムおよび/もしくはプロトコルを使用して暗号化され得る。暗号化されたデータが使用される実施形態では、プライベート認証局などの1つまたは複数の認証局が、データの暗号化および/または暗号化されたデータの暗号化解除に使用される1つまたは複数の証明書を認証することができる。認証局は、1つまたは複数の証明書へのアクセスを制御するのにアクセス制御リスト(ACL)を使用することができる。リモート・プロシージャ・コールは、RPC関連通信にリクエスト/レスポンス・プロトコルおよび/または二方向ストリーミング・プロトコルを使用することができる。二方向ストリーミング・プロトコルがRPC関連通信に使用される実施形態では、単一の超寿命RPCが、二方向ストリーミング・プロトコルを実施するのに使用され得る。
[0168] 車両コントローラ1232および/またはプログラマブル論理コントローラ1234は、ロボット・デバイス(1つまたは複数)1020の電気およびセンサ管理機能性を提供することができる。電気およびセンサ管理機能性は、電気負荷制御、照明制御、センサ制御、センサおよび/またはスイッチ信号処理、ならびに電力管理の機能性を含むことができるが、これに限定はされない。車両マスタ1236は、ロボット・デバイス(1つまたは複数)1020の、リフト・デバイスなどの1つまたは複数のアクチュエータを制御する機能性を提供することができる。
[0169] デバイス・センサ(1つまたは複数)1238は、ロボット・デバイス(1つまたは複数)1020の制御および/または操作に関連するデータを提供することができる。データは、位置特定情報、位置推定値、およびマッピング・データなどであるがこれに限定されない、ロボット・デバイス(1つまたは複数)1020の周囲の環境に関する情報を提供することができる。たとえば、デバイス・センサ(1つまたは複数)1238は、1つまたは複数のレーザー(たとえば、2次元(2D)レーザー、セーフティ・レーザー、レーザー・スキャナ)、カメラ(たとえば、飛行時間(ToF)カメラ、赤緑青(RGB)カメラ、サーマル・カメラ)、電気センサ、近接センサ、ナビゲーション・デバイス、および位置センサを含むことができる。
[0170] ドライブ(1つまたは複数)1240は、ロボット・デバイス(1つまたは複数)1020を動かす機能性を提供する1つまたは複数のドライブ・コントローラおよび/またはアクチュエータを含むことができる。ドライブ・コントローラは、ロボット・デバイス(1つまたは複数)1020の動きを制御するためにドライブ・アクチュエータに指示することができる。ドライブ・アクチュエータは、1つまたは複数のトラクション・モーター、電気駆動、油圧駆動、および空圧駆動を含むことができる。
[0171] 図13は、例の実施形態による、ロボット・デバイス(1つまたは複数)1020のロボット・デバイス・アーキテクチャ1300を示す。ロボット・デバイス(1つまたは複数)1020のロボット・デバイス・アーキテクチャ1300は、ソフトウェアを含むことができる。ソフトウェアは、位置特定用のソフトウェア1310、パレット・ポーズ推定用のソフトウェア1312、状態機械に関連するソフトウェア1314、プランナ・フォロワ用のソフトウェア1316、コンポーネント・フレームワーク用のソフトウェア1320、およびオペレーティング・システム用のソフトウェア1330を含むことができる。ソフトウェアは、1つまたは複数のハードウェア・プラニング/実行プロセッサ1224によって実行され得る。ロボット・デバイス(1つまたは複数)1020と他のデバイスとの間の通信は、ネットワーク・ゲートウェイ1340および/またはネットワーク・スイッチ1230を使用して実行され得る。たとえば、ネットワーク・ゲートウェイ1340は、ロボット・デバイス(1つまたは複数)1020のロボット・デバイスとのおよびその中での無線通信に使用され得、ネットワーク・スイッチ1230は、ロボット・デバイス(1つまたは複数)1020のロボット・デバイスとのおよびその中での有線通信に使用され得る。ロボット・デバイス・アーキテクチャ1300は、上で図12の文脈で議論したデバイス・センサ(1つまたは複数)1238およびドライブ(1つまたは複数)1240などの追加ハードウェアをも含む。いくつかの実施形態では、ロボット・デバイス・アーキテクチャ1300は、ToFカメラ1350およびRGBカメラ1352を含むがこれに限定されない1つまたは複数のカメラを含むことができ、1つまたは複数のカメラは、1つもしくは複数のスチール・カメラおよび/または1つもしくは複数のビデオ・カメラを含むことができる。
コンピューティング・デバイス・アーキテクチャ
[0172] 図14Aは、例の実施形態による、例のコンピューティング・デバイス1400の機能ブロック図である。具体的には、図14Aに示されたコンピューティング・デバイス1400は、本明細書で説明するマルチエージェント・プランナと、マルチエージェント・プランナのソフトウェアと、ロボット110、120、130、140、214、224、234、244、330、332、414、416、424、426、434、436、444、446、470、472、474、476、510、520、530、550、610、および620と、コンピューティング・デバイス702と、道路地図エディタ710と、システム1000と、プラニング・システム1010と、オフボード・プランナ1012と、道路地図プランナ1014と、ロボット・デバイス1020と、システム1100と、倉庫管理システム1110と、エクスキュータ1120と、システム1200と、物流インターフェース1210と、ネットワーク1218および1414と、オンボード・システム1220と、ネットワーク・スイッチ1230と、車両コントローラ1232と、プログラマブル論理コントローラ1234と、車両マスタ1236と、デバイス・センサ(1つまたは複数)1238と、ドライブ(1つまたは複数)1240と、ロボット・デバイス・アーキテクチャ1300との少なくとも1つの機能、ならびに/または道路地図310、402、502、602、および702と、シナリオ100、200、300、400、500、600、および700と、方法800および1500と、優先順位サイクル900とに関連する少なくとも1つの機能を実行するように構成され得る。コンピューティング・デバイス1400は、ユーザ・インターフェース・モジュール1401、ネットワーク通信インターフェース・モジュール1402、1つまたは複数のプロセッサ1403、データ・ストレージ1404、1つまたは複数のセンサ1420、および1つまたは複数のアクチュエータ1430を含むことができ、これらのすべてが、システム・バス、ネットワーク、または他の接続機構1405を介して一緒にリンクされ得る。いくつかの実施形態では、コンピューティング・デバイス1400は、マルチエージェント・プランナの一部またはすべてとして働くように構成され得る。
[0173] ユーザ・インターフェース・モジュール1401は、外部ユーザ入出力デバイスにデータを送り、かつ/またはこれからデータを受け取るように動作可能とすることができる。たとえば、ユーザ・インターフェース・モジュール1401は、キーボード、キーパッド、タッチ・スクリーン、コンピュータ・マウス、トラック・ボール、ジョイスティック、カメラ、音声認識モジュール、および/または他の同様のデバイスなどのユーザ入力デバイスへおよび/またはこれからデータを送り、かつ/または受け取るように構成され得る。ユーザ・インターフェース・モジュール1401は、現在既知のまたは今後に開発されるのいずれかの、1つまたは複数の陰極線管(CRT)、液晶ディスプレイ、発光ダイオード(LED)、digital light processing(DLP)技術を使用するディスプレイ、プリンタ、電球、および/または他の同様のデバイスなどのユーザ・ディスプレイ・デバイスに出力を供給するようにも構成され得る。ユーザ・インターフェース・モジュール1401は、スピーカ、スピーカ・ジャック、オーディオ出力ポート、オーディオ出力デバイス、イヤフォン、および/または他の同様のデバイスなどの可聴出力(1つまたは複数)を生成するようにも構成され得る。
[0174] ネットワーク通信インターフェース・モジュール1402は、ネットワークを介して通信するように構成可能である、1つもしくは複数の無線インターフェース1407および/または1つもしくは複数の有線インターフェース1408を含むことができる。無線インターフェース1407は、Bluetoothトランシーバ(登録商標)、Zigbeeトランシーバ、Wi−Fiトランシーバ、WiMAXトランシーバ、および/または無線ネットワークを介して通信するように構成可能な他の同様のタイプの無線トランシーバなど、1つまたは複数の無線送信器、無線受信器、および/または無線トランシーバを含むことができる。有線インターフェース1408は、イーサネット・トランシーバ、Universal Serial Bus(USB)トランシーバ、またはより対線、同軸ケーブル、光ファイバ・リンク、もしくは有線ネットワークへの同様の物理接続を介して通信するように構成可能な同様のトランシーバなど、1つまたは複数の有線送信器、有線受信器、および/または有線トランシーバを含むことができる。
[0175] いくつかの実施形態では、ネットワーク通信インターフェース・モジュール1402は、信頼性があり、保護され、かつ/または認証された通信を提供するように構成され得る。本明細書で説明される各通信に関して、信頼性のある通信(すなわち、保証されたメッセージ配送)を保証するための情報は、おそらくはメッセージ・ヘッダおよび/またはメッセージ・フッタの一部として提供され得る(たとえば、パケット/メッセージ・シーケンシング情報、カプセル化ヘッダ(1つまたは複数)および/またはカプセル化フッタ(1つまたは複数)、サイズ/時間情報、ならびにCRCおよび/またはパリティ検査値などの伝送検証情報)。通信は、DES、AES、RSA、Diffie−Hellman、および/またはDSAなどであるがこれに限定されない1つまたは複数の暗号プロトコルおよび/または暗号アルゴリズムを使用して保護され(たとえば、符号化されまたは暗号化され)、かつ/または暗号化解除/復号され得る。他の暗号プロトコルおよび/または暗号アルゴリズムも、または通信を保護し(その後に暗号化解除/復号する)ために本明細書でリストされたものに加えて、使用され得る。
[0176] プロセッサ1403は、1つもしくは複数の汎用プロセッサおよび/または1つもしくは複数の特殊目的プロセッサ(たとえば、デジタル信号プロセッサ、グラフィックス処理ユニット、特定用途向け集積回路など)を含むことができる。プロセッサ1403は、データ・ストレージ1404内に含まれるコンピュータ可読プログラム命令1406および/または本明細書で説明される他の命令を実行するように構成され得る。いくつかの実施形態で、コンピュータ可読プログラム命令1406は、マルチエージェント・プランナの命令1406aを含むことができ、このマルチエージェント・プランナの命令1406aは、本明細書で説明されるマルチエージェント・プランナの機能性の一部またはすべてを実行することができる。
[0177] データ・ストレージ1404は、プロセッサ1403のうちの少なくとも1つによって読み取られ、かつ/またはアクセスされ得る1つまたは複数のコンピュータ可読記憶媒体を含むことができる。1つまたは複数のコンピュータ可読記憶媒体は、全体的にまたは部分的にプロセッサ1403のうちの少なくとも1つと一体化され得る、光、磁気、有機、または他のメモリまたはディスク・ストレージなどの揮発性および/または不揮発性のストレージ・コンポーネントを含むことができる。いくつかの実施形態で、データ・ストレージ1404は、単一の物理デバイス(たとえば、1つの光、磁気、有機、または他のメモリまたはディスク・ストレージ・ユニット)を使用して実施され得るが、他の実施形態ではデータ・ストレージ1404は、2つ以上の物理デバイスを使用して実施され得る。
[0178] データ・ストレージ1404は、コンピュータ可読プログラム命令1406およびおそらくは追加のデータを含むことができる。いくつかの実施形態では、データ・ストレージ1404は、本明細書で説明される方法および技法の少なくとも一部ならびに/またはデバイスおよびネットワークの機能性の少なくとも一部を実行するのに必要なストレージをさらに含むことができる。
[0179] いくつかの実施形態で、コンピューティング・デバイス1400は、1つまたは複数のセンサ1420を含むことができる。センサ(1つまたは複数)1420は、コンピューティング・デバイス1400の環境内の条件を測定し、その環境(たとえば、本明細書で説明される道路地図によって表される環境)に関するデータを提供するように構成され得る。たとえば、センサ(1つまたは複数)1420は、(i)RFIDリーダー、近接センサ、1次元バーコード・リーダー、2次元バーコード(たとえば、Quick Response(QR)コード(登録商標))リーダー、レーザー・トラッカなどであるがこれに限定されない、他の物体および/またはデバイスを識別するための識別センサ(識別センサ(1つまたは複数)は、RFIDタグ、バーコード、QRコード(登録商標)、ならびに/または読み取られ、少なくとも識別情報を提供するように構成された他のデバイスおよび/もしくは物体などの識別子を読み取るように構成され得る)と、(ii)ジャイロスコープ、加速度計、ドップラ・センサ、全地球測位システム(GPS)デバイス、ソナー・センサ、レーダー・デバイス、レーザー変位センサ、およびコンパスなどであるがこれに限定されない、コンピューティング・デバイス1400の位置および/または動きを測定する位置センサと、(iii)赤外線センサ、光学センサ、光センサ、カメラ、バイオセンサ、容量性センサ、タッチ・センサ、温度センサ、無線センサ、ラジオ・センサ、動きセンサ、マイクロフォン、サウンド・センサ、超音波センサ、および/または煙センサなどであるがこれに限定されない、コンピューティング・デバイス1400の環境を示すデータを入手する環境センサと、(iv)1つまたは複数の次元内の力、トルク、地面力、摩擦を測定する1つもしくは複数のセンサ、ならびに/またはゼロ・モーメント・ポイント(ZMP)および/もしくはZMPの位置を識別するZMPセンサなどであるがこれに限定されない、コンピューティング・デバイス1400の周囲で作用する1つまたは複数の力(たとえば、慣性力および/または重力加速度)を測定する力センサとのうちの1つまたは複数を含むことができる。センサ(1つまたは複数)1420の多数の他の例も可能である。
[0180] コンピューティング・デバイス1400は、コンピューティング・デバイス1400が動きを開始することを可能にする1つまたは複数のアクチュエータ1430を含むことができる。たとえば、アクチュエータ(1つまたは複数)1430は、ロボット胴体にロボット手足を接続するロボット関節と共に含まれ、または組み込まれ得る。たとえば、アクチュエータ(1つまたは複数)1430は、それぞれのロボット脚およびロボット腕をロボット胴体に接続するそれぞれのロボット股関節およびロボット肩関節を含むことができる。さらに、アクチュエータ(1つまたは複数)1430は、ロボット脚のそれぞれの部分(たとえば、ロボット腿およびロボットふくらはぎ)を接続するそれぞれのロボット膝関節と、ロボット腕の部分(たとえば、ロボット前腕および上腕)を接続する肘関節を含むことができる。さらに、アクチュエータ(1つまたは複数)1430は、ロボット脚をロボット足に接続するそれぞれのロボット足関節と、ロボット腕をロボット手に接続するそれぞれのロボット手首関節とを含むことができる。さらに、アクチュエータ(1つまたは複数)1430は、ロボット手足を動かすモーターを含むことができる。したがって、アクチュエータ(1つまたは複数)1430は、コンピューティング・デバイス1400のモビリティを可能にすることができる。アクチュエータ(1つまたは複数)1430の多数の他の例も可能である。
クラウドベースのサーバ
[0181] 図14Bは、例の実施形態による、クラウドベースのサーバ・システムとして配置されたコンピューティング・クラスタ1409a、1409b、および1409cのネットワーク1414を示す。コンピューティング・クラスタ1409a、1409b、および1409cは、クラウドベースのアプリケーションおよび/またはサービスのプログラム論理および/またはデータを記憶するクラウドベースのデバイスとすることができ、たとえば、本明細書で説明するマルチエージェント・プランナと、マルチエージェント・プランナのソフトウェアと、ロボット110、120、130、140、214、224、234、244、330、332、414、416、424、426、434、436、444、446、470、472、474、476、510、520、530、550、610、および620と、コンピューティング・デバイス702と、道路地図エディタ710と、システム1000と、プラニング・システム1010と、オフボード・プランナ1012と、道路地図プランナ1014と、ロボット・デバイス1020と、システム1100と、倉庫管理システム1110と、エクスキュータ1120と、システム1200と、物流インターフェース1210と、ネットワーク1218および1414と、オンボード・システム1220と、ネットワーク・スイッチ1230と、車両コントローラ1232と、プログラマブル論理コントローラ1234と、車両マスタ1236と、デバイス・センサ(1つまたは複数)1238と、ドライブ(1つまたは複数)1240と、ロボット・デバイス・アーキテクチャ1300との少なくとも1つの機能、ならびに/または道路地図310、402、502、602、および720と、シナリオ100、200、300、400、500、600、および700と、方法800および1500と、優先順位サイクル900とに関連する少なくとも1つの機能を実行する。
[0182] いくつかの実施形態では、コンピューティング・クラスタ1409a、1409b、および1409cは、単一のコンピューティング・センタ内に存在する単一のコンピューティング・デバイスとすることができる。他の実施形態では、コンピューティング・クラスタ1409a、1409b、および1409cは、単一のコンピューティング・センタ内の複数のコンピューティング・デバイスまたは種々の地理的位置に配置された複数のコンピューティング・センタ内に配置された複数のコンピューティング・デバイスさえ含むことができる。たとえば、図14Bは、異なる物理位置に存在するコンピューティング・クラスタ1409a、1409b、および1409cのそれぞれを示す。
[0183] いくつかの実施形態では、コンピューティング・クラスタ1409a、1409b、および1409cのデータおよびサービスは、非一時的な有形のコンピュータ可読媒体(またはコンピュータ可読記憶媒体)内に記憶されたコンピュータ可読情報として符号化され、他のコンピューティング・デバイスによってアクセス可能とすることができる。いくつかの実施形態では、コンピューティング・クラスタ1409a、1409b、および1409cは、単一のディスク・ドライブまたは他の有形の記憶媒体上に記憶され得、あるいは、1つまたは複数の種々の地理的位置に配置された複数のディスク・ドライブまたは他の有形の記憶媒体上で実施され得る。
[0184] 図14Bは、例の実施形態によるクラウドベースのサーバ・システムを示す。図14Bでは、安全システムの機能性は、3つのコンピューティング・クラスタ1409a、1409b、および1409cの間で分散され得る。コンピューティング・クラスタ1409aは、ローカル・クラスタ・ネットワーク1412aによって接続された、1つまたは複数のコンピューティング・デバイス1400a、クラスタ・ストレージ・アレイ1410a、およびクラスタ・ルータ1411aを含むことができる。同様に、コンピューティング・クラスタ1409bは、ローカル・クラスタ・ネットワーク1412bによって接続された、1つまたは複数のコンピューティング・デバイス1400b、クラスタ・ストレージ・アレイ1410b、およびクラスタ・ルータ1411bを含むことができる。同様に、コンピューティング・クラスタ1409cは、ローカル・クラスタ・ネットワーク1412cによって接続された、1つまたは複数のコンピューティング・デバイス1400c、クラスタ・ストレージ・アレイ1410c、およびクラスタ・ルータ1411cを含むことができる。
[0185] いくつかの実施形態では、コンピューティング・クラスタ1409a、1409b、および1409cのそれぞれは、等しい個数のコンピューティング・デバイス、等しい個数のクラスタ・ストレージ・アレイ、および等しい個数のクラスタ・ルータを有することができる。しかし、他の実施形態では、各コンピューティング・クラスタは、異なる個数のコンピューティング・デバイス、異なる個数のクラスタ・ストレージ・アレイ、および異なる個数のクラスタ・ルータを有することができる。各コンピューティング・クラスタ内のコンピューティング・デバイス、クラスタ・ストレージ・アレイ、およびクラスタ・ルータの個数は、各コンピューティング・クラスタに割り当てられた1つまたは複数のコンピューティング・タスクに依存する可能性がある。
[0186] たとえば、コンピューティング・クラスタ1409a内で、コンピューティング・デバイス1400aは、マルチエージェント・プランナ、ロボット、道路地図エディタ、および/またはコンピューティング・デバイスの様々なコンピューティング・タスクを実行するように構成され得る。一実施形態では、マルチエージェント・プランナ、ロボット、道路地図エディタ、および/またはコンピューティング・デバイスの様々な機能性は、1つまたは複数のコンピューティング・デバイス1400a、1400b、および1400cの間で分散され得る。それぞれのコンピューティング・クラスタ1409bおよび1409c内のコンピューティング・デバイス1400bおよび1400cは、コンピューティング・クラスタ1409a内のコンピューティング・デバイス1400aと同様に構成され得る。その一方で、いくつかの実施形態では、コンピューティング・デバイス1400a、1400b、および1400cは、異なる機能を実行するように構成され得る。
[0187] いくつかの実施形態では、マルチエージェント・プランナ、ロボット、道路地図エディタ、および/またはコンピューティング・デバイスに関連するコンピューティング・タスクおよび記憶されたデータは、マルチエージェント・プランナ、ロボット、道路地図エディタ、および/もしくはコンピューティング・デバイスの処理要件、コンピューティング・デバイス1400a、1400b、および1400cの処理能力、各コンピューティング・クラスタ内のコンピューティング・デバイスの間およびコンピューティング・クラスタ自体の間のネットワーク・リンクの待ち時間、ならびに/または全体的なシステム・アーキテクチャのコスト、速度、耐故障性、弾力性、効率、および/もしくは他の設計目標に寄与する可能性がある他の要因に少なくとも部分的に基づいて、コンピューティング・デバイス1400a、1400b、および1400cにまたがって分散され得る。
[0188] コンピューティング・クラスタ1409a、1409b、および1409cのクラスタ・ストレージ・アレイ1410a、1410b、および1410cは、ハード・ディスク・ドライブのグループへの読取アクセスおよび書込アクセスを管理するように構成されたディスク・アレイ・コントローラを含むデータ・ストレージ・アレイとすることができる。単独のまたはそれぞれのコンピューティング・デバイスと連動するディスク・アレイ・コントローラは、1つまたは複数のコンピューティング・デバイスが1つまたは複数のクラスタ・ストレージ・アレイにアクセスするのを妨げるディスク・ドライブ障害もしくは他のクラスタ・ストレージ・アレイ障害および/またはネットワーク障害に対して保護するために、クラスタ・ストレージ・アレイ内に記憶されたデータのバックアップ・コピーまたは冗長コピーを管理するようにも構成され得る。
[0189] マルチエージェント・プランナ、ロボット、道路地図エディタ、および/またはコンピューティング・デバイスの機能がコンピューティング・クラスタ1409a、1409b、および1409cのコンピューティング・デバイス1400a、1400b、および1400cにまたがって分散され得る形に類似して、これらのコンポーネントの様々なアクティブ部分および/またはバックアップ部分は、クラスタ・ストレージ・アレイ1410a、1410b、および1410cにまたがって分散され得る。たとえば、一部のクラスタ・ストレージ・アレイは、マルチエージェント・プランナ、ロボット、道路地図エディタ、および/またはコンピューティング・デバイスのデータのある部分を記憶するように構成され得、他のクラスタ・ストレージ・アレイは、マルチエージェント・プランナ、ロボット、道路地図エディタ、および/またはコンピューティング・デバイスのデータの他の部分(1つまたは複数)を記憶できる。さらに、一部のクラスタ・ストレージ・アレイは、他のクラスタ・ストレージ・アレイ内に記憶されたデータのバックアップ・バージョンを記憶するように構成され得る。
[0190] コンピューティング・クラスタ1409a、1409b、および1409c内のクラスタ・ルータ1411a、1411b、および1411cは、コンピューティング・クラスタに内部通信および外部通信を提供するように構成されたネットワーキング機器を含むことができる。たとえば、コンピューティング・クラスタ1409a内のクラスタ・ルータ1411aは、(i)ローカル・クラスタ・ネットワーク1412aを介するコンピューティング・デバイス1400aとクラスタ・ストレージ・アレイ1410aとの間のローカル・エリア・ネットワーク通信と、(ii)ネットワーク1414への広域ネットワーク接続1413aを介するコンピューティング・クラスタ1409aとコンピューティング・クラスタ1409bおよび1409cとの間の広域ネットワーク通信とを提供するように構成された1つまたは複数のインターネット・スイッチングおよびルーティング・デバイスを含むことができる。クラスタ・ルータ1411bおよび1411cは、クラスタ・ルータ1411aに類似するネットワーク機器を含むことができ、クラスタ・ルータ1411bおよび1411cは、クラスタ・ルータ1411aがコンピューティング・クラスタ1409aのために実行するものに類似するネットワーキング機能をコンピューティング・クラスタ1409bおよび1409cのために実行することができる。
[0191] いくつかの実施形態では、クラスタ・ルータ1411a、1411b、および1411cの構成は、コンピューティング・デバイスおよびクラスタ・ストレージ・アレイのデータ通信要件、クラスタ・ルータ1411a、1411b、および1411c内のネットワーク機器のデータ通信能力、ローカル・ネットワーク1412a、1412b、および1412cの待ち時間およびスループット、広域ネットワーク・リンク1413a、1413b、および1413cの待ち時間、スループット、およびコスト、ならびに/または緩和システム・アーキテクチャのコスト、速度、耐故障性、弾力性、効率、および/もしくは他の設計判断基準に寄与する可能性がある他の要因に少なくとも部分的に基づくものとされ得る。
例の動作方法
[0192] 図15は、例の実施形態による、方法1500の流れ図である。方法1500は、コンピューティング・デバイス1400などのコンピューティング・デバイスによって実行され得る。具体的には、コンピューティング・デバイス1400は、方法1500を実行するために、本明細書で説明されるマルチエージェント・プランナを実施するソフトウェアを実行することができる。
[0193] 方法1500は、ブロック1510で開始することができ、ここで、コンピューティング・デバイスは、少なくとも上で図3および図7A〜図7Dの文脈で議論したものなど、第1のロボットおよび第2のロボットを含む既存環境の道路地図を受け取ることができる。
[0194] ブロック1520では、コンピューティング・デバイスは、上で少なくとも図7A〜図7Dの文脈で議論したものなど、複数の衝突領域を接続する複数のレーンを用いて道路地図に注釈を付けることができ、各レーンは、一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わる。いくつかの実施形態では、上で少なくとも図7A〜図7Dの文脈で議論したものなど、複数のレーンを用いて道路地図に注釈を付けることは、コンピューティング・デバイスを使用して、新しいレーンを用いて道路地図に注釈を付けることを試みることと、コンピューティング・デバイスを使用して、新しいレーンが一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わるかどうかを判定することと、新しいレーンが一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わると判定した後に、新しいレーンを用いて道路地図に注釈を付けることとを含むことができる。特にこの実施形態では、上で少なくとも図7A〜図7Dの文脈で議論したものなど、新しいレーンを用いて道路地図に注釈を付けることを試みることは、コンピューティング・デバイスを使用して、新しいレーンの道路地図上の位置を判定することと、コンピューティング・デバイスを使用して、新しいレーンを用いて道路地図上の位置に注釈を付けることを試みることとを含むことができる。他の実施形態では、上で少なくとも図7A〜図7Dの文脈で議論したものなど、複数のレーンを用いて道路地図に注釈を付けることは、1つまたは複数のレーンから第1の対にされたレーンおよび第2の対にされたレーンを選択することと、第1の対にされたレーン上のロボットが第2の対にされたレーン上のロボットと衝突するかどうかを判定することと、第1の対にされたレーン上のロボットが第2の対にされたレーン上のロボットと衝突すると判定した後に、第1の対にされたレーンおよび/または第2の対にされたレーンがレーンではないと判定することとを含むことができる。
[0195] ブロック1530では、上で少なくとも図3〜図6Fの文脈で議論したものなど、第1のロボットによる使用のための道路地図に沿った環境を通る第1のルートと第2のロボットによる使用のための道路地図に沿った環境を通る第2のルートとが判定され得、第1のルートと第2のルートとの両方が、第1のレーンを含み、第1のレーンは、第1の衝突領域に接続する。いくつかの実施形態では、上で少なくとも図5A〜図5Fの文脈で議論したものなど、第1のルートは、第1のロボットを出発位置から目的地位置に導く、レーンと対応する待機時間とのシーケンスを含むことができる。他の実施形態では、上で少なくとも図4A〜図5Fおよび図8の文脈で議論したものなど、環境を通る第1のルートを判定することは、第1のロボットによる排他的使用のために第1のルートに沿った第2の衝突領域を予約することを含むことができ、第2の衝突領域は、2つ以上のレーンの間にある。特にこの実施形態では、上で少なくとも図4A〜図5Fの文脈で議論したものなど、第2の衝突領域は、2つのレーンの間の交差点を含むことができる。他に、特にこの実施形態では、上で少なくとも図7A〜図7Fの文脈で議論したものなど、道路地図の注釈を付けられていない部分は、1つまたは複数のレーンによって注釈を付けられておらず、第2の衝突領域は、道路地図の注釈を付けられていない部分を含む。
[0196] ブロック1540では、上で少なくとも図3〜図6F、図8、および図9で議論したものなど、第1のロボットに第1の優先順位を、第2のロボットに第2の優先順位を割り当てることができ、第1の優先順位は、第2の優先順位より高い。いくつかの実施形態では、上で少なくとも図3、図4B〜図6F、図9、および図10で議論したものなど、第1の優先順位および第2の優先順位は、両方とも、単調増加関数に基づくものとすることができる。特にこの実施形態では、上で少なくとも図3、図4B〜図6F、図9、および図10で議論したものなど、単調増加関数は、そのルート上を移動する間にロボットによって費やされる時間の長さと、ロボットがルート上で開始して以降にそのルート上で開始した複数のロボットを示すルート−スタート値とのうちの1つまたは複数を判定することができる。
[0197] ブロック1550では、上で少なくとも図3、および図5A〜図6Fで議論したものなど、第2のロボットが第2のルートに追従することが、第2のロボットに、第1のロボットが第1の衝突領域に達する前に第1のレーン上の第1のロボットをブロックさせると判定することができる。
[0198] ブロック1560では、上で少なくとも図3、および図5A〜図6Fで議論したものなど、第1の優先順位が第2の優先順位より高いことに基づいて、第2のロボットが第1のレーン上の第1のロボットをブロックするのを防ぐために、第2のルートを変更することができる。
[0199] いくつかの実施形態では、上で少なくとも図5A〜図5Fの文脈で議論したものなど、第1の衝突領域は、第1のロボットによる排他的使用のために予約され得る、第2のロボットが第1のレーン上の第1のロボットをブロックするのを防ぐために第2のルートを変更することは、第1のロボットによる排他的使用のための第1の衝突領域の第1の予約を解放することと、第1の衝突領域の第1の予約を解放した後に、第2のロボットによる排他的使用のために第1の衝突領域の第2の予約を入手することと、第2の予約を入手した後に、第2のロボットに、第1のエッジを去り、第1の衝突領域に入るように指示することと、第2のロボットが第1の衝突領域をトラバースした後に、第2の予約を解放することと、第1のロボットによる排他的使用のために第1の衝突領域の第3の予約を入手することとを含むことができる。特定の実施形態では、方法1500は、上で少なくとも図5A〜図5Fの文脈で議論したものなど、第2のロボットが第1の衝突領域をトラバースした後に、第2のロボットに、第2のルートを介して目的地位置に進み続けるように指示することをさらに含むことができる。他の実施形態では、上で少なくとも図5A〜図5Fの文脈で議論したものなど、道路地図は、レーンのサイクルを用いて注釈を付けられ得、第1のレーン上の第1のロボットをブロックするのを防ぐために第2のルートを変更することは、レーンのサイクルを通って移動するように第2のルートを変更することを含むことができる。さらなる他の実施形態では、上で少なくとも図4A〜図4Eの文脈で議論したものなど、第1のレーンをブロックするのを防ぐために第2のロボットの第2のルートを変更することは、第2のロボットに、1つまたは複数のレーンのうちの特定のレーン上で待つように指示することを含むことができる。
[0200] いくつかの実施形態では、方法1500は、上で少なくとも図3および図5A〜図6Fの文脈で議論したものなど、第1のロボットが第1のルートを完了した後に第1の優先順位をリセットすることをさらに含むことができる。
[0201] 他の実施形態では、方法1500は、上で少なくとも図3の文脈で議論したものなど、第1のロボットをブロックする、第1のルート上の障害物の存在を判定することと、第1のロボットをブロックする、第1のルート上の障害物の存在を判定した後に、障害物の存在を示す警告メッセージを生成することと、障害物を回避する、第1のロボットの新しいルートを判定することとをさらに含むことができる。
[0202] さらなる他の実施形態では、上で少なくとも図5A〜図5Fの文脈で議論したものなど、第3のロボットの第3のルートは、第1のロボットのために予約されたルートのオーバーラップする部分にオーバーラップすることができ、方法1500は、第3のロボットの第3の優先順位が第1の優先順位未満であるかどうかを判定することと、第3の優先順位が第1の優先順位未満であると判定した後に、第3のロボットが、第1のロボットがオーバーラップする部分に達する前にオーバーラップする部分をトラバースする位置にいるかどうかを判定することと、第3のロボットが、第1のロボットがオーバーラップする部分に達する前にオーバーラップする部分をトラバースする位置にいると判定した後に、第3のロボットに、第1のロボットがオーバーラップする部分に達する前にオーバーラップする部分をトラバースするように指示することとをさらに含むことができる。
[0203] 本開示は、様々な態様の例示として意図された、本願で説明される特定の実施形態に関して限定されない。本明細書で開示される技法の一部は、ロボットを伴う動作に関して説明されるが、これらの本明細書で開示される技法は、そうではないと明示的に述べられない限り、エージェント全般に適用可能である。当業者に明白であるとおり、その趣旨および範囲から逸脱せずに、多数の修正形態および変形形態を作ることができる。本明細書で列挙されるものに加えて、本開示の範囲内の機能的に同等の方法および装置が、前述の説明から当業者に明白になる。そのような修正形態および変形形態は、添付の特許請求の範囲の範囲に含まれることが意図されている。
[0204] 上の詳細な説明は、添付図面を参照して、開示されるシステム、デバイス、および方法の様々な特徴および機能を説明する。図面では、文脈がそうではないと規定しない限り、同様の記号が、通常は同様の構成要素を識別する。詳細な説明、図面、および特許請求の範囲で説明される例示的な実施形態は、限定的であることを意図されたものではない。本明細書で提示される主題の趣旨または範囲から逸脱せずに、他の実施形態を利用することができ、他の変更を行うことができる。本明細書で全体的に説明され、図面に示された本開示の諸態様が、様々な異なる構成で配置され、置換され、組み合わされ、分離され、設計され得、そのすべてが本明細書で明示的に企図されていることが、たやすく理解されよう。
[0205] 図内のはしご図、シナリオ、および流れ図のいずれかまたはすべてに関して、本明細書で議論されるように、各ブロックおよび/または通信は、例の実施形態による情報の処理および/または情報の伝送を表す可能性がある。代替実施形態は、これらの例の実施形態の範囲内に含まれる。これらの代替実施形態では、たとえば、ブロック、伝送、通信、要求、応答、および/またはメッセージとして記述される機能が、用いられる機能性に応じて、実質的に同時または逆順を含めて、図示されまたは議論される順序から外れて実行され得る。さらに、より多数またはより少数のブロックおよび/または機能が、本明細書で議論されるはしご図、シナリオ、および流れ図のいずれとも共に使用され得、これらのはしご図、シナリオ、および流れ図が、部分的にまたは全体的に、お互いと組み合わされ得る。
[0206] 情報の処理を表すブロックは、本明細書で説明される方法または技法の特定の論理機能を実行するように構成され得る回路網に対応することができる。その代わりにまたはそれに加えて、情報の処理を表すブロックは、モジュール、セグメント、またはプログラム・コードの一部(関連するデータを含む)に対応することができる。プログラム・コードは、方法または技法の特定の論理機能またはアクションを実施するためにプロセッサによって実行可能な1つまたは複数の命令を含むことができる。プログラム・コードおよび/または関連するデータは、ディスク・ドライブ、ハード・ドライブ、または他の記憶媒体を含むストレージ・デバイスなどの任意のタイプのコンピュータ可読媒体上に記憶され得る。
[0207] コンピュータ可読媒体は、レジスタ・メモリ、プロセッサ・キャッシュ、およびランダム・アクセス・メモリ(RAM)など、短い時間期間の間にデータを記憶する非一時的コンピュータ可読媒体などの非一時的コンピュータ可読媒体をも含むことができる。コンピュータ可読媒体は、たとえば読取専用メモリ(ROM)、光ディスク、磁気ディスク、コンパクト・ディスク読取専用メモリ(CD−ROM)など、二次長期ストレージまたは永続長期ストレージなど、より長い時間期間の間にプログラム・コードおよび/またはデータを記憶する非一時的コンピュータ可読媒体をも含むことができる。コンピュータ可読媒体は、任意の他の揮発性または不揮発性のストレージ・システムとすることもできる。コンピュータ可読媒体は、コンピュータ可読記憶媒体、たとえば有形のストレージ・デバイスと考えることができる。
[0208] さらに、1つまたは複数の情報伝送を表すブロックは、同一の物理デバイス内のソフトウェア・モジュールおよび/またはハードウェア・モジュールの間の情報伝送に対応することができる。しかし、他の情報伝送は、異なる物理デバイス内のソフトウェア・モジュールおよび/またはハードウェア・モジュールの間とすることができる。
[0209] 様々な態様および実施形態を本明細書で開示したが、他の態様および実施形態が、当業者に明白になろう。本明細書で開示された様々な態様および実施形態は、例示のために提供され、限定的であることは意図されておらず、真の範囲は、以下の特許請求の範囲によって示される。