(57)【要約】  ロボットのルーティングに関連する装置および方法を提供する。第１および第２のロボットを含む環境の道路地図を受け取ることができる。道路地図に、衝突領域を接続する一方向レーンを用いて注釈を付けることができ、各レーンは、衝突領域をブロックするのを防ぐように終わる。第１および第２のロボットのそれぞれの使用のための第１および第２のルートを判定することができ、第１と第２との両方のルートは、第１の衝突領域に接続する第１のレーンを含む。第１のより高い優先順位および第２のより低い優先順位を、それぞれの第１および第２のロボットに割り当てることができる。第２のロボットが第２のルートに追従することが、第１のレーン上の第１のロボットをブロックすると判定することができる。第１の優先順位が第２の優先順位より高いことに基づいて、コンピューティング・デバイスは、第２のロボットが第１のロボットをブロックするのを防ぐために第２のルートを変更することができる。【選択図】図３
2020518890.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング・デバイスで、第１のロボットおよび第２のロボットを含む既存環境の道路地図を受け取ることと、
前記コンピューティング・デバイスを使用して、複数の衝突領域を接続する複数のレーンを用いて前記道路地図に注釈を付けることであって、各レーンは、一方向であり、衝突領域をブロックするのを回避するために当該衝突領域から十分に離れて終わる、注釈を付けることと、
前記第１のロボットによる使用のための前記道路地図に沿った前記環境を通る第１のルートと前記第２のロボットによる使用のための前記道路地図に沿った前記環境を通る第２のルートとを判定することであって、前記第１のルートと前記第２のルートとの両方が第１のレーンを含み、前記第１のレーンは第１の衝突領域に接続する、判定することと、
前記第１のロボットに第１の優先順位を、前記第２のロボットに第２の優先順位を割り当てることであって、前記第１の優先順位は前記第２の優先順位より高い、割り当てることと、
前記第２のロボットが前記第２のルートに追従することが、前記第１のロボットが前記第１の衝突領域に達する前に前記第２のロボットが前記第１のレーン上の前記第１のロボットをブロックさせると判定することと、
前記第１の優先順位が前記第２の優先順位より高いことに基づいて、前記第２のロボットが前記第１のレーン上の前記第１のロボットをブロックするのを防ぐために、前記第２のルートを変更することと
を含む方法。
【請求項２】
前記複数のレーンを用いて前記道路地図に注釈を付けることは、
前記コンピューティング・デバイスを使用して、新しいレーンを用いて前記道路地図に注釈を付けることを試みることと、
前記コンピューティング・デバイスを使用して、前記新しいレーンが一方向であり、衝突領域をブロックするのを回避するために前記衝突領域から十分に離れて終わるかどうかを判定することと、
前記新しいレーンが一方向であり、衝突領域をブロックするのを回避するために前記衝突領域から十分に離れて終わると判定した後に、前記新しいレーンを用いて前記道路地図に注釈を付けることと
を含む、請求項１に記載の方法。
【請求項３】
前記新しいレーンを用いて前記道路地図に注釈を付けることを試みることは、
前記コンピューティング・デバイスを使用して、前記新しいレーンについて前記道路地図上の位置を判定することと、
前記コンピューティング・デバイスを使用して、前記新しいレーンを用いて前記道路地図上の前記位置に注釈を付けることを試みることと
を含む、請求項２に記載の方法。
【請求項４】
前記複数のレーンを用いて前記道路地図に注釈を付けることは、
１つまたは複数のレーンから、第１の対にされたレーンおよび第２の対にされたレーンを選択することと、
前記第１の対にされたレーン上のロボットが前記第２の対にされたレーン上のロボットと衝突するかどうかを判定することと、
前記第１の対にされたレーン上のロボットが前記第２の対にされたレーン上のロボットと衝突すると判定した後に、前記第１の対にされたレーンおよび／または前記第２の対にされたレーンがレーンではないと判定することと
を含む、請求項１に記載の方法。
【請求項５】
前記第１の優先順位および前記第２の優先順位は、両方とも、単調増加関数に基づく、請求項１に記載の方法。
【請求項６】
前記単調増加関数は、そのルート上を移動する間にロボットによって費やされる時間の長さと、ロボットがルート上で開始して以降にそのルート上で開始した複数のロボットを示すルート−スタート値とのうちの１つまたは複数を判定する、請求項５に記載の方法。
【請求項７】
前記第１のロボットが前記第１のルートを完了した後に前記第１の優先順位をリセットすることをさらに含む、請求項１に記載の方法。
【請求項８】
前記第１のルートは、前記第１のロボットを出発位置から目的地位置に導く、レーンとその対応する待機時間とのシーケンスを含む、請求項１に記載の方法。
【請求項９】
前記第１のロボットをブロックする、前記第１のルート上の障害物の存在を判定することと、
前記第１のロボットをブロックする、前記第１のルート上の前記障害物の前記存在を判定した後に、
前記障害物の前記存在を示す警告メッセージを生成することと、
前記障害物を回避する、前記第１のロボットの新しいルートを判定することと
をさらに含む、請求項１に記載の方法。
【請求項１０】
第３のロボットの第３のルートは、前記第１のロボットのために予約された前記ルートのオーバーラップする部分にオーバーラップし、前記方法は、
前記第３のロボットの第３の優先順位が前記第１の優先順位未満であるかどうかを判定することと、
前記第３の優先順位が前記第１の優先順位未満であると判定した後に、前記第３のロボットが、前記第１のロボットが前記オーバーラップする部分に達する前に前記オーバーラップする部分をトラバースする位置にいるかどうかを判定することと、
前記第３のロボットが、前記第１のロボットが前記オーバーラップする部分に達する前に前記オーバーラップする部分をトラバースする前記位置にいると判定した後に、前記第３のロボットに、前記第１のロボットが前記オーバーラップする部分に達する前に前記オーバーラップする部分をトラバースするように指示することと
をさらに含む、請求項１に記載の方法。
【請求項１１】
前記第１の衝突領域は、前記第１のロボットによる排他的使用のために予約され、前記第２のロボットが前記第１のレーン上の前記第１のロボットをブロックするのを防ぐために前記第２のルートを変更することは、
前記第１のロボットによる排他的使用のための前記第１の衝突領域の第１の予約を解放することと、
前記第１の衝突領域の前記第１の予約を解放した後に、前記第２のロボットによる排他的使用のために前記第１の衝突領域の第２の予約を入手することと、
前記第２の予約を入手した後に、前記第２のロボットに、第１のエッジを去り、前記第１の衝突領域に入るように指示することと、
前記第２のロボットが前記第１の衝突領域をトラバースした後に、
前記第２の予約を解放することと、
前記第１のロボットによる排他的使用のために前記第１の衝突領域の第３の予約を入手することと
を含む、請求項１に記載の方法。
【請求項１２】
前記第２のロボットが前記第１の衝突領域をトラバースした後に、前記第２のロボットに、前記第２のルートを介して目的地位置に進み続けるように指示すること
をさらに含む、請求項１１に記載の方法。
【請求項１３】
前記道路地図は、レーンのサイクルを用いて注釈を付けられ、前記第１のレーン上の前記第１のロボットをブロックするのを防ぐために前記第２のルートを変更することは、レーンの前記サイクルを通って移動するように前記第２のルートを変更することを含む、請求項１に記載の方法。
【請求項１４】
前記第１のレーンをブロックするのを防ぐために前記第２のロボットの前記第２のルートを変更することは、前記第２のロボットに、１つまたは複数のレーンのうちの特定のレーン上で待つように指示することを含む、請求項１に記載の方法。
【請求項１５】
前記環境を通る前記第１のルートを判定することは、前記第１のロボットによる排他的使用のために前記第１のルートに沿った第２の衝突領域を予約することを含み、前記第２の衝突領域は、２つ以上のレーンの間にある、請求項１に記載の方法。
【請求項１６】
前記第２の衝突領域は、２つのレーンの間の交差点を含む、請求項１５に記載の方法。
【請求項１７】
前記道路地図の注釈を付けられていない部分は、１つまたは複数のレーンによって注釈を付けられておらず、前記第２の衝突領域は、前記道路地図の前記注釈を付けられていない部分を含む、請求項１５に記載の方法。
【請求項１８】
コンピューティング・デバイスであって、
１つまたは複数のプロセッサと、
少なくともその上に記憶されたコンピュータ実行可能命令を含むデータ・ストレージと、を備え、
前記コンピュータ実行可能命令は、前記１つまたは複数のプロセッサによって実行される時に、前記コンピューティング・デバイスに、
第１のロボットおよび第２のロボットを含む既存環境の道路地図を受け取ることと、
複数の衝突領域を接続する複数のレーンを用いて前記道路地図に注釈を付けることであって、各レーンは、一方向であり、衝突領域をブロックするのを回避するために当該衝突領域から十分に離れて終わる、注釈を付けることと、
前記第１のロボットによる使用のための前記道路地図に沿った前記環境を通る第１のルートと前記第２のロボットによる使用のための前記道路地図に沿った前記環境を通る第２のルートとを判定することであって、前記第１のルートと前記第２のルートとの両方が第１のレーンを含み、前記第１のレーンは第１の衝突領域に接続する、判定することと、
前記第１のロボットに第１の優先順位を、前記第２のロボットに第２の優先順位を割り当てることであって、前記第１の優先順位は前記第２の優先順位より高い、割り当てることと、
前記第２のロボットが前記第２のルートに追従することが、前記第１のロボットが前記第１の衝突領域に達する前に前記第２のロボットが前記第１のレーン上の前記第１のロボットをブロックさせると判定することと、
前記第１の優先順位が前記第２の優先順位より高いことに基づいて、前記第２のロボットが前記第１のレーン上の前記第１のロボットをブロックするのを防ぐために、前記第２のルートを変更することと
を行わせる、コンピューティング・デバイス。
【請求項１９】
前記第１の衝突領域は、前記第１のロボットによる排他的使用のために予約され、前記第２のロボットが前記第１のレーン上の前記第１のロボットをブロックするのを防ぐために前記第２のルートを変更することは、
前記第１のロボットによる排他的使用のための前記第１の衝突領域の第１の予約を解放することと、
前記第１の衝突領域の前記第１の予約を解放した後に、前記第２のロボットによる排他的使用のために前記第１の衝突領域の第２の予約を入手することと、
前記第２の予約を入手した後に、前記第２のロボットに、第１のエッジを去り、前記第１の衝突領域に入るように指示することと、
前記第２のロボットが前記第１の衝突領域をトラバースした後に、
前記第２の予約を解放することと、
前記第１のロボットによる排他的使用のために前記第１の衝突領域の第３の予約を入手することと
を含む、請求項１８に記載のコンピューティング・デバイス。
【請求項２０】
その上に命令を記憶された非一時的コンピュータ可読媒体であって、
前記命令は、コンピューティング・デバイスの１つまたは複数のプロセッサによって実行される時に、前記コンピューティング・デバイスに、
第１のロボットおよび第２のロボットを含む既存環境の道路地図を受け取ることと、
複数の衝突領域を接続する複数のレーンを用いて前記道路地図に注釈を付けることであって、各レーンは、一方向であり、衝突領域をブロックするのを回避するために当該衝突領域から十分に離れて終わる、注釈を付けることと、
前記第１のロボットによる使用のための前記道路地図に沿った前記環境を通る第１のルートと前記第２のロボットによる使用のための前記道路地図に沿った前記環境を通る第２のルートとを判定することであって、前記第１のルートと前記第２のルートとの両方が第１のレーンを含み、前記第１のレーンは第１の衝突領域に接続する、判定することと、
前記第１のロボットに第１の優先順位を、前記第２のロボットに第２の優先順位を割り当てることであって、前記第１の優先順位は前記第２の優先順位より高い、割り当てることと、
前記第２のロボットが前記第２のルートに追従することが、前記第１のロボットが前記第１の衝突領域に達する前に前記第２のロボットが前記第１のレーン上の前記第１のロボットをブロックさせると判定することと、
前記第１の優先順位が前記第２の優先順位より高いことに基づいて、前記第２のロボットが前記第１のレーン上の前記第１のロボットをブロックするのを防ぐために、前記第２のルートを変更することと
を行わせる、非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
［0001］  本願は、その内容全体が参照によってあらゆる目的のために本明細書に組み込まれている、２０１７年４月１２日に出願した米国特許出願第１５／４８６２１９号、名称「Ｒｏａｄｍａｐ  Ａｎｎｏｔａｔｉｏｎ  ｆｏｒ  Ｄｅａｄｌｏｃｋ−Ｆｒｅｅ  Ｍｕｌｔｉ−Ａｇｅｎｔ  Ｎａｖｉｇａｔｉｏｎ」の優先権を主張するものである。
【背景技術】
【０００２】
［0002］  １つまたは複数のロボットおよび／または人間のアクタなどの他のアクタは、課題を実行し、かつ／または他の形で一緒に空間を利用するために、１つまたは複数の建物の内部および／または１つまたは複数の屋外領域などの１つまたは複数の空間全体を移動することができる。建物の一例が、倉庫であり、この倉庫は、製造業者、卸売業者、および運送業を含む様々な異なるタイプの商業的実体によって商品の貯蔵に使用され得る。例の貯蔵される商品は、原材料、構成要素の一部、梱包材、および仕上がった製品を含むことができる。いくつかの場合に、倉庫は、商品が配達トラックまたは他のタイプの車両に積み込まれ、降ろされることを可能にするために、積み降ろしプラットフォームを備える場合がある。倉庫は、パレットすなわち箱または他の物体の積み重ねを含む平らな輸送構造の貯蔵を可能にするために、パレット・ラックの列を使用する場合もある。さらに、倉庫は、クレーンおよびフォークリフトなど、商品または商品のパレットを持ち上げ、移動する機械または車両を使用する場合がある。人間のオペレータが、機械、車両、および他の機器を操作するために倉庫内で雇用される場合がある。いくつかの場合に、機械または車両のうちの１つまたは複数が、コンピュータ制御システムによって案内されるロボットである場合がある。
【０００３】
［0003］  移動ロボットは、様々な課題を達成するために複数の異なる環境内で使用され得る。たとえば、移動ロボットは、倉庫、病院、および／またはデータ・センタなどの屋内環境内で、部品または完成した製品などの品目を配送することができる。移動ロボットが展開される時に、移動ロボットは、配送位置および／または他の位置との間の１つまたは複数の可能な経路を使用することができる。これらの経路は、１つまたは複数のルート・プラニング・アルゴリズムを使用して決定され得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
［0004］  一態様では、方法が提供される。コンピューティング・デバイスは、第１のロボットおよび第２のロボットを含む既存環境の道路地図を受け取る。コンピューティング・デバイスは、複数の衝突領域を接続する複数のレーンを用いて道路地図に注釈を付け、各レーンは、一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わる。コンピューティング・デバイスは、第１のロボットによる使用のための道路地図に沿った環境を通る第１のルートと第２のロボットによる使用のための道路地図に沿った環境を通る第２のルートとを判定し、第１のルートと第２のルートとの両方が、第１のレーンを含み、第１のレーンは、第１の衝突領域に接続する。第１の優先順位が第１のロボットに割り当てられ、第２の優先順位が第２のロボットに割り当てられ、第１の優先順位は、第２の優先順位より高い。第２のロボットが第２のルートに追従することが、第２のロボットに、第１のロボットが第１の衝突領域に達する前に第１のレーン上の第１のロボットをブロックさせると判定される。第１の優先順位が第２の優先順位より高いことに基づいて、第２のロボットが第１のレーン上の第１のロボットをブロックするのを防ぐために、第２のルートが変更される。
【０００５】
［0005］  別の態様では、コンピューティング・デバイスが提供される。コンピューティング・デバイスは、１つまたは複数のプロセッサと、少なくともその上に記憶されたコンピュータ実行可能命令を含むデータ・ストレージとを含む。コンピュータ実行可能命令は、１つまたは複数のプロセッサによって実行される時に、コンピューティング・デバイスに、第１のロボットおよび第２のロボットを含む既存環境の道路地図を受け取ることと、複数の衝突領域を接続する複数のレーンを用いて道路地図に注釈を付けることであって、各レーンは、一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わる、注釈を付けることと、第１のロボットによる使用のための道路地図に沿った環境を通る第１のルートと第２のロボットによる使用のための道路地図に沿った環境を通る第２のルートとを判定することであって、第１のルートと第２のルートとの両方が、第１のレーンを含み、第１のレーンは、第１の衝突領域に接続する、判定することと、第１のロボットに第１の優先順位を、第２のロボットに第２の優先順位を割り当てることであって、第１の優先順位は、第２の優先順位より高い、割り当てることと、第２のロボットが第２のルートに追従することが、第２のロボットに、第１のロボットが第１の衝突領域に達する前に第１のレーン上の第１のロボットをブロックさせると判定することと、第１の優先順位が第２の優先順位より高いことに基づいて、第２のロボットが第１のレーン上の第１のロボットをブロックするのを防ぐために、第２のルートを変更することとを行わせる。
【０００６】
［0006］  別の態様では、システムが提供される。このシステムは、コンピューティング・デバイスと、第１のロボットおよび第２のロボットを含む複数のロボットとを含む。コンピューティング・デバイスは、１つまたは複数のプロセッサと、少なくともその上に記憶されたコンピュータ実行可能命令を含むデータ・ストレージとを含む。コンピュータ実行可能命令は、１つまたは複数のプロセッサによって実行される時に、コンピューティング・デバイスに、第１のロボットおよび第２のロボットを含む既存環境の道路地図を受け取ることと、複数の衝突領域を接続する複数のレーンを用いて道路地図に注釈を付けることであって、各レーンは、一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わる、注釈を付けることと、第１のロボットによる使用のための道路地図に沿った環境を通る第１のルートと第２のロボットによる使用のための道路地図に沿った環境を通る第２のルートとを判定することであって、第１のルートと第２のルートとの両方が、第１のレーンを含み、第１のレーンは、第１の衝突領域に接続する、判定することと、第１のロボットに第１の優先順位を、第２のロボットに第２の優先順位を割り当てることであって、第１の優先順位は、第２の優先順位より高い、割り当てることと、第２のロボットが第２のルートに追従することが、第２のロボットに、第１のロボットが第１の衝突領域に達する前に第１のレーン上の第１のロボットをブロックさせると判定することと、第１の優先順位が第２の優先順位より高いことに基づいて、第２のロボットが第１のレーン上の第１のロボットをブロックするのを防ぐために、第２のルートを変更することとを行わせる。
【０００７】
［0007］  前述の要約は、例示的であるにすぎず、いかなる形でも限定的であることは意図されていない。上で説明された例示的な態様、実施形態、および特徴に加えて、さらなる態様、実施形態、および特徴が、図、以下の詳細な説明、および添付図面を参照することによって明白になる。
【図面の簡単な説明】
【０００８】
［0008］
【図１】例の実施形態による、二方向エッジの交差点にある４つのロボットを含むシナリオを示す図である。    ［0009］
【図２】例の実施形態による、一方向レーンの交差点にある４つのロボットを含むシナリオを示す図である。    ［0010］
【図３】例の実施形態による、レーンのサイクルにある２つのロボットを含むシナリオを示す図である。    ［0011］
【図４Ａ】例の実施形態による、交差点で旋回するロボットを含むシナリオを示す図である。    ［0011］
【図４Ｂ】例の実施形態による、交差点で旋回するロボットを含むシナリオを示す図である。    ［0011］
【図４Ｃ】例の実施形態による、交差点で旋回するロボットを含むシナリオを示す図である。    ［0011］
【図４Ｄ】例の実施形態による、交差点で旋回するロボットを含むシナリオを示す図である。    ［0011］
【図４Ｅ】例の実施形態による、交差点で旋回するロボットを含むシナリオを示す図である。    ［0012］
【図５Ａ】例の実施形態による、複数のレーンを有する環境内でナビゲートするロボットを含むシナリオを示す図である。    ［0012］
【図５Ｂ】例の実施形態による、複数のレーンを有する環境内でナビゲートするロボットを含むシナリオを示す図である。    ［0012］
【図５Ｃ】例の実施形態による、複数のレーンを有する環境内でナビゲートするロボットを含むシナリオを示す図である。    ［0012］
【図５Ｄ】例の実施形態による、複数のレーンを有する環境内でナビゲートするロボットを含むシナリオを示す図である。    ［0012］
【図５Ｅ】例の実施形態による、複数のレーンを有する環境内でナビゲートするロボットを含むシナリオを示す図である。    ［0012］
【図５Ｆ】例の実施形態による、複数のレーンを有する環境内でナビゲートするロボットを含むシナリオを示す図である。
【図６Ａ】［0013］例の実施形態による、交差点を通過する２つのロボットを含むシナリオを示す図である。
【図６Ｂ】［0013］例の実施形態による、交差点を通過する２つのロボットを含むシナリオを示す図である。
【図６Ｃ】［0013］例の実施形態による、交差点を通過する２つのロボットを含むシナリオを示す図である。
【図６Ｄ】［0013］例の実施形態による、交差点を通過する２つのロボットを含むシナリオを示す図である。
【図６Ｅ】［0013］例の実施形態による、交差点を通過する２つのロボットを含むシナリオを示す図である。
【図６Ｆ】［0013］例の実施形態による、交差点を通過する２つのロボットを含むシナリオを示す図である。
【図７Ａ】［0014］例の実施形態による、コンピューティング・デバイスのユーザ・インターフェースが、レーンを用いて道路地図に注釈を付けるのに使用されるシナリオを示す図である。
【図７Ｂ】［0014］例の実施形態による、コンピューティング・デバイスのユーザ・インターフェースが、レーンを用いて道路地図に注釈を付けるのに使用されるシナリオを示す図である。
【図７Ｃ】［0014］例の実施形態による、コンピューティング・デバイスのユーザ・インターフェースが、レーンを用いて道路地図に注釈を付けるのに使用されるシナリオを示す図である。
【図７Ｄ】［0014］例の実施形態による、コンピューティング・デバイスのユーザ・インターフェースが、レーンを用いて道路地図に注釈を付けるのに使用されるシナリオを示す図である。
【図８】［0015］例の実施形態による、位置のブロックおよびブロック解除の方法を示す流れ図である。
【図９】［0016］例の実施形態による、エージェントの優先順位サイクルを示す図である。
【図１０】［0017］例の実施形態による、システムを示すブロック図である。
【図１１】［0018］例の実施形態による、１つまたは複数の倉庫を運営するシステムを示す図である。
【図１２】［0019］例の実施形態による、システムを示すブロック図である。
【図１３】［0020］例の実施形態による、１つまたは複数のロボット・デバイスのロボット・デバイス・アーキテクチャを示す図である。
【図１４Ａ】［0021］例の実施形態による、例のコンピューティング・デバイスを示す機能ブロック図である。
【図１４Ｂ】［0022］例の実施形態による、クラウドベースのサーバ・システムとして配置されたコンピューティング・クラスタのネットワークを示す図である。
【図１５】［0023］例の実施形態による、方法を示す流れ図である。
【発明を実施するための形態】
【０００９】
概要
［0024］  環境内のロボットのルートのプラニングなど、マルチエージェント・プラニングを実行する時に、ロボットは、それらがデッドロック状態になる位置またはロボットが進行できなくなる状態に達する可能性がある。図１は、交差点１５０にある４つのロボット１１０、１２０、１３０、および１４０のデッドロックを含むシナリオ１００を示す。エッジ１１２、１２２、１３２、および１４２は、交差点１５０で一緒になる。シナリオ１００では、エッジ１１２、１２２、１３２、および１４２のそれぞれが、方向付けされず、小道の全幅を表し、エッジに沿った二方向移動を許す。
【００１０】
［0025］  一例では、ロボット１１０、１２０、１３０、および１４０のそれぞれは、交差点１５０の近くのそれぞれの二方向エッジ１１２、１２２、１３２、および１４２上にあり、それぞれの左旋回１１４、１２４、１３４、および１４４を行うように指示されている。たとえば、ロボット１１０は、エッジ１１２上にあり、エッジ１４２への旋回１１４を行うように指示されている。しかし、エッジ１４２は、ロボット１４０によって占有され、このロボット１４０は、エッジ１３２への左旋回１４４を行うように指示されている。しかし、エッジ１３２は、ロボット１３０によって占有され、このロボット１３０は、エッジ１２２への左旋回を行うように指示されている。しかし、エッジ１２２は、ロボット１２０によって占有され、このロボット１２０は、エッジ１１２への左旋回を行うように指示されている。しかし、エッジ１１２は、ロボット１１０によって占有され、このロボット１１０は、エッジ１４２への左旋回を行うように指示されている（既に言及したように）。したがって、ロボット１１０、１２０、１３０、および１４０は、進行することができず、したがって、デッドロック状態１６０に達する。
【００１１】
［0026］  関連するシナリオでは、ロボット１１０、１２０、１３０、および１４０の４つすべてが、同時に交差点１５０に進入することを試みる可能性がある。ロボット１１０、１２０、１３０、および１４０のいくつかまたはすべてが、交差点１５０内にいる間に旋回を試みるか、交差点１５０を通ってまっすぐ移動することを試みる場合には、ロボット１１０、１２０、１３０、および１４０のうちの２つ以上が衝突する可能性がある。
【００１２】
［0027］  デッドロック状態１６０などのデッドロックを回避するマルチエージェント・プランナを、本明細書で説明する。マルチエージェント・プランナは、まず、Ｎ≧１であるＮ個のエージェントを含む既存環境の道路地図を受け取ることができる（Ｎ＝１であるケースが自明な例である可能性があることに留意されたい）。非自明な例に関して、環境は、少なくとも２つのロボットＲ１およびＲ２を有することができる。道路地図は、一方向「レーン」Ｌ１、Ｌ２、…Ｌｎによって接続された交差点を有することができ、第１のレーンＬ１が、レーンのサイクル（すなわち、グラフ理論の意味で接続されたレーンのグループすなわち、レーンのすべての対ＬａおよびＬｂについて、ＬａからＬｂへの経路がある）の一部である。レーンを、下でより詳細に説明する。マルチエージェント・プランナは、ロボットＲ１に優先順位Ｐ１を、ロボットＲ２に優先順位Ｐ２を割り当てることができ、優先順位Ｐ１は、優先順位Ｐ２より高い優先順位を表し、したがって、この例では、ロボットＲ１は、ロボットＲ２より高優先順位のロボットである。優先順位Ｐ１が優先順位Ｐ２より高いので、マルチエージェント・プランナは、環境を通るルートＲＴ１をロボットＲ１の排他的使用のために予約することができる。ロボットＲ１の排他的使用のためのルートＲＴ１の予約の一部として、ロボットＲ１は、レーンと、ＲＴ１上のレーンの間の、交差点などの衝突領域との排他的使用を有することができる。したがって、ロボットＲ１は、ＲＴ１の衝突領域の排他的使用がロボットＲ１のために予約されているので、その衝突領域内で別のロボットと衝突しない。
【００１３】
［0028］  たとえば、ルートＲＴ１が、レーンＬ１を含み、ロボットＲ２が、レーンＬ１上のより高優先順位のロボットＲ１をブロックし、その結果、ロボットＲ１が、ルートＲＴ１に沿ってさらに移動することができなくなると仮定する。マルチエージェント・プランナは、レーンＬ１を含むレーンのサイクルに沿って移動するようにロボットＲ２に指示することができ、したがって、ロボットＲ２は、最終的にレーンＬ１を去り、その後、ロボットＲ１は、ルートＲＴ１に沿ってレーンＬ１に沿って前進することができる。ロボットＲ１がレーンＬ１をトラバースした後に、マルチエージェント・プランナは、必要に応じてロボットＲ２がレーンＬ１に戻ることを可能にするために、ロボットＲ１のためのレーンＬ１の予約を解放することができる。
【００１４】
［0029］  マルチエージェント・プランナは、１つまたは複数のコンピューティング・デバイスによって実行可能なソフトウェア・マルチエージェント・プランナを使用して実施され得る。マルチエージェント・プランナ・ソフトウェアは、Ｎ≧１であるＮ個のエージェントを含む環境を表す道路地図上で動作している間のデッドロックを回避するマルチエージェント・プランナ・アルゴリズムを含むことができる。これらのエージェントの例は、車両およびロボット（移動ロボット・デバイスなど）を含むが、これに限定はされない。道路地図は、Ｎ個のエージェントのルートを決定するために１つまたは複数のレーンによって注釈を付けられた連結グラフを含むことができる。レーンは、レーン上のエージェントが任意の他のレーン上のエージェントと衝突しないような、道路地図の期待される移動経路である。レーンとして分類され得ない道路地図の部分の例は、曲がり角エッジ、エージェントのルートの出発位置および／または目的地位置を含むエッジ、および交差点横断を含む。いくつかの例で、レーンは、１つのエージェントのみに十分な幅であると仮定される、すなわち、１つのレーン内での追い越しは許容されない。特にこれらの例では、追い越しは、すべてが同一方向に進む、複数の隣接する別個のレーンの使用によって達成され得る。しかし、点Ａから点Ｂに向けられた１つのレーンＬ＿ＯＮＬＹだけがあり、ロボットＲ１がレーンＬ＿ＯＮＬＹ上でロボットＲ２の背後にある場合には、Ｒ１がＲ２を追い越せる唯一の形は、Ｒ１がＬ＿ＯＮＬＹを去ることによる。それを行う際に、Ｒ１は、おそらくはその方向に反してレーンＬ＿ＡＮＯＴＨＥＲをトラバースすることを含めて、非レーン空間をトラバースすることができる（この場合に、Ｒ１はＬ＿ＡＮＯＴＨＥＲ上にあるとは考えられない）。
【００１５】
［0030］  任意の所与の時に、エージェントは、レーン上である、またはレーン上ではないが、レーンにたどり着くのに十分な面積をブロックしている、のいずれかである可能性がある。言い換えると、エージェントは、レーン上またはレーンへの途中のいずれかである。エージェントが、何らかの理由でレーンから外れる時に、マルチエージェント・プランナは、エージェントがレーンから離れて課題を実行するため、およびエージェントがレーン（同一レーンまたは異なるレーン）に戻ることを可能にするために、課題実行エリアを計算し、予約することができる。たとえば、「ピック・アンド・プレース」動作すなわちロボットが積荷を得（ピック・アップし）、目的地位置にその積荷を置く（プレース）動作の場合に、課題実行エリアは、ピックの前のエッジ、ピック動作を実行するのに必要なエリア、ピックの後のエッジ、およびピックの後のエッジからレーン・エッジまでの（レーン・エッジを含む）少なくとも１つの経路を含むことができる。交差点横断の場合に、エージェントがレーンから外れるや否や、ブロックされる課題実行エリアは、その交差点を形成するすべてのエッジ／レーンを含むことができる。課題実行エリアは、エージェントが反対側のレーンに達するまで、ブロックされたままになることができる。いくつかの場合に、課題実行エリアは、エージェントがその課題実行エリアを通って進行する時に、縮小することができる。少なくともいくつかの場合に、曲がり角エッジ、ピックの前のエッジ、ピックの後のエッジ、および交差点横断が、レーンではないことに留意されたい。
【００１６】
［0031］  道路地図グラフが、レーン領域および非レーン領域を用いて注釈を付けられ、レーンが、交差点から十分遠くで終わり、レーン・グラフが連結グラフであり、エージェント予約がレーン・エッジへの経路を含む（前の数段落で説明したように）場合に、そのような形で制限されたマルチエージェント・プラニング問題は、計算的に御しやすいものである可能性がある。さらに、レーンへの制限は、多くの実用的なプラニング問題にとって妥当である可能性がある。マルチエージェント・プラニング問題の解は、１つまたは複数の非レーン領域をトラバースする可能性がある、出発位置から目的地位置までの１つまたは複数のエッジおよび／またはレーンの集合として指定され得るルートの発見を含むことができる。
【００１７】
［0032］  マルチエージェント・プランナは、エージェントに優先順位を割り当てることができる。優先順位は、デッドロックを解決するためにエージェントを順序付けるのに使用され得、たとえば、エージェント優先順位は、衝突エリアを横切るエージェントの順序を指定するのに使用され得る。より高優先順位のエージェントは、経路を予約し、より低優先順位のエージェントの前に衝突エリアを横切ることができ、より低優先順位のエージェントは、より高優先順位のエージェントのために経路を空け、かつ／またはより高優先順位のエージェントが通過するのを待つように指示され得る。いくつかの例では、エージェント優先順位は、単調増加する値をとることができ、たとえば、エージェントの優先順位は、同一のままになるか増加することができるが、エージェントがその課題および／またはルートを完了するまでは減少しない。単調増加する値の例は、エージェントがそのルートに沿って移動した時間の長さであり、たとえば、最も長い間ルート上にあったエージェントが、通行権を有する。ロボットＲの単調増加する値の別の例は、ロボットＲがそのルート上でスタートして以降にそれぞれのルート上でスタートした複数のロボットのルート−スタート値であり、たとえば、ロボットＲのルート−スタート値は、当初は０になるはずであり、他のロボットがそのルート上でスタートする時に、ルート−スタート値は経時的に増加し、減少はせず、したがって、ルート−スタート値は、単調に増加している。優先順位としての使用に適切である、他の単調増加する値または単調増加する値を生成する関数も可能である。
【００１８】
［0033］  エージェントが、目的地位置で動作を完了し、もう一度動き始める時に、マルチエージェント・プランナは、目的地位置の周囲のエリアを、エージェントが目的地位置にいる間のブロックされた状態からブロック解除された状態に変更し、したがって、より多数の、おそらくはより短い経路を他のエージェントのために使用可能にすることができる。したがって、エージェントが目的地位置にどれほど長く留まるのかの推定値は、目的地位置の周囲のエリアがどれほど長くブロックされたままになるのかを制限することができる。その後、マルチエージェント・プランナは、エージェントが目的地位置にどれほど長く留まるのかの１つまたは複数の推定値を判定することができる。１つの極端として、第１の推定値は、エージェントが目的地位置に永久に留まると仮定することができる。別の極端として、第２の推定値は、エージェントが目的地位置に最小限の時間、たとえば１時間単位以下だけ留まると仮定することができる。ヒストリカル値が、目的地でのエージェントの推定時間を判定するのに使用され得、たとえば、複数の以前のエージェントが、動作Ｏ１を完了するのにＸ時間単位の平均値を要し、エージェントＡ１が、動作Ｏ１の完了を試みつつある場合に、Ａ１は、動作Ｏ１を完了するのにＸ時間単位を要すると推定され得る。さらに別の例では、マルチエージェント・プランナは、エージェントが目的地位置にどれほど長く留まるのかの推定値を、たとえば、コマンド・ラインへの引数として、グラフィカル・ユーザ・インターフェース（ＧＵＩ）を介して、ウェブ・ブラウザによってなど、ユーザ・インターフェースを介して提供することができる。エージェントのために位置をブロックする例の方法を、下で図８の文脈で説明する。エージェント位置の他の推定値も可能である。
【００１９】
［0034］  エージェントは、そのルートを完了した時に、その優先順位をたとえば０または他の最低優先順位値にリセットさせることができる。いくつかの例では、エージェントは、目的地位置に達した時に、ルートを完了したと考えられ得る。他の例では、エージェントは、目的地位置でピック・アンド・プレース動作などの動作の一部またはすべてを完了する時に、ルートを完了したと考えられ得る。その後、エージェントがその現在の動作を終了した後に、マルチエージェント・プランナは、そのエージェントの優先順位をリセットすることができる。エージェントが、レーンに戻るのに十分なエリアを予約するので、エージェントは、他のエージェントが通り過ぎるのを可能にするように操作するのに十分な余地を既に有する。優先順位のリセットの際に、動作を完了したばかりのエージェントＲ１は、低優先順位のエージェントになる。その後、Ｒ１は、道を空け、かつ／または１つもしくは複数のより高優先順位のエージェントＲ２…Ｒｎの道から外れて待つようにマルチエージェント・プランナによって指示され得る。エージェントＲ１の優先順位リセットの前に、エージェントＲ２…Ｒｎは、エージェントＲ１のために経路を空けるように指示された。エージェントＲ１の優先順位リセットの後に、エージェントＲ２…Ｒｎのうちの少なくとも１つは、おそらくは１つまたは複数のエージェントＲ２…Ｒｎのルートをブロックすることを回避するためにエージェントＲ１のルートを変更することによって、その目的地位置に達することができる。エージェントＲ１がルートに沿って前進する時に、Ｒ１の優先順位は高まり、その結果、Ｒ１は、相対的に高優先順位のエージェントになり、１つまたは複数のより低優先順位のエージェントＲ３…Ｒｍは、道を空け、かつ／またはＲ１のルートから外れて待つように指示され得る。Ｒ１がその目的地に達した後に、Ｒ１の優先順位は、リセットされ得る。目的地に達するまでルートに沿ってその優先順位が増加するエージェントの例の優先順位サイクルが、下で図９の文脈で議論される。
【００２０】
［0035］  衝突領域は、交差点または道路地図のうちでレーンを用いて注釈を付けられていない部分など、レーンの間の位置である。２つのレーンＡおよびＢが、衝突領域によって分離される場合に、衝突領域を通る非レーン経路（またはエッジ）が、レーンＡおよびＢを接続することができ、ここで、レーンとして分類されていないすべての経路は、非レーン経路と呼ばれ得る。例として、二方向経路は、非レーン経路であり、あるいは、エージェントを別のエージェントとの衝突に導く可能性がある経路は、非レーン経路である。いくつかの例では、道路地図は、レーンおよび衝突領域を有することができる。これらの例のいくつかでは、少なくとも２つのレーン、たとえばレーンＡおよびレーンＢを有する道路地図Ｒに関して、条件Ｃが存在することができる。たとえば、レーンＡおよびレーンＢがレーンＡとＢとの間の衝突領域ＣＲ１をトラバースする非レーン経路ＮＬＰ１によって接続されるものとする。すると、ＮＬＰ１によってトラバースされる衝突領域ＣＲ１内のレーンＬ１ごとに、経路ＮＬＰ１の始めまたは衝突領域の外のいずれかへのレーンのみの経路がある時に、条件Ｃが道路地図Ｒ内に存在することができる。ＣＲ１などの衝突領域の例が、下で、図２の下側部分内の衝突領域２５０の文脈で議論される。
【００２１】
［0036］  条件Ｃを満足する道路地図に関して、マルチエージェント・ルート・プラニングでデッドロックを回避する御しやすい解決策を入手することができる。ＮＰ困難マルチエージェント・ルート・プラニング問題を、レーンベースの道路地図を使用するプラニング問題に制限することによって、結果の制限された問題を、計算的に御しやすいものにすることができる。さらに、レーンへの制限は、多くの実用的プラニング問題にとって妥当である可能性がある。マルチエージェント・プラニング問題の解は、１つまたは複数の衝突領域をトラバースする可能性がある、出発位置から目的地位置までの１つまたは複数のエッジおよび／またはレーンの集合として指定され得るルートの発見を含むことができる。
【００２２】
［0037］  マルチエージェント・プランナは、マルチエージェント・プラニングに関する既存環境の道路地図Ｒを受け取り、使用することができ、ここで、Ｒは、複数Ｎ（Ｎ＞０）のエージェントによって使用されるＭ個のレーン（Ｍ＞０）の有向連結グラフとすることができ、Ｎは、出発構成で、すべてのレーン上で少なくとももう１つのエージェントを入れるのに十分な余地があるようにするために、十分に小さくすることができ、あるいは、いくつかの関連する場合に、Ｎは、道路地図内のレーンのすべてのサイクルに少なくとももう１つのエージェントを入れるのに十分な余地があるように選択される。ＭおよびＮは、エージェントがピック・アンド・プレース動作などの動作を実行するのに十分に大きい道路地図内の少なくとも１つの領域があるようにするように選択され得る。
【００２３】
［0038］  道路地図Ｒを使用して、マルチエージェント・プランナは、エージェントＡ１を、レーン上のその現在位置ＣＬから同一レーンまたは別のレーン上の別の位置ＡＬまでルーティングすることができる。道路地図Ｒが連結グラフなので、ＣＬとＡＬとの間にレーンのサイクルＣＹがある。前の段落で述べたように、ＣＹ上に少なくとも１つの空のスポットがある。エージェントを、ＣＹを回ってＣＬとＡＬとの間で移動することによって、マルチエージェント・プランナは、エージェントＡ１が位置ＡＬに達するまで、エージェントと共に空のスポットを移動することができる。レーンのサイクルを回るエージェントの移動は、下でより詳細に、たとえば、図３に示されたシナリオ３００のロボット３３０および図５Ａ〜図５Ｆに示されたシナリオ５００のロボット５３０の文脈で、議論される。Ｎ個すべてのエージェントがたまたまＣＹ上にある場合であっても、エージェントＡ１は、多項式時間でＡＬに移動され得る。この循環シフトの終りに、１サイクルあたり少なくとも１つの空のスポットが、まだある。エージェントＡ１が位置ＡＬで終わった後に、マルチエージェント・プランナは、エージェントＡの優先順位をリセットすることができ、別のエージェントＡ２が、たとえばエージェントＡ２の相対的に高い優先順位に基づいて、選択され得、エージェントＡ２は、エージェントＡ１と同様の形でルーティングされ得る。この循環シフト・アルゴリズムは、レーンベースのグラフの制限とエージェントの優先順位順序付けとの組み合わせが、一般的なマルチエージェント・プラニング問題を、デッドロックなしでマルチエージェント・プランナによって多項式時間で解かれ得る問題に縮小するのに十分であることを論証する。
【００２４】
［0039］  一般に、道路地図Ｒ１は、レーン・エッジと非レーン・エッジとの両方を有する連結グラフとすることができる。エージェントが、レーンから外れることを必要とする時には必ず、エージェントは、ハイパーエッジすなわち、衝突判定のためにまとめて扱われる、レーン上で終わるエッジのシーケンスを予約することができる。非レーン・エッジをレーンの間のハイパーエッジの一部と考えることによって、一般的なレーン対応グラフＲ１を、レーンのみのグラフとして扱うことができ、したがって、道路地図Ｒ１上の一般的なマルチエージェント・プラニング問題をも、デッドロックなしに多項式時間で解くことができる。
【００２５】
［0040］  すべてのエージェントの初期位置および要求された目的地を与えられて、マルチエージェント・プランナは、上で説明したようにすべてのエージェントに優先順位を割り当てる。次に、マルチエージェント・プランナは、Ｎ個すべてのエージェントの解を構築する。解は、エージェントごとに、対応する終了時間と共にハイパーエッジのシーケンスを指定する。解は、すべてのエージェントがデッドロックなしに多項式的に有界な長さの時間でその目的地に達するように構築される。いくつかの場合に、より低優先順位のエージェントは、より高優先順位のエージェントが通過することを可能にするために迂回するように指示され得る。その後、より低優先順位のエージェントは、その目標位置に前進するように指示される。いくつかの場合に、より高優先順位のエージェントは、より低優先順位のエージェントがより高優先順位のエージェントの道から外れるのを待つように指示される。
【００２６】
［0041］  いくつかの例で、マルチエージェント・プランナは、Ｎ個のエージェントのそれぞれについて優先順位順で計画することができる。エージェントごとに、マルチエージェント・プランナは、すべての以前の（より高優先順位の）エージェントのプランを尊重し、しかしおそらくは続く（より低優先順位の）エージェントの位置を詳細に調べながら、その出発位置または現在位置からその目的地位置までのルートを判定することができる。部分的プランからのエッジから出発するエージェントのルートの始まりが、コミットされ得る。エージェントのルートが、続くエージェントの最後の位置を調べた後に、そのルートは、試験的なものになることができる。したがって、マルチエージェント・プランナは、優先順位順で最初のエージェントＡ＿ＨＩＧＨＥＳＴ＿ＰＲＩが、他のすべてのエージェントの前にルーティングされるので、Ａ＿ＨＩＧＨＥＳＴ＿ＰＲＩがその目的地までルーティングされ得ることを保証することができる。Ａ＿ＨＩＧＨＥＳＴ＿ＰＲＩのルートは、その最後でエージェントＡ＿ＨＩＧＨＥＳＴ＿ＰＲＩの優先順位がリセットされる、３Ｄ（２Ｄ平面＋１Ｄ時間）の最終経路であると考えられ得る。
【００２７】
［0042］  マルチエージェント・プランナは、続くエージェントごとのルートを前のエージェントの３Ｄ経路の「下で」計画する。あるエージェントのルートは、待機と目的地位置での優先順位リセットとを含めて、前のエージェントの経路の下に完全におさまることができる。いくつかの場合に、あるエージェントのルートは、待避のためのルーティングすなわち、より高優先順位のエージェントの道を外れ、その後に前にルーティングされたエージェントの優先順位リセットを待ち、その後に待避を元に戻すためにサイクル・バックするためのハイパーエッジを含むことができる。極端な場合に、エージェントは、有界な回数（すなわち、より高優先順位のエージェントの個数）だけ待避する可能性がある。これらの待避が実行された後に、すべてのより高優先順位のエージェントは、そのそれぞれの優先順位をリセットさせ、相対的に高優先順位を有するエージェントを残し、これは、そのエージェントがそのルートに沿ってその目的地位置に前進することを可能にする。
【００２８】
［0043］  エージェントは、相対的に高優先順位のエージェントとして目的地位置で要求されるすべての動作を完了するために、ある時間期間の間だけ目的地位置に留まることができ、その後、そのエージェントの優先順位はリセットされ得る。たとえば、相対的に高優先順位のエージェントは、プラニングから消滅することができ、新しい最低優先順位のエージェントが、同一位置に現れることができる。いくつかの例では、新しい最低優先順位のエージェントは、当初に課題を割り当てられず、したがって、そのエージェントが課題を割り当てられるまで、ルート・プラニングの対象ではない。したがって、新しい最低優先順位のエージェントは、衝突チェックに関してのみ、すなわち、新しい最低優先順位のエージェントがより高優先順位のエージェントのルートをブロックしていないことを保証するためにのみ、プラニングされる。この場合に、新しい最低優先順位のエージェントは、より高優先順位のエージェントを待避すると仮定される。いくつかの例では、すべてのエージェントが同一速度で動作する（エージェントがお互いを追い越さないことを暗示する）と仮定され得、したがって、待避は、ブロックするエージェントを迂回する唯一の形である可能性がある。他の例では、この同一速度仮定が緩和され得、これは、エージェントの追い越しを可能にすることができる。
【００２９】
［0044］  動作中に、道路地図は、たとえば障害物、保守を必要とするエージェント、その他によってブロックされた１つまたは複数のレーンを有する可能性がある。レーン・ブロックは、道路地図の区分につながる可能性があり、たとえば、道路地図の２つの部分Ｐ１およびＰ２が１つのレーンＬ１によって接続され、レーンＬ１がブロックされる場合に、その道路地図は、部分（新しい区画）Ｐ１およびＰ２に区分される。そのようなブロック（または他の理由）が、道路地図を区分させ、エージェントＡ＿ＢＬＯＣＫの出発位置をその目的地位置から分離する場合に、マルチエージェント・プランナは、他のエージェントが考慮されない場合であっても、エージェントＡ＿ＢＬＯＣＫのルートがないと判定することができる。この場合に、マルチエージェント・プランナは、エージェントＡ＿ＢＬＯＣＫのルーティングに問題があることを示すために、例外を送出することができる。その例外に対する反応として、エージェントＡ＿ＢＬＯＣＫは、道路地図の接続された部分内に留まる新しい課題を割り当てられ得（たとえば、Ａ＿ＢＬＯＣＫが、道路地図が区分される時に部分Ｐ２内にある場合に、Ａ＿ＢＬＯＣＫは、そのルートがＰ２内にある新しい課題に割り当てられ得る）かつ／またはブロックされたレーンＬ１の近くのエリアなどの道路地図のなんらかのエリアが、ブロックされているまたは遮断されているものとして宣言され得る。そうではないと示されない限り、マルチエージェント・プランナによって使用される道路地図は、接続されていると仮定される。
【００３０】
［0045］  エージェントが、１つまたは複数のより高優先順位のエージェントの道を空けるように指示される場合に、そのエージェントは、１つのルート上の同一位置を複数回再訪問する場合がある。そのような挙動を浪費的な循環ルートから区別するために、エージェントＡ＿ＬＯＰＲＩは、より高優先順位のエージェントＡ＿ＨＩＰＲＩが将来のいつかにレーンＬ１（エッジＥ１）上で移動するように割り当てられる場合に、レーンＬ１（エッジＥ１）を再訪問することを許される。いくつかの場合に、エージェントＡ＿ＬＯＰＲＩは、より高優先順位のエージェントの個数＋１回までレーンＬ１（エッジＥ１）を訪問することを許され得、たとえば、Ａ＿ＬＯＰＲＩが、上から１０番目の優先順位のエージェントである場合に、Ａ＿ＬＯＰＲＩは、待避のために９回＋それ自体の目的のために１回、レーンＬ１（エッジＥ１）を訪問することができ、したがって、Ａ＿ＬＯＰＲＩは、合計１０回レーンＬ１（エッジＥ１）を訪問することができる。
【００３１】
［0046］  マルチエージェント・プランナは、道路地図のハイパーエッジをトラバースするエージェントにプランを提供することができる。マルチエージェント・プランナが、上で議論したように優先順位順でエージェントごとにルートを決定した後に、エージェントごとに１つの、ハイパーエッジのＮ個の時間順序付けされたシーケンスの集合が生成される。ハイパーエッジは、その完了時刻の順で考慮され得る。その後、プランは、各追加されるエッジが、他のエージェントのプランに既に含まれるいずれのエッジとも衝突しないように、最初に完了されるハイパーエッジから始めて作成され得る。
【００３２】
［0047］  一般に、マルチエージェント・プラニングは、交差し衝突するエージェントを避けてエージェントを順序付ける必要に起因してＮＰ困難問題であり、したがって、デッドロックを回避する最適解への到達は、多項式時間で可能である可能性が低い。しかし、ロボットをルーティングするマルチエージェント・プラニング・アルゴリズムは、ロボットの間の衝突および／またはデッドロックを回避することができる。さらに、上で議論したように、レーンと、エージェントがそのルートに沿って移動していた時間の長さに基づくエージェント優先順位などのエージェントの単調に増加する優先順位とを含む連結グラフを利用するそのようなマルチエージェント・プラニング・アルゴリズムは、計算的に御しやすいものである可能性がある。したがって、本明細書で説明される技法は、倉庫環境などの環境内のロボットのルーティングなどの複数の例で実行可能なレーン関連制限を有する道路地図を使用するマルチエージェント・プラニング問題に対する計算的に御しやすい解を可能にすることができる。
【００３３】
デッドロックなしのマルチエージェント・プラニングのためのレーン注釈付けされた道路地図の使用
［0048］  図２は、例の実施形態による、一方向レーン（Ｌ）２１０、２１２、２２０、２２２、２３０、２３２、２４０、および２４２の交差点２４６にある４つのロボット２１４、２２４、２３４、および２４４を含むシナリオ２００を示す。図２の上側部分は、北から南に向けられたレーン２１０上のロボット２１４、東から西に向けられたレーン２２０上のロボット２２４、南から北に向けられたレーン２３２上のロボット２３４、および西から東に向けられたレーン２４２上のロボット２４４を示す。レーン２１０は、南から北に向けられたレーン２１２と平行し、レーン２２０は、西から東に向けられたレーン２２２と平行し、レーン２３２は、北から南に向けられたレーン２３０と平行し、レーン２４２は、東から西に向けられたレーン２２０と平行する。
【００３４】
［0049］  図２の下側部分に示されているように、シナリオ２００は継続し、ロボット２２４が、交差点２４６内に進み続け、交差点２４６は、今は衝突領域（ＣＲ）２５０を含む。衝突領域は、レーン、たとえばレーンＡとレーンＢとの間の、（ｉ）レーンＡとレーンＢとの間の経路の始めへまたは（ｉｉ）衝突領域から出るのいずれかのレーンのみの経路がある領域とすることができる。この２つの条件のうちの第１の条件に関して、図２の下側部分は、レーン２３２からレーン２２２への経路が、衝突領域２５０内のレーン２３２とレーン２２２との間の経路の始めであるレーン２３２を含むことを示す。この２つの条件のうちの第２の条件に関して、図２の下側部分は、レーン２２０からレーン２４０に延びるレーンのみの経路が、衝突領域２５０を通過し、これから出ること、ならびに、レーン２４２からレーン２２２に延びるレーンのみの経路が、衝突領域２５０を通過し、これから出ることを示す。交差点２４６が、同時に複数の衝突領域を含むことができ、たとえば、交差点２４６が、衝突領域２５０ならびにレーン２１０とレーン２３０との間の平行衝突領域を含むことができることに留意されたい。すなわち、交差点は、１つまたは複数の衝突領域の例とすることができるが、衝突領域は、交差点とは異なる可能性がある。交差点とは異なる衝突領域の別の例として、衝突領域は、図７Ａ〜図７Ｄに示された例の道路地図７２０など、レーンによって注釈を付けられず、複数の交差点を含む道路地図の部分を含むことができる。衝突領域の他の例も可能である。
【００３５】
［0050］  図３は、例の実施形態による、レーンのサイクルを使用する２つのロボット３３０および３３２を含むシナリオ３００を示す図である。図３の最上部は、交差点（Ｉ）３１２および３１４を介して接続されたレーン３２０および３２２を含むレーン・サイクル３２４を有する道路地図３１０を示す。道路地図３１０は、ロボット３３０および３３２を含む既存環境の道路地図とすることができる。レーン３２０および３２４のそれぞれは、それぞれのギャップ３２６および３２８に達する前に停止し、ギャップ３２６および３２８は、それぞれのレーン３２０および３２２の端で停止したロボットがそれぞれの交差点３１２および３１４を通って移動するロボットと干渉することから可能にする。
【００３６】
［0051］  図３の上から２番目の部分は、両方ともマルチエージェント・プランナによってレーン３２０上で東から西に移動するように指示される２つのロボット３３０および３３２によって部分的に占有される道路地図３１０のレーン・サイクル３２４を示す。シナリオ３００では、マルチエージェント・プランナは、ロボットがそのルートに沿って移動していた時間の長さに基づいてロボットの優先順位を判定する。シナリオ３００のこの段階では、ロボット３３０は、図３で「優先順位＝２」によって示されるように２の現在優先順位を有し、ロボット３３２は、図３で「優先順位＝３」によって示されるように３の現在優先順位を有する。したがって、ロボット３３２は、ロボット３３０より高い優先順位を有し、これは、ロボット３３２が、そのルートに沿ってロボット３３０より長く移動したことを示す。
【００３７】
［0052］  シナリオ３００の環境内には２つのロボットだけがあるので、ロボット３３２の優先順位は、この環境内のすべてのロボットにまたがる最高優先順位である。ロボット３３２の優先順位が最高優先順位であると判定した後に、マルチエージェント・プランナは、ロボット３３２がレーン３２２上でその目的地に達することができるようにするために、ロボット３３２による使用のためにレーン３２０、交差点３１２、およびレーン３２２を含むルートを予約することができる。
【００３８】
［0053］  図３の上から２番目の部分は、ロボット３３０の目的地がレーン３２０の西端に近いが、ロボット３３２の目的地がレーン３２２の中央に近いことをも示す。すなわち、より低優先順位のロボット３３０は、その目的地に相対的に近いが、より高優先順位のロボット３３２は、その目的地から相対的に遠い。しかし、より低優先順位のロボット３３０が、その目的地（または、ロボット３３２がその目的地に達する前の、道路地図３１０のレーン・サイクル３２４上の他所）で停止する場合に、これは、レーン３２０（またはおそらくはレーン３２２）をブロックし、その結果、より高優先順位のロボット３３２は、その目的地に達することができなくなる。より高優先順位のロボット３３２がその目的地に前進することを可能にするために、マルチエージェント・プランナは、ロボット３３０がロボット３３２をブロックしないようにするために、より低優先順位のロボット３３０に、その目的地で停止する前に、レーン・サイクル３２４を介して移動するように指示する。
【００３９】
［0054］  図３の上から２番目の部分は、道路地図３１０のレーン・サイクル３２４が、ロボット３３０および３３２のそれぞれに十分な空間と、少なくとも１つの追加のロボット（図３には図示せず）に十分な空間とを含むことをも示す。さらに、レーン・サイクル３２４は、ロボットの間の最小追従距離を維持するのに十分な空間を含み、この最小追従距離は、ロボット３３０の周囲の泡３３４によって表され、泡３３４は、ロボット３３０と他のエージェント／ロボットとの間の衝突を回避するためにロボット３３０のために予約される空間の領域である。他のシナリオでは、空間の同様の泡が、ロボット３３２のために提供され得る。
【００４０】
［0055］  シナリオ３００は進み、図３の下から２番目の部分に示されているように、より低優先順位のロボット３３０が、その目的地を過ぎて進み、その結果、より高優先順位のロボット３３２が、レーン３２２上でその目的地に前進する間にレーン３２０をブロックしなくなる。ロボット３３０とロボット３３２との両方が、ルート上でより多くの時間を費やすので、マルチエージェント・プランナは、両方のロボットの優先順位をそれぞれ３および４に高める。
【００４１】
［0056］  図３の最下部は、ロボット３３２が、マルチエージェント・プランナによって指示された目的地で停止し、マルチエージェント・プランナが、ロボット３３２がその目的地に達した後にその優先順位を０にリセットすることを示す。また、マルチエージェント・プランナは、ロボット３３０に、その目的地に接近するために交差点３１４を介してレーン・サイクル３２４のレーン３２２および３２０に沿って前進するように指示済みである。レーン・サイクル３２４のレーン３２２および３２０に沿っておよび交差点３１４を介して移動する間に、マルチエージェント・プランナは、ロボット３３０の優先順位を５に高めた。ロボット３３０がその目的地に達した後に、マルチエージェント・プランナは、ロボット３３０に、その目的地で停止するように指示することができ、シナリオ３００は、完了され得る。
【００４２】
［0057］  ロボットは、積荷、認可されないエージェント、認可されない人、および／または動作不能な機械類などの障害物がルートに沿って見つかる時に、再ルーティングされ得る。そのようなシナリオでは、マルチエージェント・プランナが、ロボット３３０および／または３３２をブロックするレーン３２０上の障害物など、ロボットをブロックする障害物がルート上にあると判定する時に、マルチエージェント・プランナは、障害物の存在を示す警告メッセージを生成することができ、そのルートが障害物によってブロックされるロボットの新しいルートを判定することができる。たとえば、マルチエージェント・プランナが、ロボット３３２がシナリオ３００中に交差点３１４内にいる間に障害物がレーン３２０をブロックしたと判定する場合に、ロボット３３０のルートは、障害物によって影響される可能性があるが、ロボット３３２のルートは、影響されないはずである（ロボット３３２は、その目的地に達するために交差点３１４を通過し、レーン３３２に沿って移動することだけを必要とするので）。ロボット３３０のルートが障害物によって影響される場合には、マルチエージェント・プランナは、ロボット３３２を再ルーティングし、障害物がレーン３２０上で検出されたことの警告メッセージおよび／もしくは他の指示を生成し、人間または他のエージェントが障害物についてレーン３２０を点検することの要求を送り、かつ／または障害物に対処し、かつ／もしくはこれを取り除くことを試みるために他のアクションを実行することができる。
【００４３】
［0058］  図４Ａ〜図４Ｅは、例の実施形態による、交差点４５０で旋回するロボットを含むシナリオ４００を示す。シナリオ４００は、両方が交差点４５０のトラバースを含む２つのフェーズを有する。図４Ａに示されたシナリオ４００の第１のフェーズでは、マルチエージェント・プランナは、交差点４５０を通るそれぞれの右旋回を行うようにロボット４１４、４２４、４３６、および４４６に指示する。図４Ｂ、図４Ｃ、図４Ｄ、および図４Ｅに示されたシナリオ４００の第２のフェーズでは、マルチエージェント・プランナは、交差点４５０を通るそれぞれの左旋回を行うようにロボット４７０、４７２、４７４、および４７６に指示する。
【００４４】
［0059］  図４Ａは、８つのレーンすなわち、北から交差点４５０に入るレーン４１０、北に向かって交差点４５０を去るレーン４１２、東から交差点４５０に入るレーン４２０、東に向かって交差点４５０を去るレーン４２２、南から交差点４５０に入るレーン４３２、南に向かって交差点４５０を去るレーン４３０、西から交差点４５０に入るレーン４４２、および西に向かって交差点４５０を去るレーン４４０の交差点４５０を有する道路地図４０２を示す。シナリオ４００の第１のフェーズに関する図４Ａ内の道路地図４０２によって表される環境は、８つのロボットすなわち、レーン４１０上のロボット４１４、レーン４１２上のロボット４１６、レーン４２０上のロボット４２４、レーン４２２上のロボット４２６、レーン４３０上のロボット４３４、レーン４３２上のロボット４３６、レーン４４０上のロボット４４４、およびレーン４４２上のロボット４４６を含む。
【００４５】
［0060］  これら８つのロボットのうちで、４つのロボットすなわちロボット４１４、４２４、４３６、および４４６は、シナリオ４００の第１のフェーズ中にマルチエージェント・プランナによって交差点４５０を通る旋回を実行するように指示される。シナリオ４００の第１のフェーズ中に、交差点４５０は、４つの衝突領域すなわち、レーン４１０および４４０を接続する衝突領域４５２ａと、レーン４２０および４１２を接続する衝突領域４５２ｂと、レーン４４２および４３０を接続する衝突領域４５２ｃと、レーン４３２および４２２を接続する衝突領域４５２ｄとに分割され得る。
【００４６】
［0061］  シナリオ４００は進み、マルチエージェント・プランナが、レーン４１０からレーン４４０への右旋回４１８を行うようにロボット４１４に指示する。この右旋回を実行するために、マルチエージェント・プランナは、ロボット４１４のために衝突領域４５２ａを予約し、レーン４４０上で右旋回４１８を行うために、交差点４５０のうちで衝突領域４５２ａを含む部分を通って前進するようにロボット４１４に指示する。交差点４５０がレーンを全く含まないので、交差点４５０の少なくとも一部、たとえば衝突領域４５２ａが、他のロボットが交差点４５０のレーン４１０とレーン４４０との間の部分に入るのをブロックするために予約されなければならない。
【００４７】
［0062］  同様に、ロボット４２４、４３６、および４４６のそれぞれは、マルチエージェント・プランナによって指示された通りに、それぞれのレーン４２０、４３２、および４４２からそれぞれのレーン４１２、４２２、および４３０へのそれぞれの右旋回４２８、４３８、および４４８を実行している。これらの右旋回を実行するために、マルチエージェント・プランナは、ロボット４２４のために衝突領域４５２ｂを予約し、ロボット４３６のために衝突領域４５２ｄを予約し、ロボット４４６のために衝突領域４５２ｃを予約する。上で言及したように、交差点４５０がレーンを全く含まないので、交差点４５０の少なくとも一部、たとえば衝突領域４５２ｂ、４５２ｃ、および４５２ｄが、それぞれのレーン４２０とレーン４１２と、レーン４２３とレーン４２２と、ならびにレーン４４２とレーン４３０との間での旋回４２８、４３８、および４４８を可能にするために、他のロボットが交差点４５０の一部に入るのをブロックするために予約されなければならない。ロボット４２４、４３６、および４４６は、交差点４５０のうちでそれぞれの衝突領域４５２ｂ、４５２ｄ、および４５２ｃを含むそれぞれの部分を通って前進して、それぞれのレーン４１２、４２２、および４３０へのそれぞれの右旋回４２８、４３８、および４４８を行う。衝突領域４５２ａ、４５２ｂ、４５２ｃ、および４５２ｄのどれもがオーバーラップしないので、旋回４１８、４２８、４３８、および４４８の一部またはすべては、並列に実行され得る。
【００４８】
［0063］  他のシナリオでは、衝突領域４５２ａ、４５２ｂ、４５２ｃ、および４５２ｄの一部またはすべての形状を、図４Ａに示されたものとは異なるものとすることができる。たとえば、衝突領域４５２ａ〜４５２ｄの一部またはすべては、衝突領域４５２ａ〜４５２ｄのそれぞれがレーンの間の右旋回を可能にするが、交差点４５０の中央をカバーしなくなるように、サイズにおいて縮小され得る。
【００４９】
［0064］  シナリオ４００の第２のフェーズでは、ロボット４７０、４７２、４７４、および４７６は、図４Ｂ、図４Ｃ、図４Ｄ、および図４Ｅに示されているように、交差点４５０を通る左旋回を行うようにマルチエージェント・プランナによって指示される。シナリオ４００の第２のフェーズの環境は、図４Ｂ〜図４Ｅの道路地図４０２によって表され、４つのロボットすなわち、ロボット４７０、ロボット４７２、ロボット４７４、およびロボット４７６を含む。図４Ｂは、シナリオ４００のこの段階で、４つのロボットが交差点４５０すぐ外すなわち、ロボット４７０がレーン４１０内、ロボット４７２がレーン４２０内、ロボット４７４がレーン４３２内、ロボット４７６がレーン４４２内にあることを示す。シナリオ４００の少なくとも第２のフェーズ中に、マルチエージェント・プランナは、ロボットがそのルートに沿って移動していた時間の長さに基づいて、ロボットの優先順位を判定する。具体的には、マルチエージェント・プランナは、ロボット４７０が３の優先順位を有し、ロボット４７２が４の優先順位を有し、ロボット４７４が２の優先順位を有し、ロボット４７６が１の優先順位を有するというように、ロボット４７０〜４７６に優先順位を割当済みである。したがって、ロボット４７２は、これら４つのロボットのうちで最高の優先順位を有する。
【００５０】
［0065］  シナリオ４００は継続し、マルチエージェント・プランナが、衝突領域４５４の外側で停止するようにロボット４７０、４７２、および４７４に指示し、この衝突領域４５４は、図４Ｂ〜図４Ｅでは、太い黒線で輪郭を示され、衝突領域４５４は、交差点４５０を含む。マルチエージェント・プランナは、ロボット４７０、４７４、および４７６のそれぞれの優先順位のそれぞれが、ロボット４７２の優先順位より低いので、ロボット４７０、４７４、および４７６を衝突領域４５４の外側で停止させ、その結果、ロボット４７０、４７４、および４７６は、少なくともロボット４７２が衝突領域４５４をトラバースし終えるまで待つ。ロボット４７２が、衝突領域４５４にあるロボットのうちで最高の優先順位を有するので、マルチエージェント・プランナは、ロボット４７２の排他的使用のために衝突領域４５４を予約し、その後、レーン４２０から衝突領域４５４を通ってレーン４３０への左旋回４６０を行うようにロボット４７２に指示する。衝突領域４５４がレーンを全く有しないので、衝突領域４５４は、ロボット４７２がレーン４２０とレーン４３０との間で移動する間にロボット４７０、４７４、および４７６が入るのをブロックするために予約されなければならない。
【００５１】
［0066］  図４Ｃに示されているように、シナリオ４００は継続し、ロボット４７２が、左旋回４６０を完了し、レーン４３０内で南向きに進み続ける。マルチエージェント・プランナは、ロボット４７０、４７２、４７４、および４７６の優先順位を４、５、３、および２というそれぞれの値に更新する。ロボット４７０が、衝突領域４５４の使用を待っている３つのロボット（ロボット４７０、４７４、および４７６）のうちで最高優先順位を有するので、マルチエージェント・プランナは、ロボット４７０の排他的使用のために衝突領域４５４を予約し、その後、レーン４１０から衝突領域４５４を通ってレーン４２２への左旋回４６２を行うようにロボット４７０に指示する。衝突領域４５４がレーンを全く有しないので、衝突領域４５４は、ロボット４７０がレーン４１０とレーン４２２との間を移動する間にロボット４７４および４７６が入るのをブロックするために予約されなければならない。
【００５２】
［0067］  図４Ｄに移ると、シナリオ４００は継続し、ロボット４７０が、左旋回４６２を完了し、レーン４２２内で東向きに進み続ける。マルチエージェント・プランナは、少なくともロボット４７０、４７４、および４７６の優先順位を５、４、および３というそれぞれの値に更新する。ロボット４７４が、衝突領域４５４の使用を待っている２つのロボット（ロボット４７４および４７６）のうちで最高優先順位を有するので、マルチエージェント・プランナは、ロボット４７４の排他的使用のために衝突領域４５４を予約し、その後、レーン４３２から衝突領域４５４を通ってレーン４４０への左旋回４６４を行うようにロボット４７４に指示する。衝突領域４５４がレーンを全く有しないので、衝突領域４５４は、ロボット４７４がレーン４３２とレーン４４０との間を移動する間にロボット４７６が入るのをブロックするために予約されなければならない。
【００５３】
［0068］  図４Ｅに示されているように、シナリオ４００は継続し、ロボット４７４が、左旋回４６４を完了し、レーン４４０内で西向きに進み続ける。マルチエージェント・プランナは、少なくともロボット４７４および４７６の優先順位を５および４というそれぞれの値に更新する。ロボット４７６が、衝突領域４５４の使用を待っている最高優先順位のロボットなので、マルチエージェント・プランナは、ロボット４７６の排他的使用のために衝突領域４５４を予約し、その後、レーン４４２から衝突領域４５４を通ってレーン４１２への左旋回４６６を行うようにロボット４７６に指示する。衝突領域４５４がレーンを全く有しないので、衝突領域４５４は、ロボット４７６がレーン４４２とレーン４１２との間を移動する間に他のロボットが入るのをブロックするために予約されなければならない。左旋回４６６の完了時に、マルチエージェント・プランナは、ロボット４７６のための衝突領域４５４の予約を除去することができ、ロボット４７６は、レーン４１２上で北向きに前進することができ、シナリオ４００は、完了することができる。
【００５４】
［0069］  シナリオ４００の第２のフェーズは、シナリオ１００を鏡映し、シナリオ１００では、４つのエッジの交差点にある４つのロボットは、それぞれの左旋回を行うことを試みたが、デッドロック状態で終わった。対照的に、シナリオ４００の第２のフェーズの４つすべてのロボットは、上で議論したようにデッドロックなしに成功裡の左旋回を行った。したがって、シナリオ４００の第２のフェーズは、一方向エッジの道路地図に基づいて優先順位付けされたロボットに指示するマルチレベル・プランナが、少なくともいくつかの以前には回避不能であったデッドロックを回避できることを示す。
【００５５】
［0070］  いくつかの他のシナリオでは、ブロックされた領域は、エージェントがブロックされた領域をトラバースした時に、エージェントの背後で少なくとも部分的に解放され得る。たとえば、ロボット４７６が、旋回４６６を行いながらレーン４２２および４４２の北に移動し終えた後に、衝突領域４５４のうちでレーン４４０とレーン４４２との間の分割線（および／またはレーン４２０とレーン４２２との間の分割線）の南の部分は、解放され得るが、衝突領域４５４のうちでその分割線の北の部分は、ブロックされ／ロボット４７６のために予約されたままになる可能性がある。衝突領域４５４のうちでその分割線の南の部分を解放する際に、ロボット４７６が左旋回４６６を終了する間に交差点４５０のいくつかの右旋回およびトラバースが行われ得、したがって、１つまたは複数のロボットがレーンの間で移動する際の安全性を維持すると同時に追加のトラフィック・フローを可能にする。
【００５６】
［0071］  図５Ａ〜図５Ｆは、例の実施形態による、複数のレーンを有する環境内でナビゲートするロボットを含むシナリオ５００を示す。シナリオ５００では、道路地図５０２によって表される環境は、それぞれがマルチエージェント・プランナによってそれぞれの目的地にルーティングされ、３、１、および２のそれぞれの優先順位を有するロボット５１０、５２０、および５３０を有する。ロボット５１０が、この３つのロボットの最高優先順位を有するので、マルチエージェント・プランナは、図５Ａに示されているように、ロボット５１０の排他的使用のために衝突領域５４０と衝突領域５４２との間のレーン５０４を予約する。ロボット５２０は、ロボット５１０より低い優先順位を有するが、ロボット５１０がロボット５２０に到達できる前に、その目的地に達するためにレーン５０４の一部を利用することができる。したがって、マルチエージェント・プランナは、図５Ｂおよび図５Ｃに示されているように、その相対的に低い優先順位にかかわりなく、ロボット５２０がその目的地へ前進することを可能にする。具体的には、マルチエージェント・プランナは、ロボット５１０の排他的使用のための衝突領域５４２の予約を解放し、ロボット５２０の排他的使用のために衝突領域５４２を予約し、衝突領域５４２を通ってレーン５０８へとロボット５２０に指示し、衝突領域５４２の予約を解放する。
【００５７】
［0072］  やはり図５Ｂおよび図５Ｃに見られるように、ロボット５３０は、ロボット５１０がレーン５０６上でその目的地に向かって前進する時にロボット５１０のために予約されたレーン５０４をブロックするので、レーン５０４上でその目的地を通り過ぎるようにマルチエージェント・プランナによって指示される。具体的には、マルチエージェント・プランナは、ロボット５３０の排他的使用のために衝突領域５４２を予約し、衝突領域５４２を通ってレーン５０６へとロボット５３０に指示し、衝突領域５４２の予約を解放し、ロボット５１０の排他的使用のために衝突領域５４２を予約する。したがって、マルチエージェント・プランナは、より高優先順位のロボットのためのレーンをブロックすることを回避するために、ロボット５２０および５３０などのより低優先順位のロボットがレーン５０４などのレーンを去ることを可能にするために、ロボット５１０などのより高優先順位のロボットのための衝突領域５４２などの衝突領域の予約を解放することができる。
【００５８】
［0073］  このシナリオでは、ルートは、レーンならびに出発と終了目的地との間のレーン上での待機時間のシーケンスを含む。マルチエージェント・プランナは、ロボット５２０が、より高優先順位のロボット５１０の前に衝突領域５４２を通って前進することを可能にすることによってレーン５０４上でのロボット５２０の待機時間を変更する（すなわち、待機時間を短縮する）ことによってロボット５１０のためのレーン５０４のブロックを回避するために、ロボット５２０のルートを変更した。また、マルチエージェント・プランナは、より高優先順位のロボット５１０がレーン５０６上の目的地に達することを可能にするためにロボット５３０がレーン５０４および５０６をトラバースできるようにするために、ロボット５３０のルートにレーン・サイクルおよび対応する待機時間を追加することによって、ロボット５１０のためのレーン５０４のブロックを回避するために、ロボット５３０のルートを変更した。図５Ｄ、図５Ｅ、および図５Ｆは、ロボット５３０がレーン５０４上の目的地に達する前にレーン・サイクルを回って前進することを示す。ロボット５３０がその目的地に達した後に、シナリオ５００は終了することができる。
【００５９】
［0074］  シナリオ５００は、図５Ａに示されているように、ロボット５１０が東向きに衝突領域５４０に向かって進み、ロボット５２０および５３０が東向きにレーン５０４上で衝突領域５４０から衝突領域５４２に向かって進む状態で始まり、ロボット５２０は、ロボット５３０より衝突領域５４２に近い。ロボット５１０の目的地は、衝突領域５４２から南向きに向けられたレーン５０６上にあり、ロボット５２０の目的地は、衝突領域５４２の北のレーン５０８上にあり、ロボット５３０の目的地は、衝突領域５４２の真西のレーン５０４上にある。
【００６０】
［0075］  シナリオ５００中に、マルチエージェント・プランナは、ロボットがそのルートに沿って移動していた時間の長さに基づいてロボットの優先順位を判定する。シナリオ５００の初めに、マルチエージェント・プランナは、各それぞれのロボットがそのそれぞれのルート上で移動する間に費やした時間の長さに基づいて、ロボット５１０に３の優先順位、ロボット５２０に１の優先順位、ロボット５３０に２の優先順位を割り当てた。ロボット５１０は、３つのロボットの最高優先順位を有するので、マルチエージェント・プランナは、ロボット５１０による使用のために、衝突領域５４０、レーン５０４、衝突領域５４２、およびレーン５０６を含むルートを予約する。また、マルチエージェント・プランナは、ロボット５３０に、レーン５０４上でその目的地を過ぎて前進し、レーン５０４上でその目的地に達する前に衝突領域５４２、５４６、５４４、および５４０を（この順で）通る時計回りのレーン・サイクルをとるように指示する。マルチエージェント・プランナは、ロボット５２０とロボット５３０との両方が、ロボット５１０が衝突領域５４２を通って前進することを可能にするために衝突領域５４２を通って前進しなければならない（レーン５０４上での追い越しが実現可能ではないので）ことをも認識し、したがって、ロボット５２０のために衝突領域５４２を一時的に予約する。マルチエージェント・プランナは、レーン５０８がどのロボットまたは他のエージェントによっても利用されないことをさらに認識し、したがって、ロボット５２０に、その目的地に達するために衝突領域５４２を通ってレーン５０８に前進するように指示する。したがって、ロボット５２０が、ロボット５１０、５２０、および５３０の最低優先順位を有するにもかかわらず、ロボット５２０は、ロボット５１０および５３０の前の位置にあり、その結果、ロボット５２０は、ロボット５１０またはロボット５３０のいずれかが衝突領域５４２に達する前に、衝突領域５４２を通って（レーン５０８に）前進することができるようになる。したがって、低優先順位ロボット５２０は、より高優先順位のロボット５１０および５３０の前に、レーン５０４および衝突領域５４２を「こっそり通る」ことができ、目的地に到達できる。
【００６１】
［0076］  図５Ｂは、ロボット５２０が、レーン５０４から衝突領域５４２を通ってレーン５０８への左旋回を行い、ロボット５３０が、東向きに衝突領域５４２に向かってレーン５０４上で前進し、ロボット５１０が、衝突領域５４０を通ってレーン５０４に向かってまっすぐに（東向きに）前進することを示す。
【００６２】
［0077］  図５Ｃは、ロボット５２０が、レーン５０８上でその目的地に達し、その優先順位を０にリセットされたことを示す。ロボット５２０は、シナリオ５００の残りの持続時間の間、その目的地に留まる。図５Ｃは、ロボット５３０が、レーン５０４から衝突領域５４２を通ってレーン５０６への右旋回を行い、衝突領域５４６に向かってレーン５０６上で南向きに向けられていることをも示す。ロボット５３０がその時計回りのレーン・サイクル上で前進することを可能にするために、マルチエージェント・プランナは、衝突領域５４６、５４４、および５４０と、それぞれの接続するレーンとをロボット５３０による使用のために予約した。また、ロボット５２０および５３０が衝突領域５４２を通過した後に、マルチエージェント・プランナは、ロボット５１０のために衝突領域５４２を予約する。
【００６３】
［0078］  図５Ｄに移って、シナリオ５００は継続し、ロボット５３０が、レーン５０６の終りまで前進し、衝突領域５４６を通って右に旋回し、衝突領域５４４に向かって西向きに前進する。ロボット５３０がレーン５０６および衝突領域５４６を通過した後に、マルチエージェント・プランナは、レーン５０６および衝突領域５４６に対するロボット５３０のためのすべての関連する予約を除去し、ロボット５３０が衝突領域５４４に向かう西向きレーンの予約を有することを保証する。
【００６４】
［0079］  また、ロボット５１０は、前進して、レーン５０４から衝突領域５４２を介するレーン５０６への右旋回を行う。ロボット５１０がレーン５０４を通過した後に、マルチエージェント・プランナは、レーン５０４に対するロボット５１０のための予約を除去し、ロボット５１０が、その目的地に向かう衝突領域５４２の予約およびレーン５０６の予約を有することを保証する。
【００６５】
［0080］  図５Ｅは、ロボット５１０が、レーン５０６上の目的地に達し、その優先順位を０にリセットされたことを示す。ロボット５１０は、シナリオ５００の残りの持続時間の間、その目的地に留まる。図５Ｃは、ロボット５３０が、衝突領域５４４を通る右旋回を行い、衝突領域５４０に向かって北向きに向けられていることをも示す。ロボット５３０が衝突領域５４４を通過した後に、マルチエージェント・プランナは、ロボット５３０のための衝突領域５４４の予約を除去することができ、ロボット５３０が衝突領域５４４から衝突領域５４０への北向きのレーンの予約を有することを保証することができ、ロボット５３０のために衝突領域５４０を予約することができる。シナリオ５００のこの段階で、ロボット５５０が、道路地図５０２によって表される環境に入り、衝突領域５４０に向かって東向きに前進する。ロボット５５０が、ロボット５３０の６という現在の優先順位より低い１の優先順位を有し、ロボット５３０が、衝突領域５４０（ロボット５３０の使用のために予約済み）に相対的に近いので、マルチエージェント・プランナは、ロボット５５０に、衝突領域５４０に達する前に停止するように指示する。すなわち、ロボット５５０は、衝突領域５４０に関するロボット５３０および５５０の相対位置に起因して、衝突領域５４０をこっそり通ることをマルチエージェント・プランナによって許可されない。
【００６６】
［0081］  図５Ｆは、ロボット５３０が、衝突領域５４０を通るレーン５０４への右旋回を行い、その目的地まで前進したことを示す。ロボット５３０が衝突領域５４０を通る右旋回を開始する前に、マルチエージェント・プランナは、ロボット５３０がレーン５０４の予約を有することを保証し、ロボット５３０がその目的地まで前進することを可能にする。その後、ロボット５３０が衝突領域５４０を通る右旋回を完了した後に、マルチエージェント・プランナは、ロボット５３０のための衝突領域５４０の予約を除去し、ロボット５５０のために衝突領域５４０を予約する。その後、ロボット５５０は、図５Ｆに示されているように、衝突領域５４０を通る左旋回を行い、衝突領域５４４に向かって南向きに前進するように指示される。ロボット５３０がその目的地に達した後に、シナリオ５００は完了することができる。
【００６７】
［0082］  図６Ａ〜図６Ｆは、例の実施形態による、衝突領域６３０として表された交差点を通過する２つのロボット６１０および６２０を含むシナリオ６００を示す。シナリオ６００中に、マルチエージェント・プランナは、ロボットがそのルートに沿って移動した時間の長さに基づいて、ロボットの優先順位を判定する。図６Ａは、シナリオ６００の初めに、道路地図６０２によって表される環境内で、マルチエージェント・プランナが、ロボット６２０に割り当てられた１の優先順位より高い３の優先順位をロボット６１０に割り当てる。
【００６８】
［0083］  道路地図６０２は、衝突領域６３０に向かって東向きに向けられたレーン６３２、衝突領域６３０から離れて西向きに向けられたレーン６４２、衝突領域６３０から離れて東向きに向けられたレーン６３４、衝突領域６３０に向かって西向きに向けられたレーン６４４、衝突領域６３０に向かって南向きに向けられたレーン６３６、および衝突領域６３０から離れて北向きに向けられたレーン６４６を含む。
【００６９】
［0084］  ロボット６１０が、環境内のすべてのエージェントの最高優先順位を有するので、マルチエージェント・プランナは、ロボット６１０がレーン６４６上のその目的地に達することを可能にするために、ロボット６１０のためにレーン６３２、衝突領域６３０、およびレーン６４６を予約する。また、マルチエージェント・プランナは、ロボット６２０に、レーン６４４上のその位置で停止するように指示する。シナリオ６００では、ロボット６１０とロボット６２０との両方が、レーン６４６上に共通の目的地を有する。
【００７０】
［0085］  図６Ｂは、シナリオ６００が継続し、ロボット６１０が、レーン６４６上の共通の目的地に前進することを示す。この時に、ロボット６２０は、衝突領域６３０がまだロボット６１０のために予約されているので、レーン６４４上で待つままになる。シナリオ６００は進み、マルチエージェント・プランナは、ロボット６１０が４時間単位の間、共通の目的地にいた後に、ロボット６２０のために衝突領域６３０を予約する。シナリオ６００では、マルチエージェント・プランナは、ロボット６１０が共通の目的地で課題を完了するのに少なくとも４つの時間単位を要すると推定するので、ロボット６１０が共通の目的地に来た後に４時間単位だけ待つ。ロボット６１０とロボット６２０との両方が、レーン６４６上の共通の目的地を有するので、マルチエージェント・プランナは、ロボット６１０が共通の目的地で有する可能性がある課題（１つまたは複数）をロボット６１０が完了するために、ある時間（たとえば、４時間単位）を割り振る。というのは、ロボット６１０が共通の目的地を去るまでは、ロボット６１０が、ロボット６２０の目的地に達することからロボット６２０をブロックするからである。他のシナリオでは、マルチエージェント・プランナは、ロボット（または他のエージェント）がその目的地に達した後に、より多数またはより少数の時間単位の後に衝突領域の予約を変更することができる。図６Ｃは、ロボット６１０がその目的地に来た後、ロボット６２０のために衝突領域６３０を予約する前に、マルチエージェント・プランナが４時間単位だけ待った後の道路地図６０２によって表される環境を示す。
【００７１】
［0086］  図６Ｄは、ロボット６１０がレーン６４６上の共通の目的地でその課題を完了し、ロボット６１０がレーン６４６上で北向きに移動し始めたので、マルチエージェント・プランナが、レーン６４４に沿って衝突領域６３０に向かって前進するようにロボット６２０に指示した後に、シナリオ６００が前進することを示す。マルチエージェント・プランナは、共通の目的地でのロボット６１０の課題の完了時に、ロボット６１０の優先順位を０（すなわち、最低の可能な優先順位）にリセットもした。
【００７２】
［0087］  図６Ｅによって示されるように、シナリオ６００は進み、ロボット６２０が、レーン６４６上の共通の目的地に達する。共通の目的地に達する際に、ロボット６２０は、共通の目的地で、ピック・アンド・プレース動作（１つまたは複数）などの１つまたは複数の課題を実行し始める。
【００７３】
［0088］  図６Ｆによって示されるように、シナリオ６００は進み、ロボット６２０が、レーン６４６上の共通の目的地で課題（１つまたは複数）を実行する。マルチエージェント・プランナは、共通の目的地でのロボット６２０の課題（１つまたは複数）の完了時に、ロボット６２０の優先順位を０にリセットする。マルチエージェント・プランナがロボット６２０の優先順位を０にリセットした後に、シナリオ６００は終了することができる。
【００７４】
［0089］  道路地図は、上で示したようにレーンを含むことができる。いくつかの場合に、道路地図がレーンを全く含まない場合がある。その場合に、道路地図は、レーンを含むように「注釈を付けられ」またはマークされ得る。すなわち、既存の道路地図は、道路地図の一部またはすべてのエッジがレーンとしてマークされ得るようにするために、注釈を付けられ得る。道路地図の一部をレーンとして注釈を付けるために、注釈を付けられる部分／レーンは、１つまたは複数のレーン指向要件を満足することができる。例のレーン指向要件は、以下を含むが、これに限定はされない。
・レーン上のエージェントが任意の他のレーン上の任意の他のエージェントと衝突しないように、レーンが、他のレーンから十分に分離されたグラフの一方向エッジであるという要件。たとえば、潜在的なレーンＬ＿ＨＩＴ１上のロボットＲ＿ＨＩＴ１が、おそらくは潜在的なレーンＬ＿ＨＩＴ２上のロボットＲ＿ＨＩＴ２と衝突する可能性がある場合、すなわち、潜在的なレーンＬ＿ＨＩＴ１およびＬ＿ＨＩＴ２の幾何形状が、Ｌ＿ＨＩＴ１およびＬ＿ＨＩＴ２が可能な衝突を回避するためにはお互いに近すぎる場合に、ロボットＲ＿ＨＩＴ１は、ロボットＲ＿ＨＩＴと衝突し、したがって、潜在的なレーンＬ＿ＨＩＴ１およびＬ＿ＨＩＴ２は、このレーン指向要件を満足しない。
・レーンが、衝突領域のブロックを回避するために衝突領域から十分に離れて終わる、すなわち、レーンが、交差点トラバースを可能にするために交差点から十分に離れて終わるという要件。
・道路地図内のレーンが、レーンの少なくとも１つのサイクルを形成するという要件。関連するレーン指向要件は、道路地図内のすべてのレーンが、レーンのサイクルの一部であることである。
・道路地図内のすべてのレーンの合計長が、道路地図によって表される環境内のすべてのエージェント＋少なくとも１つの他のエージェントのための追加の空間を収めるのに十分に大きくされ得るという要件。関連するレーン指向要件は、道路地図内のすべてのレーンの合計長が、道路地図によって表される環境内のすべてのエージェント＋少なくとも１つの他のエージェントのための追加の空間および＋衝突を回避するためのエージェントの間の「泡」または空間のためのさらなる追加空間を収めるのに十分に大きくされ得ることである。
他のレーン指向要件も可能である。
【００７５】
［0090］  いくつかの実施形態では、コンピューティング・デバイス上で実行するユーザ・インターフェースおよび／または他のソフトウェアは、レーンを用いる道路地図の注釈付けを使用可能にすることができる。具体的には、ユーザ・インターフェースおよび／または他のソフトウェアは、道路地図に注釈を付ける時に、上で述べたレーン指向要件の一部またはすべてを実施することができる。
【００７６】
［0091］  いくつかの道路地図とエージェントの集合とに関して、レーン注釈付けは、柔軟になり得る。１つの極端で、上で述べた合計長要件を満足するために、道路地図内のごく少数のエッジだけがレーンとしてマークされ得る。しかし、少数のレーンを有することは、エージェントが相対的に大きい衝突エリアを予約することにつながる可能性がある。いくつかの例で、レーンには、レーンにオーバーラップし、およびおそらくはレーンと反対方向に移動する非レーンが付随する可能性がある。非レーンは、エージェントが別のレーンへの衝突領域全体を予約する限り、エージェントが目的地エージェントへのより短い非レーン・ルートを採用することを可能にすることができる。たとえば、レーンが道路地図上の反時計回りループを形成する場合に、エージェントがレーンの安全性に戻るのに十分に大きい領域を予約できるならば、エージェントは、非レーンを使用するループの一部に関して時計回りに進むことができる。すなわち、エージェントは、レーンに沿った増分進行を行うことができるが、非レーン／衝突領域トラバースに関して、エージェントは、非レーン／衝突領域全体をトラバースするようにルーティングされるか、非レーン／衝突領域全体を回避するようにルーティングされるかのいずれかが可能である。
【００７７】
［0092］  道路地図は、駐車場、ディープレーン（ｄｅｅｐ  ｌａｎｅ）、その他など、特定の位置の環境の残りに戻る前にエージェントが待つことを可能にする１つまたは複数の待機レーンを用いて注釈を付けられ得る。たとえば、倉庫内で、積み降ろしプラットフォームは、人気のある目的地位置である可能性がある。積み降ろしプラットフォームに待機レーンを有することは、エージェントが、タスクを完了した後の再割当されるプロセスにある間に待機レーン上で待つことを可能にする。その上で待つべきレーンがなければ、エージェントは、別のエッジおよびおそらくはエッジの間の衝突領域を予約しなければならず、これは、他のエージェントから積み降ろしプラットフォームの少なくとも一部をブロックすることにつながる可能性が高い。待機レーンは、待機レーンが少なくとも１つのエージェントに対処できる限り、任意の長さを有することができる。いくつかの例では、待機レーンは、１つまたは複数の非レーン・エッジを介して道路地図の残りに接続され得る。
【００７８】
［0093］  図７Ａ〜図７Ｄは、例の実施形態による、これらの図では道路地図エディタ７１０として示されたコンピューティング・デバイスのユーザ・インターフェースが、レーンを用いて道路地図７２０に注釈を付けるのに使用されるシナリオ７００を示す図である。シナリオ７００中に、ユーザ・インターフェースは、レーンを用いて既存道路地図に漸進的に注釈を付け、注釈付けされた道路地図のレーン指向要件に関する情報を提供するのに使用される。
【００７９】
［0094］  図７Ａは、コンピューティング・デバイス７０２によって道路地図エディタ７１０として提供されるシナリオ７００のユーザ・インターフェースを示す。道路地図エディタ７１０は、メニュー７３０、編集領域７３２、図７Ａでは７３４ａとしてラベルを付けられたダイアログ、およびシステム・バー７３６を含む。メニュー７３０は、編集領域７３２内に表示されて図示された道路地図７２０などの道路地図に関する複数のセレクションをリストし、ここで、メニュー７３０のセレクションは、選択された時に、道路地図エディタ７１０に、選択されたセレクションに関する１つまたは複数の動作を実行させることができる。
【００８０】
［0095］  図７Ａは、メニュー７３０が、地図取得セレクション７１２、地図保存セレクション７１４、エッジ注釈付けモード・セレクション７１６、および終了セレクション７１８を含むことを示す。図７Ａ、図７Ｂ、図７Ｃ、および図７Ｄに示されたもの以外の実施形態では、メニュー７３０は、より多数、より少数、および／または異なるメニュー・セレクションを提供することができる。さらなる他の実施形態では、プルダウン・メニュー、アイコン、および／またはダイアログなどの他のグラフィカル要素が、メニュー７３０の１つまたは複数のセレクションと共に使用され、かつ／またはこれを置換することができる。
【００８１】
［0096］  地図取得セレクション７１２は、データ・ストレージから道路地図を取り出し、取り出された道路地図を道路地図エディタ７１０にロードするのに使用され得る。地図保存セレクション７１４は、道路地図エディタ７１０に現在ロードされている道路地図をデータ・ストレージに記憶するのに使用され得る。たとえば、道路地図は、１つまたは複数のファイルとして不揮発性データ・ストレージ内に記憶され得、不揮発性データ・ストレージは、下で図１４Ａのデータ・ストレージ１４０４の文脈で議論される。
【００８２】
［0097］  エッジ注釈付けモード７１６は、編集領域７３２がレーンとしてエッジに注釈を付けるのに使用されている場合には使用可能にされ、編集領域７３２がレーンとしてエッジに注釈を付けるのに使用されていない場合には使用不能にされ得る。図７Ａでは、エッジ注釈付けモード７１６のメニュー・アイテムは、エッジ注釈付けモード７１６が使用可能にされている（たとえば、編集領域７３２内に表示される道路地図のエッジが、レーンとして注釈を付けられ得る）ことを示すために太字で示される。たとえば、道路地図のエッジＥは、道路地図エディタ７１０を介して選択され得、エッジ注釈付けモード７１６が使用可能にされている場合には、エッジＥの一部またはすべてが、レーンとして注釈を付けられ得る。終了セレクション７１８は、道路地図エディタ７１０の実行を打ち切る（たとえば道路地図エディタ７１０のアプリケーションを終了する）のに使用され得る。他のシナリオでは、エッジ注釈付けモード７１６が、使用不能にされ得、これらのシナリオでは、エッジ注釈付けモード７１６は、通常の（すなわち、非太字）フォントで表示され得る。さらなる他のシナリオでは、カラー、フォント・サイズ、および／または太字以外のフォント品質などの他のグラフィカル技法が、使用可能にされた注釈付けフォント・モードと使用不能にされた注釈付けフォント・モードとの間で区別するのに使用され得る。
【００８３】
［0098］  編集領域７３２は、道路地図を作成し、再検討し、更新するのに使用され得る。たとえば、道路地図は、レーンに注釈を付けること、ならびに／または編集領域６２４内に表示された道路地図のエッジ、レーン、および／もしくは交差点を作成すること、再検討すること、更新すること、および／もしくは削除することによって更新され得る。道路地図の作成、再検討、および／または更新の後に、道路地図は、たとえば地図保存セレクション７１４を選択することによって、後の使用のためにデータ・ストレージに保存され得る。シナリオ７００では、地図保存セレクション７１４は、最近に選択され、したがって、道路地図７２０は、最近にデータ・ストレージに保存された。他のシナリオでは、カラー、フォント・サイズ、および／または太字以外のフォント品質などの他のグラフィカル技法が、最近に保存された道路地図と最近に保存されてはいない道路地図との間で区別するのに使用され得る。
【００８４】
［0099］  ダイアログ７３４ａは、注釈付けされた道路地図のレーン指向要件に関する情報などであるがこれに限定されない、編集されつつある道路地図に関する情報を提供することができる。たとえば、図７Ａに表示された道路地図７２０は、二方向非レーン・エッジ（ＮＬＥ）７３８を含み、２つのレーンすなわち、道路地図７２０の最上部のレーン７２２および道路地図７２０の最下部のレーン７２４を用いて注釈を付けられている。これらの注釈に応答して、道路地図エディタ７１０は、道路地図７２０が、上で議論したものおよび／またはレーン指向要件に関する他の情報など、１つまたは複数のレーン指向要件を満足するかどうかを判定し、ダイアログ７３４ａなどのダイアログを介してまたはたとえばポップアップ、別々の情報ペインもしくはスクリーンなど、他のユーザ・インターフェース技法を介して、その情報を提供することができる。たとえば、道路地図７２０にレーンを追加することを試みる時に、道路地図エディタ７１０は、新しいレーンが上で述べたレーン指向要件を満足すること、たとえば、新しいレーンが一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わるかどうかをチェックすることができる。図７Ａに示された特定の例では、ダイアログ７３４ａは、「レーン・サイクルが検出されない」すなわち、レーン７２２および７２４がサイクルを形成しないことと、レーン７２２および７２４が「約４個のエージェントだけを保持できる」こととを示す。シナリオ７００では、約１２個のエージェントが、道路地図７２０によって表される環境内で動作すると期待され、したがって、４つのエージェントだけを保持するレーンは、道路地図７２０のレーンが少なくとも１２個の（期待される）エージェント／ロボットのための十分な空間を有しなければならないというレーン指向要件に違反すると考えられ得る。
【００８５】
［0100］  いくつかの例で、道路地図エディタ７１０は、新しいレーンに適切な道路地図７２０上の１つまたは複数の位置を判定し、その後、コンピューティング・デバイスを使用して新しいレーン（１つまたは複数）を用いて道路地図上の位置（１つまたは複数）に注釈を付けることを試みることができる。たとえば、道路地図エディタ７１０は、少なくとも１つのロボットが移動するのに十分に幅広い廊下または他のエリアと思われる位置を見つけ、その後、１つまたは複数の新しいレーンを用いてその位置に注釈を付けることを試みることができる。（潜在的な）新しいレーンの位置を見つけるための他の技法も可能である。
【００８６】
［0101］  システム・バー７３６は、三角形、円、および正方形を示し、これらは、三角形を選択することによって道路地図エディタ７１０の前に実行した前のアプリケーションに戻るのに、円を選択することによってホーム・スクリーンに戻るのに、および正方形を選択することによってすべての実行されるアプリケーションのリスティングを提供するのに使用され得る。メニュー７３２のセレクション、レーン、エッジ、交差点、および編集領域７３２内に示されるダイアログ、ならびにシステム・バー７３６の三角形、円、および正方形などのグラフィカル要素は、コンピューティング・デバイス７０２のユーザ入力デバイスを使用して選択され得る。例のユーザ入力デバイスは、下で図１４Ａに示されたユーザ・インターフェース・モジュール１４０１の文脈で説明される。
【００８７】
［0102］  レーン７２２および７２４を用いる道路地図７２０の注釈付けは、道路地図７２０を３つの領域すなわち、レーン７２２を含む注釈付けされた領域、レーン７２４を含む別の注釈付けされた領域、およびレーン７２２とレーン７２４との間の注釈付けされていない領域（ＵＲ）７２６に分割する。マルチエージェント・プランナが、ロボットに指示するのに図７Ａに示された道路地図７２０を使用する場合に、マルチエージェント・プランナは、注釈付けされていない領域７２６のすべてを１つの（大きい）衝突領域と考えることができる。その場合に、注釈付けされていない領域７２６を介してロボットＲ＿ＵＮをルーティングするために、マルチエージェント・プランナは、ロボットＲ＿ＵＮの排他的使用のために注釈付けされていない領域７２６のすべてを予約することができる。
【００８８】
［0103］  シナリオ７００は継続し、道路地図７２０が、追加のレーンを用いて注釈付けされ、その後、道路地図７２０が保存される。図７Ｂは、レーン７２２および７２４だけを用いて前に注釈を付けられた道路地図７２０が、レーン７４０、７４２、および７４４を用いて注釈を付けられたことを示す。
【００８９】
［0104］  これらの注釈付けに応答して、道路地図エディタ７１０は、道路地図７２０が、上で議論したものおよび／またはレーン指向要件に関する他の情報など、１つまたは複数のレーン指向要件を満足するかどうかを判定し、その情報を、ダイアログ７３４ｂなどのダイアログを介してまたは図７Ａの文脈で述べたものなどの他のユーザ・インターフェース技法を介して提供することができる。図７Ｂに示された特定の例では、ダイアログ７３４ｂは、「レーン・サイクルが検出されない」すなわち、レーン７２２、７２４、７４０、７４２、および７４４がサイクルを形成しないことと、レーン７２２、７２４、７４０、７４２、および７４４が集合的に「約１０個のエージェントだけを保持できる」こととを示す。シナリオ７００では、約１２個のエージェントが、道路地図７２０によって表される環境内で動作すると期待され、したがって、４つのエージェントだけを保持するレーンは、道路地図７２０のレーンが少なくとも１２個の（期待される）エージェント／ロボットのための十分な空間を有しなければならないというレーン指向要件に違反すると考えられ得る。
【００９０】
［0105］  レーン７４０、７４２、および７４４を用いる道路地図７２０の注釈付けは、道路地図７２０を６つの領域すなわち、（１）レーン７２２に関する注釈付けされた領域、（２）レーン７２４に関する注釈付けされた領域、（３）レーン７４４に関する注釈付けされた領域、（４）レーン７４０、レーン７４２、および非レーン・エッジ７３８を含む部分的に注釈付けされた領域、（５）レーン７２２とレーン７２４との間の注釈付けされていない領域７４６、および（６）レーン７４０および７４２の右側の注釈付けされていない領域７４８に分割すると考えられ得る。マルチエージェント・プランナが、ロボットに指示するのに図７Ｂに示された道路地図７２０を使用する場合に、マルチエージェント・プランナは、注釈付けされていない領域７４６のすべてを１つの（大きい）衝突領域と考え、注釈付けされていない領域７４８のすべてを、レーン７４０および７４２を含む部分的に注釈付けされた領域によって注釈付けされていない領域から分離された別の（大きい）衝突領域と考えることができる。いくつかの例では、マルチエージェント・プランナは、注釈付けされていない領域７４６から注釈付けされていない領域７４８に進むのにレーン７４０および７４２を使用することによって、部分的に注釈付けされた領域を介してロボットをルーティングし、注釈付けされていない領域７４８から注釈付けされていない領域７４６へのルーティングに非レーン・エッジ７３８を一方向の形で使用する（非レーン・エッジ７３８が二方向エッジである場合であっても）ことができる。
【００９１】
［0106］  シナリオ７００は継続し、道路地図７２０が、追加のレーンを用いて注釈を付けられ、その後、道路地図７２０が保存される。図７Ｃは、前にレーン７２２、７２４、７４０、７４２、および７４４を用いて注釈を付けられ、今は追加のレーン７５０ａ、７５２ａ、７５４ａ、７５６ａ、７５８ａ、および７６０ａを用いて注釈を付けられた道路地図７２０を示す。レーン７５０ａ、７５２ａ、７５４ａ、７５６ａ、７５８ａ、および７６０ａは、衝突領域として扱われ得る介在する非レーン領域と一緒に、レーン・サイクル７５４を形成することができる。また、レーン７５０ａ、７５２ａ、７５４ａ、７５６ａ、７５８ａ、および７６０ａの追加は、注釈付けされていない領域７４６（図７Ｂに図示）のサイズを、エッジ７５４ａ、７５６ａ、７４０、７４２、および７２４の間にある、より小さい注釈付けされていない領域７６０に縮小する。さらに、ダイアログ７３４ａおよび７３４ｂと比較して、ダイアログ７３４ｃは、レーン・サイクルが検出されないとの警告または１２個未満のエージェントが道路地図７２０のレーンによって保持され得るとの警告をもはや含まず、ダイアログ７３４ｃは、道路地図７２０のレーンが今や「約１６個のエージェントを保持できる」と述べる。シナリオ７００では、注釈付けされた道路地図のレーン指向要件は、各エッジがレーン・サイクルの一部であることであり、したがって、ダイアログ７３４ｃは、「すべてのレーンがレーン・サイクルに含まれるのではない」との「警告」を述べ、たとえば、少なくともレーン７４０、７４２、および７４４は、レーン・サイクルの一部ではない。
【００９２】
［0107］  マルチエージェント・プランナが、ロボットに指示するのに図７Ｃに示された道路地図７２０を使用する場合に、マルチエージェント・プランナは、注釈付けされていない領域７６０のすべてを１つの（大きい）衝突領域と考え、注釈付けされていない領域７４８のすべてを、レーン７４０および７４２を含む部分的に注釈付けされた領域によって注釈付けされていない領域から分離された別の（大きい）衝突領域と考えることができる。マルチエージェント・プランナは、ロボット／エージェントがレーン・サイクル７５４を含む道路地図７２０の上側部分内でデッドロックなしに前進することを可能にするために、介在する衝突領域／非レーン・エッジのブロックおよびブロック解除を含めて、レーン・サイクル７５４を回ってロボット／エージェントをルーティングすることもできる。
【００９３】
［0108］  シナリオ７００は継続し、道路地図７２０が、追加のレーンを用いて注釈を付けられ、その後、道路地図７２０が保存される。図７Ｄは、道路地図７２０が、追加のレーンを用いて注釈を付けられ、その結果、レーン・サイクル７５４が、１つの二方向レーン・サイクル、またはレーン・サイクルの対（時計回りの方向での移動を可能にする、レーン７５４ａおよび７５６ａと介在する非レーン領域（上で言及したように、衝突領域と考えられ得る）とを含むレーンの第１のサイクルと、反時計回りの方向での移動を可能にする、レーン７５４ｂおよび７５６ｂと介在する非レーン領域（上で言及したように、衝突領域と考えられ得る）とを含むレーンの第２のサイクルと）のいずれかと考えられ得る。ダイログ７３４ｄは、道路地図７２０のレーンが、今は「約２４個のエージェントを保持できる」と述べ、「すべてのレーンがレーン・サイクルに含まれるのではない」との「警告」を再発行し、たとえば、レーン７４０、７４２、および７４４は、それでもレーン・サイクルの一部ではない。
【００９４】
［0109］  マルチエージェント・プランナは、図７Ｃに示された道路地図７２０に類似する形で、ロボットに指示するのに図７Ｄに示された道路地図７２０を使用することができる。しかし、図７Ｄに示された道路地図７２０は、レーン上のエージェントのための追加の空間と、レーン・サイクル７５４を含む道路地図７２
０の上側部分内でのロボットをルーティングするための追加の柔軟性とを提供する。図７Ｄに示された道路地図７２０が保存された後に、シナリオ７００を完了することができる。
【００９５】
［0110］  レーン、衝突領域、注釈付けされた領域、注釈付けされていない領域、部分的に注釈付けされた領域、エッジ、および道路地図の他のモデルも可能である。いくつかの実施形態で、ロボットの運動学モデルなどのモデルが、レーンの端に達する前に止まるのではなく、ロボット・デバイスが止まらなければならない１つまたは複数の位置を判定するのに使用され得る。
【００９６】
［0111］  エージェントが目的地位置で動作を開始する時に、マルチエージェント・プランナは、目的地位置の周囲のエリアがどれほど長くブロックされたままになるのかを判定するために、エージェントが目的地位置にどれほど長く留まるのかを推定することができる。目的地位置がブロックされている間に、マルチエージェント・プランナは、おそらくは他のエージェントにより長いルートをとらせる、ブロックされた目的地位置を回避するために、他のエージェントを再ルーティングすることができる。その後、エージェントが目的地位置を利用する１つまたは複数の動作を完了した時など、目的地位置が再び使用可能になった後に、マルチエージェント・プランナは、目的地位置の周囲のエリアに対するブロックを開放でき、その結果、目的地位置の周囲のエリアは、ブロック解除され得るようになる。目的地位置がブロック解除される時に、マルチエージェント・プランナは、ブロックされた目的地位置エリアを使用し、おそらくは他のエージェントにより短いルート  目的地位置エリア  をとらせるために他のエージェントを再ルーティングすることができる。
【００９７】
［0112］  図８は、例の実施形態による、位置のブロックおよびブロック解除の方法８００の流れ図である。方法８００は、下で少なくとも図１４Ａの文脈で説明されるコンピューティング・デバイス１４００などのコンピューティング・デバイスによって実行され得る。具体的には、コンピューティング・デバイス１４００は、方法８００を実行するために本明細書で説明されるマルチエージェント・プランナを実施するソフトウェアを実行することができる。方法８００は、ロボットを用いる動作に関して説明されるが、方法８００の技法は、一般にエージェントに適用可能である。
【００９８】
［0113］  ブロック８１０では、マルチエージェント・プランナが、ロボットＲがロボットＲを含む複数のエージェントを有する環境の位置Ｌに接近しつつあることを判定することができる。
【００９９】
［0114］  ブロック８２０では、マルチエージェント・プランナが、ロボットＲの使用のために位置Ｌを予約することができ、位置Ｌを使用するようにロボットＲに指示することができる。たとえば、ロボットＲは、相対的に高優先順位のエージェントとすることができる。ロボットＲのために位置Ｌを予約することによって、マルチエージェント・プランナは、他のより低優先順位のロボットが、位置Ｌにいる間にロボットＲをブロックせず、他の形で干渉しないことを保証することができる。
【０１００】
［0115］  ブロック８３０では、マルチエージェント・プランナが、任意の他のロボットが、ロボットＲが位置Ｌにいる間に位置Ｌを使用することを計画しているかどうかを判定することができる。マルチエージェント・プランナは、ロボットＲが位置Ｌにどれほど長く留まるのかの推定値に基づいてこの判定を行うことができ、その推定値に基づいて、マルチエージェント・プランナは、位置Ｌがどれほど長くブロックされるのかの推定値を判定することができる。たとえば、ロボットＲが位置Ｌに６０秒間いると推定され、ロボットＲが位置Ｌで停止し、再始動し、位置Ｌから去るのに５秒を要すると推定される場合に、マルチエージェント・プランナは、位置Ｌが（約）６５秒間ブロックされると推定することができる。ある位置がどれほど長くブロックされるのかの推定のための他の技法も可能である。
【０１０１】
［0116］  マルチエージェント・プランナが、ロボットＲ以外の１つまたは複数のロボットが、ロボットＲが位置Ｌにいる間に位置Ｌを使用することを計画していると判定する場合に、マルチエージェント・プランナは、ブロック８４０に進むことができる。そうではない場合には、マルチエージェント・プランナは、ロボットＲだけが、ロボットＲが位置Ｌにいる間に位置Ｌを使用することを計画していると判定することができ、ブロック８５０に進むことができる。
【０１０２】
［0117］  ブロック８４０では、マルチエージェント・プランナが、ブロック８３０で議論したロボットＲが位置Ｌにいる間に位置Ｌを使用することを計画しているロボットＲ以外の１つまたは複数の他のロボットであるロボットＲ１、Ｒ２、…、Ｒｎを、位置Ｌから離れて再ルーティングすることができる。
【０１０３】
［0118］  ブロック８５０では、マルチエージェント・プランナが、位置Ｌを使用するようにロボットＲに指示することができる。位置Ｌに達した時に、ロボットＲは、位置Ｌで動作ＯＰを実行することができる。動作ＯＰの例は、位置Ｌのトラバース、位置Ｌにいる間に衝突領域および／またはレーンの予約を待つこと、および位置Ｌでのピック・アンド・プレース動作を含むが、これに限定はされない。いくつかの例で、より多数、より少数、および／または異なる動作が、位置Ｌで動作ＯＰとして用いられ得る。その後、マルチエージェント・プランナは、ロボットＲが位置Ｌで動作ＯＰを完了したと判定することができ、たとえば、ロボットＲが、動作ＯＰが完了されたとマルチエージェント・プランナに知らせることができ、かつ／またはマルチエージェント・プランナが、ロボットＲが位置Ｌで動作ＯＰを完了するための時間の長さを推定することができ、推定された長さの時間が満了し終える可能性がある。
【０１０４】
［0119］  ブロック８６０では、マルチエージェント・プランナが、動作ＯＰが位置Ｌにいる間にロボットＲによって完了されたと判定した後に、位置Ｌを去るようにロボットＲに指示することができる。ロボットＲが位置Ｌを去ったと判定する時に、マルチエージェント・プランナは、ロボットＲの使用のための位置Ｌの予約を除去することができる。
【０１０５】
［0120］  ブロック８７０では、位置Ｌの予約を除去した後に、マルチエージェント・プランナが、いずれかのロボットのいずれかのルートが位置Ｌを介する再ルーティングによって改善され得るかどうかを判定することができる。マルチエージェント・プランナは、位置Ｌを使用するルートＲ＿ＷＩＴＨ＿Ｌの推定時間Ｔ＿ＷＩＴＨ＿Ｌを判定することと、推定時間Ｔ＿ＷＩＴＨ＿Ｌを位置Ｌを使用しない対応するルートＲ＿ＷＩＴＨＯＵＴ＿Ｌの推定時間と比較することとに基づいてこの判定を行うことができる。Ｔ＿ＷＩＴＨ＿ＬがＴ＿ＷＩＴＨＯＵＴ＿Ｌ未満である場合には、マルチエージェント・プランナは、ルートＲ＿ＷＩＴＨ＿Ｌを使用するようにロボットを再ルーティングすることが、対応するルートＲ＿ＷＩＴＨＯＵＴ＿Ｌより改善するはずであると判定することができる。ロボットのルートが改善され得るかどうかを判定するための他の技法、たとえば、時間以外の判断基準および／または追加の判断基準に基づいて改善を判定する技法も可能である。
【０１０６】
［0121］  マルチエージェント・プランナが、ロボットＲ以外の１つまたは複数のロボットが、ロボットＲが位置Ｌにいる間に位置Ｌを使用することを計画していると判定する場合に、マルチエージェント・プランナは、ブロック８８０に進むことができる。そうではない場合には、マルチエージェント・プランナは、位置Ｌを使用するようにロボットを再ルーティングすべきではないと判定することができ、方法８００は、完了され得る。
【０１０７】
［0122］  ブロック８８０では、マルチエージェント・プランナが、位置Ｌを使用するように、対応するロボットＲ３、Ｒ４、…、Ｒｍの１つまたは複数のルートを更新することができる。というのは、これらの更新されるルートが、ブロック８７０で改善されると判定されたからである。マルチエージェント・プランナは、位置Ｌを使用するようにルーティングされるロボットＲ３、Ｒ４、…、Ｒｍの最高優先順位のロボットＲ＿ＨＩＰＲＩを判定し、ロボットＲ＿ＨＩＰＲＩの使用のために位置Ｌを予約することができる。ブロック８８０の手順の完了時に、補法８００は完了され得る。
【０１０８】
［0123］  図９は、例の実施形態による、エージェントの優先順位サイクル９００を示す。優先順位サイクル９００は、図９でロボットＲ１として示されるエージェントによって実行され得、ロボットＲ１に指示するマルチエージェント・プランナは、Ｒ１を含む複数のエージェントを有する環境内で動作している。優先順位サイクル９００は、ロボットを用いる動作に関して説明されるが、優先順位サイクル９００の技法は、一般にエージェントに適用可能である。いくつかの例では、マルチエージェント・プランナと環境内のエージェントの一部またはすべてとが、優先順位サイクル９００などの優先順位サイクルを実行しつつある可能性がある。
【０１０９】
［0124］  優先順位サイクル９００は、マルチエージェント・プランナが、新しいルートから始めるようにＲ１に指示する時に始まることができる。この時に、Ｒ１は、最小の優先順位、たとえば０の優先順位値を割り当てられ、優先順位は、非負の数を使用して示され、上で図３〜図６Ｆの文脈で議論した優先順位など、１０より高い優先順位値を表す１２の優先順位値など、より大きい優先順位値は、より高い優先順位を示す。ロボットは、初期優先順位として（たとえば、ロボットＲ１がその最初のルートに関してスケジューリングされる時）最小優先順位値を割り当てられ得、またはエージェントがそのルートを完了する時に発生する優先順位リセットの一部として割り当てられ得るのいずれかである。
【０１１０】
［0125］  ロボットＲ１がそのルートに沿って前進する時に、ロボットＲ１の優先順位値は、上で少なくとも図３および図４Ｂ〜図６Ｆの文脈で議論したように、ロボットがそのルート上で費やした時間の長さに基づくＲ１の優先順位値など、単調に増加することができる。途中で、ロボットＲ１は、上で少なくとも図３〜図６Ｆの文脈で議論したように、より高優先順位のロボット（１つまたは複数）がそのルートに沿って前進することを可能にするために、道を空け、かつ／または１つもしくは複数のより高優先順位のロボットＲ２…Ｒｎの道を外れて待つようにマルチエージェント・プランナによって指示され得る。ロボットＲ１がそのルートに沿って前進する時に、Ｒ１の優先順位は増加し、その結果、Ｒ１は、相対的に高優先順位のロボットになり、１つまたは複数のより低優先順位のロボットＲ３…Ｒｍは、道を空け、かつ／またはＲ１のルートから外れて待つように指示され得る。Ｒ１がその目的地に達した後に、Ｒ１の優先順位は、リセットされ得、優先順位サイクル９００の反復は、完了され得る。
【０１１１】
［0126］  図９は、優先順位サイクル９００の反復が、ブロック９１０で始まることができ、ここで、マルチエージェント・プランナは、ロボットＲ１に新しいルートを割り当てることができる。ロボットＲ１は、初期の問題として、たとえばロボットＲ１が最初に可動状態にされる時または前のルートの完了時に、新しいルートを割り当てられ得る。Ｒ１がそのルートを始める時に、その優先順位Ｐ１には、最小の優先順位値、たとえば図９に示されているように０がセットされ得る。Ｒ１がそのルートに沿って移動する時に、Ｐ１は増加することができ、Ｒ１が当初にそのルートを開始する時に、Ｐ１は、０の最小優先順位値より大きいＬｏｗＰｒｉ１の優先順位値に増加することができる。
【０１１２】
［0127］  ブロック９２０では、マルチエージェント・プランナが、優先順位Ｐ１＝ＬｏｗＰｒｉ１を有するＲ１に、その優先順位Ｐ２がＬｏｗＰｒｉ１より高い、より高優先順位のロボットＲ２を待ち、かつ／またはＲ２の道から外に移動するように指示することができる。ロボットＲ１が待ち、かつ／またはロボットＲ２の道から外に移動する時に、優先順位Ｐ１は、ＬｏｗＰｒｉ１より大きいＬｏｗＰｒｉ２の値に増加する。
【０１１３】
［0128］  ブロック９３０では、ロボットＲ１が、そのルートを進み続ける。優先順位Ｐ１は、ロボットＲ１が途中である時に、ＬｏｗＰｒｉ２より大きいＭｅｄｉｕｍＰｒｉの優先順位値に増加する。
【０１１４】
［0129］  ブロック９４０では、マルチエージェント・プランナが、優先順位Ｐ１＝ＭｅｄｉｕｍＰｒｉを有するＲ１に、その優先順位Ｐ３がＭｅｄｉｕｍＰｒｉ未満であるより低優先順位のロボットＲ３が待ち、かつ／またはロボットＲ１の道から外に移動する間にそのルートに沿って前進するように指示することができる。Ｒ１がそのルートに沿って前進する時に、優先順位Ｐ１は、ＭｅｄｉｕｍＰｒｉより大きいＨｉＰｒｉ１の値に増加する。
【０１１５】
［0130］  ブロック９５０では、ロボットＲ１が、そのルートを進み続ける。優先順位Ｐ１は、ロボットＲ１が途中である時に、ＨｉＰｒｉ１より大きいＨｉＰｒｉ２の優先順位値に増加する。いくつかの例では、ロボットＲ１は、環境内の最高優先順位のロボットになることができ、環境内の他のすべてのロボットは、マルチエージェント・プランナによって、待ち、かつ／またはロボットＲ１の道から外に移動するように指示され得る。
【０１１６】
［0131］  ブロック９６０では、ロボットＲ１が、ルートの目的地位置に達することによって、そのルートを完了する。いくつかの例では、ロボットＲ１は、途中でおよび／または目的位置で、１つまたは複数のピック・アンド・プレース動作など、１つまたは複数の動作の一部またはすべてを実行することができる。特定の例では、ロボットＲ１などのエージェントのルートは、エージェントがルートの目的地位置に達した時に完了されたと考えられ得る。他の例では、エージェントのルートは、エージェントが目的地位置ですべての動作を完了した時に完了されたと考えられ得る、すなわち、ルートは、エージェントが新しいルートの準備ができた時に完了される。さらなる他の例では、エージェントのルートは、エージェントが目的地位置に達し、目的地位置を去る準備ができまたは少なくともある長さの時間だけ目的地位置にいたのいずれかである時に、完了されたと考えられ得る。時間の長さは、エージェントが目的位置ですべての動作を完了するのにどれほど長い時間を必要とするのかの推定値に基づく、および／または他の形で判定される（たとえば、別のルートが使用可能になるまで待つ時間の長さ）時間の所定の長さ（たとえば、５秒、６０秒、３分）とすることができる。ルートの完了時に、ロボットＲ１の優先順位Ｐ１は、最小の優先順位値にリセットされ得る。
【０１１７】
［0132］  ブロック９７０では、マルチエージェント・プランナが、新しいルートがロボットＲ１に関して使用可能であるかどうかを判定することができる。新しいルートがＲ１に関して使用可能である場合には、マルチエージェント・プランナおよびＲ１は、ブロック９１０に進み、優先順位サイクル９００の別の反復を開始することができる。新しいルートがＲ１に関して使用可能ではない場合には、マルチエージェント・プランナは、ルート上での前進に関連しない１つまたは複数の動作を実行する（たとえば、シャット・ダウンし、診断／保守を実行し、待機エリアに進む、ことによって優先順位サイクル９００を終了する）ようにＲ１に指示することができる。他の例では、マルチエージェント・プランナおよび／またはＲ１は、ブロック９７０に示された、新しいルートが使用可能ではないこと以外の理由（たとえば、Ｒ１が保守のためにスケジューリングされている、環境内の障害物の存在がマルチエージェント・プランナによって指示されるエージェントの個数を減らす、ピック・アンド・プレース動作に関する材料が使用可能ではないなど）から優先順位サイクル９００を終了することができる。
【０１１８】
ロボット・デバイスのシステム設計
［0133］  図１０は、例の実施形態による、システム１０００のブロック図である。システム１０００は、プラニング・システム１０１０およびロボット・デバイス１０２０を含む。プラニング・システム１０１０は、環境内で動作する１つまたは複数のロボット・デバイスの動きを調整することのできるオフボード・プランナ１０１２を含むことができる。オフボード・プランナ１０１２は、道路地図プランナ１０１４を含むことができる。オフボード・プランナ１０１２および／または道路地図プランナ１０１４は、ロボット・デバイス１０２０などのロボット・デバイスが環境内で動作している間に従うべき１つまたは複数の非同期経路１０１６を生成することができる。
【０１１９】
［0134］  道路地図グラフ、プロトタイプ・グラフ、または下で図１２の文脈で議論するプロトタイプ・グラフ１２００など、環境を表す他の道路地図が、受け取られ、判定され、または他の形でプラニング・システム１０１０、オフボード・プランナ１０１２、および／または道路地図プランナ１０１４に供給され得る。非同期経路１０１６は、道路地図グラフ、プロトタイプ・グラフ、または他の道路地図に基づく１つまたは複数の経路とすることができる。たとえば、道路地図グラフ、プロトタイプ・グラフ、または他の道路地図が、複数の交差点を接続する複数のエッジを有する場合に、非同期経路１０１６は、複数のエッジおよび／または複数の交差点に関して指定され得る。
【０１２０】
［0135］  いくつかの例で、オフボード・プランナ１０１２および／または道路地図プランナ１０１４は、マルチエージェント・プランナの本明細書で説明される機能性の一部またはすべてを含むことができる。これらの例では、道路地図グラフ、プロトタイプ・グラフ、または他の道路地図は、複数の交差点を接続する複数のエッジおよび／または複数のレーンを有することができ、たとえば、オフボード・プランナ１０１２および／または道路地図プランナ１０１４は、道路地図３１０、４０２、５０２、６０２、および７２０のうちの１つまたは複数を利用するマルチエージェント・プランナとして働くことができる。特にこれらの例では、非同期経路１０１６のうちの１つまたは複数が、１つまたは複数のレーン、非レーン・エッジ、および／またはハイパーエッジを含むことができ、ここで、ハイパーエッジは、上で、少なくとも上の図１の文脈で議論される。特にこれらの例では、非同期経路１０１６のうちの１つまたは複数は、１つのエージェントのハイパーエッジの時間順序付けされたシーケンスを含むことができ、ここで、ハイパーエッジの時間順序付けされたシーケンス内のハイパーエッジは、その完了時間の順であると考えられ得る。他の例では、１つまたは複数のロボット・デバイス１０２０は、ロボット１１０、１２０、１３０、１４０、２１４、２２４、２３４、２４４、３３０、３３２、４１４、４１６、４２４、４２６、４３４、４３６、４４４、４４６、４７０、４７２、４７４、４７６、５１０、５２０、５３０、５５０、６１０、および６２０のうちの１つまたは複数の本明細書で説明される機能性を実行することができる、すなわち、ロボット１１０〜６２０のうちの１つまたは複数は、ロボット・デバイス１０２０として実施され得る。
【０１２１】
［0136］  ロボット・デバイス（１つまたは複数）１０２０は、オンボード・ソフトウェア１０３０および／またはハードウェア１０５０を含むことができる。オンボード・ソフトウェア１０３０は、位置特定サブシステム１０３２、障害物検出サブシステム１０３４、走行距離計測サブシステム１０３６、経路追従サブシステム１０３８、および軌道追従サブシステム１０４２のうちの１つまたは複数を含むことができる。位置特定サブシステム１０３２は、ロボット・デバイスの位置を特定するすなわち、環境内のロボット・デバイスの位置を判定するのに使用され得る。位置特定サブシステム１０３２は、ロボット・デバイスの位置を特定し、ロボット・デバイスが非同期経路１０１６などの経路に追従するのを援助し、かつ／またはロボット・デバイスが軌道１０４０などの軌道に追従するのを援助するのに使用され得る、ロボット・デバイスおよび／または他の物体の位置推定値を生成することができる。位置推定値が生成された後に、位置特定サブシステム１０３２は、位置推定値を経路追従サブシステム１０３８に供給することができる。
【０１２２】
［0137］  非同期経路または省略して経路は、ロボット・デバイス１０２０が出発点ＳＰから終点ＥＰへどのように移動できるのかを示す時間不変のプランまたは他の情報とすることができる、すなわち、（非同期）経路は、時間を考慮に入れない。対照的に、軌道は、ロボット・デバイス１０２０がプラニング時間間隔の間に従うことのできるステアリング角の値およびトラクション・モーター速度の値を含むことができる。
【０１２３】
［0138］  プラニング時間間隔は、ロボット・デバイスが経路、ルート、および／または移動に従うために案内されまたは計画される、使用される時間の持続時間とすることができる。いくつかの実施形態で、プラニング時間間隔は、所定の長さの時間、たとえば５秒、１秒、０．２秒、０．１秒とすることができる。具体的には、所定のプラニング時間間隔は、プラニング時間間隔の値を指定するユーザ入力に基づいて決定され得る。他の実施形態では、プラニング時間間隔は、１つまたは複数の他の値、たとえば、ステッチ時間、均一なエッジ（または経路）コストに関連する時間、軌道に沿って移動するための推定時間に基づいて決定され得る。プラニング時間間隔およびプラニング時間間隔の値を決定するための他の技法も可能である。
【０１２４】
［0139］  次に、１つの軌道が、ロボット・デバイス１０２０が時間変動する形で出発点ＳＰから終点ＥＰへどのように移動できるのかを記述するのに使用され得る。いくつかの実施形態では、軌道は、ロボット・デバイス１０２０の他の運動学変数（たとえば、速度および加速度）およびロボット・デバイス１０２０のアクチュエータ位置などであるがこれに限定されない、プラニング時間間隔にわたるステアリング角およびトラクション・モーター速度以外の変数の値に関する情報をも提供することができる。
【０１２５】
［0140］  一例として、位置「自宅」から位置「職場」まで自動車を運転する経路は、人または自律車両の制御デバイスなどの制御エンティティが自宅から職場まで自動車を運転するのに使用できる街路の順序付きリスティングを含むことができる。この例では、自宅から職場までの軌道は、制御エンティティが自宅から職場まで自動車を運転するのに使用できる速度および／または加速度を指定する１つまたは複数の命令を含むことができる。いくつかの例で、軌道は、交通、障害物、気象、および他の時間に敏感な条件を考慮に入れることができ、たとえば、自宅から職場に行く軌道は、制御エンティティが「２０ＭＰＨ以下で１０秒間右に旋回し」、「５５ＭＰＨまで加速し、３秒間直進し」、「３０秒以内に２０ＭＰＨまで減速し」、「２０ＭＰＨ以下で１０秒間左に旋回する」ことなどを示すことができる。いくつかの実施形態で、軌道は、たとえば障害物、経路の変化などを考慮に入れるために、進行中に変更され得る。
【０１２６】
［0141］  障害物検出サブシステム１０３４は、１つまたは複数の障害物がロボット・デバイス１０２０の経路および／または軌道をブロックしているかどうかを判定することができる。これらの障害物の例は、パレット、パレットから落ちた可能性がある物体、ロボット・デバイス、および環境内で働いている人間のオペレータを含むことができるが、これに限定はされない。障害物が検出される場合に、障害物検出サブシステム１０３４は、障害物検出を示す１つまたは複数の通信を経路追従サブシステム１０３８に供給することができる。障害物検出を示す１つまたは複数の通信は、障害物検出サブシステム１０３４によって検出された１つもしくは複数の障害物の１つもしくは複数の位置に関する位置情報および／または障害物検出サブシステム１０３４によって検出された１つもしくは複数の障害物に関する識別情報を含むことができる。走行距離計測サブシステム１０３６は、サーボ・ドライブ１０５２からのデータなどのデータを使用して、ロボット・デバイス１０２０の位置の１つまたは複数の経時的な変化を推定することができる。
【０１２７】
［0142］  経路追従サブシステム１０３８および／または軌道追従サブシステム１０４２は、ロボット・デバイス１０２０に搭載されたプランナとして働くことができる。このオンボード・プランナは、位置特定サブシステム１０３２によって供給される位置推定値に基づいて、非同期経路１０１６などの１つまたは複数の経路に追従することができる。
【０１２８】
［0143］  経路追従サブシステム１０３８は、非同期経路１０１６、位置特定サブシステム１０３２からの位置推定値入力、障害物検出サブシステム１０３４からの１つもしくは複数の障害物の１つもしくは複数の位置に関する位置情報、および／または走行距離計測サブシステム１０３６からの１つまたは複数の位置変化に関する情報を受け取り、出力として１つまたは複数の軌道１０４０を生成することができる。
【０１２９】
［0144］  ハードウェア１０５０は、サーボ・ドライブ１０５２および／またはモーター１０５４を含むことができる。サーボ・ドライブ１０５２は、１つまたは複数のサーボ・ドライブを含むことができる。サーボ・ドライブ１０５２は、１つまたは複数のサーボ機構に電力を供給するのに使用される電子増幅器を含むことができ、かつ／またはサーボ機構（１つまたは複数）からのフィードバック信号を監視することができる。サーボ・ドライブ１０５２は、オンボード・ソフトウェア１０３０から軌道１０４４などの制御信号を受け取ることができ、制御信号に比例する動きを作るためにサーボ機構（１つまたは複数）に電流を供給することができる。いくつかの実施形態で、サーボ・ドライブ１０５２は、サーボ機構（１つまたは複数）から受け取られた状況情報を軌道１０４４によって指令された期待される状況と比較することができる。その後、サーボ・ドライブ１０５２は、受け取られた状況情報と期待される状況との間の逸脱を補正するために、供給される電流の電圧周波数またはパルス幅を調整することができる。他の実施形態では、サーボ・ドライブ１０５２は、フィードバック信号および／または位置関連情報などの情報をオンボード・ソフトウェア１０３０に供給することができる。
【０１３０】
［0145］  １つまたは複数のモーター１０５４は、サーボ・ドライブ１０５２によって電力を供給されるサーボ機構（１つまたは複数）の一部またはすべてとすることができる。たとえば、モーター１０５４は、サーボ・ドライブ１０５２によって供給される電流を使用して、ロボット・デバイス１０２０の一部またはすべてを駆動する機械力を生成することができ、たとえば、モーター１０５４は、ロボット・デバイス１０２０を推進させる力を供給し、かつ／またはロボット・デバイス１０２０の１つまたは複数のエフェクタを駆動することができる。
【０１３１】
［0146］  倉庫、オフィス・ビルディング、もしくは家などの屋内セッティングおよび／または公園、駐車場、もしくは庭などの屋外セッティングを含む環境などの環境内のロボット・デバイスの経路プラニングは、道路地図グラフに関して実行され得、この道路地図グラフは、ロボット・デバイス（ロボット）などのエージェントが追従できる経路および／またはレーンの連結グラフである。自由空間手法を採用するのではなく環境内のエージェント・ルーティングを計画するのに道路地図グラフを使用することは、総プラニング状態空間を縮小し、したがって、大規模マルチ・エージェント調整を御しやすいものにすることができる。さらに、道路地図グラフの使用は、オペレータが、ロボット・デバイスがその中でナビゲートすることを可能にされるエリアを直観的に制御することを可能にすることができる。そのような経路プラニングは、少なくとも部分的に、本明細書で説明されるマルチエージェント・プランナによって実行され得る。
【０１３２】
［0147］  道路地図グラフ生成は、まず、プロトタイプ・グラフの生成を含むことができ、このプロトタイプ・グラフは、レーンのおおまかな位置および移動の方向を示す。いくつかの例で、プロトタイプ・グラフは、ロボット・デバイスのレーンおよび移動の方向を示す有向グラフとすることができる。他の例では、プロトタイプ・グラフは、環境の地図または図面に基づいて手作業で生成され得る。さらなる例では、プロトタイプ・グラフは、上で図７Ａ〜図７Ｄの文脈で議論したものなど、１つまたは複数のレーンを用いて注釈を付けられた道路地図とすることができる。
【０１３３】
［0148］  図１１は、例の実施形態による、１つまたは複数の倉庫を運営するシステム１１００を示す。システム１１００は、倉庫管理システム１１１０、プラニング・システム１０１０、およびロボット・デバイス１０２０を含む。倉庫管理システム１１１０は、倉庫に関連する１つまたは複数の物流要求１１１２、たとえば、倉庫内に１つもしく複数の品目を貯蔵する要求および／または倉庫から１つもしく複数の品目を出荷する要求を受け取ることができる。倉庫管理システム１１１０は、物流要求１１１２を１つまたは複数のアクション１１１４に変換することができ、ここで、アクション１１１４は、１つまたは複数の指定されたエージェントを１つまたは複数の指定された位置に移動する「〜に移動」アクションと、１つまたは複数の品目を１つまたは複数の指定された位置に運ぶ「輸送」アクションとを含むことができるが、これに限定はされない。いくつかの例で、アクション１１１４は、｛エージェントＩＤ、目的地｝の形の、〜に行くコマンドとすることができるが、「パレットを移動」などの他のアクションが可能である。しかし、これらは、通常は〜に移動コマンドに分解可能である（ピック位置に移動、プレース位置に移動）。
【０１３４】
［0149］  プラニング・システム１０１０は、オフボード・プランナ１０１２およびエクスキュータ１１２０を含む。オフボード・プランナ１０１２は、入力としてアクション１１１４を受け取り、倉庫内で動作する１つまたは複数のエージェント、たとえば複数のロボット・デバイスがアクション１１１４を実行するための１つまたは複数の調整された経路１１１６を生成することができる。調整された経路１１１６は、倉庫内のすべてのエージェントが物流要求１１１２を満足するための調整されたアクション・プランの一部とすることができる。調整されたアクション・プランは、エージェントの先行を考慮に入れることができ、たとえば、ロボット・デバイスＲＤ１およびＲＤ２が、両方ともほぼ同時にある点に達すると期待される場合に、ロボット・デバイスの一方は、ロボット・デバイスＲＤ２がその点を通過するのを待つロボット・デバイスＲＤ１（またはその逆）など、他方に対する先行または優先順位を有することができる。エクスキュータ１１２０は、物流要求１１１２を満足するためにアクション１１１４を実行するために調整されたアクション・プランのロボット・デバイス１０２０の部分を達成する際にロボット・デバイス１０２０に指示するために、調整された経路１１１６を受け取り、衝突しない副経路１１２２を生成することができる。
【０１３５】
［0150］  いくつかの例で、オフボード・プランナ１０１２は、マルチエージェント・プランナとして働き、倉庫内で動作する１つまたは複数のエージェントの調整されたアクション・プランを生成することができる。これらの例では、オフボード・プランナ１０１２は、少なくとも、１つまたは複数のエージェントのそれぞれのルートを含む調整されたアクション・プランを判定することができ、各エージェントに単調増加する優先順位値、たとえば上で少なくとも図３、図４Ｂ〜図６Ｆ、および図９の文脈で議論した、エージェントがそのルート上で費やした時間の長さを割り当てることができる。また、オフボード・プランナ１０１２は、上で少なくとも図３〜図７Ｄの文脈で議論したように、１つまたは複数のレーンを含む道路地図に基づいて調整されたアクション・プランを判定することができる。その後、１つまたは複数のレーンを含む道路地図を使用することと、単調増加する優先順位値を有するエージェントのルートを判定することとによって、オフボード・プランナ１０１２は、上で図２〜図９の文脈で説明した技法を使用して、１つまたは複数のエージェントの間でのデッドロックを回避する調整されたアクション・プランを判定することができる。
【０１３６】
［0151］  上で図１１に示されているように、オフボード・プランナ１０１２およびエクスキュータ１１２０を含むプラニング・システム１０１０は、ロボット・デバイス１０２０と通信することができる。いくつかの実施形態では、ロボット・デバイスは、たとえば任意の米国労働安全衛生局（ＯＳＨＡ）クラス１またはクラス３動力式産業車両などのフォーク・トラックとすることができる。他の実施形態では、プラニング・システム１０１０は、「クラウド」（たとえば、１つまたは複数のネットワーク接続されたコンピューティング・デバイス）内に配置され、かつ／またはロボット・デバイス１０２０と同一位置に配置された敷地上のどこかに配置された１つまたは複数のネットワーク接続されたコンピューティング・デバイスを使用して実行するソフトウェアを含むことができる。
【０１３７】
［0152］  図１２は、例の実施形態による、ネットワーク１２１８を使用して接続された、物流インターフェース１２１０、倉庫管理システム１１１０、および１つまたは複数のロボット・デバイス１０２０を含むシステム１２００を示す。物流インターフェース１２１０は、倉庫管理システム１１１０へのパレットなどの物体および／またはロボット・デバイスの移動に関する在庫調べ課題命令をネットワーク１２１８を介して倉庫管理システム１１１０に供給することができる。例の在庫調べ課題は、タイプＢの品目を含むパレットＡを位置Ｃに持ってくることとすることができる。
【０１３８】
［0153］  倉庫管理システム１１１０は、物流インターフェース１２１０から在庫調べ課題命令を受け取り、１つまたは複数の課題／任務命令（たとえば、パレットＢを位置Ｃから位置Ｄに移動する、ロボット・デバイスＡへの命令）および／または在庫調べ課題命令を実行するためにロボット・デバイス（１つまたは複数）１０２０を制御するためのプランを生成することができる。課題／任務命令および／またはプランは、１つもしくは複数の経路および／または１つもしくは複数の軌道に関する情報を含むことができ、課題／任務命令（１つまたは複数）、プラン（１つまたは複数）、経路（１つまたは複数）、および軌道（１つまたは複数）は、図１０および図１１の文脈で議論した技法を使用して、倉庫管理システム１１１０のプラニング・システム１０１０によって生成される。
【０１３９】
［0154］  たとえば、倉庫管理システム１１１０は、１つまたは複数のコンピューティング・デバイス、たとえばサーバ・コンピューティング・デバイス上で走行し、これを使用してデータを記憶する、集中化された制御サービスとすることができる。これらの課題を実行するために、倉庫管理システム１１１０は、ＷＭＳミドルウェアを含むことができ、システム１２００を監視し、管理するツールへのアクセスを提供するためにユーザ・インターフェースを提供することができる。ＷＭＳミドルウェアおよび／または倉庫管理システム１１１０の他のコンポーネントは、ロボット・デバイスの経路、ポーズ、および／または軌道への課題／任務命令（たとえば、パレットＢを位置Ｃから位置Ｄに移動する、ロボット・デバイスＡへの命令）の間の変換、在庫調べ課題と課題／任務命令との間の変換、ならびにアプリケーション・プログラミング・インターフェース（ＡＰＩ）の間の変換のためのプロトコル変換ＡＰＩなど、１つまたは複数のＡＰＩを使用することができる。
【０１４０】
［0155］  倉庫管理システム１１１０によって提供されるユーザ・インターフェースは、ロボット・デバイス（１つまたは複数）１０２０の監視、たとえば１つまたは複数のロボット・デバイスの位置、バッテリ状況、充電の状況などに関するデータを提示することと、在庫調べ課題命令（１つまたは複数）、課題／任務命令（１つまたは複数）、プラン（１つまたは複数）、経路（１つまたは複数）、および／または軌道（１つまたは複数）の生成およびロボット・デバイス（１つまたは複数）１０２０のうちの１つまたは複数への送出を可能にすることと、１つまたは複数の倉庫地図、パレット、ネットワーク、および／またはプラニング・システム（たとえば、プラニング・システム１０１０、倉庫管理システム１１１０、および／または物流インターフェース１２１０）に関するデータの再検討、更新、削除、および／または挿入とを含むがこれに限定されない、システム１２００の１つまたは複数のユーザ・インターフェース機能を提供することができる。
【０１４１】
［0156］  いくつかの実施形態では、倉庫管理システム１１１０は、物流インターフェース１２１０とロボット・デバイス（１つまたは複数）１０２０との間ならびにロボット・デバイス（１つまたは複数）１０２０のうちの２つ以上の間で通信をルーティングし、ロボット・デバイス（１つまたは複数）１０２０のうちの１つまたは複数に搭載されたオンボード・システム１２２０などの１つまたは複数のオンボード・システムを管理することができる。他の実施形態では、倉庫管理システム１１１０は、ロボット・デバイス（１つまたは複数）１０２０のうちの１つまたは複数による課題／任務命令の完了に関するデータと、ロボット・デバイスが初期化され／ブートされた位置を示すデータを含む、ロボット・デバイス（１つまたは複数）１０２０の一部またはすべての位置および／またはポーズに関するデータと、人間のアクション、インシデント分析、および／またはデバッグのための１つまたは複数の監査証跡に関するデータと、状態追跡のためのデータなどであるがこれに限定されない、システム１２００に関するデータを記憶し、生成し、読み取り、書き込み、更新し、かつ／または削除することができる。他の実施形態では、倉庫管理システム１１１０は、ロボット・デバイス（１つまたは複数）１０２０および１つまたは複数のアダプタと通信する中央メッセージ・ルータ／永続マネージャを含むことができる。１つまたは複数のアダプタのそれぞれは、倉庫管理システム１１１０から使用可能なシステム１２００のデータおよび／または通信へのアクセスを提供することができ、上述のユーザ・インターフェースのためのユーザ・インターフェース・サービス・アダプタ、システム１２００に関する情報へのワールド・ワイド・ウェブ（ＷＷＷ）／インターネット・アクセスを可能にするウェブ・コンテンツ・サービス・アダプタ、メッセージ・プロキシ・アダプタ、ならびに／またはＡＰＩおよび／もしくはＷＭＳの間の通信の間の媒介物として働くＷＭＳアダプタを含むことができるが、これに限定はされない。
【０１４２】
［0157］  さらなる他の実施形態では、プラニング・システム１０１０および／または倉庫管理システム１１１０は、上で図７Ａ〜図７Ｄの文脈で議論した道路地図エディタ７１０などの道路地図エディタの機能性の一部またはすべてを含むことができる。
【０１４３】
［0158］  図１２は、１つまたは複数のロボット・デバイス１０２０のそれぞれが、オンボード・システム１２２０、ネットワーク・スイッチ１２３０、車両コントローラ１２３２、プログラマブル論理コントローラ（ＰＬＣ）１２３４、車両マスタ１２３６、１つまたは複数のデバイス・センサ１２３８、および１つまたは複数のドライブ１２４０のうちの１つまたは複数を含むことができることを示す。
【０１４４】
［0159］  オンボード・システム１２２０は、ロボット・デバイス１０２０への設置およびこれと共の使用のために構成された、ロボット・プラニング用の計算およびセンサ・パッケージとすることができ、オンボード・システム１２２０は、オンボード・センサ１２２２および１つまたは複数のプラニング／実行プロセッサ１２２４を含むことができる。図１２はまた、オンボード・システム１２２０が、少なくとも、プラニング・システム１０１０（ネットワーク１２１８を介して）、デバイス・センサ１２３８、および／またはロボット・デバイス１０２０の１つもしくは複数のアクチュエータと通信するのにネットワーク・スイッチ１２３０を使用するように構成されていることを示す。
【０１４５】
［0160］  オンボード・システム１２２０は、ロボット・デバイス１０２０の位置特定と、倉庫管理システム１１１０によって提供される経路および／または軌道に沿ったプランおよび／または移動を実行するためのローカル軌道の生成と、１つまたは複数の（ローカル）軌道に追従するためのドライブ１２４０へのコマンドの生成と、ロボット・デバイス１０２０のアクチュエータ（１つまたは複数）を制御するコマンドの生成と、倉庫管理システム１１１０へのポーズ、状況、および／または他の情報の報告とのうちの１つまたは複数の責任を負うものとすることができる。
【０１４６】
［0161］  オンボード・センサ１２２２は、ナビゲーションおよび／またはオンボード・システム１２２０の制御のための、１つまたは複数のナビゲーション・レーザー、レーザー・スキャナ、カメラ、および／または他のセンサを含むことができる。たとえば、ロボット・デバイス（１つまたは複数）１０２０のロボット・デバイスは、ドイツ国ヴァルトキルヒのＳＩＣＫ  ＡＧ、日本国大阪の北陽電機株式会社、および／または日本国大阪の株式会社キーエンスによって提供される１つまたは複数のレーザー・スキャナなどの１つまたは複数のレーザー・スキャナを含むことができる。レーザー・スキャナは、ロボット・デバイスの移動の方向ならびにロボット・デバイスの側面、角、および／または背面に沿った障害物検出および／または障害物回避に使用され得る。レーザー・スキャナは、反射器ベースの位置特定を使用してロボット・デバイスの位置を特定するのにも使用され得る。いくつかの実施形態では、レーザー・スキャナの代わりにまたはこれと共に、カメラおよび／または他のセンサが、障害物検出、障害物回避、および／または位置特定に使用され得る。
【０１４７】
［0162］  プラニング／実行プロセッサ（１つまたは複数）１２２４は、少なくともオンボード・センサ１２２２に接続された１つまたは複数のコンピュータ・プロセッサを含むことができる。プラニング／実行プロセッサ（１つまたは複数）１２２４は、オンボード・センサ１２２２からデータを読み取り、ロボット・デバイス１０２０を動かすためにローカル軌道および／またはドライブ（１つまたは複数）１２４０へのコマンドを生成し、倉庫管理システム１１１０と通信することができる。ローカル軌道は、ロボット・デバイス１０２０が開始ポーズで開始し、ある時に終了ポーズに達する軌道である。いくつかの例で、開始ポーズは、暗黙のうちに指定され得、たとえば、開始ポーズは、ロボット・デバイス１０２０の現在のポーズとすることができ、したがって、ローカル軌道は、その開始ポーズがロボット・デバイス１０２０の現在のポーズであるという仮定に基づくものとすることができる。
【０１４８】
［0163］  プラニング／実行プロセッサ（１つまたは複数）１２２４は、コンポーネント・フレームワークを利用することができる。コンポーネント・フレームワークは、米国バージニア州オナンコックのｂｏｏｓｔ．ｏｒｇによって提供される「ｂｏｏｓｔ：：ａｓｉｏ」ソフトウェア・ライブラリおよび「ｂｏｏｓｔ：：ｓｉｇｎａｌｓ２」ソフトウェア・ライブラリなど、ロボット・デバイス１０２０の一貫した非同期モデルを提供するように構成された入出力（Ｉ／Ｏ）およびシグナリングのためのソフトウェア・ライブラリ上で構築されたマルチスレッド・ジョブ・スケジューリングおよびメッセージ・パッシング・システムとすることができる。コンポーネント・フレームワークは、ソフトウェア・コンポーネントがスレッド・セーフな形で並列に実行され得るようにするために、ソフトウェア・コンポーネント（またはモジュール）の間の通信を可能にすることができる。
【０１４９】
［0164］  コンポーネント・フレームワークは、状態機械コンポーネント、位置特定コンポーネント、プラニング・コンポーネント、および軌道追従コンポーネントのうちの１つまたは複数を含むことができる。状態機械コンポーネントは、車両初期化、車両指令、および障害処理のためにロボット・デバイス１０２０の状態を管理することができる。状態機械コンポーネントは、ロボット・デバイスの状態を管理するのに決定性有限オートマトンまたは他の状態機械を使用することができる。
【０１５０】
［0165］  位置特定コンポーネントは、車両センサからデータを読み取り、ロボット・デバイス１０２０のポーズを判定するためにロボット・デバイス１０２０の以前の状態情報を統合することができる。車両センサ・データは、車両センサによって検出された１つまたは複数のランドマーク／関心地点を示すことができる。代替案では、車両センサからのデータは、位置特定コンポーネントが車両センサ・データに基づいて１つまたは複数のランドマーク／関心地点を検出するように、処理を必要とする場合がある。ポーズは、パレットまたは他の物体など、１つまたは複数の検出されたランドマーク／関心地点に対して相対的に判定され得る。プラニング・コンポーネントは、倉庫管理システム１１１０から１つまたは複数の目標を受け取り、これらの目標を達成するためにロボット・デバイス１０２０のローカル軌道を判定することができる。いくつかの実施形態で、ローカル軌道は、ロボット・デバイス１０２０が所定の長さの時間（たとえば、１００ミリ秒、２００ミリ秒、５００ミリ秒、１秒、５秒）に追従すべき短期軌道とすることができる。軌道追従コンポーネントは、プラニング・コンポーネントによって生成されたローカル軌道を受け取り、ローカル軌道に沿って移動するためのドライブ制御命令を生成することができる。ドライブ制御命令はその後、ドライブ１２４０に中継され、ロボット・デバイス１０２０のトラクション・モーターおよび他のアクチュエータを制御する。
【０１５１】
［0166］  ネットワーク・スイッチ１２３０は、ロボット・デバイス（１つまたは複数）１０２０の通信を可能にすることができる。これらの通信は、オンボード・システム１２２０とロボット・デバイス１０２０の残り（たとえば、デバイス・センサ１２３８およびドライブ１２４０）との間の通信、ならびにネットワーク１２１８を介する倉庫管理システム１１１０との通信を含むことができるが、これに限定はされない。たとえば、ネットワーク・スイッチ１２３０は、有線ネットワークへのイーサネットおよび／もしくは他の有線通信インターフェース（１つまたは複数）を介して、ならびに／または台湾新北市のＰＬＡＮＥＴ  Ｔｅｃｈｎｏｌｏｇｙ  ＣｏｒｐｏｒａｔｉｏｎによるＰＬＡＮＥＴ  Ｅｔｈｅｒｎｅｔ  Ｓｗｉｔｃｈなどの無線ネットワークへのＷｉ−Ｆｉ（商標）および／もしくは他の無線通信インターフェース（１つまたは複数）を介して、伝送制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）ベースの通信を可能にすることができる。
【０１５２】
［0167］  いくつかの実施形態では、ロボット・デバイス（１つまたは複数）１０２０とプラニング・システム１０１０との間の通信は、リモート・プロシージャ・コール（ＲＰＣ）を含むことができる。リモート・プロシージャ・コールは、プラニング・システム１０１０のソフトウェアによるロボット・デバイス（１つまたは複数）１０２０のうちの１つまたは複数に常駐するソフトウェア手続き、メソッド、および／または関数の呼出しおよびその逆の呼出しを可能にすることができる。リモート・プロシージャ・コールは、ＴＣＰ／ＩＰ、ＨＴＴＰ  １．０および／もしくはＨＴＴＰ  ２．０などのハイパーテキスト転送プロトコル（ＨＴＴＰ）、ならびに／または別の通信プロトコルなどの通信プロトコルに基づくものとすることができる。リモート・プロシージャ・コールの一部またはすべては、暗号化されたデータを含むことができ、そのようなデータは、Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ（ＳＳＬ）、Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ（ＴＬＳ）、ならびに／または１つもしくは複数の他の暗号化アルゴリズムおよび／もしくはプロトコルを使用して暗号化され得る。暗号化されたデータが使用される実施形態では、プライベート認証局などの１つまたは複数の認証局が、データの暗号化および／または暗号化されたデータの暗号化解除に使用される１つまたは複数の証明書を認証することができる。認証局は、１つまたは複数の証明書へのアクセスを制御するのにアクセス制御リスト（ＡＣＬ）を使用することができる。リモート・プロシージャ・コールは、ＲＰＣ関連通信にリクエスト／レスポンス・プロトコルおよび／または二方向ストリーミング・プロトコルを使用することができる。二方向ストリーミング・プロトコルがＲＰＣ関連通信に使用される実施形態では、単一の超寿命ＲＰＣが、二方向ストリーミング・プロトコルを実施するのに使用され得る。
【０１５３】
［0168］  車両コントローラ１２３２および／またはプログラマブル論理コントローラ１２３４は、ロボット・デバイス（１つまたは複数）１０２０の電気およびセンサ管理機能性を提供することができる。電気およびセンサ管理機能性は、電気負荷制御、照明制御、センサ制御、センサおよび／またはスイッチ信号処理、ならびに電力管理の機能性を含むことができるが、これに限定はされない。車両マスタ１２３６は、ロボット・デバイス（１つまたは複数）１０２０の、リフト・デバイスなどの１つまたは複数のアクチュエータを制御する機能性を提供することができる。
【０１５４】
［0169］  デバイス・センサ（１つまたは複数）１２３８は、ロボット・デバイス（１つまたは複数）１０２０の制御および／または操作に関連するデータを提供することができる。データは、位置特定情報、位置推定値、およびマッピング・データなどであるがこれに限定されない、ロボット・デバイス（１つまたは複数）１０２０の周囲の環境に関する情報を提供することができる。たとえば、デバイス・センサ（１つまたは複数）１２３８は、１つまたは複数のレーザー（たとえば、２次元（２Ｄ）レーザー、セーフティ・レーザー、レーザー・スキャナ）、カメラ（たとえば、飛行時間（ＴｏＦ）カメラ、赤緑青（ＲＧＢ）カメラ、サーマル・カメラ）、電気センサ、近接センサ、ナビゲーション・デバイス、および位置センサを含むことができる。
【０１５５】
［0170］  ドライブ（１つまたは複数）１２４０は、ロボット・デバイス（１つまたは複数）１０２０を動かす機能性を提供する１つまたは複数のドライブ・コントローラおよび／またはアクチュエータを含むことができる。ドライブ・コントローラは、ロボット・デバイス（１つまたは複数）１０２０の動きを制御するためにドライブ・アクチュエータに指示することができる。ドライブ・アクチュエータは、１つまたは複数のトラクション・モーター、電気駆動、油圧駆動、および空圧駆動を含むことができる。
【０１５６】
［0171］  図１３は、例の実施形態による、ロボット・デバイス（１つまたは複数）１０２０のロボット・デバイス・アーキテクチャ１３００を示す。ロボット・デバイス（１つまたは複数）１０２０のロボット・デバイス・アーキテクチャ１３００は、ソフトウェアを含むことができる。ソフトウェアは、位置特定用のソフトウェア１３１０、パレット・ポーズ推定用のソフトウェア１３１２、状態機械に関連するソフトウェア１３１４、プランナ・フォロワ用のソフトウェア１３１６、コンポーネント・フレームワーク用のソフトウェア１３２０、およびオペレーティング・システム用のソフトウェア１３３０を含むことができる。ソフトウェアは、１つまたは複数のハードウェア・プラニング／実行プロセッサ１２２４によって実行され得る。ロボット・デバイス（１つまたは複数）１０２０と他のデバイスとの間の通信は、ネットワーク・ゲートウェイ１３４０および／またはネットワーク・スイッチ１２３０を使用して実行され得る。たとえば、ネットワーク・ゲートウェイ１３４０は、ロボット・デバイス（１つまたは複数）１０２０のロボット・デバイスとのおよびその中での無線通信に使用され得、ネットワーク・スイッチ１２３０は、ロボット・デバイス（１つまたは複数）１０２０のロボット・デバイスとのおよびその中での有線通信に使用され得る。ロボット・デバイス・アーキテクチャ１３００は、上で図１２の文脈で議論したデバイス・センサ（１つまたは複数）１２３８およびドライブ（１つまたは複数）１２４０などの追加ハードウェアをも含む。いくつかの実施形態では、ロボット・デバイス・アーキテクチャ１３００は、ＴｏＦカメラ１３５０およびＲＧＢカメラ１３５２を含むがこれに限定されない１つまたは複数のカメラを含むことができ、１つまたは複数のカメラは、１つもしくは複数のスチール・カメラおよび／または１つもしくは複数のビデオ・カメラを含むことができる。
【０１５７】
コンピューティング・デバイス・アーキテクチャ
［0172］  図１４Ａは、例の実施形態による、例のコンピューティング・デバイス１４００の機能ブロック図である。具体的には、図１４Ａに示されたコンピューティング・デバイス１４００は、本明細書で説明するマルチエージェント・プランナと、マルチエージェント・プランナのソフトウェアと、ロボット１１０、１２０、１３０、１４０、２１４、２２４、２３４、２４４、３３０、３３２、４１４、４１６、４２４、４２６、４３４、４３６、４４４、４４６、４７０、４７２、４７４、４７６、５１０、５２０、５３０、５５０、６１０、および６２０と、コンピューティング・デバイス７０２と、道路地図エディタ７１０と、システム１０００と、プラニング・システム１０１０と、オフボード・プランナ１０１２と、道路地図プランナ１０１４と、ロボット・デバイス１０２０と、システム１１００と、倉庫管理システム１１１０と、エクスキュータ１１２０と、システム１２００と、物流インターフェース１２１０と、ネットワーク１２１８および１４１４と、オンボード・システム１２２０と、ネットワーク・スイッチ１２３０と、車両コントローラ１２３２と、プログラマブル論理コントローラ１２３４と、車両マスタ１２３６と、デバイス・センサ（１つまたは複数）１２３８と、ドライブ（１つまたは複数）１２４０と、ロボット・デバイス・アーキテクチャ１３００との少なくとも１つの機能、ならびに／または道路地図３１０、４０２、５０２、６０２、および７０２と、シナリオ１００、２００、３００、４００、５００、６００、および７００と、方法８００および１５００と、優先順位サイクル９００とに関連する少なくとも１つの機能を実行するように構成され得る。コンピューティング・デバイス１４００は、ユーザ・インターフェース・モジュール１４０１、ネットワーク通信インターフェース・モジュール１４０２、１つまたは複数のプロセッサ１４０３、データ・ストレージ１４０４、１つまたは複数のセンサ１４２０、および１つまたは複数のアクチュエータ１４３０を含むことができ、これらのすべてが、システム・バス、ネットワーク、または他の接続機構１４０５を介して一緒にリンクされ得る。いくつかの実施形態では、コンピューティング・デバイス１４００は、マルチエージェント・プランナの一部またはすべてとして働くように構成され得る。
【０１５８】
［0173］  ユーザ・インターフェース・モジュール１４０１は、外部ユーザ入出力デバイスにデータを送り、かつ／またはこれからデータを受け取るように動作可能とすることができる。たとえば、ユーザ・インターフェース・モジュール１４０１は、キーボード、キーパッド、タッチ・スクリーン、コンピュータ・マウス、トラック・ボール、ジョイスティック、カメラ、音声認識モジュール、および／または他の同様のデバイスなどのユーザ入力デバイスへおよび／またはこれからデータを送り、かつ／または受け取るように構成され得る。ユーザ・インターフェース・モジュール１４０１は、現在既知のまたは今後に開発されるのいずれかの、１つまたは複数の陰極線管（ＣＲＴ）、液晶ディスプレイ、発光ダイオード（ＬＥＤ）、ｄｉｇｉｔａｌ  ｌｉｇｈｔ  ｐｒｏｃｅｓｓｉｎｇ（ＤＬＰ）技術を使用するディスプレイ、プリンタ、電球、および／または他の同様のデバイスなどのユーザ・ディスプレイ・デバイスに出力を供給するようにも構成され得る。ユーザ・インターフェース・モジュール１４０１は、スピーカ、スピーカ・ジャック、オーディオ出力ポート、オーディオ出力デバイス、イヤフォン、および／または他の同様のデバイスなどの可聴出力（１つまたは複数）を生成するようにも構成され得る。
【０１５９】
［0174］  ネットワーク通信インターフェース・モジュール１４０２は、ネットワークを介して通信するように構成可能である、１つもしくは複数の無線インターフェース１４０７および／または１つもしくは複数の有線インターフェース１４０８を含むことができる。無線インターフェース１４０７は、Ｂｌｕｅｔｏｏｔｈトランシーバ（登録商標）、Ｚｉｇｂｅｅトランシーバ、Ｗｉ−Ｆｉトランシーバ、ＷｉＭＡＸトランシーバ、および／または無線ネットワークを介して通信するように構成可能な他の同様のタイプの無線トランシーバなど、１つまたは複数の無線送信器、無線受信器、および／または無線トランシーバを含むことができる。有線インターフェース１４０８は、イーサネット・トランシーバ、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ（ＵＳＢ）トランシーバ、またはより対線、同軸ケーブル、光ファイバ・リンク、もしくは有線ネットワークへの同様の物理接続を介して通信するように構成可能な同様のトランシーバなど、１つまたは複数の有線送信器、有線受信器、および／または有線トランシーバを含むことができる。
【０１６０】
［0175］  いくつかの実施形態では、ネットワーク通信インターフェース・モジュール１４０２は、信頼性があり、保護され、かつ／または認証された通信を提供するように構成され得る。本明細書で説明される各通信に関して、信頼性のある通信（すなわち、保証されたメッセージ配送）を保証するための情報は、おそらくはメッセージ・ヘッダおよび／またはメッセージ・フッタの一部として提供され得る（たとえば、パケット／メッセージ・シーケンシング情報、カプセル化ヘッダ（１つまたは複数）および／またはカプセル化フッタ（１つまたは複数）、サイズ／時間情報、ならびにＣＲＣおよび／またはパリティ検査値などの伝送検証情報）。通信は、ＤＥＳ、ＡＥＳ、ＲＳＡ、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ、および／またはＤＳＡなどであるがこれに限定されない１つまたは複数の暗号プロトコルおよび／または暗号アルゴリズムを使用して保護され（たとえば、符号化されまたは暗号化され）、かつ／または暗号化解除／復号され得る。他の暗号プロトコルおよび／または暗号アルゴリズムも、または通信を保護し（その後に暗号化解除／復号する）ために本明細書でリストされたものに加えて、使用され得る。
【０１６１】
［0176］  プロセッサ１４０３は、１つもしくは複数の汎用プロセッサおよび／または１つもしくは複数の特殊目的プロセッサ（たとえば、デジタル信号プロセッサ、グラフィックス処理ユニット、特定用途向け集積回路など）を含むことができる。プロセッサ１４０３は、データ・ストレージ１４０４内に含まれるコンピュータ可読プログラム命令１４０６および／または本明細書で説明される他の命令を実行するように構成され得る。いくつかの実施形態で、コンピュータ可読プログラム命令１４０６は、マルチエージェント・プランナの命令１４０６ａを含むことができ、このマルチエージェント・プランナの命令１４０６ａは、本明細書で説明されるマルチエージェント・プランナの機能性の一部またはすべてを実行することができる。
【０１６２】
［0177］  データ・ストレージ１４０４は、プロセッサ１４０３のうちの少なくとも１つによって読み取られ、かつ／またはアクセスされ得る１つまたは複数のコンピュータ可読記憶媒体を含むことができる。１つまたは複数のコンピュータ可読記憶媒体は、全体的にまたは部分的にプロセッサ１４０３のうちの少なくとも１つと一体化され得る、光、磁気、有機、または他のメモリまたはディスク・ストレージなどの揮発性および／または不揮発性のストレージ・コンポーネントを含むことができる。いくつかの実施形態で、データ・ストレージ１４０４は、単一の物理デバイス（たとえば、１つの光、磁気、有機、または他のメモリまたはディスク・ストレージ・ユニット）を使用して実施され得るが、他の実施形態ではデータ・ストレージ１４０４は、２つ以上の物理デバイスを使用して実施され得る。
【０１６３】
［0178］  データ・ストレージ１４０４は、コンピュータ可読プログラム命令１４０６およびおそらくは追加のデータを含むことができる。いくつかの実施形態では、データ・ストレージ１４０４は、本明細書で説明される方法および技法の少なくとも一部ならびに／またはデバイスおよびネットワークの機能性の少なくとも一部を実行するのに必要なストレージをさらに含むことができる。
【０１６４】
［0179］  いくつかの実施形態で、コンピューティング・デバイス１４００は、１つまたは複数のセンサ１４２０を含むことができる。センサ（１つまたは複数）１４２０は、コンピューティング・デバイス１４００の環境内の条件を測定し、その環境（たとえば、本明細書で説明される道路地図によって表される環境）に関するデータを提供するように構成され得る。たとえば、センサ（１つまたは複数）１４２０は、（ｉ）ＲＦＩＤリーダー、近接センサ、１次元バーコード・リーダー、２次元バーコード（たとえば、Ｑｕｉｃｋ  Ｒｅｓｐｏｎｓｅ（ＱＲ）コード（登録商標））リーダー、レーザー・トラッカなどであるがこれに限定されない、他の物体および／またはデバイスを識別するための識別センサ（識別センサ（１つまたは複数）は、ＲＦＩＤタグ、バーコード、ＱＲコード（登録商標）、ならびに／または読み取られ、少なくとも識別情報を提供するように構成された他のデバイスおよび／もしくは物体などの識別子を読み取るように構成され得る）と、（ｉｉ）ジャイロスコープ、加速度計、ドップラ・センサ、全地球測位システム（ＧＰＳ）デバイス、ソナー・センサ、レーダー・デバイス、レーザー変位センサ、およびコンパスなどであるがこれに限定されない、コンピューティング・デバイス１４００の位置および／または動きを測定する位置センサと、（ｉｉｉ）赤外線センサ、光学センサ、光センサ、カメラ、バイオセンサ、容量性センサ、タッチ・センサ、温度センサ、無線センサ、ラジオ・センサ、動きセンサ、マイクロフォン、サウンド・センサ、超音波センサ、および／または煙センサなどであるがこれに限定されない、コンピューティング・デバイス１４００の環境を示すデータを入手する環境センサと、（ｉｖ）１つまたは複数の次元内の力、トルク、地面力、摩擦を測定する１つもしくは複数のセンサ、ならびに／またはゼロ・モーメント・ポイント（ＺＭＰ）および／もしくはＺＭＰの位置を識別するＺＭＰセンサなどであるがこれに限定されない、コンピューティング・デバイス１４００の周囲で作用する１つまたは複数の力（たとえば、慣性力および／または重力加速度）を測定する力センサとのうちの１つまたは複数を含むことができる。センサ（１つまたは複数）１４２０の多数の他の例も可能である。
【０１６５】
［0180］  コンピューティング・デバイス１４００は、コンピューティング・デバイス１４００が動きを開始することを可能にする１つまたは複数のアクチュエータ１４３０を含むことができる。たとえば、アクチュエータ（１つまたは複数）１４３０は、ロボット胴体にロボット手足を接続するロボット関節と共に含まれ、または組み込まれ得る。たとえば、アクチュエータ（１つまたは複数）１４３０は、それぞれのロボット脚およびロボット腕をロボット胴体に接続するそれぞれのロボット股関節およびロボット肩関節を含むことができる。さらに、アクチュエータ（１つまたは複数）１４３０は、ロボット脚のそれぞれの部分（たとえば、ロボット腿およびロボットふくらはぎ）を接続するそれぞれのロボット膝関節と、ロボット腕の部分（たとえば、ロボット前腕および上腕）を接続する肘関節を含むことができる。さらに、アクチュエータ（１つまたは複数）１４３０は、ロボット脚をロボット足に接続するそれぞれのロボット足関節と、ロボット腕をロボット手に接続するそれぞれのロボット手首関節とを含むことができる。さらに、アクチュエータ（１つまたは複数）１４３０は、ロボット手足を動かすモーターを含むことができる。したがって、アクチュエータ（１つまたは複数）１４３０は、コンピューティング・デバイス１４００のモビリティを可能にすることができる。アクチュエータ（１つまたは複数）１４３０の多数の他の例も可能である。
【０１６６】
クラウドベースのサーバ
［0181］  図１４Ｂは、例の実施形態による、クラウドベースのサーバ・システムとして配置されたコンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃのネットワーク１４１４を示す。コンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃは、クラウドベースのアプリケーションおよび／またはサービスのプログラム論理および／またはデータを記憶するクラウドベースのデバイスとすることができ、たとえば、本明細書で説明するマルチエージェント・プランナと、マルチエージェント・プランナのソフトウェアと、ロボット１１０、１２０、１３０、１４０、２１４、２２４、２３４、２４４、３３０、３３２、４１４、４１６、４２４、４２６、４３４、４３６、４４４、４４６、４７０、４７２、４７４、４７６、５１０、５２０、５３０、５５０、６１０、および６２０と、コンピューティング・デバイス７０２と、道路地図エディタ７１０と、システム１０００と、プラニング・システム１０１０と、オフボード・プランナ１０１２と、道路地図プランナ１０１４と、ロボット・デバイス１０２０と、システム１１００と、倉庫管理システム１１１０と、エクスキュータ１１２０と、システム１２００と、物流インターフェース１２１０と、ネットワーク１２１８および１４１４と、オンボード・システム１２２０と、ネットワーク・スイッチ１２３０と、車両コントローラ１２３２と、プログラマブル論理コントローラ１２３４と、車両マスタ１２３６と、デバイス・センサ（１つまたは複数）１２３８と、ドライブ（１つまたは複数）１２４０と、ロボット・デバイス・アーキテクチャ１３００との少なくとも１つの機能、ならびに／または道路地図３１０、４０２、５０２、６０２、および７２０と、シナリオ１００、２００、３００、４００、５００、６００、および７００と、方法８００および１５００と、優先順位サイクル９００とに関連する少なくとも１つの機能を実行する。
【０１６７】
［0182］  いくつかの実施形態では、コンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃは、単一のコンピューティング・センタ内に存在する単一のコンピューティング・デバイスとすることができる。他の実施形態では、コンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃは、単一のコンピューティング・センタ内の複数のコンピューティング・デバイスまたは種々の地理的位置に配置された複数のコンピューティング・センタ内に配置された複数のコンピューティング・デバイスさえ含むことができる。たとえば、図１４Ｂは、異なる物理位置に存在するコンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃのそれぞれを示す。
【０１６８】
［0183］  いくつかの実施形態では、コンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃのデータおよびサービスは、非一時的な有形のコンピュータ可読媒体（またはコンピュータ可読記憶媒体）内に記憶されたコンピュータ可読情報として符号化され、他のコンピューティング・デバイスによってアクセス可能とすることができる。いくつかの実施形態では、コンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃは、単一のディスク・ドライブまたは他の有形の記憶媒体上に記憶され得、あるいは、１つまたは複数の種々の地理的位置に配置された複数のディスク・ドライブまたは他の有形の記憶媒体上で実施され得る。
【０１６９】
［0184］  図１４Ｂは、例の実施形態によるクラウドベースのサーバ・システムを示す。図１４Ｂでは、安全システムの機能性は、３つのコンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃの間で分散され得る。コンピューティング・クラスタ１４０９ａは、ローカル・クラスタ・ネットワーク１４１２ａによって接続された、１つまたは複数のコンピューティング・デバイス１４００ａ、クラスタ・ストレージ・アレイ１４１０ａ、およびクラスタ・ルータ１４１１ａを含むことができる。同様に、コンピューティング・クラスタ１４０９ｂは、ローカル・クラスタ・ネットワーク１４１２ｂによって接続された、１つまたは複数のコンピューティング・デバイス１４００ｂ、クラスタ・ストレージ・アレイ１４１０ｂ、およびクラスタ・ルータ１４１１ｂを含むことができる。同様に、コンピューティング・クラスタ１４０９ｃは、ローカル・クラスタ・ネットワーク１４１２ｃによって接続された、１つまたは複数のコンピューティング・デバイス１４００ｃ、クラスタ・ストレージ・アレイ１４１０ｃ、およびクラスタ・ルータ１４１１ｃを含むことができる。
【０１７０】
［0185］  いくつかの実施形態では、コンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃのそれぞれは、等しい個数のコンピューティング・デバイス、等しい個数のクラスタ・ストレージ・アレイ、および等しい個数のクラスタ・ルータを有することができる。しかし、他の実施形態では、各コンピューティング・クラスタは、異なる個数のコンピューティング・デバイス、異なる個数のクラスタ・ストレージ・アレイ、および異なる個数のクラスタ・ルータを有することができる。各コンピューティング・クラスタ内のコンピューティング・デバイス、クラスタ・ストレージ・アレイ、およびクラスタ・ルータの個数は、各コンピューティング・クラスタに割り当てられた１つまたは複数のコンピューティング・タスクに依存する可能性がある。
【０１７１】
［0186］  たとえば、コンピューティング・クラスタ１４０９ａ内で、コンピューティング・デバイス１４００ａは、マルチエージェント・プランナ、ロボット、道路地図エディタ、および／またはコンピューティング・デバイスの様々なコンピューティング・タスクを実行するように構成され得る。一実施形態では、マルチエージェント・プランナ、ロボット、道路地図エディタ、および／またはコンピューティング・デバイスの様々な機能性は、１つまたは複数のコンピューティング・デバイス１４００ａ、１４００ｂ、および１４００ｃの間で分散され得る。それぞれのコンピューティング・クラスタ１４０９ｂおよび１４０９ｃ内のコンピューティング・デバイス１４００ｂおよび１４００ｃは、コンピューティング・クラスタ１４０９ａ内のコンピューティング・デバイス１４００ａと同様に構成され得る。その一方で、いくつかの実施形態では、コンピューティング・デバイス１４００ａ、１４００ｂ、および１４００ｃは、異なる機能を実行するように構成され得る。
【０１７２】
［0187］  いくつかの実施形態では、マルチエージェント・プランナ、ロボット、道路地図エディタ、および／またはコンピューティング・デバイスに関連するコンピューティング・タスクおよび記憶されたデータは、マルチエージェント・プランナ、ロボット、道路地図エディタ、および／もしくはコンピューティング・デバイスの処理要件、コンピューティング・デバイス１４００ａ、１４００ｂ、および１４００ｃの処理能力、各コンピューティング・クラスタ内のコンピューティング・デバイスの間およびコンピューティング・クラスタ自体の間のネットワーク・リンクの待ち時間、ならびに／または全体的なシステム・アーキテクチャのコスト、速度、耐故障性、弾力性、効率、および／もしくは他の設計目標に寄与する可能性がある他の要因に少なくとも部分的に基づいて、コンピューティング・デバイス１４００ａ、１４００ｂ、および１４００ｃにまたがって分散され得る。
【０１７３】
［0188］  コンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃのクラスタ・ストレージ・アレイ１４１０ａ、１４１０ｂ、および１４１０ｃは、ハード・ディスク・ドライブのグループへの読取アクセスおよび書込アクセスを管理するように構成されたディスク・アレイ・コントローラを含むデータ・ストレージ・アレイとすることができる。単独のまたはそれぞれのコンピューティング・デバイスと連動するディスク・アレイ・コントローラは、１つまたは複数のコンピューティング・デバイスが１つまたは複数のクラスタ・ストレージ・アレイにアクセスするのを妨げるディスク・ドライブ障害もしくは他のクラスタ・ストレージ・アレイ障害および／またはネットワーク障害に対して保護するために、クラスタ・ストレージ・アレイ内に記憶されたデータのバックアップ・コピーまたは冗長コピーを管理するようにも構成され得る。
【０１７４】
［0189］  マルチエージェント・プランナ、ロボット、道路地図エディタ、および／またはコンピューティング・デバイスの機能がコンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃのコンピューティング・デバイス１４００ａ、１４００ｂ、および１４００ｃにまたがって分散され得る形に類似して、これらのコンポーネントの様々なアクティブ部分および／またはバックアップ部分は、クラスタ・ストレージ・アレイ１４１０ａ、１４１０ｂ、および１４１０ｃにまたがって分散され得る。たとえば、一部のクラスタ・ストレージ・アレイは、マルチエージェント・プランナ、ロボット、道路地図エディタ、および／またはコンピューティング・デバイスのデータのある部分を記憶するように構成され得、他のクラスタ・ストレージ・アレイは、マルチエージェント・プランナ、ロボット、道路地図エディタ、および／またはコンピューティング・デバイスのデータの他の部分（１つまたは複数）を記憶できる。さらに、一部のクラスタ・ストレージ・アレイは、他のクラスタ・ストレージ・アレイ内に記憶されたデータのバックアップ・バージョンを記憶するように構成され得る。
【０１７５】
［0190］  コンピューティング・クラスタ１４０９ａ、１４０９ｂ、および１４０９ｃ内のクラスタ・ルータ１４１１ａ、１４１１ｂ、および１４１１ｃは、コンピューティング・クラスタに内部通信および外部通信を提供するように構成されたネットワーキング機器を含むことができる。たとえば、コンピューティング・クラスタ１４０９ａ内のクラスタ・ルータ１４１１ａは、（ｉ）ローカル・クラスタ・ネットワーク１４１２ａを介するコンピューティング・デバイス１４００ａとクラスタ・ストレージ・アレイ１４１０ａとの間のローカル・エリア・ネットワーク通信と、（ｉｉ）ネットワーク１４１４への広域ネットワーク接続１４１３ａを介するコンピューティング・クラスタ１４０９ａとコンピューティング・クラスタ１４０９ｂおよび１４０９ｃとの間の広域ネットワーク通信とを提供するように構成された１つまたは複数のインターネット・スイッチングおよびルーティング・デバイスを含むことができる。クラスタ・ルータ１４１１ｂおよび１４１１ｃは、クラスタ・ルータ１４１１ａに類似するネットワーク機器を含むことができ、クラスタ・ルータ１４１１ｂおよび１４１１ｃは、クラスタ・ルータ１４１１ａがコンピューティング・クラスタ１４０９ａのために実行するものに類似するネットワーキング機能をコンピューティング・クラスタ１４０９ｂおよび１４０９ｃのために実行することができる。
【０１７６】
［0191］  いくつかの実施形態では、クラスタ・ルータ１４１１ａ、１４１１ｂ、および１４１１ｃの構成は、コンピューティング・デバイスおよびクラスタ・ストレージ・アレイのデータ通信要件、クラスタ・ルータ１４１１ａ、１４１１ｂ、および１４１１ｃ内のネットワーク機器のデータ通信能力、ローカル・ネットワーク１４１２ａ、１４１２ｂ、および１４１２ｃの待ち時間およびスループット、広域ネットワーク・リンク１４１３ａ、１４１３ｂ、および１４１３ｃの待ち時間、スループット、およびコスト、ならびに／または緩和システム・アーキテクチャのコスト、速度、耐故障性、弾力性、効率、および／もしくは他の設計判断基準に寄与する可能性がある他の要因に少なくとも部分的に基づくものとされ得る。
【０１７７】
例の動作方法
［0192］  図１５は、例の実施形態による、方法１５００の流れ図である。方法１５００は、コンピューティング・デバイス１４００などのコンピューティング・デバイスによって実行され得る。具体的には、コンピューティング・デバイス１４００は、方法１５００を実行するために、本明細書で説明されるマルチエージェント・プランナを実施するソフトウェアを実行することができる。
【０１７８】
［0193］  方法１５００は、ブロック１５１０で開始することができ、ここで、コンピューティング・デバイスは、少なくとも上で図３および図７Ａ〜図７Ｄの文脈で議論したものなど、第１のロボットおよび第２のロボットを含む既存環境の道路地図を受け取ることができる。
【０１７９】
［0194］  ブロック１５２０では、コンピューティング・デバイスは、上で少なくとも図７Ａ〜図７Ｄの文脈で議論したものなど、複数の衝突領域を接続する複数のレーンを用いて道路地図に注釈を付けることができ、各レーンは、一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わる。いくつかの実施形態では、上で少なくとも図７Ａ〜図７Ｄの文脈で議論したものなど、複数のレーンを用いて道路地図に注釈を付けることは、コンピューティング・デバイスを使用して、新しいレーンを用いて道路地図に注釈を付けることを試みることと、コンピューティング・デバイスを使用して、新しいレーンが一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わるかどうかを判定することと、新しいレーンが一方向であり、衝突領域のブロックを回避するために衝突領域から十分に離れて終わると判定した後に、新しいレーンを用いて道路地図に注釈を付けることとを含むことができる。特にこの実施形態では、上で少なくとも図７Ａ〜図７Ｄの文脈で議論したものなど、新しいレーンを用いて道路地図に注釈を付けることを試みることは、コンピューティング・デバイスを使用して、新しいレーンの道路地図上の位置を判定することと、コンピューティング・デバイスを使用して、新しいレーンを用いて道路地図上の位置に注釈を付けることを試みることとを含むことができる。他の実施形態では、上で少なくとも図７Ａ〜図７Ｄの文脈で議論したものなど、複数のレーンを用いて道路地図に注釈を付けることは、１つまたは複数のレーンから第１の対にされたレーンおよび第２の対にされたレーンを選択することと、第１の対にされたレーン上のロボットが第２の対にされたレーン上のロボットと衝突するかどうかを判定することと、第１の対にされたレーン上のロボットが第２の対にされたレーン上のロボットと衝突すると判定した後に、第１の対にされたレーンおよび／または第２の対にされたレーンがレーンではないと判定することとを含むことができる。
【０１８０】
［0195］  ブロック１５３０では、上で少なくとも図３〜図６Ｆの文脈で議論したものなど、第１のロボットによる使用のための道路地図に沿った環境を通る第１のルートと第２のロボットによる使用のための道路地図に沿った環境を通る第２のルートとが判定され得、第１のルートと第２のルートとの両方が、第１のレーンを含み、第１のレーンは、第１の衝突領域に接続する。いくつかの実施形態では、上で少なくとも図５Ａ〜図５Ｆの文脈で議論したものなど、第１のルートは、第１のロボットを出発位置から目的地位置に導く、レーンと対応する待機時間とのシーケンスを含むことができる。他の実施形態では、上で少なくとも図４Ａ〜図５Ｆおよび図８の文脈で議論したものなど、環境を通る第１のルートを判定することは、第１のロボットによる排他的使用のために第１のルートに沿った第２の衝突領域を予約することを含むことができ、第２の衝突領域は、２つ以上のレーンの間にある。特にこの実施形態では、上で少なくとも図４Ａ〜図５Ｆの文脈で議論したものなど、第２の衝突領域は、２つのレーンの間の交差点を含むことができる。他に、特にこの実施形態では、上で少なくとも図７Ａ〜図７Ｆの文脈で議論したものなど、道路地図の注釈を付けられていない部分は、１つまたは複数のレーンによって注釈を付けられておらず、第２の衝突領域は、道路地図の注釈を付けられていない部分を含む。
【０１８１】
［0196］  ブロック１５４０では、上で少なくとも図３〜図６Ｆ、図８、および図９で議論したものなど、第１のロボットに第１の優先順位を、第２のロボットに第２の優先順位を割り当てることができ、第１の優先順位は、第２の優先順位より高い。いくつかの実施形態では、上で少なくとも図３、図４Ｂ〜図６Ｆ、図９、および図１０で議論したものなど、第１の優先順位および第２の優先順位は、両方とも、単調増加関数に基づくものとすることができる。特にこの実施形態では、上で少なくとも図３、図４Ｂ〜図６Ｆ、図９、および図１０で議論したものなど、単調増加関数は、そのルート上を移動する間にロボットによって費やされる時間の長さと、ロボットがルート上で開始して以降にそのルート上で開始した複数のロボットを示すルート−スタート値とのうちの１つまたは複数を判定することができる。
【０１８２】
［0197］  ブロック１５５０では、上で少なくとも図３、および図５Ａ〜図６Ｆで議論したものなど、第２のロボットが第２のルートに追従することが、第２のロボットに、第１のロボットが第１の衝突領域に達する前に第１のレーン上の第１のロボットをブロックさせると判定することができる。
【０１８３】
［0198］  ブロック１５６０では、上で少なくとも図３、および図５Ａ〜図６Ｆで議論したものなど、第１の優先順位が第２の優先順位より高いことに基づいて、第２のロボットが第１のレーン上の第１のロボットをブロックするのを防ぐために、第２のルートを変更することができる。
【０１８４】
［0199］  いくつかの実施形態では、上で少なくとも図５Ａ〜図５Ｆの文脈で議論したものなど、第１の衝突領域は、第１のロボットによる排他的使用のために予約され得る、第２のロボットが第１のレーン上の第１のロボットをブロックするのを防ぐために第２のルートを変更することは、第１のロボットによる排他的使用のための第１の衝突領域の第１の予約を解放することと、第１の衝突領域の第１の予約を解放した後に、第２のロボットによる排他的使用のために第１の衝突領域の第２の予約を入手することと、第２の予約を入手した後に、第２のロボットに、第１のエッジを去り、第１の衝突領域に入るように指示することと、第２のロボットが第１の衝突領域をトラバースした後に、第２の予約を解放することと、第１のロボットによる排他的使用のために第１の衝突領域の第３の予約を入手することとを含むことができる。特定の実施形態では、方法１５００は、上で少なくとも図５Ａ〜図５Ｆの文脈で議論したものなど、第２のロボットが第１の衝突領域をトラバースした後に、第２のロボットに、第２のルートを介して目的地位置に進み続けるように指示することをさらに含むことができる。他の実施形態では、上で少なくとも図５Ａ〜図５Ｆの文脈で議論したものなど、道路地図は、レーンのサイクルを用いて注釈を付けられ得、第１のレーン上の第１のロボットをブロックするのを防ぐために第２のルートを変更することは、レーンのサイクルを通って移動するように第２のルートを変更することを含むことができる。さらなる他の実施形態では、上で少なくとも図４Ａ〜図４Ｅの文脈で議論したものなど、第１のレーンをブロックするのを防ぐために第２のロボットの第２のルートを変更することは、第２のロボットに、１つまたは複数のレーンのうちの特定のレーン上で待つように指示することを含むことができる。
【０１８５】
［0200］  いくつかの実施形態では、方法１５００は、上で少なくとも図３および図５Ａ〜図６Ｆの文脈で議論したものなど、第１のロボットが第１のルートを完了した後に第１の優先順位をリセットすることをさらに含むことができる。
【０１８６】
［0201］  他の実施形態では、方法１５００は、上で少なくとも図３の文脈で議論したものなど、第１のロボットをブロックする、第１のルート上の障害物の存在を判定することと、第１のロボットをブロックする、第１のルート上の障害物の存在を判定した後に、障害物の存在を示す警告メッセージを生成することと、障害物を回避する、第１のロボットの新しいルートを判定することとをさらに含むことができる。
【０１８７】
［0202］  さらなる他の実施形態では、上で少なくとも図５Ａ〜図５Ｆの文脈で議論したものなど、第３のロボットの第３のルートは、第１のロボットのために予約されたルートのオーバーラップする部分にオーバーラップすることができ、方法１５００は、第３のロボットの第３の優先順位が第１の優先順位未満であるかどうかを判定することと、第３の優先順位が第１の優先順位未満であると判定した後に、第３のロボットが、第１のロボットがオーバーラップする部分に達する前にオーバーラップする部分をトラバースする位置にいるかどうかを判定することと、第３のロボットが、第１のロボットがオーバーラップする部分に達する前にオーバーラップする部分をトラバースする位置にいると判定した後に、第３のロボットに、第１のロボットがオーバーラップする部分に達する前にオーバーラップする部分をトラバースするように指示することとをさらに含むことができる。
【０１８８】
［0203］  本開示は、様々な態様の例示として意図された、本願で説明される特定の実施形態に関して限定されない。本明細書で開示される技法の一部は、ロボットを伴う動作に関して説明されるが、これらの本明細書で開示される技法は、そうではないと明示的に述べられない限り、エージェント全般に適用可能である。当業者に明白であるとおり、その趣旨および範囲から逸脱せずに、多数の修正形態および変形形態を作ることができる。本明細書で列挙されるものに加えて、本開示の範囲内の機能的に同等の方法および装置が、前述の説明から当業者に明白になる。そのような修正形態および変形形態は、添付の特許請求の範囲の範囲に含まれることが意図されている。
【０１８９】
［0204］  上の詳細な説明は、添付図面を参照して、開示されるシステム、デバイス、および方法の様々な特徴および機能を説明する。図面では、文脈がそうではないと規定しない限り、同様の記号が、通常は同様の構成要素を識別する。詳細な説明、図面、および特許請求の範囲で説明される例示的な実施形態は、限定的であることを意図されたものではない。本明細書で提示される主題の趣旨または範囲から逸脱せずに、他の実施形態を利用することができ、他の変更を行うことができる。本明細書で全体的に説明され、図面に示された本開示の諸態様が、様々な異なる構成で配置され、置換され、組み合わされ、分離され、設計され得、そのすべてが本明細書で明示的に企図されていることが、たやすく理解されよう。
【０１９０】
［0205］  図内のはしご図、シナリオ、および流れ図のいずれかまたはすべてに関して、本明細書で議論されるように、各ブロックおよび／または通信は、例の実施形態による情報の処理および／または情報の伝送を表す可能性がある。代替実施形態は、これらの例の実施形態の範囲内に含まれる。これらの代替実施形態では、たとえば、ブロック、伝送、通信、要求、応答、および／またはメッセージとして記述される機能が、用いられる機能性に応じて、実質的に同時または逆順を含めて、図示されまたは議論される順序から外れて実行され得る。さらに、より多数またはより少数のブロックおよび／または機能が、本明細書で議論されるはしご図、シナリオ、および流れ図のいずれとも共に使用され得、これらのはしご図、シナリオ、および流れ図が、部分的にまたは全体的に、お互いと組み合わされ得る。
【０１９１】
［0206］  情報の処理を表すブロックは、本明細書で説明される方法または技法の特定の論理機能を実行するように構成され得る回路網に対応することができる。その代わりにまたはそれに加えて、情報の処理を表すブロックは、モジュール、セグメント、またはプログラム・コードの一部（関連するデータを含む）に対応することができる。プログラム・コードは、方法または技法の特定の論理機能またはアクションを実施するためにプロセッサによって実行可能な１つまたは複数の命令を含むことができる。プログラム・コードおよび／または関連するデータは、ディスク・ドライブ、ハード・ドライブ、または他の記憶媒体を含むストレージ・デバイスなどの任意のタイプのコンピュータ可読媒体上に記憶され得る。
【０１９２】
［0207］  コンピュータ可読媒体は、レジスタ・メモリ、プロセッサ・キャッシュ、およびランダム・アクセス・メモリ（ＲＡＭ）など、短い時間期間の間にデータを記憶する非一時的コンピュータ可読媒体などの非一時的コンピュータ可読媒体をも含むことができる。コンピュータ可読媒体は、たとえば読取専用メモリ（ＲＯＭ）、光ディスク、磁気ディスク、コンパクト・ディスク読取専用メモリ（ＣＤ−ＲＯＭ）など、二次長期ストレージまたは永続長期ストレージなど、より長い時間期間の間にプログラム・コードおよび／またはデータを記憶する非一時的コンピュータ可読媒体をも含むことができる。コンピュータ可読媒体は、任意の他の揮発性または不揮発性のストレージ・システムとすることもできる。コンピュータ可読媒体は、コンピュータ可読記憶媒体、たとえば有形のストレージ・デバイスと考えることができる。
【０１９３】
［0208］  さらに、１つまたは複数の情報伝送を表すブロックは、同一の物理デバイス内のソフトウェア・モジュールおよび／またはハードウェア・モジュールの間の情報伝送に対応することができる。しかし、他の情報伝送は、異なる物理デバイス内のソフトウェア・モジュールおよび／またはハードウェア・モジュールの間とすることができる。
【０１９４】
［0209］  様々な態様および実施形態を本明細書で開示したが、他の態様および実施形態が、当業者に明白になろう。本明細書で開示された様々な態様および実施形態は、例示のために提供され、限定的であることは意図されておらず、真の範囲は、以下の特許請求の範囲によって示される。
【図１】
2020518890.tif 000003
【図２】
2020518890.tif 000004
【図３】
2020518890.tif 000005
【図４Ａ】
2020518890.tif 000006
【図４Ｂ】
2020518890.tif 000007
【図４Ｃ】
2020518890.tif 000008
【図４Ｄ】
2020518890.tif 000009
【図４Ｅ】
2020518890.tif 000010
【図５−１】
2020518890.tif 000011
【図５−２】
2020518890.tif 000012
【図６】
2020518890.tif 000013
【図７Ａ】
2020518890.tif 000014
【図７Ｂ】
2020518890.tif 000015
【図７Ｃ】
2020518890.tif 000016
【図７Ｄ】
2020518890.tif 000017
【図８】
2020518890.tif 000018
【図９】
2020518890.tif 000019
【図１０】
2020518890.tif 000020
【図１１】
2020518890.tif 000021
【図１２】
2020518890.tif 000022
【図１３】
2020518890.tif 000023
【図１４Ａ】
2020518890.tif 000024
【図１４Ｂ】
2020518890.tif 000025
【図１５】
2020518890.tif 000026
【国際調査報告】
2020518890.tif 000027
2020518890.tif 000028