(57)【要約】【課題】ロボット単位の初期位置の集合とロボット単位の目標位置の集合との共通部分に非接続箇所がある場合でも適用可能な隊列制御を実現する制御技術を提供する。【解決手段】移動ロボットを構成する複数のロボットのそれぞれは、位置距離計算命令送信部１、位置距離計算命令転送部２、返信位置距離計算命令送信部３、方向記憶部４、返信位置距離計算命令転送部５、第一先頭ロボット決定命令送信部６、ボイド発生順序決定部７、ボイド発生命令転送部８、押命令送信部９、返信押命令送信部１０、返信押命令転送部１１、ボイド操作命令送信部１２、第一移動部１３、ボイド操作命令転送部１４、移動命令送信部１５、返信移動命令送信部１６、第二移動部１７、引命令送信部１８、返信引命令送信部１９、第三移動部２０、制御部２１、集合更新部２２及び第二先頭ロボット決定命令送信部２３を備えている。【選択図】図５
2020030765.tif 000002
【特許請求の範囲】
【請求項１】
所定の初期位置から所定の目標位置に移動する移動ロボットであって、
上記移動ロボットは複数のロボット単位で構成されているとし、各上記ロボット単位には複数のロボットが含まれているとし、各ロボット単位が他のロボット単位と隣接することにより上記ロボット単位が一塊のロボット構造を形成していることをロボット構造の接続性と言うとし、上記初期位置と上記目標位置の共通部分を共通位置とし、上記共通位置は１つ以上の部分共通位置の集合から構成されているとして、
上記複数のロボットのそれぞれは、
所定のroot位置にあるロボットi_rootである場合には、それぞれ所定の初期値に設定された、上記所定のroot位置からの相対位置と位置距離計算命令の送信転送回数とを含む位置距離計算命令を隣接するロボットに送信する位置距離計算命令送信部と、
上記位置距離計算命令を受信した場合に、上記位置距離計算命令に含まれる送信転送回数をインクリメントし、上記位置距離計算命令を受信した方向に応じて上記位置距離計算命令に含まれる相対位置を更新し、上記インクリメントした送信転送回数及び上記更新した相対位置を含む位置距離計算命令を、上記位置距離計算命令を送信してきたロボット以外の、隣接するロボットに一度だけ転送する位置距離計算命令転送部と、
上記位置距離計算命令を最初に受信した場合に、上記位置距離計算命令を送信してきたロボットに、上記インクリメントした送信転送回数及び上記更新した相対位置を含む返信位置距離計算命令を送信する返信位置距離計算命令送信部と、
上記位置距離計算命令を最初に受信した場合に、上記位置距離計算命令を送信してきたロボットの方向をroot方向として記憶する方向記憶部と、
上記返信位置距離計算命令を受信した場合に、上記方向記憶部から読み込んだroot方向に上記受信した返信位置距離計算命令を転送する返信位置距離計算命令転送部と、
上記ロボットi_rootであり、全てのロボットが送信した返信位置距離計算命令を受信した場合には、上記初期位置、上記目標位置及び上記返信位置距離計算命令に含まれる相対位置に基づく各ロボットの位置に基づいて、ある１つの部分共通位置集合を集合Upとして選択し、上記集合Upに属する位置にあり上記目標位置の中のロボット単位が存在していない位置（以下、目的位置Dとする。）に隣接するロボット単位を先頭ロボット単位Headとして選択し、上記選択した先頭ロボット単位Headに含まれる所定のロボットhに、上記各ロボットの位置と、上記集合Upについての情報とを含む先頭ロボット決定命令を送信する第一先頭ロボット決定命令送信部と、
上記ロボットhであり、上記先頭ロボット決定命令を受信した場合には、上記各ロボットの位置と、上記集合Upについての情報とに基づいて、上記目的位置Dと、上記集合Upに属しない位置にあり上記初期位置の中に位置するロボット単位であり、移動させても上記ロボット構造の接続性を維持することができるロボット単位である尾部ロボット単位Tailと、上記先頭ロボット単位Headから上記尾部ロボット単位Tailまでのパスと、上記先頭ロボット単位Head内のロボットのボイド発生順序とを決定するボイド発生順序決定部と、
上記ロボットhである場合には、上記先頭ロボット単位Head内の上記決定されたボイド発生順序に基づく位置のロボットv1宛てのボイド発生命令を隣接するロボット単位に送信するボイド発生命令送信部と、
上記ボイド発生命令を受信した場合に、上記ボイド発生命令を、上記ロボットv1に届くまで隣接するロボットに転送するボイド発生命令転送部と、
上記ロボットv1であり、上記ボイド発生命令を受信した場合に、上記先頭ロボット単位Headの動く方向をah方向として、上記ah方向に隣接するロボットに押命令を送信する押命令送信部と、
上記押命令を受信した場合であって上記ah方向に隣接するロボットがある場合には、上記ah方向に隣接するロボットに上記押命令を転送し、上記押命令を受信した場合であって上記ah方向に隣接するロボットがない場合には、上記ah方向の反対方向に隣接するロボットに返信押命令を送信する返信押命令送信部と、
上記返信押命令を受信した場合には、上記ロボットv1に届くまで上記ah方向の反対方向に隣接するロボットに返信押命令を転送する返信押命令転送部と、
上記ロボットv1であり、上記返信押命令を受信した場合には、上記パス上にあり上記ロボットv1に隣接するロボットにボイド操作命令を送信するボイド操作命令送信部と、
上記ロボットv1であり、上記返信押命令を受信した場合であって、上記ボイド操作命令を送信した後に、上記ah方向に上記ロボットv1を移動させる第一移動部と、
上記ボイド操作命令を受信した場合には、上記パス上にあり、パス内の自身より一マス分上記尾部ロボット単位Tail近づく方向にあるロボットに上記ボイド操作命令を転送するボイド操作命令転送部と、
上記ボイド操作命令を受信した場合であって上記ボイド操作命令の送信転送回数が所定の回数である場合には、上記ボイド操作命令を送信してきたロボットに移動命令を送信する移動命令送信部と、
上記移動命令を受信した場合には、上記移動命令を送信してきたロボットに返信移動命令を送信する返信移動命令送信部と、
上記返信移動命令を受信した場合には、上記ボイド操作命令を送信してきたロボットと共にロボットを上記ボイド操作命令を送信してきたロボットのある方向に移動させる第二移動部と、
上記先頭ロボット単位Tailの動く方向をat方向として、上記尾部ロボット単位Tailの１個手前のロボット単位T'に含まれて、ロボットv1のロボット単位内位置と同じT'内位置にあるロボットであり、上記ボイド操作命令を受信した場合には、上記at方向の反対方向に隣接するロボットに引命令を送信する引命令送信部と、
上記引命令を受信した場合であって上記尾部ロボット単位Tail内に上記at方向の反対方向に隣接するロボットがある場合には、上記at方向の反対方向に隣接するロボットに上記引命令を転送し、上記引命令を受信した場合であって上記尾部ロボット単位Tail内に上記at方向の反対方向に隣接するロボットがない場合には、上記at方向に隣接するロボットに返信引命令を送信する返信引命令送信部と、
上記返信引命令を受信した場合には、上記返信引命令を送信してきたロボットと共に上記at方向にロボットを移動させる第三移動部と、
上記ロボットhである場合には、上記先頭ロボット単位Headに含まれる全てのロボットが、上記目的位置Dに移動するまで、上記ボイド発生順序決定部、上記ボイド発生命令転送部、上記押命令送信部、上記返信押命令送信部、上記返信押命令転送部、上記ボイド操作命令送信部、上記第一移動部、上記ボイド操作命令転送部、上記移動命令送信部、上記返信移動命令送信部、上記第二移動部、上記引命令送信部、上記返信引命令送信部、上記第三移動部の処理を繰り返すように制御を行う制御部と、
上記ロボットhである場合には、上記目的位置Dを上記集合Upに追加した後に、上記集合Upに接していて、上記集合Upの中ではなく上記目標位置の中に位置するロボット単位がある場合には、そのロボット単位の位置と、そのロボット単位から上記目標位置のみを経由して接続状態にあるロボット単位の位置とを上記集合Upに追加することにより上記集合Upを更新する集合更新部と、
上記ロボットhである場合には、上記尾部ロボット単位Tailの位置と、上記目的位置Dにあるロボットの位置とを更新し、更新された各ロボットの位置に基づいて、上記集合Upに属する位置にあり上記目標位置の中のロボット単位が存在していない位置に隣接するロボット単位がある場合にはそのロボット単位を先頭ロボット単位Headとして新たに選択して、上記新たに選択した先頭ロボット単位Headに含まれる新たな所定のロボットhに、上記更新された各ロボットの位置と、上記更新された集合Upについての情報とを含む先頭ロボット決定命令を送信する第二先頭ロボット決定命令送信部と、
を含む、
移動ロボット。
【請求項２】
所定の初期位置から所定の目標位置に移動する移動ロボットの制御方法であって、
上記移動ロボットは複数のロボット単位で構成されているとし、各上記ロボット単位には複数のロボットが含まれているとし、各ロボット単位が他のロボット単位と隣接することにより上記ロボット単位が一塊のロボット構造を形成していることをロボット構造の接続性と言うとし、上記初期位置と上記目標位置の共通部分を共通位置とし、上記共通位置は１つ以上の部分共通位置の集合から構成されているとして、
所定のroot位置にあるロボットi_rootの位置距離計算命令送信部が、それぞれ所定の初期値に設定された、上記所定のroot位置からの相対位置と位置距離計算命令の送信転送回数とを含む位置距離計算命令を隣接するロボットに送信する位置距離計算命令送信ステップと、
上記位置距離計算命令を受信したロボットの位置距離計算命令転送部が、上記位置距離計算命令に含まれる送信転送回数をインクリメントし、上記位置距離計算命令を受信した方向に応じて上記位置距離計算命令に含まれる相対位置を更新し、上記インクリメントした送信転送回数及び上記更新した相対位置を含む位置距離計算命令を、上記位置距離計算命令を送信してきたロボット以外の、隣接するロボットに一度だけ転送する位置距離計算命令転送ステップと、
上記位置距離計算命令を最初に受信したロボットの返信位置距離計算命令送信部が、上記位置距離計算命令を送信してきたロボットに、上記インクリメントした送信転送回数及び上記更新した相対位置を含む返信位置距離計算命令を送信する返信位置距離計算命令送信ステップと、
上記位置距離計算命令を最初に受信したロボットの方向記憶部が、上記位置距離計算命令を送信してきたロボットの方向をroot方向として記憶する方向記憶ステップと、
上記返信位置距離計算命令を受信したロボットの返信位置距離計算命令転送部が、上記方向記憶部から読み込んだroot方向に上記受信した返信位置距離計算命令を転送する返信位置距離計算命令転送ステップと、
上記返信位置距離計算命令を受信したロボットi_rootの第一先頭ロボット決定命令送信部が、上記初期位置、上記目標位置及び上記返信位置距離計算命令に含まれる相対位置に基づく各ロボットの位置に基づいて、ある１つの部分共通位置集合を集合Upとして選択し、上記集合Upに属する位置にあり上記目標位置の中のロボット単位が存在していない位置（以下、目的位置Dとする。）に隣接するロボット単位を先頭ロボット単位Headとして選択し、上記選択した先頭ロボット単位Headに含まれる所定のロボットhに、上記各ロボットの位置と、上記集合Upについての情報とを含む先頭ロボット決定命令を送信する第一先頭ロボット決定命令送信ステップと、
上記先頭ロボット決定命令を受信したロボットhのボイド発生順序決定部が、上記各ロボットの位置と、上記集合Upについての情報とに基づいて、上記目的位置Dと、上記集合Upに属しない位置にあり上記初期位置の中に位置するロボット単位であり、移動させても上記ロボット構造の接続性を維持することができるロボット単位である尾部ロボット単位Tailと、上記先頭ロボット単位Headから上記尾部ロボット単位Tailまでのパスと、上記先頭ロボット単位Head内のロボットのボイド発生順序とを決定するボイド発生順序決定ステップと、
上記ボイド発生命令を受信したロボットhのボイド発生命令送信部が、上記先頭ロボット単位Head内の上記決定されたボイド発生順序に基づく位置のロボットv1宛てのボイド発生命令を隣接するロボット単位に送信するボイド発生命令送信ステップと、
上記ボイド発生命令を受信したロボットのボイド発生命令転送部が、上記ボイド発生命令を、上記ロボットv1に届くまで隣接するロボットに転送するボイド発生命令転送ステップと、
上記ボイド発生命令を受信したロボットv1の押命令送信部が、上記ロボットv1であり、上記ボイド発生命令を受信した場合に、上記先頭ロボット単位Headの動く方向をah方向として、上記ah方向に隣接するロボットに押命令を送信する押命令送信ステップと、
上記押命令を受信したロボットの返信押命令送信部が、上記ah方向に隣接するロボットがある場合には、上記ah方向に隣接するロボットに上記押命令を転送し、上記押命令を受信した場合であって上記ah方向に隣接するロボットがない場合には、上記ah方向の反対方向に隣接するロボットに返信押命令を送信する返信押命令送信ステップと、
上記返信押命令を受信したロボットの返信押命令転送部が、上記ロボットv1に届くまで上記ah方向の反対方向に隣接するロボットに返信押命令を転送する返信押命令転送ステップと、
上記返信押命令を受信したロボットv1のボイド操作命令送信部が、上記パス上にあり上記ロボットv1に隣接するロボットにボイド操作命令を送信するボイド操作命令送信ステップと、
上記返信押命令を受信したロボットv1の第一移動部が、上記ボイド操作命令を送信した後に、上記ah方向に上記ロボットv1を移動させる第一移動ステップと、
上記ボイド操作命令を受信したロボットのボイド操作命令転送部が、上記パス上にあり、パス内の自身より一マス分上記尾部ロボット単位Tail近づく方向にあるロボットに上記ボイド操作命令を転送するボイド操作命令転送ステップと、
上記ボイド操作命令を受信したロボットの移動命令送信部が、上記ボイド操作命令の送信転送回数が所定の回数である場合には、上記ボイド操作命令を送信してきたロボットに移動命令を送信する移動命令送信ステップと、
上記移動命令を受信したロボットの返信移動命令送信部が、上記移動命令を送信してきたロボットに返信移動命令を送信する返信移動命令送信ステップと、
上記返信移動命令を受信したロボットの第二移動部が、上記ボイド操作命令を送信してきたロボットと共にロボットを上記ボイド操作命令を送信してきたロボットのある方向に移動させる第二移動ステップと、
上記尾部ロボット単位Tailの１個手前のロボット単位T'に含まれるロボットであって、上記ボイド操作命令を受信したロボットの引命令送信部が、上記先頭ロボット単位Tailの動く方向をat方向として、上記尾部ロボット単位Tailの１個手前のロボット単位T'に含まれて、ロボットv1のロボット単位内位置と同じT'内位置にあるロボットであり、上記at方向の反対方向に隣接するロボットに引命令を送信する引命令送信ステップと、
上記引命令を受信したロボットの返信引命令送信部が、上記尾部ロボット単位Tail内に上記at方向の反対方向に隣接するロボットがある場合には、上記at方向の反対方向に隣接するロボットに上記引命令を転送し、上記引命令を受信した場合であって上記尾部ロボット単位Tail内に上記at方向の反対方向に隣接するロボットがない場合には、上記at方向に隣接するロボットに返信引命令を送信する返信引命令送信ステップと、
上記返信引命令を受信した第三移動部が、上記返信引命令を送信してきたロボットと共に上記at方向にロボットを移動させる第三移動ステップと、
上記ロボットhの制御部が、上記先頭ロボット単位Headに含まれる全てのロボットが、上記目的位置Dに移動するまで、上記ボイド発生順序決定部、上記ボイド発生命令転送部、上記押命令送信部、上記返信押命令送信部、上記返信押命令転送部、上記ボイド操作命令送信部、上記第一移動部、上記ボイド操作命令転送部、上記移動命令送信部、上記返信移動命令送信部、上記第二移動部、上記引命令送信部、上記返信引命令送信部、上記第三移動部の処理を繰り返すように制御を行う制御ステップと、
上記ロボットhの集合更新部が、上記目的位置Dを上記集合Upに追加した後に、上記集合Upに接していて、上記集合Upの中ではなく上記目標位置の中に位置するロボット単位がある場合には、そのロボット単位の位置と、そのロボット単位から上記目標位置のみを経由して接続状態にあるロボット単位の位置とを上記集合Upに追加することにより上記集合Upを更新する集合更新ステップと、
上記ロボットhの第二先頭ロボット決定命令送信部が、上記尾部ロボット単位Tailの位置と、上記目的位置Dにあるロボットの位置とを更新し、更新された各ロボットの位置に基づいて、上記集合Upに属する位置にあり上記目標位置の中のロボット単位が存在していない位置に隣接するロボット単位がある場合にはそのロボット単位を先頭ロボット単位Headとして新たに選択して、上記新たに選択した先頭ロボット単位Headに含まれる新たな所定のロボットhに、上記更新された各ロボットの位置と、上記更新された集合Upについての情報とを含む先頭ロボット決定命令を送信する第二先頭ロボット決定命令送信ステップと、
を含む、
移動ロボットの制御方法。
【請求項３】
請求項１の移動ロボットの各部としてコンピュータを機能させるためのコンピュータ読み取り可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のロボットの行動を制御する技術に関する。例えば、複数のロボットを、初期位置における隊列形成状態から協調して移動させ、障害物を回避させ、目標位置で隊列形成をさせるための各ロボットの行動計画を求めるロボット協調制御技術に関する。
【背景技術】
【０００２】
近年、多数の自律移動ロボットを効率的に制御にするための研究が活発に行われている。その任務内容は、人の入れない箇所の監視、物品の搬送などさまざまであるが、多数のロボットの協調動作による隊列形成を効率的に行わせるための技術が求められており盛んに研究が行われている。
【０００３】
特に、ロボットの隊列制御の中でも、ロボット同士が互いに接したままの状態で、アメーバのように全体で移動を行うという仮定の下でのロボット隊列制御においては、ロボット同士の相対的な位置関係から、各ロボットの絶対位置の決定が可能であるという利点と、付加的な位置計測用の装備を必要としないという利点があり、そのようなロボットの研究も行われている。例えば、非特許文献２に示す研究に至る一連の研究では、ある隊列から他の隊列に変化する隊列制御が示されている（例えば、非特許文献２参照。）。
【０００４】
このような、多数のロボットによる効率的な隊列形成を実現するには、それぞれのロボットの配置、動作順序などを事前に計画することが重要である。このような計画においては、当然ながら、複数のロボットが動作する実環境における障害物の存在や経路の形状なども十分に考慮しなければならない。
【０００５】
非特許文献１に示す研究に示されている手法では、複数の立方体形状のロボット同士での伸長収縮面動作(あるロボットが、他のロボットと接した状態で、伸び縮みしつつ移動する動作)によるロボットの隊列変形が扱われている。
【０００６】
非特許文献２に示す研究に示されている手法では、複数の立方体形状のロボット同士での面せん断動作(あるロボットが、他のロボットと接した状態で、接する面上をスライド移動する動作)によるロボットの隊列変形が扱われている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】S. Vassilvitskii, M. Yim, J. Suh, “A Complete, Local and ParallelReconfiguration Algorithm for Cube Style Modular Robots”, in Proc.2002 IEEE Int. Conf. Robotics and Automation, pp. 117-122, Washington DC, May, 2002.
【非特許文献２】Kawano, H., ”Tunneling-Based Self-Reconfiguration of Heterogeneous Sliding Cube-Shaped Modular Robots in Environments with Obstacles”, 2017 IEEE International Conference on Robotics and Automation, pp.825-832, May 2017, Singapore.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
非特許文献２では、各ロボットが接した状態での動作を想定し、各ロボットが異なる特性（ヘテロジニアス）である。つまり、各ロボットの目標位置の集合の形状が定まった場合の隊列制御を実現している。しかし、ロボットが初期状態でとる隊列位置の集合とロボットの目標位置の集合の共通部分内に非接続箇所がない条件でのみの適用に限られている。
【０００９】
そこで、本発明は、ロボット単位の初期位置とロボット単位の目標位置の共通部分に非接続箇所がある場合でも移動することができる移動ロボット、移動ロボットの制御方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
この発明の一態様による移動ロボットは、所定の初期位置から所定の目標位置に移動する移動ロボットであって、移動ロボットは複数のロボット単位で構成されているとし、各ロボット単位には複数のロボットが含まれているとし、各ロボット単位が他のロボット単位と隣接することによりロボット単位が一塊のロボット構造を形成していることをロボット構造の接続性と言うとし、初期位置と目標位置の共通部分を共通位置とし、共通位置は１つ以上の部分共通位置の集合から構成されているとして、複数のロボットのそれぞれは、所定のroot位置にあるロボットi_rootである場合には、それぞれ所定の初期値に設定された、所定のroot位置からの相対位置と位置距離計算命令の送信転送回数とを含む位置距離計算命令を隣接するロボットに送信する位置距離計算命令送信部と、位置距離計算命令を受信した場合に、位置距離計算命令に含まれる送信転送回数をインクリメントし、位置距離計算命令を受信した方向に応じて位置距離計算命令に含まれる相対位置を更新し、インクリメントした送信転送回数及び更新した相対位置を含む位置距離計算命令を、位置距離計算命令を送信してきたロボット以外の、隣接するロボットに一度だけ転送する位置距離計算命令転送部と、位置距離計算命令を最初に受信した場合に、位置距離計算命令を送信してきたロボットに、インクリメントした送信転送回数及び更新した相対位置を含む返信位置距離計算命令を送信する返信位置距離計算命令送信部と、位置距離計算命令を最初に受信した場合に、位置距離計算命令を送信してきたロボットの方向をroot方向として記憶する方向記憶部と、返信位置距離計算命令を受信した場合に、方向記憶部から読み込んだroot方向に受信した返信位置距離計算命令を転送する返信位置距離計算命令転送部と、ロボットi_rootであり、全てのロボットが送信した返信位置距離計算命令を受信した場合には、初期位置、目標位置及び返信位置距離計算命令に含まれる相対位置に基づく各ロボットの位置に基づいて、ある１つの部分共通位置集合を集合Upとして選択し、集合Upに属する位置にあり目標位置の中のロボット単位が存在していない位置（以下、目的位置Dとする。）に隣接するロボット単位を先頭ロボット単位Headとして選択し、選択した先頭ロボット単位Headに含まれる所定のロボットhに、各ロボットの位置と、集合Upについての情報とを含む先頭ロボット決定命令を送信する第一先頭ロボット決定命令送信部と、ロボットhであり、先頭ロボット決定命令を受信した場合には、各ロボットの位置と、集合Upについての情報とに基づいて、目的位置Dと、集合Upに属しない位置にあり初期位置の中に位置するロボット単位であり、移動させてもロボット構造の接続性を維持することができるロボット単位である尾部ロボット単位Tailと、先頭ロボット単位Headから尾部ロボット単位Tailまでのパスと、先頭ロボット単位Head内のロボットのボイド発生順序とを決定するボイド発生順序決定部と、ロボットhである場合には、先頭ロボット単位Head内の決定されたボイド発生順序に基づく位置のロボットv1宛てのボイド発生命令を隣接するロボット単位に送信するボイド発生命令送信部と、ボイド発生命令を受信した場合に、ボイド発生命令を、ロボットv1に届くまで隣接するロボットに転送するボイド発生命令転送部と、ロボットv1であり、ボイド発生命令を受信した場合に、先頭ロボット単位Headの動く方向をah方向として、ah方向に隣接するロボットに押命令を送信する押命令送信部と、押命令を受信した場合であってah方向に隣接するロボットがある場合には、ah方向に隣接するロボットに押命令を転送し、押命令を受信した場合であってah方向に隣接するロボットがない場合には、ah方向の反対方向に隣接するロボットに返信押命令を送信する返信押命令送信部と、返信押命令を受信した場合には、ロボットv1に届くまでah方向の反対方向に隣接するロボットに返信押命令を転送する返信押命令転送部と、ロボットv1であり、返信押命令を受信した場合には、パス上にありロボットv1に隣接するロボットにボイド操作命令を送信するボイド操作命令送信部と、ロボットv1であり、返信押命令を受信した場合であって、ボイド操作命令を送信した後に、ah方向にロボットv1を移動させる第一移動部と、ボイド操作命令を受信した場合には、パス上にあり、パス内の自身より一マス分尾部ロボット単位Tail近づく方向にあるロボットにボイド操作命令を転送するボイド操作命令転送部と、ボイド操作命令を受信した場合であってボイド操作命令の送信転送回数が所定の回数である場合には、ボイド操作命令を送信してきたロボットに移動命令を送信する移動命令送信部と、移動命令を受信した場合には、移動命令を送信してきたロボットに返信移動命令を送信する返信移動命令送信部と、返信移動命令を受信した場合には、ボイド操作命令を送信してきたロボットと共にロボットをボイド操作命令を送信してきたロボットのある方向に移動させる第二移動部と、先頭ロボット単位Tailの動く方向をat方向として、尾部ロボット単位Tailの１個手前のロボット単位T'に含まれて、ロボットv1のロボット単位内位置と同じT'内位置にあるロボットであり、ボイド操作命令を受信した場合には、at方向の反対方向に隣接するロボットに引命令を送信する引命令送信部と、引命令を受信した場合であって尾部ロボット単位Tail内にat方向の反対方向に隣接するロボットがある場合には、at方向の反対方向に隣接するロボットに引命令を転送し、引命令を受信した場合であって尾部ロボット単位Tail内にat方向の反対方向に隣接するロボットがない場合には、at方向に隣接するロボットに返信引命令を送信する返信引命令送信部と、返信引命令を受信した場合には、返信引命令を送信してきたロボットと共にat方向にロボットを移動させる第三移動部と、ロボットhである場合には、先頭ロボット単位Headに含まれる全てのロボットが、目的位置Dに移動するまで、ボイド発生順序決定部、ボイド発生命令転送部、押命令送信部、返信押命令送信部、返信押命令転送部、ボイド操作命令送信部、第一移動部、ボイド操作命令転送部、移動命令送信部、返信移動命令送信部、第二移動部、引命令送信部、返信引命令送信部、第三移動部の処理を繰り返すように制御を行う制御部と、ロボットhである場合には、目的位置Dを集合Upに追加した後に、集合Upに接していて、集合Upの中ではなく目標位置の中に位置するロボット単位がある場合には、そのロボット単位の位置と、そのロボット単位から目標位置のみを経由して接続状態にあるロボット単位の位���とを集合Upに追加することにより集合Upを更新する集合更新部と、ロボットhである場合には、尾部ロボット単位Tailの位置と、目的位置Dにあるロボットの位置とを更新し、更新された各ロボットの位置に基づいて、集合Upに属する位置にあり目標位置の中のロボット単位が存在していない位置に隣接するロボット単位がある場合にはそのロボット単位を先頭ロボット単位Headとして新たに選択して、新たに選択した先頭ロボット単位Headに含まれる新たな所定のロボットhに、更新された各ロボットの位置と、更新された集合Upについての情報とを含む先頭ロボット決定命令を送信する第二先頭ロボット決定命令送信部と、を含む、移動ロボットである。
【発明の効果】
【００１１】
本発明によれば、ロボット単位の初期位置とロボット単位の目標位置の共通部分に非接続箇所がある場合でも移動することができる。
【図面の簡単な説明】
【００１２】
【図１】ロボットの移動を説明するための図。
【図２】ロボット単位の初期位置及び目標位置を説明するための図。
【図３】ボイドの移動の様子を説明するための図。
【図４】タネリングを説明するための図。
【図５】移動ロボットの例を説明するためのブロック図。
【図６】移動ロボットの制御方法の例を説明するための流れ図。
【図７】制御処理の具体例を説明するための図である。
【図８】制御処理の具体例を説明するための図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態について説明する。なお、以下の説明に用いる図面では、同じ機能を持つ構成部や同じ処理を行うステップには同一の符号を記し、重複説明を省略する。
【００１４】
＜理論的背景＞
まず、移動ロボット及び移動ロボットの制御方法の理論的背景について説明する。
【００１５】
［問題設定］
多数のロボットが協調して初期位置における隊列形成状態から、各ロボットが接した状態を維持しつつ移動を行い、目標位置での隊列形成を行う任務は、例えば図１に例示するような、互いに接する面同士をスライドさせて移動していくことが可能な立方体型のロボットの使用を想定する。図２に示すように、壁で区切られた部屋（ただし、図中、壁を省略する）においての初期位置から目標位置まで複数のロボットの移動によって実現するものである。
【００１６】
ロボットについては、例えば図１に示すように、ロボットの周囲縦横高さ方向（以下「上下左右前後方向」ともいう）６マスのうち１つに他のロボットが存在している状態を維持しながら移動をするものとする。この手法では１つのロボット自身が、一台のロボットのサイズ分の距離を移動することで、一回の動作の移動量を正確に測ることができるというメリットがある。また、１つの面を共有する隣り合うロボットとの相対的な位置を計測しあうことで、ロボットの群れ全体の中での各ロボットの位置も容易に知ることができる。このため、ロボットの移動量の誤差によって、隊列が崩れるといった問題を起こしにくい。また、複数のロボットを連結することにより、同時に複数のロボットを移動させていくことが可能である。なお、ロボットは、隣の位置に他のロボットが存在しているか否か、障害物があるか否か、そして、自身が目標位置上にいるかどうかを知ることができるものとする。
【００１７】
任務を行うロボットは、p台（例えば、p≧16=8×2）であり、各ロボットは、隣接するロボットと一面以上を共有しつつ、三次元空間におけるX-Y-Z軸方向に移動可能とする。図１の各立方体は、それぞれのロボットの位置を示すものである。各立方体にはロボットは一台しか存在することができない。それぞれのロボットは、移動しようとする方向に障害物か他のロボットがある場合には、静止をするものと仮定する。なお、ロボットが存在しうる立方体状の空間をマス、又は、格子とも言う。図２において、濃い灰色のマスはロボットが存在する位置を示す。図２（Ａ）のロボットが存在する位置はロボットの初期位置の集合を示し、図２（Ｃ）のロボットが存在する位置はロボットの目標位置の集合を示す。図２（Ｂ）に示すように、目標位置の集合と初期位置の集合は接している。目標位置の集合で表される領域を目標隊列エリアとも言う。このように、各初期位置及び各目標位置は、それぞれ縦横高さ方向の少なくとも何れかの方向において他の初期位置及び目標位置と隣接し、ロボットの初期位置及び目標位置での隊列形状はそれぞれ一塊の任意の形状である。
【００１８】
［ロボットの座標設定］
それぞれのロボットi（iはロボット番号を表すi=0,1,2,3,…,p-1）の位置を（Xr[i],Yr[i],Zr[i]）とし、初期位置を（Xr0[i],Yr0[i],Zr0[i]）とし、目標位置を（Xre[i],Yre[i],Zre[i]）とするとき、本問題は、初期位置に配置されたロボットが、目標位置まで移動するための行動計画を求めることと定義できる。ロボットの初期位置の集合をs、目標位置（Xre[i],Yre[i],Zre[i]）の集合をgとする。
【００１９】
［任務空間の定義］
iをロボット番号としたとき、ロボットiの各状態（ロボットの位置と行動）は離散値で表現される。部屋をX,Y,Zの直交座標系からなる3次元空間で表すと、X軸、Y軸、Z軸をそれぞれ離散化表現した値により各位置を表現する。つまり、部屋（３次元空間）は格子で区切られ、各格子が各位置に対応する。また、各格子において、障害物の「ある／なし」が予め設定されている。
【００２０】
［ロボット動作の定義］
行動主体は部屋に配置されている各ロボットとなる。ロボットi（iはロボット番号）の行動aは、静止、縦横高さ方向への１格子分の移動、の計７種類のうちの何れかを取る。例えば、a∈{0,1,2,3,4,5,6}として、
0: 静止
1: 三次元空間内でX軸正方向に１格子だけ移動する
2: 三次元空間内でY軸正方向に１格子だけ移動する
3: 三次元空間内でX軸負方向に１格子だけ移動する
4: 三次元空間内でY軸負方向に１格子だけ移動する
5: 三次元空間内でZ軸正方向に１格子だけ移動する
6: 三次元空間内でZ軸負方向に１格子だけ移動する
とする。
【００２１】
［探索計算上の問題点]
このような任務環境における状態空間は、ロボット数×3の次元数の状態を持ち、かつ選択可能な行動数は、ロボットの行動（＝7通り）のロボット数乗だけ存在する。例えば、ロボット数が50で、部屋の縦横高さ方向の格子数がそれぞれ20であるとすれば状態数は20の150乗個にもなり、探索計算に要する資源の量は膨大なものとなる。さらにロボット数が1台増える毎に、その状態数は8000倍増加していくことになる。本実施形態の［問題設定]の項で説明したように、ロボット同士が接しているという拘束条件を取り入れる場合、ロボットのお互いの移動を考慮したうえで探索計算を行わなければならないために、根本的な計算量の削減は難しく、複数のロボットを使用する場合の大きな問題となっている。
【００２２】
［非特許文献２における特徴]
非特許文献２におけるヘテロジニアス隊列制御では、上述の計算負荷の問題を解決するための方策の１つとして、ボイド制御の考え方を導入している。また、［問題設定で述べたような隊列変形の問題を克服するために８マスロボット単位の考え方も導入している。
【００２３】
まず、ボイド制御について説明する。ここでいうボイドとは、例えば図３に示すように、あるロボットが別の位置に移動した後に、元いた位置にできる空隙のことである。別の言い方をすると、ボイドとは、ロボットの移動する方向と反対の方向に移動する仮想的な存在である。こうした群ロボットの隊列形成問題においては、複数のロボットの動作に着目するがゆえに、その探索計算量が爆発してしまうが、視点を変えて、ボイドの動きに着目すれば、多数のロボットの動作計画の問題を単一のボイドの動作計画として考えることができ、探索計算負荷の軽減に適している。また、初期位置と目標位置が共通部分を持ち、かつ、それらの共通部分が複数の非接続部分に分かれている場合には適用不可能であった。
【００２４】
［ホモジニアス隊列制御］
各ロボット単位jが初期位置の集合S内にて、任意の位置に存在する状態から、各ロボット単位jをそれぞれ目標位置の集合Gのうちの何れかの位置（Xr_ue[j],Yr_ue[j],Zr_ue[j]）に配置させるホモジニアスロボット隊列制御の方法について以下説明していく。なお、以下、初期位置の集合Sの集合を初期位置S、目標位置の集合Gを目標位置Gと略記することもある。
【００２５】
ここで、初期位置の集合S及び目標位置の集合Gは、８マスのロボット単位で構成されているものとする。図４に示す通り、初期位置の集合Sの状態にあるロボット構造を目標位置の集合Gの状態に変形させるには、タネリングと呼ばれる方法をとる。図４に示す動作においては、先頭のロボット単位Headと尾部ロボット単位Tailを結ぶ一連のロボット単位が、いわば蛇のような形で、先頭ロボット単位Headの動作を追従する方式で動作する。なお、他のタンリングを行うロボット、例えば非特許文献１に示すような伸長収縮ロボットを使用した２×２×２のロボット単位を使用したロボット構造においてもこのタネリング動作は同様であり、本発明で示すタネリングの先頭ロボット単位Headと尾部ロボット単位Tailの選択方法は、同様に適用可能である。タネリングを使用した隊列変形は障害物のある環境においても、隊列変形動作を初期位置の集合と目標位置の集合以外の位置を使用せずに実行可能である。
【００２６】
本発明で使用する８マスロボット単位のタネリング動作は、例えば非特許文献２示したボイド制御の方法を使用する。先頭ロボット単位Head内のロボットが目的位置D内に移動する際に先頭ロボット単位Head内に生成される空隙（ボイド）をTailの位置まで移動させ、ロボット構造から外に排出する動作を利用してタネリングを行う。先頭ロボット単位Headと尾部ロボット単位Tailが隣接している場合であっても、ロボット同士の非接続が起こらないための先頭ロボット単位Head内のボイド生成順序が非特許文献２で定義されている。
【００２７】
従来手法においては、先頭ロボット単位Headの選択において、目標位置G内の非充填箇所に隣接するロボット単位の位置であるということ以外に特に制限はなかった。一方、尾部ロボット単位Tailの選択については、初期位置S内のロボットから尾部ロボット単位Tailを取り除いた場合のロボット構造の接続性を維持するための工夫が必要であったが、これについても、初期位置Sと目標位置Gの共通部分が１つであるならば、従来手法で解決がされている。その場合、初期位置S内のロボット単位jがロボット構造から取り払われる際に、ロボット構造が接続性を維持できるかどうかの条件として、以下の式（１）が有用である。
【００２８】
δ(j)>δ(j_n)  …(１)
ここで、δ(j)は、ロボット単位jの先頭ロボット単位Headからのロボット構造内でのマンハッタン距離である。そして、j_nは、ロボット単位jに隣接しているロボット単位の番号である。全てのロボット単位j_nに対して式（１）が成立するならば、ロボット単位jをロボット構造から取り払ったとしてもロボット構造の接続性は維持できる。すなわち、式（１）を満たすロボット単位を尾部ロボット単位Tailとして選択すればよい。単純に言えば、常にδが最大のロボット単位を尾部ロボット単位Tailとして選択していれば、問題はない。
【００２９】
続いて、本発明での、先頭ロボット単位Headと尾部ロボット単位Tailの選び方について述べる。初期位置と目標位置の共通部分がNcommon個の部分に分かれているとし、それぞれの部分を部分共通位置集合C[1]，C[2]，C[3],…,C[Ncommon]とする。すなわち、共通位置の集合は互いに隣接していない少なくとも１つの部分共通位置集合から構成されているとして、それらの少なくとも１つの部分共通位置集合をC[1]，C[2]，C[3],…,C[Ncommon]とする。
【００３０】
まず、先頭ロボット単位Headの選択について注意すべきことは、変形動作中に全体のロボット構造からこれらのNcommon個の部分共通位置集合のうちの何れも、ロボット構造から非接続にならないようにすることである。例えば、初期位置S内のロボットを徐々に目標位置G内に移動させたとするとその分初期位置S内に残るロボット数は少なくなる。この過程で注意を怠ると、初期位置S内のロボットにも目標位置G内のロボットにも共通部分を接続するために使用できるロボットがないという事態が起こり得る。また、先頭ロボット単位Headが目標位置Gより、尾部ロボット単位Tailが初期位置Sより選択されるといっても、初期位置Sと目標位置Gの共通部部分は初期位置Sとしても目標位置Gとしても働きうる。このため、そこへの適切な制御がなければ、先頭ロボット単位Headと尾部ロボット単位Tailの無限選択ループが発生してしまう恐れもある。それらを避けるために、以下の新しいルール（１）から（４）を設ける。
【００３１】
（１） 変形動作中に、先頭ロボット単位Headの目的位置Dを目的位置としたタネリングによって充填されたロボット単位の位置の集合をUpとする。すなわち、そして、集合Upに属している位置にある、ロボット単位のみを任意時刻での先頭ロボット単位Headとして選択可能とする。なお、ルール（１）に対応する処理は、後述する第一先頭ロボット決定命令送信部６によるステップＳ６の処理の中及び第二先頭ロボット決定命令送信部２３によるステップＳ２３の処理の中で行われる。
【００３２】
（２） S-Upに所属している位置にある、ロボット単位（言い換えれば、集合Upに属しない位置にあり初期位置の中に位置するロボット単位）のみを任意時刻での尾部ロボット単位Tailとして選択可能とする。なお、ルール（２）に対応する処理は、後述するボイド発生順序決定部７によるステップＳ７の処理の中で行われる。
【００３３】
（３） 変形動作開始時点で、集合UpにC[1]，C[2]，C[3],…,C[Ncommon]のうち、何れか１つ任意のC[i_start]に所属する全てのロボット単位の位置を、集合Upに追加する。なお、ルール（３）に対応する処理は、第一先頭ロボット決定命令送信部６によるステップＳ６の処理の中で行われる。
【００３４】
（４） 変形動作中に、集合UpがC[i_connected]内のロボット単位の何れかに接した場合、目標位置の集合G内にて、集合Upから接続状態にあるC[i_connected]内のロボット単位の位置を全て集合Upに追加する。C[i_connected]は、変形動作中に、Up内ロボット単位と新たに接した部分共通位置集合である。例えば、後述する図８（Ｇ）では、C(2)が、C[i_connected]である。なお、ルール（４）に対応する処理は、後述する集合更新部２２によるステップＳ２２の処理の中で行われる。
【００３５】
ルール（１）（２）は、タネリング中に集合Upのみが目標位置Gと初期位置Sの唯一の接続部分であるかのような制御を行い、それによって式（１）式が適用可能な状態を変形動作中に作り出すものである。ルール（３）は隊列変形動作開始時の先頭ロボット単位Headの選択肢を確保するものである。ルール（４）は、C[i_start]と他の部分共通位置集合が目標位置Gを経由して接続されて、１つの接続部分として扱えるようになった際に、先頭ロボット単位Headの選択肢として、接続された部分共通位置集合を集合Upに追加するものである。
【００３６】
ルール（１）から（４）により、ロボット単位の初期位置とロボット単位の目標位置の共通部分に非接続箇所がある場合でも適用可能な隊列制御を実現することができる。
【００３７】
以上に述べたタネリング動作を、全ての初期位置S内のロボット単位jが目標位置Gにたどり着くまで繰り返し行えば、ホモジニアス隊列制御が完了する。
【００３８】
以上の方法を、分散制御方式でのアルゴリズムで実現する移動ロボット及び移動ロボットの制御方法の一実施形態について以下説明する。
【００３９】
＜実施形態＞
各移動ロボットは、図５に示すように、位置距離計算命令送信部１、位置距離計算命令転送部２、返信位置距離計算命令送信部３、方向記憶部４、返信位置距離計算命令転送部５、第一先頭ロボット決定命令送信部６、ボイド発生順序決定部７、ボイド発生命令転送部８、押命令送信部９、返信押命令送信部１０、返信押命令転送部１１、ボイド操作命令送信部１２、第一移動部１３、ボイド操作命令転送部１４、移動命令送信部１５、返信移動命令送信部１６、第二移動部１７、引命令送信部１８、返信引命令送信部１９、第三移動部２０、制御部２１、集合更新部２２及び第二先頭ロボット決定命令送信部２３を例えば備えている。
【００４０】
移動ロボットの制御方法は、移動ロボットの各部が、例えば図６及び以下に説明するステップＳ１からステップＳ２３の処理を行うことにより実現される。
【００４１】
ステップＳ１からステップＳ６の処理は、初期位置Sの隊列構造を把握するための処理である。ステップＳ７からステップＳ２３の処理は、タネリング動作をするための処理である。
【００４２】
以下では、ロボット単位における所定の位置のロボットをcenterロボットとする。例えば、ロボット単位におけるX,Y,Z位置座標が全て偶数のものをcenterロボットとする。
【００４３】
まず、所定のroot位置にあるロボットi_rootにユーザーから変形開始命令が送信される。所定のroot位置は、例えば所定のロボット単位に含まれるcenterロボットの位置である。変形開始命令には、各ロボットの目標位置Gについての情報である隊列形態情報が含まれるとする。
【００４４】
［位置距離計算命令送信部１］
変形開始命令を受信したロボットが所定のroot位置にあるロボットi_rootである場合には、位置距離計算命令送信部１は、それぞれ所定の初期値に設定された、所定のroot位置からの相対位置と送信転送回数とを含む位置距離計算命令を隣接するロボットに送信する（ステップＳ１）。
【００４５】
以下、位置距離計算命令を位置距離計算命令MANHATTAN_COM、相対位置を相対位置（Xr,Yr,Zr）、送信転送回数を送信転送回数N_manhattanと表記する場合もある。
【００４６】
例えば、相対位置（Xr,Yr,Zr）の初期値は(0,0,0)であり、送信転送回数N_manhattanの初期値は0である。
【００４７】
［位置距離計算命令転送部２］
ロボットが、位置距離計算命令を受信した場合に、位置距離計算命令転送部２は、位置距離計算命令に含まれる送信転送回数をインクリメントし、位置距離計算命令を受信した方向に応じて位置距離計算命令に含まれる相対位置を更新し、インクリメントした送信転送回数及び更新した相対位置を含む位置距離計算命令を、位置距離計算命令を送信してきたロボット以外の、隣接するロボットに一度だけ転送する（ステップＳ２）。
【００４８】
例えば、位置距離計算命令をX方向に正の向きの通信で受信した場合には、言い換えれば位置距離計算命令をX方向に負の向きで接するロボットから受信した場合には、位置距離計算命令に含まれる相対位置（Xr,Yr,Zr）のXrを１だけインクリメントする。また、例えば、位置距離計算命令をX方向に負の向きの通信で受信した場合には、言い換えれば位置距離計算命令をX方向に正の向きで接するロボットから受信した場合には、位置距離計算命令に含まれる相対位置（Xr,Yr,Zr）のXrを１だけデクリメントする。
【００４９】
なお、位置距離計算命令転送部２は、位置距離計算命令MANHATTAN_COMを自分に送信してきたロボットには転送をしない。これにより、位置距離計算命令MANHATTAN_COMが、ロボット構造内で何度も無限に送受信されることを防ぐことができる。
【００５０】
［返信位置距離計算命令送信部３］
ロボットが、位置距離計算命令を最初に受信した場合に、返信位置距離計算命令送信部３は、位置距離計算命令を送信してきたロボットに、インクリメントした送信転送回数及び更新した相対位置を含む返信位置距離計算命令を送信する（ステップＳ３）。
【００５１】
以下、返信位置距離計算命令を返信位置距離計算命令RETURN_MANHATTAN_COMと表記する場合もある。
【００５２】
最初に位置距離計算命令MANHATTAN_COMを受信した際の送信転送回数N_manhattanの値が、このロボットのロボットi_rootからのマンハッタン距離となる。
【００５３】
［方向記憶部４］
ロボットが、位置距離計算命令を最初に受信した場合に、方向記憶部４は、位置距離計算命令を送信してきたロボットの方向をroot方向として記憶する（ステップＳ４）。
【００５４】
以後、各ロボットは、何か情報をロボットi_rootに対して送るときは、各自rootの方向に送信する。
【００５５】
［返信位置距離計算命令転送部５］
ロボットが、返信位置距離計算命令を受信した場合に、返信位置距離計算命令転送部５は、方向記憶部４から読み込んだroot方向に受信した返信位置距離計算命令を転送する（ステップＳ５）。
【００５６】
各返信位置距離計算命令を受信した各ロボットがステップＳ５の処理を行うことにより、各返信位置距離計算命令は最終的にロボットi_rootに到達する。
【００５７】
［第一先頭ロボット決定命令送信部６］
全てのロボットが送信した返信位置距離計算命令をロボットi_rootが、受信し終えた場合には、第一先頭ロボット決定命令送信部６は、初期位置、目標位置及び返信位置距離計算命令に含まれる相対位置に基づく各ロボットの位置に基づいて、ある１つの部分共通位置集合を集合Upとして選択し、集合Upに属する位置にあり目標位置の中のロボット単位が存在していない位置（以下、目的位置Dとする。）に隣接するロボット単位を先頭ロボット単位Headとして選択し、選択した先頭ロボット単位Headに含まれる所定のロボットhに、各ロボットの位置と、集合Upについての情報とを含む先頭ロボット決定命令を送信する（ステップＳ６）。
【００５８】
所定のロボットhは、例えば選択した先頭ロボット単位Headにおけるロボットcenterである。
【００５９】
第一先頭ロボット決定命令送信部６は、集合Upとして、どの部分共通位置集合C[1]，C[2]，C[3],…,C[Ncommon]を選択してもよい。例えば、第一先頭ロボット決定命令送信部６は、1からNcommonのうち何れか１つの値をi_startとし、部分共通位置集合C[i_start]に属する全ての位置を集合Upとして選択することで集合Upを初期化する。
【００６０】
以下、第一先頭ロボット決定を先頭ロボット決定命令HEAD_DECISION_COMと表記する場合もある。
【００６１】
このようにして、ロボットi_rootは、各ロボットからの返信位置距離計算命令RETURN_MANHATTAN_COMを受信して、現状の初期位置Sの隊列構造を把握する。そして、ロボットi_rootは、集合Upの初期化を行い最初の先頭ロボット単位Headを決定し、先頭ロボット決定命令HEAD_DECISION_COMを最初の先頭ロボット単位Head内のロボットhへ送信する。
【００６２】
［ボイド発生順序決定部７］
ロボットhが、先頭ロボット決定命令を受信した場合には、ボイド発生順序決定部７は、各ロボットの位置と、集合Upについての情報とに基づいて、目的位置Dと、集合Upに属しない位置にあり初期位置の中に位置するロボット単位であり、移動させてもロボット構造の接続性を維持することができるロボット単位である尾部ロボット単位Tailと、先頭ロボット単位Headから尾部ロボット単位Tailまでのパスと、先頭ロボット単位Head内のロボットのボイド発生順序とを決定する（ステップＳ７）。
【００６３】
ここで、各ロボット単位が他のロボット単位と隣接することによりロボット単位が一塊のロボット構造を形成していることをロボット構造の接続性と言うこととする。
【００６４】
例えば、ボイド発生順序決定部７は、初期位置S内でかつ集合Upでない位置にあって、式（１）を満たす任意のロボット単位を選択し、尾部ロボット単位Tailとする。
【００６５】
ロボットhは、例えば非特許文献２に示す方法で、先頭ロボット単位Headの方向である方向ahと尾部ロボット単位Tailの移動方向である方向atに応じて、先頭ロボット単位Head内のボイド発生順序を決定する。
【００６６】
［ボイド発生命令転送部８］
ロボット単位Headの位置内もしくはDの位置内にあるロボットが、ボイド発生命令を受信した場合に、ボイド発生命令転送部８は、ボイド発生命令を、ボイドを発生させる位置にあるロボットv1に届くまで隣接するロボットに転送する（ステップＳ８）。
【００６７】
以下、ボイド発生命令をボイド発生命令VOID_GENERATE_COMと表記する場合もある。
【００６８】
例えば、ボイド発生命令VOID_GENERATE_COMは、図７（Ａ）に示すように、先頭ロボット単位Head内を一筆書きのようなルートで転送される。ボイド発生命令VOID_GENERATE_COMは、その転送ルート中にある最初のボイド位置にあるロボットv1にたどり着くまで転送は続く。図７（Ａ）では、ボイド発生命令VOID_GENERATE_COMは、４が付されたロボット、０が付されたロボット、７が付されたロボット、３が付されたロボット、２が付されたロボット、５が付されたロボット、６が付されたロボット、１が付されたロボットの順序で転送される。なお、ここでは一つ目のボイド発生の例を述べたが、二つ目以降のボイド発生の場合、ボイド制御によって、ロボットhが、当初の位置から移動している場合がある。その場合は、ロボットhは自身の移動量を記憶しておき、その移動の記憶に基づき、ボイド発生命令を、最初に、図７（Ａ）でいうところの４が付されたロボットまで転送させるようにする。
【００６９】
［押命令送信部９］
ロボットv1が、ボイド発生命令を受信した場合に、押命令送信部９は、ah方向に隣接するロボットに押命令を送信する（ステップＳ９）。
【００７０】
ah方向は、先頭ロボット単位Headの方向、言い換えれば先頭ロボット単位Headの移動方向である。図７の例では、図７の紙面の右方向がah方向である。
【００７１】
以下、押命令を押命令PUSH_REQUESTと表記する場合もある。
【００７２】
［返信押命令送信部１０］
押命令を受信した場合であってah方向に隣接するロボットがある場合には、返信押命令送信部１０は、ah方向に隣接するロボットに押命令を転送し、押命令を受信した場合であってah方向に隣接するロボットがない場合には、ah方向の反対方向に隣接するロボットに返信押命令を送信する（ステップＳ１０）。
【００７３】
各ロボットがステップＳ１０の処理を行うことにより、ah方向に隣接するロボットがないロボットに届くまで押命令が転送され、そのah方向に隣接するロボットがないロボットから返信押命令が送信される。
【００７４】
なお、隣接するロボットとの機械的接続を解除しなければ、独立して移動することができない場合や、ロボットのハード設計面で押命令を送信したロボットと同時の動作を実現するのが難しい場合には、押命令PUSH_REQUESTを受信したロボットは、ah方向に接しているロボット以外との機械的接続を解除する。
【００７５】
以下、返信押命令を返信押命令RETURN_PULL_REQUESTと表記する場合もある。
【００７６】
［返信押命令転送部１１］
ロボットが、返信押命令を受信した場合には、返信押命令転送部１１は、ロボットv1に届くまでah方向の反対方向に隣接するロボットに返信押命令を転送する（ステップＳ１１）。
【００７７】
［ボイド操作命令送信部１２］
ロボットv1が、返信押命令を受信した場合には、ボイド操作命令送信部１２は、尾部ロボット単位Tailがタネリング動作する方向をat方向として、パス上にありv1に隣接するロボットにボイド操作命令を送信する（ステップＳ１２）。
【００７８】
図７の例では、図７の紙面の上方向がat方向である。
【００７９】
以下、ボイド操作命令をボイド操作命令VOID_NAVIGATE_COMと表記する場合もある。
【００８０】
ボイド操作命令VOID_NAVIGATE_COMには、先頭ロボット単位Headから尾部ロボット単位Tailまでのパスの情報が含まれているとする。ここでパスの情報とは、ボイドがたどっていくパスに含まれるロボット位置の列である。例えば、各ロボット位置をp[ip](ip=1,2,3,4...)とし、p［0］にはロボットv1の位置が含まれる。ロボットv1がボイド操作命令を送信するのは、p[1]に記憶されたロボットの位置である。
【００８１】
［第一移動部１３］
ロボットv1が、返信押命令を受信した場合であって、ボイド操作命令を送信した後に、第一移動部１３は、ロボットv1をah方向に移動させる（ステップＳ１３）。
【００８２】
ロボットv1のah方向への移動は、一ステップだけ行われる。言い換えれば、ロボットv1のah方向への移動は、１個のロボットの大きさの分だけ行われる。この際、ロボットv1は、ロボットv1にah方向に隣接しているロボットを押すことにより、このロボットv1にah方向に隣接しているロボットと共に移動する。
【００８３】
例えば、第一移動部１３の処理により、図５（Ｂ）に示すように、ロボットv1がah方向に移動する。この結果、ロボットv1があった位置にボイドが発生する。なお、図５（Ｂ）において、破線で示された位置は目的位置Dを表し、縦線で示された立方体は先頭ロボット単位Headを表し、斜線で示された立方体は尾部ロボット単位Tailを表し、ドットで示された立方体は先頭ロボット単位Head及び尾部ロボット単位Tail以外のロボット単位を表す。また、白で示された立方体は、一回のステップＳ７からステップＳ２０の処理で移動するロボット単位の例を表す。
【００８４】
［ボイド操作命令転送部１４］
パス内p[i]の位置にあるロボットが、ボイド操作命令を受信した場合には、ボイド操作命令転送部１４は、パス上にありパス内p[i+1]の位置にあるロボットがにボイド操作命令を転送する（ステップＳ１４）。
【００８５】
各ロボットがステップＳ１４の処理を行うことにより、ボイド操作命令VOID_NAVIGATE_COMは、上記尾部ロボット単位Tailの１個手前のロボット単位T'に含まれるロボットに届くまで転送される。
【００８６】
［移動命令送信部１５］
パス内p[i]の位置にあるロボットが、ボイド操作命令を受信した場合であってボイド操作命令の送信転送回数が所定の回数である場合には、移動命令送信部１５は、ボイド操作命令を送信してきたロボットに移動命令を送信する（ステップＳ１５）。
【００８７】
所定の回数とは、例えばここで扱っている８マスロボット単位の場合偶数回数である。（この場合、iは奇数である。）。
【００８８】
以下、移動命令を移動命令PUSH_ONE_REQUESTと表記する場合もある。
【００８９】
［返信移動命令送信部１６］
ロボットが移動命令を受信した場合には、返信移動命令送信部１６は、移動命令を送信してきたロボットに返信移動命令を送信する（ステップＳ１６）。
【００９０】
以下、返信移動命令を返信移動命令RETURN_PUSH_ONE_REQUESTと表記する場合もある。
【００９１】
なお、隣接するロボットとの機械的接続を解除しなければ、独立して移動することができない場合や、ロボットのハード設計面でボイド操作命令を送信したロボットと同時の動作を実現するのが難しい場合には、移動命令PUSH_ONE_REQUESTを受信したロボットは、移動命令PUSH_ONE_REQUESTを送信してきたロボット以外との機械的接続を解除してから、返信移動命令RETURN_PUSH_ONE_REQUESTを送信する。
【００９２】
［第二移動部１７］
ロボットが返信移動命令を受信した場合には、第二移動部１７は、ボイド操作命令を送信してきたロボットと共に、ロボット自身を、ロボット自身から見てボイド操作命令を送信してきたロボットがある方向に移動させる（ステップＳ１７）。
【００９３】
言い換えれば、返信移動命令RETURN_PUSH_ONE_REQUESTを受信したロボットは、ボイド操作命令VOID_NAVIGATE_COMを自身に送信してきたロボットを１ステップ押しながら移動する。
【００９４】
［引命令送信部１８］
タネリング動作において尾部ロボット単位Tailの１個手前のロボット単位T'に含まれかつ、ロボット単位内位置がロボットv1のそれと同じであるロボットが、ボイド操作命令を受信した場合には、引命令送信部１８は、上記at方向の反対方向に隣接するロボットに引命令を送信する（ステップＳ１８）。
【００９５】
以下、引命令を引命令PULL_REQUESTと表記する場合もある。
【００９６】
尾部ロボット単位Tailの１個手前のロボット単位T'に含まれるロボットであり、ボイド操作命令を受信した場合であって、ボイド操作命令の送信転送回数が所定の回数（たとえば、８マス単位の場合は偶数）である場合には、ステップＳ１８の処理が行われた後に、ステップＳ１５からステップＳ１７の処理が行われるとする。
【００９７】
すなわち、この場合、このロボットは、at方向に隣接するロボットに引命令PULL_REQUESTを送信した後に（ステップＳ１８）、命令VOID_NAVIGATE_COMを自身に送信してきたロボットに移動命令PUSH_ONE_REQUESTを送信し（ステップＳ１５）、ステップＳ１６及びステップＳ１７の処理により押し動作を行う。
【００９８】
［返信引命令送信部１９］
ロボットが引命令を受信した場合であって尾部ロボット単位Tail内にat方向の反対方向に隣接するロボットがある場合には、返信引命令送信部１９は、at方向の反対方向に隣接するロボットに引命令を転送し、ロボットが引命令を受信した場合であって尾部ロボット単位Tail内にat方向の反対方向に隣接するロボットがない場合には、at方向に隣接するロボットに返信引命令を送信する（ステップＳ１９）。
【００９９】
以下、返信引命令を返信引命令RETURN_PULL_REQUESTと表記する場合もある。
【０１００】
なお、隣接するロボットとの機械的接続を解除しなければ、独立して移動することができない場合や、ロボットのハード設計面で返信引命令を送信したロボットと同時の動作を実現するのが難しい場合には、引命令PULL_REQUESTを受信したロボットは、引命令PULL_REQUESTを送信してきたロボット以外との機械的接続を解除してから、引命令PULL_REQUESTの転送又は返信引命令RETURN_PULL_REQUESTの送信を行う。
【０１０１】
［第三移動部２０］
返信引命令を受信した場合には、第三移動部２０は、返信引命令を送信してきたロボットと共にat方向にロボットを移動させる（ステップＳ２０）。
【０１０２】
白で示された立方体は、一回のステップＳ７からステップＳ２０の処理で移動するロボットの例を表す。
【０１０３】
［制御部２１］
ロボットhの制御部２１は、先頭ロボット単位Headに含まれる全てのロボットが、目的位置Dに移動するまで、ボイド発生順序決定部７、ボイド発生命令転送部８、押命令送信部９、返信押命令送信部１０、返信押命令転送部１１、ボイド操作命令送信部１２、第一移動部１３、ボイド操作命令転送部１４、移動命令送信部１５、返信移動命令送信部１６、第二移動部１７、引命令送信部１８、返信引命令送信部１９及び第三移動部２０の処理を繰り返すように制御を行う（ステップＳ２１）。
【０１０４】
例えば、ロボットhが最初のボイド発生命令VOID_GENERATE_COMを送信してから、一定時間経った後（例えば先頭ロボット単位Head内ボイドが消えた後）、２つ目のボイド発生命令VOID_GENERATE_COMを送信する。同様に、ボイド発生命令VOID_GENERATE_COMは先頭ロボット単位Head内を転送され、２つ目のボイド発生位置にあるロボットがそれを受信したら、最初のボイドと同様にボイド制御を行う。このようにして、８つのボイドが生成されて、先頭ロボット単位Headのロボットが目的位置Dに移動するまで、ステップＳ７からステップＳ２０の処理が繰り返し行われる。
【０１０５】
［集合更新部２２］
ロボットhの集合更新部２２は、目的位置Dを集合Upに追加した後に、集合Upに接していて、集合Upの中ではなく目標位置の中に位置するロボット単位がある場合には、そのロボット単位の位置と、そのロボット単位から目標位置のみを経由して接続状態にあるロボット単位の位置とを集合Upに追加することにより集合Upを更新する（ステップＳ２２）。
【０１０６】
具体的には、集合更新部２２は、目的位置Dを集合Upに追加した後に、集合Upに接していて、集合Upに含まれず、かつ目標位置G内にあるロボット単位jがある場合には、そのロボット単位jの位置と、そのロボット単位jから目標位置G（共通位置を含む。）内のみを経由して接続状態にある全てのロボット単位の位置を集合Upに追加することにより集合Upを更新する。
【０１０７】
［第二先頭ロボット決定命令送信部２３］
ロボットhの第二先頭ロボット決定命令送信部２３は、尾部ロボット単位Tailの位置と、目的位置Dにあるロボットの位置とを更新し、更新された各ロボットの位置に基づいて、集合Upに属する位置にあり目標位置の中のロボット単位が存在していない位置に隣接するロボット単位がある場合にはそのロボット単位を先頭ロボット単位Headとして新たに選択して、新たに選択した先頭ロボット単位Headに含まれる新たな所定のロボットhに、更新された各ロボットの位置と、更新された集合Upについての情報とを含む先頭ロボット決定命令を送信する（ステップＳ２３）。
【０１０８】
その後、ステップＳ７以降の処理が行われる。
【０１０９】
目標位置の中のロボットが存在しない位置がない場合には、第二先頭ロボット決定命令送信部２３は処理を終える。
【０１１０】
このようにして、目標位置の中のロボットが存在しない位置がなくなるまで、ボイド発生順序決定部７、ボイド発生命令転送部８、押命令送信部９、返信押命令送信部１０、返信押命令転送部１１、ボイド操作命令送信部１２、第一移動部１３、ボイド操作命令転送部１４、移動命令送信部１５、返信移動命令送信部１６、第二移動部１７、引命令送信部１８、返信引命令送信部１９、第三移動部２０、制御部２１、集合更新部２２及び第二先頭ロボット決定命令送信部２３の処理を繰り返すように制御が行われる。
【０１１１】
このような構成により、多数のロボット単位の存在を考慮しつつ、ロボット単位同士が接したままの状態を維持しつつ任意の初期位置における隊列形成状態から、他の任意の目標位置における隊列形成状態へ、初期位置の集合と目標位置の集合の共通部分に非接続がある場合でも障害物のある環境でもホモジニアス隊列制御を行うことができる。また、目標位置の集合から共通位置を除いた部分において非接続箇所がある場合でも隊列制御を行うことができる。
【０１１２】
＜具体例＞
図８を用いて、移動ロボット及び移動ロボットの制御方法処理の具体例について説明する。
【０１１３】
図８（Ａ）はロボット単位の初期位置を表し、図８（Ｂ）はロボット単位の目標位置を表す。図８（Ａ）（Ｂ）において、白の立方体及び斜線の立方体はロボット単位の初期位置を表し、ドットの立方体及び斜線の立方体はロボット単位の目標位置を表す。斜線の立方体は、ロボット単位の初期位置と目標位置の共通部分である共通位置を表す。
【０１１４】
図８（Ａ）において、共通位置の集合は互いに隣接していない３個の部分共通位置集合C(1),C(2),C(3)から構成されている。図８（Ａ）において、一番上の２個の斜線の立方体の位置がC(1)であり、中央の２個の斜線の立方体の位置がC(2)であり、一番下の２個の斜線の立方体の位置がC(3)である。
【０１１５】
第一先頭ロボット決定命令送信部６は、例えば図８（Ｂ）に示すように、部分共通位置集合C(1)を集合Upとして選択する。図８（Ｂ）から図８（Ｇ）において、集合Upに属する位置を太線の点線で表す。
【０１１６】
第一先頭ロボット決定命令送信部６及びボイド発生順序決定部７は、例えば図８（Ｂ）に示すように、先頭ロボット単位Head、尾部ロボット単位Tail、目的位置Dを選択する。
【０１１７】
ボイド発生順序決定部７、ボイド発生命令転送部８、押命令送信部９、返信押命令送信部１０、返信押命令転送部１１、ボイド操作命令送信部１２、第一移動部１３、ボイド操作命令転送部１４、移動命令送信部１５、返信移動命令送信部１６、第二移動部１７、引命令送信部１８、返信引命令送信部１９、第三移動部２０及び制御部２１は、図８（Ｂ）の目的位置Dを目的位置として、先頭ロボット単位Headから尾部ロボット単位Tailの一連のロボット単位を移動させる。その結果、ロボット単位の位置は、図８（Ｃ）のようになる。
【０１１８】
集合更新部２２は、図８（Ｂ）の目的位置Dを集合Upに追加する。この場合、集合Upに接していて、集合Upの中ではなく目標位置の中に位置するロボット単位は存在しないため、目的位置D以外の位置は集合Upに追加されない。この結果、集合Upに属する位置は、図８（Ｃ）のようになる。
【０１１９】
目標位置の中のロボットが存在しない位置が残っているため、ステップＳ２３の処理に戻る。
【０１２０】
第二先頭ロボット決定命令送信部２３は、例えば図８（Ｄ）に示すように、先頭ロボット単位Head、尾部ロボット単位Tail、目的位置Dを選択する。
【０１２１】
ボイド発生順序決定部７、ボイド発生命令転送部８、押命令送信部９、返信押命令送信部１０、返信押命令転送部１１、ボイド操作命令送信部１２、第一移動部１３、ボイド操作命令転送部１４、移動命令送信部１５、返信移動命令送信部１６、第二移動部１７、引命令送信部１８、返信引命令送信部１９、第三移動部２０及び制御部２１は、図８（Ｄ）の目的位置Dを目的位置として、先頭ロボット単位Headから尾部ロボット単位Tailの一連のロボット単位を移動させる。その結果、ロボット単位の位置は、図８（Ｅ）のようになる。
【０１２２】
集合更新部２２は、図８（Ｄ）の目的位置Dを集合Upに追加する。この場合、集合Upに接していて、集合Upの中ではなく目標位置の中に位置するロボット単位は存在しないため、目的位置D以外の位置は集合Upに追加されない。この結果、集合Upに属する位置は、図８（Ｅ）のようになる。
【０１２３】
目標位置の中のロボットが存在しない位置が残っているため、ステップＳ２３の処理に戻る。
【０１２４】
第二先頭ロボット決定命令送信部２３は、例えば図８（Ｆ）に示すように、先頭ロボット単位Head、尾部ロボット単位Tail、目的位置Dを選択する。
【０１２５】
ボイド発生順序決定部７、ボイド発生命令転送部８、押命令送信部９、返信押命令送信部１０、返信押命令転送部１１、ボイド操作命令送信部１２、第一移動部１３、ボイド操作命令転送部１４、移動命令送信部１５、返信移動命令送信部１６、第二移動部１７、引命令送信部１８、返信引命令送信部１９、第三移動部２０及び制御部２１は、図８（Ｆ）の目的位置Dを目的位置として、先頭ロボット単位Headから尾部ロボット単位Tailの一連のロボット単位を移動させる。その結果、ロボット単位の位置は、図８（Ｇ）のようになる。
【０１２６】
集合更新部２２は、図８（Ｆ）の目的位置Dを集合Upに追加する。この場合、集合Upに接していて、集合Upの中ではなく目標位置の中に位置するロボット単位（図８（Ｇ）において、cで示した位置にあるロボット単位）が存在する。このため、この場合、集合更新部２２は、位置cと、位置cにあるロボット単位から目標位置（共通位置を含む。）のみを経由して接続状態にあるロボット単位の位置（すなわち、位置cを除く、部分共通位置集合C(2)に属する位置）とを集合Upに追加する。この結果、集合Upに属する位置は、図８（Ｇ）のようになる。なお、この場合、C[2]が、C[i_connected]となる。このステップＳ４の処理により、C[i_connected]であるC[2]が、集合Upに追加される。
【０１２７】
このような処理を繰り返すことにより、最終的に、図８（Ｈ）に示すようにロボット単位を目標位置に移動させることができる。
【０１２８】
＜変形例等＞
上記の実施形態では、ロボット単位としていわゆる８マススライディングキューブを用いたが、２７マススライディングキューブ等のの複数のロボットから構成されるロボット単位を用いてもよい。
【０１２９】
＜プログラム及び記録媒体＞
移動ロボットの各部における処理をコンピュータによって実現する場合、移動ロボットの各部が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、その各部の処理がコンピュータ上で実現される。
【０１３０】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【０１３１】
また、各部の処理は、コンピュータ上で所定のプログラムを実行させることにより構成することにしてもよいし、これらの処理の少なくとも一部をハードウェア的に実現することとしてもよい。
【０１３２】
その他、この発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【符号の説明】
【０１３３】
１     位置距離計算命令送信部
２     位置距離計算命令転送部
３     返信位置距離計算命令送信部
４     方向記憶部
５     返信位置距離計算命令転送部
６     第一先頭ロボット決定命令送信部
７     ボイド発生順序決定部
８     ボイド発生命令転送部
９     押命令送信部
１０   返信押命令送信部
１１   返信押命令転送部
１２   ボイド操作命令送信部
１３   第一移動部
１４   ボイド操作命令転送部
１５   移動命令送信部
１６   返信移動命令送信部
１７   第二移動部
１８   引命令送信部
１９   返信引命令送信部
２０   第三移動部
２１   制御部
２２   集合更新部
２３   第二先頭ロボット決定命令送信部
【図１】
2020030765.tif 000003
【図２】
2020030765.tif 000004
【図３】
2020030765.tif 000005
【図４】
2020030765.tif 000006
【図５】
2020030765.tif 000007
【図６】
2020030765.tif 000008
【図７】
2020030765.tif 000009
【図８】
2020030765.tif 000010