(57)【要約】【課題】一方の制御対象物群が接続を維持しつつ他方の制御対象物群が占有する空間を通り抜けて移動する。【解決手段】隊列制御装置１は、Ｍ群制御対象物群がＳ群制御対象物単位の存在する空間を通り抜けて所定の移動方向へ移動するように部分隊列を制御する。欠損状態判定部１３は、各Ｓ群制御対象物単位についてモード値を判定する。移動計画部１４は、各Ｍ群制御対象物単位について、基準列に属する制御対象物を移動方向へ移動させる第一の行動と、基準列の先頭の制御対象物を空隙へ移動させる第二の行動と、末尾のＭ群制御対象物単位において基準列に属していない制御対象物を基準列の末尾へ移動させる第三の行動と、のいずれかを行う移動計画系列を生成する。動作部１５は、移動計画系列に従ってＭ群制御対象物群を移動させる。【選択図】図８
2019082800.tif 000002
【特許請求の範囲】
【請求項１】
Ｍ群制御対象物単位は、Ｍ３制御対象物と、Ｍ３制御対象物にx軸負方向で隣接するＭ２制御対象物と、Ｍ３制御対象物にy軸負方向で隣接するＭ１制御対象物と、Ｍ３制御対象物にｚ軸負方向で隣接するＭ４制御対象物とからなり、
Ｓ群制御対象物単位は、Ｓ３制御対象物と、Ｓ３制御対象物にx軸正方向で隣接するＳ２制御対象物と、Ｓ３制御対象物にy軸正方向で隣接するＳ１制御対象物と、Ｓ３制御対象物にｚ軸正方向で隣接するＳ４制御対象物との少なくとも１個の制御対象物からなり、
部分隊列は、複数のＭ群制御対象物単位が所定の移動方向に沿って接続したＭ群制御対象物群と複数のＳ群制御対象物単位が上記移動方向に沿って接続したＳ群制御対象物群とが組み合わさって構成され、
上記Ｍ群制御対象物群内の各Ｍ群制御対象物単位が互いに接続を維持し、かつ、各Ｍ群制御対象物単位内の各制御対象物が互いに接続を維持しながら、上記Ｓ群制御対象物単位の存在する空間を通り抜けて上記移動方向へ移動するように上記部分隊列を制御する隊列制御装置であって、
各Ｓ群制御対象物単位について、上記Ｓ１制御対象物と上記Ｓ４制御対象物とが欠損しているか否かによりモード値を判定する欠損状態判定部と、
各Ｍ群制御対象物単位について、
上記部分隊列内で上記移動方向に向かって上記Ｍ群制御対象物単位に属する制御対象物のみが連続する基準列に属する制御対象物を上記移動方向へ移動させる第一の行動と、
上記部分隊列内で上記移動方向に向かって先頭のＭ群制御対象物単位と組み合わさるＳ群制御対象物単位、もしくは、そのＳ群制御対象物単位と上記移動方向側で隣接するＳ群制御対象物単位を目的Ｓ群制御対象物単位とし、上記目的Ｓ群制御対象物単位のモード値に基づいて、上記基準列の先頭の制御対象物を上記目的Ｓ群制御対象物単位において制御対象物が欠損している空隙へ移動させる第二の行動と、
上記部分隊列内で上記移動方向に向かって末尾のＭ群制御対象物単位において、上記基準列に属する制御対象物と隣接していない上記Ｍ１制御対象物もしくは上記Ｍ４制御対象物のいずれかを上記基準列の末尾へ移動させる第三の行動と、
のいずれかを行う移動計画からなる系列である移動計画系列を生成する移動計画部と、
上記移動計画系列に従って上記Ｍ群制御対象物群に属する各制御対象物を移動させる動作部と、
を含む隊列制御装置。
【請求項２】
請求項１に記載の隊列制御装置であって、
上記移動方向の逆方向を行動指令補助値として決定する行動指令補助値決定部と、
上記Ｍ群制御対象物群が上記Ｓ群制御対象物単位の存在する空間を通り抜けて移動方向へ移動した後に上記Ｍ群制御対象物群の各制御対象物が存在すべき位置を仮想位置として設定する仮想位置設定部と、
上記移動計画系列に含まれる移動計画を時系列が逆になるように並べ替えたものを新たな移動計画系列として生成する行動計画並べ替え部と、
をさらに含み、
上記移動計画部は、上記行動指令補助値を上記移動方向とし、上記仮想位置を上記Ｍ群制御対象物群の初期位置として、上記移動計画系列を生成するものである、
隊列制御装置。
【請求項３】
Ｍ群制御対象物単位は、Ｍ３制御対象物と、Ｍ３制御対象物にx軸負方向で隣接するＭ２制御対象物と、Ｍ３制御対象物にy軸負方向で隣接するＭ１制御対象物と、Ｍ３制御対象物にｚ軸負方向で隣接するＭ４制御対象物との少なくとも１個の制御対象物からなり、
Ｓ群制御対象物単位は、Ｓ３制御対象物と、Ｓ３制御対象物にx軸正方向で隣接するＳ２制御対象物と、Ｓ３制御対象物にy軸正方向で隣接するＳ１制御対象物と、Ｓ３制御対象物にｚ軸正方向で隣接するＳ４制御対象物とからなり、
部分隊列は、複数のＭ群制御対象物単位が所定の移動方向に沿って接続したＭ群制御対象物群と複数のＳ群制御対象物単位が上記移動方向に沿って接続したＳ群制御対象物群とが組み合わさって構成され、
上記Ｓ群制御対象物群内の各Ｓ群制御対象物単位が互いに接続を維持し、かつ、各Ｓ群制御対象物単位内の各制御対象物が互いに接続を維持しながら、上記Ｍ群制御対象物単位の存在する空間を通り抜けて上記移動方向へ移動するように上記部分隊列を制御する隊列制御装置であって、
各Ｍ群制御対象物単位について、上記Ｍ１制御対象物と上記Ｍ４制御対象物とが欠損しているか否かによりモード値を判定する欠損状態判定部と、
各Ｓ群制御対象物単位について、
上記部分隊列内で上記移動方向に向かって上記Ｓ群制御対象物単位に属する制御対象物のみが連続する基準列に属する制御対象物を上記移動方向へ移動させる第一の行動と、
上記部分隊列内で上記移動方向に向かって先頭のＳ群制御対象物単位と組み合わさるＭ群制御対象物単位、もしくは、そのＭ群制御対象物単位と上記移動方向側で隣接するＭ群制御対象物単位を目的Ｍ群制御対象物単位とし、上記目的Ｍ群制御対象物単位のモード値に基づいて、上記基準列の先頭の制御対象物を上記目的Ｍ群制御対象物単位において制御対象物が欠損している空隙へ移動させる第二の行動と、
上記部分隊列内で上記移動方向に向かって末尾のＳ群制御対象物単位において、上記基準列に属する制御対象物と隣接していない上記Ｓ１制御対象物もしくは上記Ｓ４制御対象物のいずれかを上記基準列の末尾へ移動させる第三の行動と、
のいずれかを行う移動計画からなる系列である移動計画系列を生成する移動計画部と、
上記移動計画系列に従って上記Ｓ群制御対象物群に属する各制御対象物を移動させる動作部と、
を含む隊列制御装置。
【請求項４】
請求項３に記載の隊列制御装置であって、
上記移動方向の逆方向を行動指令補助値として決定する行動指令補助値決定部と、
上記Ｓ群制御対象物群が上記Ｍ群制御対象物単位の存在する空間を通り抜けて移動方向へ移動した後に上記Ｓ群制御対象物群の各制御対象物が存在すべき位置を仮想位置として設定する仮想位置設定部と、
上記移動計画系列に含まれる移動計画を時系列が逆になるように並べ替えたものを新たな移動計画系列として生成する行動計画並べ替え部と、
をさらに含み、
上記移動計画部は、上記行動指令補助値を上記移動方向とし、上記仮想位置を上記Ｓ群制御対象物群の初期位置として、上記移動計画系列を生成するものである、
を含む隊列制御装置。
【請求項５】
Ｍ群制御対象物単位は、Ｍ３制御対象物と、Ｍ３制御対象物にx軸負方向で隣接するＭ２制御対象物と、Ｍ３制御対象物にy軸負方向で隣接するＭ１制御対象物と、Ｍ３制御対象物にｚ軸負方向で隣接するＭ４制御対象物とからなり、
Ｓ群制御対象物単位は、Ｓ３制御対象物と、Ｓ３制御対象物にx軸正方向で隣接するＳ２制御対象物と、Ｓ３制御対象物にy軸正方向で隣接するＳ１制御対象物と、Ｓ３制御対象物にｚ軸正方向で隣接するＳ４制御対象物との少なくとも１個の制御対象物からなり、
部分隊列は、複数のＭ群制御対象物単位が所定の移動方向に沿って接続したＭ群制御対象物群と複数のＳ群制御対象物単位が上記移動方向に沿って接続したＳ群制御対象物群とが組み合わさって構成され、
上記Ｍ群制御対象物群内の各Ｍ群制御対象物単位が互いに接続を維持し、かつ、各Ｍ群制御対象物単位内の各制御対象物が互いに接続を維持しながら、上記Ｓ群制御対象物単位の存在する空間を通り抜けて上記移動方向へ移動するように上記部分隊列を制御する隊列制御装置が実行する隊列制御方法であって、
欠損状態判定部が、各Ｓ群制御対象物単位について、上記Ｓ１制御対象物と上記Ｓ４制御対象物とが欠損しているか否かによりモード値を判定し、
移動計画部が、各Ｍ群制御対象物単位について、
上記部分隊列内で上記移動方向に向かって上記Ｍ群制御対象物単位に属する制御対象物のみが連続する基準列に属する制御対象物を上記移動方向へ移動させる第一の行動と、
上記部分隊列内で上記移動方向に向かって先頭のＭ群制御対象物単位と組み合わさるＳ群制御対象物単位、もしくは、そのＳ群制御対象物単位と上記移動方向側で隣接するＳ群制御対象物単位を目的Ｓ群制御対象物単位とし、上記目的Ｓ群制御対象物単位のモード値に基づいて、上記基準列の先頭の制御対象物を上記目的Ｓ群制御対象物単位において制御対象物が欠損している空隙へ移動させる第二の行動と、
上記部分隊列内で上記移動方向に向かって末尾のＭ群制御対象物単位において、上記基準列に属する制御対象物と隣接していない上記Ｍ１制御対象物もしくは上記Ｍ４制御対象物のいずれかを上記基準列の末尾へ移動させる第三の行動と、
のいずれかを行う移動計画からなる系列である移動計画系列を生成し、
動作部が、上記移動計画系列に従って上記Ｍ群制御対象物群に属する各制御対象物を移動させる、
隊列制御方法。
【請求項６】
Ｍ群制御対象物単位は、Ｍ３制御対象物と、Ｍ３制御対象物にx軸負方向で隣接するＭ２制御対象物と、Ｍ３制御対象物にy軸負方向で隣接するＭ１制御対象物と、Ｍ３制御対象物にｚ軸負方向で隣接するＭ４制御対象物との少なくとも１個の制御対象物からなり、
Ｓ群制御対象物単位は、Ｓ３制御対象物と、Ｓ３制御対象物にx軸正方向で隣接するＳ２制御対象物と、Ｓ３制御対象物にy軸正方向で隣接するＳ１制御対象物と、Ｓ３制御対象物にｚ軸正方向で隣接するＳ４制御対象物とからなり、
部分隊列は、複数のＭ群制御対象物単位が所定の移動方向に沿って接続したＭ群制御対象物群と複数のＳ群制御対象物単位が上記移動方向に沿って接続したＳ群制御対象物群とが組み合わさって構成され、
上記Ｓ群制御対象物群内の各Ｓ群制御対象物単位が互いに接続を維持し、かつ、各Ｓ群制御対象物単位内の各制御対象物が互いに接続を維持しながら、上記Ｍ群制御対象物単位の存在する空間を通り抜けて上記移動方向へ移動するように上記部分隊列を制御する隊列制御装置が実行する隊列制御方法であって、
欠損状態判定部が、各Ｍ群制御対象物単位について、上記Ｍ１制御対象物と上記Ｍ４制御対象物とが欠損しているか否かによりモード値を判定し、
移動計画部が、各Ｓ群制御対象物単位について、
上記部分隊列内で上記移動方向に向かって上記Ｓ群制御対象物単位に属する制御対象物のみが連続する基準列に属する制御対象物を上記移動方向へ移動させる第一の行動と、
上記部分隊列内で上記移動方向に向かって先頭のＳ群制御対象物単位と組み合わさるＭ群制御対象物単位、もしくは、そのＭ群制御対象物単位と上記移動方向側で隣接するＭ群制御対象物単位を目的Ｍ群制御対象物単位とし、上記目的Ｍ群制御対象物単位のモード値に基づいて、上記基準列の先頭の制御対象物を上記目的Ｍ群制御対象物単位において制御対象物が欠損している空隙へ移動させる第二の行動と、
上記部分隊列内で上記移動方向に向かって末尾のＳ群制御対象物単位において、上記基準列に属する制御対象物と隣接していない上記Ｓ１制御対象物もしくは上記Ｓ４制御対象物のいずれかを上記基準列の末尾へ移動させる第三の行動と、
のいずれかを行う移動計画からなる系列である移動計画系列を生成し、
動作部が、上記移動計画系列に従って上記Ｓ群制御対象物群に属する各制御対象物を移動させる、
隊列制御方法。
【請求項７】
請求項１から４のいずれかに記載の隊列制御装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の制御対象物の行動を制御する技術に関する。特に、二つの制御対象物群が同じ空間内を移動する場合において、一方の制御対象物群が他方の制御対象物群の占有する空間を通り抜けて目的位置へ移動（通り抜け）することを可能とするための各制御対象物の行動計画を求める隊列制御技術に関する。
【背景技術】
【０００２】
近年、多数の自律移動ロボットを効率的に制御するための研究が活発に行われている。その任務内容は、人間の入れない箇所の監視、物品の搬送など様々であるが、多数のロボットの協調動作による隊列形成を効率的に行わせるための技術が求められており盛んに研究が行われている。
【０００３】
特に、ロボットの隊列制御の中でも、ロボット同士が互いに接したままの状態で、アメーバのように全体で移動を行うという仮定の下でのロボット隊列制御においては、ロボット同士の相対的な位置関係から、各ロボットの絶対位置の決定が可能であるという利点と、付加的な位置計測用の装備を必要としないという利点があり、そのようなロボットの研究も行われている（例えば、非特許文献１、２参照）。
【０００４】
非特許文献１では、全てのロボットが同じ性質を持つ（ホモジニアス）という前提の下で、任意の初期隊列形成状態から目的隊列形成状態へ変形する隊列制御を実現する方法が開示されている。ここでは、８つのロボットを１つの単位として移動させることで、従来よりも効率的な隊列制御を実現している。
【０００５】
非特許文献２では、各矩形ロボットが異なる性質を持つ(ヘテロジニアス)という前提の下で、任意の形状隊列から他の形状隊列へ変形する隊列制御の方法が開示されている。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Kawano, H., “Complete Reconfiguration Algorithm for Sliding Cube-shaped Modular Robots with only Sliding Motion Primitive”, 2015 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2015), pp. 3276-3283, Hamburg, Germany, September 2015.
【非特許文献２】R. Fitch, Z. Butler, D. Rus, “Reconfiguration Planning for Heterogeneous Self-Reconfiguring Robots”, 2003 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2003), pp. 2460-2467, Las Vegas, NV, October 2003.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
非特許文献１および非特許文献２は、いずれも空間内には１つのロボット群のみが存在しているものとして、当該ロボット群の初期隊列形成状態を別の隊列形成状態へ変形させるものである。
【０００８】
実環境下においては、同じ空間内に複数のロボット群が存在し、それぞれが任務遂行のために空間内を移動する際に、ロボット隊列同士ですれ違う動作が必要になる場合も想定される。このとき、十分な広さのある空間であれば、各ロボット群が接触しないような経路をとってすれ違うことも可能であるが、狭い通路を移動する場合や、障害物がある場所を移動する場合等はすれ違うための空間が限られており、一方のロボット群が他方のロボット群が占有する空間を通り抜けて（つまり、一方のロボット群と他方のロボット群が空間を共有しながら）移動することが必要になるケースも想定される。しかしながら、これまで、一方のロボット群が接続を維持しつつ他方のロボット群が占有する空間を通り抜けて移動するための手法は提案されていない。さらに、想定している隊列において一部のロボットが消失していたような場合においても、接続を維持しつつ上述の移動を可能とする手法は提案されていない。
【０００９】
この発明の目的は、上記のような点に鑑みて、一方の制御対象物群（例えば、ロボット群）が接続を維持しつつ他方の制御対象物群が占有する空間を通り抜けて移動することができ、さらに、静止している側の制御対象物群については、それを構成する制御対象物が、想定している完全な状態からいくつか消失した状態であっても、透過動作が滞りなく行うことができる隊列制御技術を提供することである。
【課題を解決するための手段】
【００１０】
上記の課題を解決するために、この発明の第一の態様の隊列制御装置は、Ｍ群制御対象物単位は、Ｍ３制御対象物と、Ｍ３制御対象物にx軸負方向で隣接するＭ２制御対象物と、Ｍ３制御対象物にy軸負方向で隣接するＭ１制御対象物と、Ｍ３制御対象物にｚ軸負方向で隣接するＭ４制御対象物とからなり、Ｓ群制御対象物単位は、Ｓ３制御対象物と、Ｓ３制御対象物にx軸正方向で隣接するＳ２制御対象物と、Ｓ３制御対象物にy軸正方向で隣接するＳ１制御対象物と、Ｓ３制御対象物にｚ軸正方向で隣接するＳ４制御対象物との少なくとも１個の制御対象物からなり、部分隊列は、複数のＭ群制御対象物単位が所定の移動方向に沿って接続したＭ群制御対象物群と複数のＳ群制御対象物単位が上記移動方向に沿って接続したＳ群制御対象物群とが組み合わさって構成され、Ｍ群制御対象物群内の各Ｍ群制御対象物単位が互いに接続を維持し、かつ、各Ｍ群制御対象物単位内の各制御対象物が互いに接続を維持しながら、Ｓ群制御対象物単位の存在する空間を通り抜けて移動方向へ移動するように部分隊列を制御する隊列制御装置であって、各Ｓ群制御対象物単位について、Ｓ１制御対象物とＳ４制御対象物とが欠損しているか否かによりモード値を判定する欠損状態判定部と、各Ｍ群制御対象物単位について、部分隊列内で移動方向に向かってＭ群制御対象物単位に属する制御対象物のみが連続する基準列に属する制御対象物を移動方向へ移動させる第一の行動と、部分隊列内で移動方向に向かって先頭のＭ群制御対象物単位と組み合わさるＳ群制御対象物単位、もしくは、そのＳ群制御対象物単位と移動方向側で隣接するＳ群制御対象物単位を目的Ｓ群制御対象物単位とし、目的Ｓ群制御対象物単位のモード値に基づいて、基準列の先頭の制御対象物を目的Ｓ群制御対象物単位において制御対象物が欠損している空隙へ移動させる第二の行動と、部分隊列内で移動方向に向かって末尾のＭ群制御対象物単位において、基準列に属する制御対象物と隣接していないＭ１制御対象物もしくはＭ４制御対象物のいずれかを基準列の末尾へ移動させる第三の行動と、のいずれかを行う移動計画からなる系列である移動計画系列を生成する移動計画部と、移動計画系列に従ってＭ群制御対象物群に属する各制御対象物を移動させる動作部と、を含む。
【００１１】
上記の課題を解決するために、この発明の第二の態様の隊列制御装置は、Ｍ群制御対象物単位は、Ｍ３制御対象物と、Ｍ３制御対象物にx軸負方向で隣接するＭ２制御対象物と、Ｍ３制御対象物にy軸負方向で隣接するＭ１制御対象物と、Ｍ３制御対象物にｚ軸負方向で隣接するＭ４制御対象物との少なくとも１個の制御対象物からなり、Ｓ群制御対象物単位は、Ｓ３制御対象物と、Ｓ３制御対象物にx軸正方向で隣接するＳ２制御対象物と、Ｓ３制御対象物にy軸正方向で隣接するＳ１制御対象物と、Ｓ３制御対象物にｚ軸正方向で隣接するＳ４制御対象物とからなり、部分隊列は、複数のＭ群制御対象物単位が所定の移動方向に沿って接続したＭ群制御対象物群と複数のＳ群制御対象物単位が移動方向に沿って接続したＳ群制御対象物群とが組み合わさって構成され、Ｓ群制御対象物群内の各Ｓ群制御対象物単位が互いに接続を維持し、かつ、各Ｓ群制御対象物単位内の各制御対象物が互いに接続を維持しながら、Ｍ群制御対象物単位の存在する空間を通り抜けて移動方向へ移動するように部分隊列を制御する隊列制御装置であって、各Ｍ群制御対象物単位について、Ｍ１制御対象物とＭ４制御対象物とが欠損しているか否かによりモード値を判定する欠損状態判定部と、各Ｓ群制御対象物単位について、部分隊列内で移動方向に向かってＳ群制御対象物単位に属する制御対象物のみが連続する基準列に属する制御対象物を移動方向へ移動させる第一の行動と、部分隊列内で移動方向に向かって先頭のＳ群制御対象物単位と組み合わさるＭ群制御対象物単位、もしくは、そのＭ群制御対象物単位と移動方向側で隣接するＭ群制御対象物単位を目的Ｍ群制御対象物単位とし、目的Ｍ群制御対象物単位のモード値に基づいて、基準列の先頭の制御対象物を目的Ｍ群制御対象物単位において制御対象物が欠損している空隙へ移動させる第二の行動と、部分隊列内で移動方向に向かって末尾のＳ群制御対象物単位において、基準列に属する制御対象物と隣接していないＳ１制御対象物もしくはＳ４制御対象物のいずれかを基準列の末尾へ移動させる第三の行動と、のいずれかを行う移動計画からなる系列である移動計画系列を生成する移動計画部と、移動計画系列に従ってＳ群制御対象物群に属する各制御対象物を移動させる動作部と、を含む。
【発明の効果】
【００１２】
この発明の隊列制御技術によれば、制御対象物の隊列制御において、一方の制御対象物群が接続を維持しつつ他方の制御対象物群が占有する空間を通り抜けて移動することができる。さらに、静止している側の制御対象物群については、それを構成する制御対象物が、想定している完全な状態からいくつか消失した状態であっても、透過動作が滞りなく行うことができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、制御対象物の移動を説明するための図である。
【図２】図２は、制御対象物群が空間を共有する状態を説明するための図である。
【図３】図３は、ボイドの移動の様子を説明するための図である。
【図４】図４は、制御対象物単位を説明するための図である。
【図５】図５は、制御対象物単位の列を例示する図である。
【図６】図６は、制御対象物群の移動手順を例示する図である。
【図７】図７は、制御対象物単位のモードを例示する図である。
【図８】図８は、第一実施形態の隊列制御装置の機能構成を例示する図である。
【図９】図９は、移動計画部の機能構成を例示する図である。
【図１０】図１０は、第一実施形態の隊列制御方法の処理手続きを例示する図である。
【図１１】図１１は、Ｍ群制御対象物が移動する方向を例示する図である。
【図１２】図１２は、移動方向と制御対象物単位中の位置の関係を例示する図である。
【図１３】図１３は、第二実施形態の隊列制御装置の機能構成を例示する図である。
【図１４】図１４は、第二実施形態の隊列制御方法の処理手続きを例示する図である。
【図１５】図１５は、Ｓ群制御対象物が移動する方向を例示する図である。
【図１６】図１６は、制御対象物単位のモードを例示する図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施形態について詳細に説明する。なお、以下の説明に用いる図面では、同じ機能を有する構成部や同じ処理を行うステップには同一の符号を付し、重複説明を省略する。
【００１５】
＜理論的背景＞
まず、本発明の隊列制御装置および方法の理論的背景について説明する。以下の説明において、制御対象物はロボットである。制御対象物は、制御の対象となり得るものであればロボット以外であってもよい。
【００１６】
［問題設定］
任意の隊列形成を初期隊列形成状態として、制御対象物同士が接したままの状態を維持しつつ目的とする任意の隊列形成状態である目的隊列形成状態へ隊列を移動させる隊列制御を、多数の制御対象物が協調して行う任務を、例えば図１に例示するような、互いに接する面同士をスライドさせて移動していくことが可能な立方体型の制御対象物の制御を想定して実現する。制御対象物については、例えば図１に示すように、制御対象物の周囲縦横高さ方向（以下「上下左右前後方向」ともいう）６マスのうち一つに他の制御対象物が存在している（一つの面を他制御対象物と共有している）状態を維持しながら移動をするものとする。この手法では１つの制御対象物自身が、一個の制御対象物のサイズ分の距離を移動することで、一回の動作の移動量を正確に測ることができるというメリットがある。また、一つの面を共有する隣り合う制御対象物との相対的な位置を計測し合うことで、制御対象物の群全体の中での各制御対象物の位置も容易に知ることができる。このため、制御対象物の移動量の誤差によって、隊列が崩れるといった問題を起こしにくく、また、各制御対象物の位置を把握するために付加的な位置計測用の装備を備えずとも位置の把握が可能である。また、複数の制御対象物を連結したように、同時に複数の制御対象物を移動させていくことが可能である。なお、制御対象物は、隣の位置に他の制御対象物が存在しているか否か、障害物があるか否か、そして、自身が目的位置上にいるかどうかを知ることができるものとする。
【００１７】
任務を行う制御対象物は、p個（p≧8=4×2）であり、各制御対象物は、隣接する制御対象物と一面以上を共有しつつ、三次元空間におけるX-Y-Z軸方向に移動可能とする。図１の各立方体は、それぞれの制御対象物の位置を示すものである。各立方体には制御対象物は一個しか存在することができない。それぞれの制御対象物は、移動しようとする方向に障害物か他の制御対象物がある場合には、静止をするものと仮定する。なお、制御対象物が存在しうる立方体状の空間をマス、または、格子ともいう。図２の左側の制御対象物群（薄い色で塗り潰された制御対象物からなる立方体形状の制御対象物群）は静止している制御対象物群を示す。図２の右側の制御対象物群（濃い色で塗りつぶされた制御対象物からなるＬ字状の形状からなる制御対象物群）は移動する制御対象物群を示す。これら二つの群は、互いに交差時に群の形状を変更しない。このように、二つの制御対象物群の隊列形状はそれぞれ一塊の任意の形状である。
【００１８】
［制御対象物の座標設定］
それぞれの制御対象物i（iは制御対象物番号を表すi=0, 1, 2, 3, …, p-1、ただしpは各制御対象物群に含まれる制御対象物の総数とする）の位置を（Xr[i], Yr[i], Zr[i]）とする。ここで、Xr[i]はX軸方向の位置、Yr[i]はY軸方向の位置、Zr[i]はZ軸方向の位置である。各制御対象物が属する群の番号をSr[i]（Sr[i]=0, 1。ここでは群は２つ）とする。
【００１９】
本問題は、任意の位置に配置された制御対象物群が、任意の方向に動く際、別の静止している制御対象物群と占有する領域が重なった場合でも、滞りなく動作を行うための各制御対象物の行動計画を求めることと定義できる。移動する制御対象物群はSr[i]=1とし、静止している制御対象物群はSr[i]=0とする。
【００２０】
［任務空間の定義］
iを制御対象物番号としたとき、制御対象物iの各状態（制御対象物の位置と行動）は離散値で表現される。部屋をX, Y, Zの直交座標系からなる３次元空間で表すと、X軸、Y軸、Z軸をそれぞれ離散化表現した値により各位置を表現する。つまり、部屋（３次元空間）は格子で区切られ、各格子が各位置に対応する。また、各格子において、障害物の「ある／なし」が予め設定されている。
【００２１】
［動作の定義］
任務環境における行動主体は、部屋に配置されている各制御対象物である。制御対象物i（iは制御対象物番号）の行動aは、静止、縦横高さ（X軸、Y軸、Z軸）方向への１格子分の移動（正方向、負方向）、の計７種類のうちのいずれかを取る。例えば、a∈{0, 1, 2, 3, 4, 5, 6}として、
0: 静止
1: 三次元空間内でX軸正方向に１格子だけ移動する（図４紙面内右方向）
2: 三次元空間内でY軸正方向に１格子だけ移動する（図４紙面内手前方向）
3: 三次元空間内でX軸負方向に１格子だけ移動する（図４紙面内左方向）
4: 三次元空間内でY軸負方向に１格子だけ移動する（図４紙面内奥方向）
5: 三次元空間内でZ軸正方向に１格子だけ移動する（図４紙面内上方向）
6: 三次元空間内でZ軸負方向に１格子だけ移動する（図４紙面内下方向）
とする。
【００２２】
［探索計算上の問題点］
このような任務環境における状態空間は、制御対象物数×３の次元数の状態を持ち、かつ選択可能な行動数は、制御対象物の行動（＝７通り）の制御対象物数乗だけ存在する。例えば、制御対象物数が50で、部屋の縦横高さ方向の格子数がそれぞれ20であるとすれば、状態数は20の150乗個にもなり、探索計算に要する資源の量は膨大なものとなる。さらに制御対象物数が１個増えるごとに、その状態数は8000倍増加していくことになる。［問題設定］の項で説明したように、制御対象物同士が接しているという拘束条件を取り入れる場合、制御対象物のお互いの移動を考慮したうえで探索計算を行わなければならないために、根本的な計算量の削減は難しく、複数の制御対象物を使用する場合の大きな問題となっている。
【００２３】
［参考文献１におけるヘテロジニアス隊列制御における特徴］
参考文献１におけるヘテロジニアス隊列制御では、上述の計算負荷の問題を解決するための方策の一つとして、ボイド制御の考え方を導入している。また、［問題設定］で述べたような隊列変形の問題を克服するために８マス制御対象物単位の考え方も導入している。
【００２４】
〔参考文献１〕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.
【００２５】
まず、ボイド制御について説明する。ここでいうボイドとは、ある制御対象物が別の位置に移動した後に、元いた位置にできる空隙のことである。別の言い方をすると、ボイドとは、制御対象物の移動する方向と反対の方向に移動する仮想的な存在である。こうした制御対象物群の隊列形成問題においては、複数の制御対象物の動作に着目するがゆえに、その探索計算量が爆発してしまうが、視点を変えて、ボイドの動きに着目すれば、多数の制御対象物の動作計画の問題を単一のボイドの動作計画として考えることができ、探索計算負荷の軽減に適している。制御対象物の移動に伴ってボイドが移動していく様子を図３に示す。
【００２６】
しかし、もともとは、フルに充填された８マス制御対象物の構造を採用しているために、制御対象物の移動のためにボイドを構造内に意図的に生成しなければならず、そのため、隣接していない制御対象物同士の行き来には不自由な点が多かった。また、当然、他の制御対象物群と衝突した際に形状を維持しつつ、他の制御対象物群と同じ領域を共有することは不可能であった。
能であった。
【００２７】
[４マス制御対象物単位の導入]
そこで本発明では、図４に示すように、４個の隣接した制御対象物を１つの単位とし（制御対象物単位）、制御対象物は、この制御対象物単位を維持しつつ移動を行うこととする。言い換えると、４個毎に１つの制御対象物単位を構成し、１つの制御対象物単位を構成する４個の制御対象物はそれぞれ３つの方向において１つの制御対象物単位を構成する他の制御対象物と隣接した状態を維持しつつ移動を行う。この制御対象物単位の集団は、互いに制御対象物単位ごとに一面を共有し、接しながら移動をするように制御される。これらの制御対象物は同一でホモジニアスであるとし、どの制御対象物が単位内のどの位置にあるか、群の中のどの位置にあるかは、群の全体形状が維持される限りは問わないものとする。
【００２８】
このような４個の制御対象物を１つの単位とした移動を行う理由は、各制御対象物単位の内部にある４つの空隙空間を、他の制御対象物単位に属する制御対象物が通過することができ、それにより、異なる制御対象物単位内に属する制御対象物同士の行き来をすることが容易である点である。また、各制御対象物単位の内部にある４つの空隙空間を、他の制御対象物単位に属する制御対象物が通過する際の接続性の維持も容易である。すなわちこれは、隊列形態の維持を考量しなければならない各制御対象物の動作の決定において、制御対象物同士の接続を考慮するための計算負荷を軽減することにつながるからである。
【００２９】
ここでは４個の制御対象物がなす制御対象物単位が一つのマスの単位（本明細書では、以下、この単位を「マス単位」または「位置単位」ともいう）であるとし、一つのマス単位を一状態として状態空間を組む。ある制御対象物単位jの位置を（Xr_u[j], Yr_u[j], Zr_u[j]）（j=0, 1, 2, … j_max-1）としたとき、その制御対象物単位j内の制御対象物をi1, i2, i3, i4とすれば、静止している制御対象物（Sr[i]=0）の場合は、
Xr[i1] = 2 × Xr_u[j] 
Yr[i1] = 2 × Yr_u[j] + 1
Zr[i1] = 2 × Zr_u[j] 
Xr[i2] = 2 × Xr_u[j] + 1
Yr[i2] = 2 × Yr_u[j] 
Zr[i2] = 2 × Zr_u[j] 
Xr[i3] = 2 × Xr_u[j]
Yr[i3] = 2 × Yr_u[j]
Zr[i3] = 2 × Zr_u[j]
Xr[i4] = 2 × Xr_u[j]
Yr[i4] = 2 × Yr_u[j]
Zr[i4] = 2 × Zr_u[j] + 1
を、移動している制御対象物（Sr[i]=1）の場合は、
Xr[i1] = 2 × Xr_u[j] + 1
Yr[i1] = 2 × Yr_u[j]
Zr[i1] = 2 × Zr_u[j] + 1
Xr[i2] = 2 × Xr_u[j]
Yr[i2] = 2 × Yr_u[j] + 1
Zr[i2] = 2 × Zr_u[j] + 1
Xr[i3] = 2 × Xr_u[j] + 1
Yr[i3] = 2 × Yr_u[j] + 1
Zr[i3] = 2 × Zr_u[j] + 1
Xr[i4] = 2 × Xr_u[j] + 1
Yr[i4] = 2 × Yr_u[j] + 1
Zr[i4] = 2 × Zr_u[j]
を、移動する制御対象物群が静止している制御対象物群に対してa=3の向きに相対的に移動する際の基準位置とする。
【００３０】
なお、各制御対象物iが所属する制御対象物単位jを表す変数をRr[i]=jとする。また、制御対象物が上記i1, i2, i3, i4のどの位置にあるかを指す変数をIr[i]=(1, 2, 3, 4)とする。各制御対象物単位の位置を（Xr_u[j], Yr_u[j], Zr_u[j]）とする。また、各制御対象物単位jが属する群をSu[j](=0, 1)とする。以下、制御対象物の全体数pを4の倍数とする。
【００３１】
［透過隊列制御］
Su[j]=1である移動する制御対象物単位jからなる群れ（以下、Ｍ群とする）が隊列形状を崩さずに、Su[j]=0である静止している制御対象物単位jからなる群れ（以下、Ｓ群とする）と重なったときでも、任意の６方向に移動するための隊列制御の方法について説明していく。
【００３２】
ある時刻において、Ｍ群がaの方向に移動するものとする。この際、Ｍ群の制御対象物単位jmから見てaの方向に隣接する位置に、Ｍ群に属する制御対象物単位が存在していない場合のことを考える。この場合、制御対象物単位jmをl番目の列の先頭（0番目の）要素とし、変数lineをline[a][l][0]=jmと定義する。行動aの向きと逆の方向の行動a_invの方向に制御対象物単位jmと隣接している制御対象物単位位置に、Ｍ群に属する制御対象物単位が存在しているならば、列lの２番目の要素line[a][l][1]は、そのうちのＭ群の制御対象物単位の番号を格納する。続いて同様に、行動a_invの方向に制御対象物単位line[a][l][1]と隣接している制御対象物単位位置に、Ｍ群に属する制御対象物単位が存在しているならば、列lの３番目の要素line[a][l][2]は、そのうちのＭ群の制御対象物単位の番号を格納する。といった具合に、行動a_invの方向に制御対象物単位jmと隣接している制御対象物単位位置に、Ｍ群に属する制御対象物単位が存在しなくなるまで繰り返し、列lの構成要素を決定する。このように列lを決定する手順の例を、図５の（Ａ）〜（Ｃ）に示す。なお、列lはa方向に連続するＭ群の制御対象物単位の列を一意に特定するためのインデックスである。以降、列lは「部分隊列」と呼ぶこともある。すなわち、部分隊列は、Ｍ群の制御対象物単位が移動方向に沿って接続することで構成されるＭ群制御対象物群と、Ｓ群の制御対象物単位が移動方向に沿って接続することで構成されるＳ群制御対象物群とが組み合わさって構成される制御対象物単位の列と言える。
【００３３】
このように、Ｍ群の隊列中でa方向に隣接する制御対象物がない（つまりa方向の先頭の）制御対象物単位の各々について、当該制御対象物単位を先頭として行動a_invの方向に連続する列lについて、line[a][l][k](k=0, 1, 2, 3…)の値を決定すると、Ｍ群所属のどの制御対象物単位もいずれかの列lに属することになる。
【００３４】
隊列制御は、列l単位で行うものとし、移動の過程で制御対象物が列l以外の空間にはみ出さないようにする。これにより、各列について同時に隊列制御を行うことができる。ここで大事なのは、列lに属する制御対象物単位の数に関わらず、制御対象物単位１ステップ分の移動に要する時間ステップ数が一定でなければならないということである。これは、全体の形状を維持しながらの移動を行う上で、各制御対象物単位が同時に同じ方向に動かなければならないという要求から来るものである。
【００３５】
そのための動作の例を図６に示す。図６中のT=0〜1, 2〜3, 4〜5, 6〜7にて、制御対象物をスライドさせる際に、一度に列の長さに応じた数の制御対象物を同時に動かすことで、上記要求を満たしている。
【００３６】
厳密には、列lの先頭の制御対象物単位と同じ位置にＳ群の制御対象物が存在しているか否か、列lの末尾の制御対象物単位と同じ位置にＳ群の制御対象物が存在しているかどうか、またＳ群の制御対象物単位内に消失された制御対象物があるかないか等により、上記動作は微妙に異なるが、上記要求を、制御対象物をスライドさせる際に、一度に列の長さに応じた数の制御対象物を同時に動かすことで、満たすことは同様である。
【００３７】
各Ｍ群制御対象物単位と同じ位置にあるＳ群制御対象物単位内のIr=1, 4のどの制御対象物が失われているかについて、図７に示すようにモード分けがなされ、モードを示す値modeに応じて各Ｍ群制御対象物の動作が異なる。Ｓ群のIr=2, 3の位置の制御対象物については、場合分けには影響を与えない。図７において、各制御対象物に付したラベルは、その制御対象物がどちらの群に属し、Ir値が何であるかを示している。例えば、「M1」はＭ群のIr値が1の制御対象物を表し、「S4」はＳ群のIr値が4の制御対象物を表す。mode=0は、Ｓ群制御対象物単位がIr=1, 4の制御対象物をいずれも含まない場合を示す。mode=1は、Ｓ群制御対象物単位がIr=1, 4の両方の位置に制御対象物を含む場合を示す。mode=2は、Ｓ群制御対象物単位がIr=4の位置に制御対象物を含み、Ir=1の位置に制御対象物を含まない場合を示す。mode=3は、Ｓ群制御対象物単位がIr=1の位置に制御対象物を含み、Ir=4の位置に制御対象物を含まない場合を示す。
【００３８】
＜第一実施形態＞
第一実施形態の隊列制御装置では、１つの列lに存在するＭ群制御対象物単位およびＳ群制御対象物単位について、Ｍ群制御対象物単位がＳ群制御対象物単位の占有する空間を共有しながらa方向に１制御対象物単位分移動するよう制御する隊列制御装置である。上述の通り、任意の隊列制御は、列ごとの隊列制御を同時に行うことで実現できるが、第一実施形態はこの基本となる列ごとの隊列制御を行う装置である。
【００３９】
第一実施形態の隊列制御装置１は、図８に例示するように、記憶部１０、単位内位置取得部１１、順序取得部１２、欠損状態判定部１３、移動計画部１４、および移動部１５を含む。移動計画部１４は、図９に例示するように、第１移動計画部１４１、第２移動計画部１４２、第３移動計画部１４３、第４移動計画部１４４、第５移動計画部１４５、第６移動計画部１４６、第７移動計画部１４７を含む。この隊列制御装置１が、図１０に例示する各ステップの処理を行うことにより第一実施形態の隊列制御方法が実現される。
【００４０】
隊列制御装置１は、例えば、中央演算処理装置（CPU: Central Processing Unit）、主記憶装置（RAM: Random Access Memory）などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。隊列制御装置１は、例えば、中央演算処理装置の制御のもとで各処理を実行する。隊列制御装置１に入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。隊列制御装置１の各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。隊列制御装置１が備える各記憶部は、例えば、RAM（Random Access Memory）などの主記憶装置、ハードディスクや光ディスクもしくはフラッシュメモリ（Flash Memory）のような半導体メモリ素子により構成される補助記憶装置、またはリレーショナルデータベースやキーバリューストアなどのミドルウェアにより構成することができる。
【００４１】
隊列制御装置１は、まず、単位内位置取得部１１から移動計画部１４までを実行することで、Ｍ群制御対象物を１制御対象物単位分、所定方向（a方向）に移動させるための手順（移動計画系列）を計算し、記憶部１０に格納する。そして、動作部１５が、記憶部１０に格納した移動計画系列に基づいて、実際にＭ群制御対象物を動かしていく。第一実施形態では、a=3, 4, 6（X, Y, Zの各軸の負方向への移動）の場合を例に、具体的に処理を説明する。この場合は、ちょうどＭ群とＳ群の制御対象物単位が合体して立方体をなすように動く方向の動作である。
【００４２】
〔記憶部１０〕
記憶部１０には、予め移動方向aの値に応じて決まる６種類の行動指令値a_t[ia]（ia=1, 2, 3, 4, 5, 6）が格納されているものとする。各aの値ごとの行動指令値の対応は図１１の表に示す通りである。図１１に示すように、Ｍ群の制御対象物単位は、Ir=3の制御対象物（Ｍ３）を基準とし、Ｍ３にx軸負方向で隣接するIr=2の制御対象物（Ｍ２）と、Ｍ３にy軸負方向で隣接するIr=1の制御対象物（Ｍ１）と、Ｍ３にz軸負方向で隣接するIr=4の制御対象物（Ｍ４）とから構成される。図１１の表に示すようにaの値毎に行動指令値が変わるのは、aの向きに応じて、図６に示す制御対象物のスライド方向が変わり、動作する側の制御対象物群内の各制御対象物に振られるIr値が変わるからである。実際、a_t[1]は、動作する側の制御対象物群内のIr=3の制御対象物からIr=2の制御対象物に向う方向（=aの向き）、a_t[2]は、動作する側の制御対象物群内のIr=3の制御対象物からIr=1の制御対象物に向う方向（=aに水平面で直交する向き）、a_t[5]は、動作する側の制御対象物群内のIr=3の制御対象物からIr=4の制御対象物に向う方向（=aに鉛直面で直交する向き）である。a_t[3]は、a_t[1]の逆向きの方向である。a_t[4]は、a_t[2]の逆向きの方向である、a_t[6]は、a_t[5]の逆向きの方向である。
【００４３】
また、記憶部１０には以下の第１移動計画部１４１から第７移動計画部１４７で計算された移動計画系列が格納される。移動計画系列は、各ステップにおいて、どの制御対象物をどの方向へ移動させるかをステップ順に並べた系列である。
【００４４】
〔単位内位置取得部１１〕
ステップＳ１１において、単位内位置取得部１１は、初期のＳ群、Ｍ群隊列中の各制御対象物単位について、当該制御対象物単位内の各制御対象物が制御対象物単位中のどの位置にいるか（どのIr値となるか）を移動方向aに応じて決定する。なお、予め各制御対象物がどのIr値になるかが与えられていれば、本処理は省略してもよい。
【００４５】
制御対象物単位内の各制御対象物の位置は、移動方向aと、隣接する制御対象物が所属する制御対象物単位のIDの組み合わせから以下のように判定することができる。各aの方向に対するIr値の振り方を図１２に例示する。図１２では、Ｓ群内のIr値とＭ群内のIr値は、ちょうどX, Y, Z軸を反転させた振り方になっていることがわかる。
【００４６】
Ｍ群において、a=1, 3のとき、制御対象物iの位置が、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j]+1, 2×Yr_u[j]+1, 2×Zr_u[j])ならば、Ir[i]=4、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j]+1, 2×Yr_u[j], 2×Zr_u[j]+1)ならば、Ir[i]=1、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j], 2×Yr_u[j]+1, 2×Zr_u[j]+1)ならば、Ir[i]=2、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j]+1, 2×Yr_u[j]+1, 2×Zr_u[j]+1)ならば、Ir[i]=3、
とする。
【００４７】
Ｍ群において、a=2, 4のとき、制御対象物iの位置が、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j]+1, 2×Yr_u[j]+1, 2×Zr_u[j])ならば、Ir[i]=1、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j]+1, 2×Yr_u[j], 2×Zr_u[j]+1)ならば、Ir[i]=2、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j], 2×Yr_u[j]+1, 2×Zr_u[j]+1)ならば、Ir[i]=4、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j]+1, 2×Yr_u[j]+1, 2×Zr_u[j]+1)ならば、Ir[i]=3、
とする。
【００４８】
Ｍ群において、a=5, 6のとき、制御対象物iの位置が、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j]+1, 2×Yr_u[j]+1, 2×Zr_u[j])ならば、Ir[i]=2、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j]+1, 2×Yr_u[j], 2×Zr_u[j]+1)ならば、Ir[i]=4、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j], 2×Yr_u[j]+1, 2×Zr_u[j]+1)ならば、Ir[i]=1、
(Xr[i], Yr[i], Zr[i])=(2×Xr_u[j]+1, 2×Yr_u[j]+1, 2×Zr_u[j]+1)ならば、Ir[i]=3、
とする。
【００４９】
Ｓ群において、a=1, 3のとき、制御対象物iの位置が、
Xr[i]=2×Xr_u[j]、Yr[i]=2×Yr_u[j]+1、Zr[i]=2×Zr_u[j]ならば、Ir[i]=1、
Xr[i]=2×Xr_u[j]+1、Yr[i]=2×Yr_u[j]、Zr[i]=2×Zr_u[j]ならば、Ir[i]=2、
Xr[i]=2×Xr_u[j]、Yr[i]=2×Yr_u[j]、Zr[i]=2×Zr_u[j]ならば、Ir[i]=3、
Xr[i]=2×Xr_u[j]、Yr[i]=2×Yr_u[j]、Zr[i]=2×Zr_u[j]+1ならば、Ir[i]=4、
とする。
【００５０】
Ｓ群において、a=2, 4のとき、制御対象物iの位置が、
Xr[i]=2×Xr_u[j]、Yr[i]=2×Yr_u[j]+1、Zr[i]=2×Zr_u[j]ならば、Ir[i]=2、
Xr[i]=2×Xr_u[j]+1、Yr[i]=2×Yr_u[j]、Zr[i]=2×Zr_u[j]ならば、Ir[i]=4、
Xr[i]=2×Xr_u[j]、Yr[i]=2×Yr_u[j]、Zr[i]=2×Zr_u[j]ならば、Ir[i]=3、
Xr[i]=2×Xr_u[j]、Yr[i]=2×Yr_u[j]、Zr[i]=2×Zr_u[j]+1ならば、Ir[i]=1、
とする。
【００５１】
Ｓ群において、a=5, 6のとき、制御対象物iの位置が、
Xr[i]=2×Xr_u[j]、Yr[i]=2×Yr_u[j]+1、Zr[i]=2×Zr_u[j]ならば、Ir[i]=4、
Xr[i]=2×Xr_u[j]+1、Yr[i]=2×Yr_u[j]、Zr[i]=2×Zr_u[j]ならば、Ir[i]=1、
Xr[i]=2×Xr_u[j]、Yr[i]=2×Yr_u[j]、Zr[i]=2×Zr_u[j]ならば、Ir[i]=3、
Xr[i]=2×Xr_u[j]、Yr[i]=2×Yr_u[j]、Zr[i]=2×Zr_u[j]+1ならば、Ir[i]=2、
とする。
【００５２】
なお、Ｓ群へIr値を割り当てる処理は、aの向きに応じて必要な処理であり、後のモード判定に必要となるため、省略することはできない。
【００５３】
〔順序取得部１２〕
ステップＳ１２において、順序取得部１２は、初期のＭ群隊列中において各制御対象物単位が移動方向aの反対の方向a_invにどの順序で並んでいるかを取得する。つまり、上述のline[a][l][k]（k=0, 1, 2, …）の値を決定する。line[a][l][0]は、a方向に隣接するＭ群制御対象物単位が存在しない制御対象物単位の番号である。
【００５４】
〔欠損状態判定部１３〕
ステップＳ１３において、欠損状態判定部１３は、移動方向aとの関係において、Ｍ群隊列中の制御対象物単位毎に、当該制御対象物単位と同じメタモジュール位置にあるＳ群所属の制御対象物単位の欠損状態を表すモード状態を判定し、その値（モード値）を決定する。モード値は図７に示す４種類である。なお、図７では、図４とは３軸の向きを回転させて示していることに注意されたい。
【００５５】
（１）モード値１
Ｓ群制御対象物単位jがIr=1, 4の両方に制御対象物を含む場合、モード値を１とする。
【００５６】
（２）モード値２
Ｓ群制御対象物単位jがIr=4の位置に制御対象物を含み、Ir=1の位置に制御対象物を含まない場合、モード値を２とする。
【００５７】
（３）モード値３
Ｓ群制御対象物単位jがIr=1の位置に制御対象物を含み、Ir=4の位置に制御対象物を含まない場合、モード値を３とする。
【００５８】
（４）モード値０
Ｓ群制御対象物単位jがIr=1, 4の位置に制御対象物をまったく含まない場合、モード値を０とする。
【００５９】
すなわち、欠損状態判定部１３は、部分隊列内の各Ｓ群制御対象物単位について、Ir=1の制御対象物（Ｓ１）とIr=4の制御対象物（Ｓ４）とが欠損しているか否かによりモード値を判定する。
【００６０】
〔移動計画部１４〕
移動計画部１４は、第１移動計画部１４１から第７移動計画部１４７を順に実行することで、第１移動情報から第７移動情報までの系列からなる移動計画系列を生成し、記憶部１０へ格納する。
【００６１】
具体的には、移動計画部１４は、各Ｍ群制御対象物単位について、第一の行動と、第一の行動の後に行う第二の行動と、第一の行動の後に行う第三の行動とのいずれかを行う移動計画からなる系列である移動計画系列を生成し、記憶部１０へ格納する。第一の行動は、部分隊列内で移動方向に向かってＭ群制御対象物単位に属する制御対象物のみが連続する列を基準列として、基準列に属する制御対象物を移動方向へ移動させるものである。第二の行動は、部分隊列内で移動方向に向かって先頭のＭ群制御対象物単位と組み合わさるＳ群制御対象物単位、もしくは、そのＳ群制御対象物単位と移動方向側で隣接するＳ群制御対象物単位を目的Ｓ群制御対象物単位とし、目的Ｓ群制御対象物単位のモード値に基づいて、基準列の先頭の制御対象物を目的Ｓ群制御対象物単位において制御対象物が欠損している空隙へ移動させるものである。第三の行動は、部分隊列内で移動方向に向かって末尾のＭ群制御対象物単位において、基準列に属する制御対象物と隣接していないＭ１制御対象物もしくはＭ４制御対象物のいずれかを基準列の末尾へ移動させるものである。
【００６２】
以下、第１移動計画部１４１から第７移動計画部１４７までの処理を詳細に説明する。
【００６３】
〔第１移動計画部１４１〕
ステップＳ１４１において、第１移動計画部１４１は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作を表す第１移動情報を生成し、記憶部１０に格納する。基本的には、Ｍ群所属の制御対象物を隣接する空隙位置へ移動させるのであるが、このとき、モード毎に対応するＳ群の欠損状態に応じて、移動させても接続性が途切れない制御対象物とその移動方向を選択する必要がある。
【００６４】
第１移動情報は、具体的には以下のもので構成される。
【００６５】
（１）全モード共通
すべてのＭ群所属の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【００６６】
（２）上記（１）に加え、Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【００６７】
（３）上記（１）に加え、Ｍ群所属の制御対象物単位数が１の場合、
mode[i]=0の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【００６８】
〔第２移動計画部１４２〕
ステップＳ１４２において、第２移動計画部１４２は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第２移動情報を生成し、記憶部１０に格納する。
【００６９】
第２移動情報は、具体的には以下のもので構成される。
【００７０】
（１）Ｍ群所属の制御対象物単位が２以上の場合、
mode[i]=0の先頭制御対象物単位内でIr=2, 3の制御対象物をa_t[5]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=3の先頭制御対象物単位内で、Ir=2の制御対象物をa_t[5]方向に移動させる。
【００７１】
（２）Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=1の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
【００７２】
（３）Ｍ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させ、Ir=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させ、Ir=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させ、Ir=4の制御対象物をa_t[6]方向に移動させる。
【００７３】
〔第３移動計画部１４３〕
ステップＳ１４３において、第３移動計画部１４３は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第３移動情報を生成し、記憶部１０に格納する。
【００７４】
第３移動情報は、具体的には以下のもので構成される。
【００７５】
（１）Ｍ群所属の制御対象物単位数が２以上の場合、
先頭制御対象物以外でIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【００７６】
（２）Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=1の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【００７７】
（３）Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=1の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
【００７８】
（４）Ｍ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させ、Ir=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させ、Ir=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させ、Ir=4の制御対象物をa_t[1]方向に移動させる。
【００７９】
〔第４移動計画部１４４〕
ステップＳ１４４において、第４移動計画部１４４は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第４移動情報を生成し、記憶部１０に格納する。
【００８０】
第４移動情報は、具体的には以下のもので構成される。
【００８１】
（１）Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=3の制御対象物をa_t[2]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
【００８２】
（２）Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=1の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
【００８３】
（３）Ｍ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させ、Ir=3の制御対象物をa_t[2]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【００８４】
〔第５移動計画部１４５〕
ステップＳ１４５において、第５移動計画部１４５は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第５移動情報を生成し、記憶部１０に格納する。
【００８５】
第５移動情報は、具体的には以下のもので構成される。
【００８６】
（１）Ｍ群所属の制御対象物単位数が２以上の場合、
先頭および先頭から２番目の制御対象物以外のIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【００８７】
（２）Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【００８８】
mode[i]=1の列l内の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【００８９】
（３）Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
【００９０】
（４）Ｍ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
【００９１】
〔第６移動計画部１４６〕
ステップＳ１４６において、第６移動計画部１４６は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第６移動情報を生成し、記憶部１０に格納する。
【００９２】
第６移動情報は、具体的には以下のもので構成される。
【００９３】
（１）Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の先頭制御対象物単位内でIr=2の制御対象物をa_t[6]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[1]方向に移動させる。
【００９４】
（２）Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
mode[i]=3の末尾制御対象物単位内、Ir=1の制御対象物をa_t[4]方向に移動させる。
【００９５】
〔第７移動計画部１４７〕
ステップＳ１４７において、第７移動計画部１４７は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第７移動情報を生成し、記憶部１０に格納する。
【００９６】
第７移動情報は、具体的には以下のもので構成される。
【００９７】
（１）Ｍ群所属の制御対象物単位数が２以上の場合、
先頭制御対象物以外のIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【００９８】
（２）Ｍ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の先頭制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【００９９】
（３）Ｍ群所属の制御対象物単位数が２以上の場合、
末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
【０１００】
（４）Ｍ群所属の制御対象物単位数が１の場合、
mode[i]=0の先頭制御対象物単位内でIr=1, 2, 3, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3, 4の制御対象物をa_t[1]方向に移動させる。
【０１０１】
〔移動部１５〕
ステップＳ１５において、移動部１５は、記憶部１０に格納された移動計画系列に基づいて、Ｍ群制御対象物を順に移動させる。
【０１０２】
＜第二実施形態＞
第二実施形態は、第一実施形態と同じく、１つの列lに存在するＭ群制御対象物単位およびＳ群制御対象物単位について、Ｍ群制御対象物単位がＳ群制御対象物単位の占有する空間を共有しながら所定方向に１制御対象物単位分移動するよう制御する隊列制御装置である。ここでは、所定方向をap=1, 2, 5（apの値の定義はaと同じ、つまり、X, Y, Zの各軸の正方向への移動を表す）とする。すなわち、負方向への移動を行う第一実施形態の第１移動計画部１４１から第７移動計画部１４７の処理を逆に実行するような形となる。これは、ちょうどＭ群とＳ群の制御対象物単位が重なって立方体をなしている状態から、Ｍ群とＳ群の制御対象物単位が離れて立方体が分解される方向の動作である。
【０１０３】
第二実施形態の隊列制御装置２は、図１３に例示するように、第一実施形態と同様に記憶部１０、単位内位置取得部１１、順序取得部１２、欠損状態判定部１３、移動計画部１４、および移動部１５を含み、さらに行動指令補助値決定部２１、仮想位置設定部２２、および移動計画並べ替え部２３を含む。この隊列制御装置２が、図１４に例示する各ステップの処理を行うことにより第二実施形態の隊列制御方法が実現される。
【０１０４】
〔記憶部１０〕
記憶部１０には、予め行動指令補助値aに応じて決まる６種類の行動指令値a_t[ia]（ia=1, 2, 3, 4, 5, 6）が格納されているものとする。各aの値ごとの行動指令値の対応は図１１の表の通りである。
【０１０５】
また、記憶部１０には以下の第１移動計画部１４１から第７移動計画部１４７で計算された移動計画系列が格納される。移動計画系列は、各ステップにおいて、どの制御対象物をどの方向へ移動させるかをステップ順に並べた系列である。
【０１０６】
〔行動指令補助値決定部２１〕
ステップＳ２１において、行動指令補助値決定部２１は、所定方向apに応じて、行動指令補助値aを決定する。具体的には、所定方向ap=1のとき行動指令補助値a=3とし、所定方向ap=2のとき行動指令補助値a=4とし、所定方向ap=5のとき行動指令補助値a=6とする。
【０１０７】
〔単位内位置取得部１１〕
ステップＳ１１において、単位内位置取得部１１は、初期の隊列中の各制御対象物単位について、当該制御対象物単位内の各制御対象物が制御対象物単位中のどの位置にいるか（どのIr値となるか）を行動指令補助値aに応じて決定する。決定方法の詳細は、第一実施形態の単位内位置取得部１１と同様である。なお、予め各制御対象物がどのIr値になるかが与えられていれば、本処理は省略してもよい。
【０１０８】
〔仮想位置設定部２２〕
ステップＳ２２において、仮想位置設定部２２は、Ｍ群制御対象物単位の位置およびＭ群制御対象物単位内の各制御対象物の位置を、移動後の位置（つまり、１制御対象物単位分、移動方向aへ移動させたい値）である仮想位置に置き換える。
【０１０９】
〔順序取得部１２〕
ステップＳ１２において、順序取得部１２は、初期のＭ群隊列中において各制御対象物単位が行動指令補助値aの反対の方向a_invにどの順序で並んでいるかを取得する。つまり、第一実施形態と同様に、上述のline[a][l][k]（k=0, 1, 2, …）の値を決定する。
【０１１０】
〔欠損状態判定部１３〕
ステップＳ１３において、欠損状態判定部１３は、行動指令補助値aとの関係において、Ｍ群隊列中の制御対象物単位毎に、当該制御対象物単位と同じメタモジュール位置にあるＳ群所属の制御対象物単位の欠損状態を表すモード状態を判定し、その値（モード値）を決定する。モード値は図７に示す４種類（すなわち、第一実施形態と同じ）である。
【０１１１】
〔第１移動計画部１４１〕
ステップＳ１４１において、第１移動計画部１４１は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第１移動情報を生成し、記憶部１０に格納する。
【０１１２】
第１移動情報は、具体的には以下のもので構成される。
【０１１３】
（１）全モード共通
すべてのＭ群所属の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０１１４】
（２）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=0の末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【０１１５】
（３）Ｍ群所属の制御対象物単位数が１の全ての列lにおいて、
mode[i]=0の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【０１１６】
〔第２移動計画部１４２〕
ステップＳ１４２において、第２移動計画部１４２は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第２移動情報を生成し、記憶部１０に格納する。
【０１１７】
第２移動情報は、具体的には以下のもので構成される。
【０１１８】
（１）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=0の先頭制御対象物単位内でIr=2, 3の制御対象物をa_t[5]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
【０１１９】
（２）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=1の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
【０１２０】
（３）Ｍ群所属の制御対象物単位数が１の全ての列lにおいて、
mode[i]=1の先頭制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させ、Ir=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させ、Ir=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させ、Ir=4の制御対象物をa_t[6]方向に移動させる。
【０１２１】
〔第３移動計画部１４３〕
ステップＳ１４３において、第３移動計画部１４３は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第３移動情報を生成し、記憶部１０に格納する。
【０１２２】
第３移動情報は、具体的には以下のもので構成される。
【０１２３】
（１）Ｍ群所属の制御対象物単位数が２以上の全ての列l所属の制御対象物単位内の制御対象物のうち、先頭制御対象物以外のIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０１２４】
（２）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=1の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【０１２５】
（３）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=1の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
【０１２６】
（４）Ｍ群所属の制御対象物単位数が１の全ての列lにおいて、
mode[i]=1の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させ、Ir=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させ、Ir=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させ、Ir=4の制御対象物をa_t[1]方向に移動させる。
【０１２７】
〔第４移動計画部１４４〕
ステップＳ１４４において、第４移動計画部１４４は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第４移動情報を生成し、記憶部１０に格納する。
【０１２８】
第４移動情報は、具体的には以下のもので構成される。
【０１２９】
（１）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=0の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=3の制御対象物をa_t[2]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
【０１３０】
（２）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=0の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=1の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
【０１３１】
（３）Ｍ群所属の制御対象物単位数が１の全ての列lにおいて、
mode[i]=1の先頭制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させ、Ir=3の制御対象物をa_t[2]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【０１３２】
〔第５移動計画部１４５〕
ステップＳ１４５において、第５移動計画部１４５は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第５移動情報を生成し、記憶部１０に格納する。
【０１３３】
第５移動情報は、具体的には以下のもので構成される。
【０１３４】
（１）Ｍ群所属の制御対象物単位数が２以上の全ての列l所属の制御対象物単位内の制御対象物のうち、先頭および先頭から２番目の制御対象物以外のIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０１３５】
（２）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=0の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【０１３６】
mode[i]=1の列l内の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【０１３７】
（３）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=0の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
【０１３８】
（４）Ｍ群所属の制御対象物単位数が１の全ての列lにおいて、
mode[i]=1の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
【０１３９】
〔第６移動計画部１４６〕
ステップＳ１４６において、第６移動計画部１４６は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第６移動情報を生成し、記憶部１０に格納する。
【０１４０】
第６移動情報は、具体的には以下のもので構成される。
【０１４１】
（１）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=0の先頭制御対象物単位内でIr=2の制御対象物をa_t[6]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[1]方向に移動させる。
【０１４２】
（２）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=0の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
【０１４３】
〔第７移動計画部１４７〕
ステップＳ１４７において、第７移動計画部１４７は、モード値により特定されるＭ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第７移動情報を生成し、記憶部１０に格納する。
【０１４４】
第７移動情報は、具体的には以下のもので構成される。
【０１４５】
（１）Ｍ群所属の制御対象物単位数が２以上の全ての列l所属制御対象物単位内の制御対象物のうち、先頭制御対象物以外のIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０１４６】
（２）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
mode[i]=0の先頭制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させ、列l内の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の列l内の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させ、列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させ、列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【０１４７】
（３）Ｍ群所属の制御対象物単位数が２以上の全ての列lにおいて、
末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
【０１４８】
（４）Ｍ群所属の制御対象物単位数が１の全ての列lにおいて、
mode[i]=0の先頭制御対象物単位内でIr=1, 2, 3, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3, 4の制御対象物をa_t[1]方向に移動させる。
【０１４９】
〔移動計画並べ替え部２３〕
ステップＳ２３において、移動計画並べ替え部２３は、上述の各部の処理により生成され記憶部１０に格納された第１移動情報から第７移動情報までの系列を逆順に並べ替えたものを移動計画系列として出力する。すなわち、第７移動情報、第６移動情報、・・・、第１移動情報の順に並ぶ系列が移動計画系列となる。
【０１５０】
〔移動部１５〕
ステップＳ１５において、移動部１５は、記憶部１０に格納された移動計画系列に基づいて、Ｍ群制御対象物を順に移動させる。
【０１５１】
＜第三実施形態＞
第一実施形態および第二実施形態では、Ｓ群制御対象物単位が静止しており、Ｍ群制御対象物単位が移動する場合の隊列制御を行う隊列制御装置であったが、第三実施形態はＭ群制御対象物単位が静止しており、Ｓ群制御対象物単位が移動する場合の隊列制御を行う隊列制御装置について説明する。ただし、この場合、隊列内に欠損があるのは、Ｍ群制御対象物単位側となる。第三実施形態は、Ｓ群制御対象物単位をa=1, 2, 5方向（X, Y, Zの各軸の正方向）に移動させる隊列制御装置である。これは、ちょうどＭ群とＳ群の制御対象物単位が合体して立方体をなすように動く方向の動作である。
【０１５２】
第三実施形態の隊列制御装置は、第一実施形態と装置構成は同じであるが、各ステップでの制御対象物の移動方向が異なる。Ｓ群制御対象物単位とＭ群制御対象物単位の形が対称的な形状をしているため、ちょうど座標向きを変えて第一実施形態の処理を行うことに相当するからである。
【０１５３】
以下、第三実施形態の隊列制御装置を、第一実施形態との相違点を中心に説明する。なお、第一実施形態と同様の構成部については説明を省略する。
【０１５４】
〔記憶部１０〕
記憶部１０には、予め移動方向aに応じて決まる６種類の行動指令値a_t[ia]（ia=1, 2, 3, 4, 5, 6）が格納されているものとする。ただし、第三実施形態では動作するのがＳ群であるため、それに伴い算出されるa_t[ia]の値は第一実施形態とは異なる。各aの値ごとの行動指令値の対応は図１５の表に示す通りである。図１５に示すように、Ｓ群の制御対象物単位は、Ir=3の制御対象物（Ｓ３）を基準とし、Ｓ３にx軸正方向で隣接するIr=2の制御対象物（Ｓ２）と、Ｓ３にy軸正方向で隣接するIr=1の制御対象物（Ｓ１）と、Ｓ３にz軸正方向で隣接するIr=4の制御対象物（Ｓ４）とから構成される。
【０１５５】
〔欠損状態判定部１３〕
ステップＳ１３において、欠損状態判定部１３は、Ｓ群隊列中の制御対象物単位毎に、当該制御対象物単位と同じメタモジュール位置にあるＳ群所属の制御対象物単位の欠損状態を表すモード状態を判定し、その値（モード値）を決定する。モード値は図１６に示す４種類である。なお、図１６では、図７とは３軸の向きを回転させて示していることに注意されたい。つまり、Ｍ群制御対象物単位jがIr=1, 4の制御対象物をまったく含まない場合、モード値を０とする。Ｍ群制御対象物単位jがIr=1, 4の両方の位置に制御対象物を含む場合、モード値を１とする。Ｍ群制御対象物単位jがIr=4の位置に制御対象物を含み、Ir=1の位置に制御対象物を含まない場合、モード値を２とする。Ｍ群制御対象物単位jがIr=1の位置に制御対象物を含み、Ir=4の位置に制御対象物を含まない場合、モード値を３とする。
【０１５６】
〔第１移動計画部１４１〕
ステップＳ１４１において、第１移動計画部１４１は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作を表す第１移動情報を生成し、記憶部１０に格納する。
【０１５７】
第１移動情報は、具体的には以下のもので構成される。
【０１５８】
（１）全モード共通
すべてのＳ群所属の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０１５９】
（２）上記（１）に加え、Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【０１６０】
（３）上記（１）に加え、Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=0の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【０１６１】
〔第２移動計画部１４２〕
ステップＳ１４２において、第２移動計画部１４２は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第２移動情報を生成し、記憶部１０に格納する。
【０１６２】
第２移動情報は、具体的には以下のもので構成される。
【０１６３】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の先頭制御対象物単位内でIr=2, 3の制御対象物をa_t[5]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
【０１６４】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=1の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
【０１６５】
（３）Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させ、Ir=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させ、Ir=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させ、Ir=4の制御対象物をa_t[6]方向に移動させる。
【０１６６】
〔第３移動計画部１４３〕
ステップＳ１４３において、第３移動計画部１４３は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第３移動情報を生成し、記憶部１０に格納する。
【０１６７】
第３移動情報は、具体的には以下のもので構成される。
【０１６８】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
先頭制御対象物以外でIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０１６９】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=1の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【０１７０】
（３）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=1の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
【０１７１】
（４）Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させ、Ir=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させ、Ir=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させ、Ir=4の制御対象物をa_t[1]方向に移動させる。
【０１７２】
〔第４移動計画部１４４〕
ステップＳ１４４において、第４移動計画部１４４は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第４移動情報を生成し、記憶部１０に格納する。
【０１７３】
第４移動情報は、具体的には以下のもので構成される。
【０１７４】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=3の制御対象物をa_t[2]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
【０１７５】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=1の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
【０１７６】
（３）Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させ、Ir=3の制御対象物をa_t[2]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【０１７７】
〔第５移動計画部１４５〕
ステップＳ１４５において、第５移動計画部１４５は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第５移動情報を生成し、記憶部１０に格納する。
【０１７８】
第５移動情報は、具体的には以下のもので構成される。
【０１７９】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
先頭および先頭から２番目の制御対象物以外のIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０１８０】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の列l内の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【０１８１】
（３）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
【０１８２】
（４）Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
【０１８３】
〔第６移動計画部１４６〕
ステップＳ１４６において、第６移動計画部１４６は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第６移動情報を生成し、記憶部１０に格納する。
【０１８４】
第６移動情報は、具体的には以下のもので構成される。
【０１８５】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の先頭制御対象物単位内でIr=2の制御対象物をa_t[6]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[1]方向に移動させる。
【０１８６】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
【０１８７】
〔第７移動計画部１４７〕
ステップＳ１４７において、第７移動計画部１４７は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第７移動情報を生成し、記憶部１０に格納する。
【０１８８】
第７移動情報は、具体的には以下のもので構成される。
【０１８９】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
先頭制御対象物以外のIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０１９０】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の先頭制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。列l内の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の列l内の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【０１９１】
（３）Ｓ群所属の制御対象物単位数が２以上の場合、
末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
【０１９２】
（４）Ｓ群所属制御対象物単位数が１の場合、
mode[i]=0の先頭制御対象物単位内でIr=1, 2, 3, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3, 4の制御対象物をa_t[1]方向に移動させる。
【０１９３】
＜第四実施形態＞
第四実施形態は、第三実施形態と同じく、１つの列lに存在するＭ群制御対象物単位およびＳ群制御対象物単位について、Ｓ群制御対象物単位がＭ群制御対象物単位の占有する空間を共有しながら所定方向に１制御対象物単位分移動するよう制御する隊列制御装置である。ここでは、所定方向をap=3, 4, 6（apの値の定義はaと同じ、つまり、X, Y, Zの各軸の負方向への移動を表す）のいずれかとするものである。すなわち、正方向への移動を行う第三実施形態の第１移動計画部１４１から第７移動計画部１４７の処理を逆に実行するような形になる。これは、ちょうどＭ群とＳ群の制御対象物単位が重なって立方体をなしている状態から、Ｍ群とＳ群の制御対象物単位が離れて立方体が分解される方向の動作である。
【０１９４】
第四実施形態の隊列制御装置は、第二実施形態と装置構成は同じであるが、各ステップでの制御対象物の移動方向が異なる。Ｓ群制御対象物単位とＭ群制御対象物単位の形が対称的な形状をしているため、ちょうど座標向きを変えて第二実施形態の処理を行うことに相当するからである。
【０１９５】
以下、第四実施形態の隊列制御装置を、第二実施形態との相違点を中心に説明する。なお、第二実施形態と同様の構成部については説明を省略する。
【０１９６】
〔行動指令補助値決定部２１〕
ステップＳ２１において、行動指令補助値決定部２１は、所定方向apに応じて、行動指令補助値aを決定する。第四実施形態では、第二実施形態とは逆向きとする。具体的には、所定方向ap=3のとき行動指令補助値a=1とし、所定方向ap=4のとき行動指令補助値a=2とし、所定方向ap=6のとき行動指令補助値a=5とする。
【０１９７】
〔仮想位置設定部２２〕
ステップＳ２２において、仮想位置設定部２２は、Ｓ群制御対象物単位の位置およびＳ群制御対象物単位内の各制御対象物の位置を、移動後の位置（つまり、１制御対象物単位分、移動方向aへ移動させたい値）である仮想位置に置き換える。
【０１９８】
〔順序取得部１２〕
ステップＳ１２において、順序取得部１２は、初期のＳ群隊列中において各制御対象物単位が行動指令補助値aの反対の方向a_invにどの順序で並んでいるかを決定する。つまり、第三実施形態と同様に、上述のline[a][l][k]（k=0, 1, 2, …）の値を決定する。line[a][l][0]は、a方向に隣接するＳ群制御対象物単位が存在しない制御対象物単位の番号である。
【０１９９】
〔欠損状態判定部１３〕
ステップＳ１３において、欠損状態判定部１３は、行動指令補助値aとの関係において、Ｓ群隊列中の制御対象物単位毎に、当該制御対象物単位と同じメタモジュール位置にあるＳ群所属の制御対象物単位の欠損状態を表すモード状態を判定し、その値（モード値）を格納する。モード値は図１６に示す４種類（つまり、第三実施形態と同じ）である。
【０２００】
〔第１移動計画部１４１〕
ステップＳ１４１において、第１移動計画部１４１は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第１移動情報を生成し、記憶部１０に格納する。
【０２０１】
第１移動情報は、具体的には以下のもので構成される。
【０２０２】
（１）全モード共通
すべてのＳ群所属の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０２０３】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【０２０４】
（３）Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=0の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【０２０５】
〔第２移動計画部１４２〕
ステップＳ１４２において、第２移動計画部１４２は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第２移動情報を生成し、記憶部１０に格納する。
【０２０６】
第２移動情報は、具体的には以下のもので構成される。
【０２０７】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の先頭制御対象物単位内でIr=2, 3の制御対象物をa_t[5]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
【０２０８】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=1の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
【０２０９】
（３）Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させ、Ir=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させ、Ir=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させ、Ir=4の制御対象物をa_t[6]方向に移動させる。
【０２１０】
〔第３移動計画部１４３〕
ステップＳ１４３において、第３移動計画部１４３は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第３移動情報を生成し、記憶部１０に格納する。
【０２１１】
第３移動情報は、具体的には以下のもので構成される。
【０２１２】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、先頭制御対象物以外のIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０２１３】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=1の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【０２１４】
（３）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=1の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
【０２１５】
（４）Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させ、Ir=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させ、Ir=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させ、Ir=4の制御対象物をa_t[1]方向に移動させる。
【０２１６】
〔第４移動計画部１４４〕
ステップＳ１４４において、第４移動計画部１４４は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第４移動情報を生成し、記憶部１０に格納する。
【０２１７】
第４移動情報は、具体的には以下のもので構成される。
【０２１８】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=3の制御対象物をa_t[2]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[5]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[2]方向に移動させる。
【０２１９】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
mode[i]=1の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
【０２２０】
（３）Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させ、Ir=3の制御対象物をa_t[2]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
【０２２１】
〔第５移動計画部１４５〕
ステップＳ１４５において、第５移動計画部１４５は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第５移動情報を生成し、記憶部１０に格納する。
【０２２２】
第５移動情報は、具体的には以下のもので構成される。
【０２２３】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
先頭および先頭から２番目の制御対象物以外のIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０２２４】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の列l内の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【０２２５】
（３）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=1の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=4の制御対象物をa_t[1]方向に移動させる。
【０２２６】
（４）Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=1の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
【０２２７】
〔第６移動計画部１４６〕
ステップＳ１４６において、第６移動計画部１４６は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第６移動情報を生成し、記憶部１０に格納する。
【０２２８】
第６移動情報は、具体的には以下のもので構成される。
【０２２９】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の先頭制御対象物単位内でIr=2の制御対象物をa_t[6]方向に移動させる。
mode[i]=2の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の列l内の先頭から２番目の制御対象物単位内でIr=2の制御対象物をa_t[1]方向に移動させる。
【０２３０】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
mode[i]=2の末尾制御対象物単位内でIr=4の制御対象物をa_t[6]方向に移動させる。
mode[i]=3の末尾制御対象物単位内でIr=1の制御対象物をa_t[4]方向に移動させる。
【０２３１】
〔第７移動計画部１４７〕
ステップＳ１４７において、第７移動計画部１４７は、モード値により特定されるＳ群制御対象物を、モード値により特定される所定方向へ移動させる操作である第７移動情報を生成し、記憶部１０に格納する。
【０２３２】
第７移動情報は、具体的には以下のもので構成される。
【０２３３】
（１）Ｓ群所属の制御対象物単位数が２以上の場合、
先頭制御対象物以外のIr=2, 3の制御対象物をa_t[1]方向に１ステップ移動させる。
【０２３４】
（２）Ｓ群所属の制御対象物単位数が２以上の場合、
mode[i]=0の先頭制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させ、列l内の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の列l内の先頭から２番目の制御対象物単位内でIr=2, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させ、列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させ、列l内の先頭から２番目の制御対象物単位内でIr=3の制御対象物をa_t[1]方向に移動させる。
【０２３５】
（３）Ｓ群所属の制御対象物単位数が２以上の場合、
末尾制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
【０２３６】
（４）Ｓ群所属の制御対象物単位数が１の場合、
mode[i]=0の先頭制御対象物単位内でIr=1, 2, 3, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=1の先頭制御対象物単位内でIr=1, 4の制御対象物をa_t[1]方向に移動させる。
mode[i]=2の先頭制御対象物単位内でIr=1, 3の制御対象物をa_t[1]方向に移動させる。
mode[i]=3の先頭制御対象物単位内でIr=3, 4の制御対象物をa_t[1]方向に移動させる。
【０２３７】
＜変形例＞
第一実施形態から第四実施形態までは一つの列lにおけるＭ群とＳ群の制御対象物を対象として隊列制御を行う隊列制御装置について説明した。
【０２３８】
複数列が組み合わさってなる任意の隊列に対して、Ｍ群がＳ群の占有する空間を通り抜けて所定方向に１制御対象物単位分移動する隊列制御を実現する場合は、任意の隊列を複数の列lに分割し、分割された各列l（部分隊列という）に対して第一実施形態から第四実施形態までの何れかの隊列制御装置による隊列制御を同時に実行すればよい。
【０２３９】
各列の移動において制御対象物が当該列以外の空間にはみ出すことはないので、各列の移動は互いに独立しており、並列に実行することができる。そのため、各列に対して同時に第一実施形態から第四実施形態までの何れかによる移動を行うことで、対象とする隊列全体を所定方向に１制御対象物単位分移動させることができる。
【０２４０】
以上、この発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、この発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、この発明に含まれることはいうまでもない。実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【０２４１】
［プログラム、記録媒体］
上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【０２４２】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【０２４３】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【０２４４】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【０２４５】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【符号の説明】
【０２４６】
１、２  隊列制御装置
１０  記憶部
１１  単位内位置取得部
１２  順序取得部
１３  欠損状態判定部
１４  移動計画部
１４１  第１移動計画部
１４２  第２移動計画部
１４３  第３移動計画部
１４４  第４移動計画部
１４５  第５移動計画部
１４６  第６移動計画部
１４７  第７移動計画部
１５  動作部
２１  行動指令補助値決定部
２２  仮想位置設定部
２３  移動計画並べ替え部
【図１】
2019082800.tif 000003
【図２】
2019082800.tif 000004
【図３】
2019082800.tif 000005
【図４】
2019082800.tif 000006
【図５】
2019082800.tif 000007
【図６】
2019082800.tif 000008
【図７】
2019082800.tif 000009
【図８】
2019082800.tif 000010
【図９】
2019082800.tif 000011
【図１０】
2019082800.tif 000012
【図１１】
2019082800.tif 000013
【図１２】
2019082800.tif 000014
【図１３】
2019082800.tif 000015
【図１４】
2019082800.tif 000016
【図１５】
2019082800.tif 000017
【図１６】
2019082800.tif 000018