JP6489923B2 - 行動制御システム、及びそのプログラム - Google Patents

行動制御システム、及びそのプログラム Download PDF

Info

Publication number
JP6489923B2
JP6489923B2 JP2015094398A JP2015094398A JP6489923B2 JP 6489923 B2 JP6489923 B2 JP 6489923B2 JP 2015094398 A JP2015094398 A JP 2015094398A JP 2015094398 A JP2015094398 A JP 2015094398A JP 6489923 B2 JP6489923 B2 JP 6489923B2
Authority
JP
Japan
Prior art keywords
robot
unit
void
target
robots
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015094398A
Other languages
English (en)
Other versions
JP2016119040A (ja
Inventor
洋 川野
洋 川野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Publication of JP2016119040A publication Critical patent/JP2016119040A/ja
Application granted granted Critical
Publication of JP6489923B2 publication Critical patent/JP6489923B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Manipulator (AREA)
  • Control Of Position, Course, Altitude, Or Attitude Of Moving Bodies (AREA)

Description

本発明は、複数の制御対象物の行動を制御する技術に関する。例えば、複数のロボットを、開始位置における隊列形成状態から協調して移動させ、障害物を回避させ、目標位置で隊列形成をさせるための各ロボットの行動計画を求めるロボット協調制御技術に関する。
近年、多数の自律移動ロボットを効率的に制御にするための研究が活発に行われている。その任務内容は、人の入れない箇所の監視、物品の搬送などさまざまであるが、多数のロボットの協調動作による隊列形成を効率的に行わせるための技術が求められており盛んに研究が行われている(例えば、非特許文献1参照)。多数のロボットによる効率的な隊列形成を実現するには、それぞれのロボットの配置、動作順序などを事前に計画することが重要である。このような計画においては、当然ながら、複数のロボットが動作する実環境における障害物の存在や経路の形状なども十分に考慮しなければならない。
このような計画計算を行うための効果的な手法の一つとして、マルコフ決定過程における動的計画法や強化学習の手法があり、さまざまな研究が行われている(例えば、非特許文献2参照)。
また、ロボットの隊列制御の中でも、ロボット同士が互いに接したままの状態で、アメーバのように全体で移動を行うという仮定の下でのロボット隊列制御においては、ロボット同士の相対的な位置関係から、各ロボットの絶対位値の決定が可能であるという利点と、付加的な位置計測用の装備を必要としないという利点があり、そのようなロボットの研究もおこなわれている。例えば、非特許文献3に示すものでは任意の矩形形状隊列から他の矩形形状隊列までの隊列制御が示されている。
また、非特許文献4に示す研究に至る一連の研究や非特許文献5では、ある隊列から他の隊列に変化する隊列制御が示されている。
M.Shimizu, A.Ishiguro, T.Kawakatsu, Y.Masubuchi, "Coherent Swarming from Local Interaction by Exploiting Molecular Dynamics and Stokesian Dynamics Methods", Proceeaings of the 2003 IEE/RSJ International Conference on intelligent Robots and Systems, Las Veqas, pp.1614-1619, October 2003. Y.Wang, C.W.de Silva, "Multi-Robot Box-pushing: Single-Agent Q-Learning vs. Team Q-Learning", Proceedings of the 2006 IEEE/RSJ International Conference on Intelligent Robots and Systems, Beijing, China, pp.3694-3699, October 2006. A.Becker, G.Habibi, J.Werfel, M.Rubenstein, and J.McLurkin, "Massive Uniform Manipulation: Controlling Large Populations of Simple Robots with a Common Input Signal", Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems, Japan, pp.520-527, November, 2013. Stanton Wong1 and Jennifer Walter "Deterministic Distributed Algorithm for Self-Reconfiguration of Modular Robots from Arbitrary to Straight Chain Configurations", Proceedings of the 2013 IEEE International Conference on Robotics and Automation (ICRA), Karlsruhe, Germany, pp.537-543, May 6-10, 2013. Michael Rubenstein, Alejandro Cornejo, Radhika Nagpal, "Programmable self-assembly in a thousand-robot swarm", SCIENCE, 2014, Vol. 345, Issue 6198, pp.795-799.
しかしながら、非特許文献1の手法では、流体力学的な特性をロボット動作に組み込む手法を用いて群ロボットの動作を制御しており、低い計算負荷での制御を可能にしている利点があるが、任意の形状の隊列形成をすることができるとは限らない。
また、非特許文献2の手法のように、マルコフ決定過程における動的計画法や強化学習を使用してこのような計画を行おうとすると、単体のロボットを使用する場合に比べて複数のロボットを使用する場合には、その計算に要する時間や計算機の記憶容量がロボットの数に対して指数関数的に増大してしまう。その主たる原因となるのが、探索計算のためのマルコフ状態空間内の状態数の莫大な増加である。非特許文献2では、検証された強化学習の手法では、ロボット数の増加に伴い、指数関数的に計算負荷が増加するという、マルコフ状態空間内の爆発問題への解決策は示されていない。
また、非特許文献1,2の手法ともに、付加的な位置計測用の装備を必要とする。
また、非特許文献3では、各時刻でロボットに与えられる動作命令が皆同じ方向であるという条件を考慮しており、付加的な位置計測用の装備を必要としないが、その実現には障害物の存在を必要としている。また、一度の動作における各ロボットの移動誤差から発生する隊列の崩れの問題も解決できていない。
非特許文献4の手法においては、一度、線形隊列への変換をしなければならず、可能な隊列形成動作そのものへの制約が大きい。
非特許文献5の手法においては、開始隊列と目標隊列が共有する点がなければならないことや、障害物を考慮していないなどの問題点がある。
このような現状に鑑みて、本発明では、多数のロボットの存在を考慮しつつも、計画計算に必要な計算時間や計算機の記憶容量を少ないものに低減可能で、かつ、ロボット同士が接したままの状態を維持しつつ任意の開始位置における隊列形成状態から、他の任意の目標位置における隊列形成状態へ障害物のある環境にて変形動作を行うことを可能とする、ロボット協調隊列形成技術を提供することを目的とする。
上記の課題を解決するために、本発明の一態様によれば、行動制御システムは、M及びNをそれぞれ2以上の整数の何れかとし、pをM×N以上の整数の何れかとし、開始位置の集合に配置されたp台の制御対象物を所定の入口位置を含む目標位置の集合に移動させるための行動制御を行う。行動制御システムは、第一方向に対して平行でない方向を第二方向とし、第一方向に対して反対の方向を第三方向とし、第二方向に対して反対の方向を第四方向とし、各開始位置及び各目標位置は、それぞれ第一方向〜第四方向の少なくとも何れかの方向において他の開始位置及び目標位置と隣接し、目標位置の集合及び開始位置の集合はそれぞれ一塊の任意の形状を成し、制御対象物は、当該制御対象物の2次元平面上の第一方向において隣接する第一位置、第二方向において隣接する第二位置、第三方向において隣接する第三位置、及び、第四方向において隣接する第四位置とし、静止するか、または、二次元平面上の第一〜第四位置の何れかに移動するように制御されるものとし、p台の制御対象物は、M×N台毎に1つの制御対象物単位を構成し、1つの制御対象物単位を構成するM×N台の制御対象物はそれぞれ2つ以上の方向において当該制御対象物単位を構成する他の制御対象物と隣接し、目標位置の集合からN×N個の位置からなる位置単位からなる目標位置単位の集合を設定し、制御対象物単位がその制御対象物単位の現在の位置sにおいて各行動aを取ったときの適切さを表す1個の価値関数に基づいて制御され、静止するか、または、二次元平面上の第一〜第四方向の何れかのN×N個の位置からなる位置単位に移動するように制御されるものとし、価値関数が記憶される記憶部と、全ての目標位置単位の集合に制御対象物が存在しない場合、複数の制御対象物単位が成すある隊列をGaとし、複数の制御対象物単位が成す他の隊列をGbとし、隊列Gbに存在し隊列Gaに存在しない制御対象物単位を頭部制御対象物単位とし、開始位置の集合に配置されたp台の制御対象物を目標位置の集合に移動させる際に、頭部制御対象物単位が移動の先頭を務めるように、価値関数を用いてある時刻の隊列Gaに対して隊列Gbを決定する移動先隊列決定用動作計画部と、全ての目標位置単位の集合に制御対象物が存在しない場合、頭部制御対象物単位の位置にM×N台の制御対象物が位置するように各制御対象物の動作を制御する各制御対象物動作用動作計画部とを含み、全ての目標位置単位の集合に制御対象物が存在する場合に、各制御対象物動作用動作計画部は、目標位置単位の集合には含まれるが、目標位置の集合には含まれない位置に、各制御対象物が移動するように制御する。
上記の課題を解決するために、本発明の他の態様によれば、行動制御方法は、M及びNをそれぞれ2以上の整数の何れかとし、pをM×N以上の整数の何れかとし、開始位置の集合に配置されたp台の制御対象物を所定の入口位置を含む目標位置の集合に移動させるための行動制御を行う。行動制御方法は、第一方向に対して平行でない方向を第二方向とし、第一方向に対して反対の方向を第三方向とし、第二方向に対して反対の方向を第四方向とし、各開始位置及び各目標位置は、それぞれ第一方向〜第四方向の少なくとも何れかの方向において他の開始位置及び目標位置と隣接し、目標位置の集合及び開始位置の集合はそれぞれ一塊の任意の形状を成し、制御対象物は、当該制御対象物の2次元平面上の第一方向において隣接する第一位置、第二方向において隣接する第二位置、第三方向において隣接する第三位置、及び、第四方向において隣接する第四位置とし、静止するか、または、二次元平面上の第一〜第四位置の何れかに移動するように制御されるものとし、p台の制御対象物は、M×N台毎に1つの制御対象物単位を構成し、1つの制御対象物単位を構成するM×N台の制御対象物はそれぞれ2つ以上の方向において当該制御対象物単位を構成する他の制御対象物と隣接し、目標位置の集合からN×N個の位置からなる位置単位からなる目標位置単位の集合を設定し、制御対象物単位がその制御対象物単位の現在の位置sにおいて各行動aを取ったときの適切さを表す1個の価値関数に基づいて制御され、静止するか、または、二次元平面上の第一〜第四方向の何れかのN×N個の位置からなる位置単位に移動するように制御されるものとし、移動先隊列決定用動作計画部が、全ての目標位置単位の集合に制御対象物が存在しない場合、複数の制御対象物単位が成すある隊列をGaとし、複数の制御対象物単位が成す他の隊列をGbとし、隊列Gbに存在し隊列Gaに存在しない制御対象物単位を頭部制御対象物単位とし、開始位置の集合に配置されたp台の制御対象物を目標位置の集合に移動させる際に、頭部制御対象物単位が移動の先頭を務めるように、価値関数を用いてある時刻の隊列Gaに対して隊列Gbを決定する移動先隊列決定用動作計画ステップと、各制御対象物動作用動作計画部が、全ての目標位置単位の集合に制御対象物が存在しない場合、頭部制御対象物単位の位置にM×N台の制御対象物が位置するように各制御対象物の動作を制御するステップと、各制御対象物動作用動作計画部が、全ての目標位置単位の集合に制御対象物が存在する場合に、各制御対象物動作用動作計画ステップは、目標位置単位の集合には含まれるが、目標位置の集合には含まれない位置に、各制御対象物が移動するように制御するステップと、を含む。
上記の課題を解決するために、本発明の他の態様によれば、行動制御システムは、M,N,Qをそれぞれ2以上の整数の何れかとし、Rを24以上の整数の何れかとし、pをM×N×Q×Rとし、開始位置の集合に配置されたp台の制御対象物を所定の入口位置を含む目標位置の集合に移動させるための行動制御を行う。行動制御システムは、第一方向に対して平行でない方向を第二方向とし、第一方向に対して反対の方向を第三方向とし、第二方向に対して反対の方向を第四方向とし、第一方向と第二方向との成す平面に対して平行でない方向を第五方向とし、第五方向に対して反対の方向を第六方向とし、M×N×Q個の位置からなる一つの位置単位とし、各開始位置及び各目標位置は、それぞれ第一方向〜第六方向の少なくとも何れかの方向において他の開始位置及び目標位置と隣接し、目標位置の集合及び開始位置の集合はそれぞれR個の位置単位からなる一塊の任意の形状を成し、制御対象物は、当該制御対象物の3次元空間上の第一方向において隣接する第一位置、第二方向において隣接する第二位置、第三方向において隣接する第三位置、第四方向において隣接する第四位置とし、第五方向において隣接する第五位置とし、第六方向において隣接する第六位置とし、静止するか、または、3次元空間上の第一〜第六位置の何れかに移動するように制御されるものとし、p台の制御対象物は、M×N×Q台毎に1つの制御対象物単位を構成し、1つの制御対象物単位を構成するM×N×Q台の制御対象物はそれぞれ3つ以上の方向において当該制御対象物単位を構成する他の制御対象物と隣接し、制御対象物単位がその制御対象物単位の現在の位置単位において各行動を取ったときの適切さを表す1個の価値関数に基づいて制御され、静止するか、または、3次元空間上の第一〜第六方向の何れかのN×N×Q個の位置からなる位置単位に移動するように制御されるものとし、価値関数が記憶される記憶部と、複数の制御対象物単位が成すある隊列をGaとし、複数の制御対象物単位が成す他の隊列をGbとし、隊列Gbに存在し隊列Gaに存在しない制御対象物単位を頭部制御対象物単位とし、開始位置の集合に配置されたp台の制御対象物を目標位置の集合に移動させる際に、頭部制御対象物単位が移動の先頭を務めるように、価値関数を用いてある時刻の隊列Gaに対して隊列Gbを決定する移動先隊列決定用動作計画部と、頭部制御対象物単位の位置にM×N×Q台の制御対象物が位置するように各制御対象物の動作を制御する各制御対象物動作用動作計画部とを含み、価値関数は、ある位置単位から所定の入口位置を含む位置単位までのマンハッタン距離を用いて得られる。
上記の課題を解決するために、本発明の他の態様によれば、行動制御方法は、M,N,Qをそれぞれ2以上の整数の何れかとし、Rを24以上の整数の何れかとし、pをM×N×Q×Rとし、開始位置の集合に配置されたp台の制御対象物を所定の入口位置を含む目標位置の集合に移動させるための行動制御を行う。行動制御方法は、第一方向に対して平行でない方向を第二方向とし、第一方向に対して反対の方向を第三方向とし、第二方向に対して反対の方向を第四方向とし、第一方向と第二方向との成す平面に対して平行でない方向を第五方向とし、第五方向に対して反対の方向を第六方向とし、M×N×Q個の位置からなる一つの位置単位とし、各開始位置及び各目標位置は、それぞれ第一方向〜第六方向の少なくとも何れかの方向において他の開始位置及び目標位置と隣接し、目標位置の集合及び開始位置の集合はそれぞれR個の位置単位からなる一塊の任意の形状を成し、制御対象物は、当該制御対象物の3次元空間上の第一方向において隣接する第一位置、第二方向において隣接する第二位置、第三方向において隣接する第三位置、第四方向において隣接する第四位置とし、第五方向において隣接する第五位置とし、第六方向において隣接する第六位置とし、静止するか、または、3次元空間上の第一〜第六位置の何れかに移動するように制御されるものとし、p台の制御対象物は、M×N×Q台毎に1つの制御対象物単位を構成し、1つの制御対象物単位を構成するM×N×Q台の制御対象物はそれぞれ3つ以上の方向において当該制御対象物単位を構成する他の制御対象物と隣接し、制御対象物単位がその制御対象物単位の現在の位置単位において各行動を取ったときの適切さを表す1個の価値関数に基づいて制御され、静止するか、または、3次元空間上の第一〜第六方向の何れかのN×N×Q個の位置からなる位置単位に移動するように制御されるものとし、移動先隊列決定用動作計画部が、複数の制御対象物単位が成すある隊列をGaとし、複数の制御対象物単位が成す他の隊列をGbとし、隊列Gbに存在し隊列Gaに存在しない制御対象物単位を頭部制御対象物単位とし、開始位置の集合に配置されたp台の制御対象物を目標位置の集合に移動させる際に、頭部制御対象物単位が移動の先頭を務めるように、価値関数を用いてある時刻の隊列Gaに対して隊列Gbを決定する移動先隊列決定用動作計画ステップと、各制御対象物動作用動作計画部が、頭部制御対象物単位の位置にM×N×Q台の制御対象物が位置するように各制御対象物の動作を制御する各制御対象物動作用動作計画ステップとを含み、価値関数は、ある位置単位から所定の入口位置を含む位置単位までのマンハッタン距離を用いて得られる。
本発明に拠れば、多数のロボットの存在を考慮しつつも、計画計算に必要な計算時間や計算機の記憶容量を少ないものに低減可能で、かつ、ロボット同士が接したままの状態を維持しつつ任意の開始位置における隊列形成状態から、他の任意の目標位置における隊列形成状態へ障害物のある環境にて変形動作を行うことを可能とする。
ロボットの移動を説明するための図。 多数のロボットが協調して開始位置における隊列形成状態から移動を行い、目標位置での隊列形成を行う任務を説明するための図。 ロボットの移動を説明するための図。 尾部ロボット及び頭部ロボットを説明するための図。 頭部ロボットの位置にいた一つのボイドが、尾部ロボットの位置に移動していく様子を示す図。 ロボット単位を説明するための図。 目標隊列エリアG及び目標隊列エリア単位GUを説明するための図。 多数の不変型ロボットが協調して開始位置における隊列形成状態から移動を行い、目標位置での隊列形成を行う任務を説明するための図。 隊列Ga及び隊列Gbを説明するための図。 隊列Ga及び隊列Gbを説明するための図。 図11Aは各ロボット動作決定用動作計画のモード1を説明するための図、図11Bは各ロボット動作決定用動作計画のモード1を説明するための図。 図12Aは各ロボット動作決定用動作計画のモード1を説明するための図、図12Bは各ロボット動作決定用動作計画のモード1を説明するための図。 図13Aは各ロボット動作決定用動作計画のモード1を説明するための図、図13Bは各ロボット動作決定用動作計画のモード1を説明するための図。 図14Aは各ロボット動作決定用動作計画のモード1を説明するための図、図14Bは各ロボット動作決定用動作計画のモード1を説明するための図。 各ロボット動作決定用動作計画のモード1を説明するための図。 ロボット序列計算処理Robot_Joretu_Decisionを説明するための図。 多数の不変型ロボットが協調して開始位置における隊列形成状態から移動を行い、目標位置での隊列形成を行う任務を説明するための図。 多数の不変型ロボットが協調して開始位置における隊列形成状態から移動を行い、目標位置での隊列形成を行う任務を説明するための図。 多数の不変型ロボットが協調して開始位置における隊列形成状態から移動を行い、目標位置での隊列形成を行う任務を説明するための図であって、目標エリア単位GUが充填された状態を示す図。 条件1を説明するための図。 多数の不変型ロボットが協調して開始位置における隊列形成状態から移動を行い、目標位置での隊列形成を行う任務を説明するための図。 多数の不変型ロボットが協調して開始位置における隊列形成状態から移動を行い、目標位置での隊列形成を行う任務を説明するための図であって、目標エリアGが充填された状態を示す図。。 第一実施形態に係る行動制御システムの機能ブロック図。 第一実施形態に係る行動制御システムの処理フローの例を示す図。 各格子が菱形での場合の例を示す図。 ロボットの移動を説明するための図。 図27Aは開始位置の集合を説明するための図、図27Bは目標位置の集合を説明するための図。 尾部ロボット及び頭部ロボットを説明するための図。 頭部ロボットの位置にいた一つのボイドが、尾部ロボットの位置に移動していく様子を示す図。 ロボット単位を説明するための図。 ボイド移動制御を説明するための図。 第二実施形態に係る行動制御システムの機能ブロック図。 第二実施形態に係る行動制御システムの処理フローの例を示す図。 多数のロボットが協調して開始位置における隊列形成状態から移動を行い、目標位置での隊列形成を行う任務を説明するための図。
以下、本発明の実施形態について説明する。なお、以下の説明に用いる図面では、同じ機能を持つ構成部や同じ処理を行うステップには同一の符号を記し、重複説明を省略する。
<第一実施形態>
まず、行動制御システム及び方法の理論的背景について説明する。以下、行動制御の対象である制御対象物が、ロボットである場合を例に挙げて説明するが、制御対象物は、制御の対象となり得るものであれば、ロボット以外であってもよい。
[問題設定]
多数のロボットが協調して開始位置における隊列形成状態から、各ロボットが接した状態を維持しつつ移動を行い、目標位置での隊列形成を行う任務は、例えば図1に例示するような、互いに接する辺同志をスライドさせて移動していくことが可能な正方形型のロボットの使用を想定し、図2に示すように、壁で区切られた部屋においての開始位置から目標位置まで複数のロボットの移動によって実現するものである。
ロボットについては、例えば図1に示すように、ロボットの周囲上下左右4マスのうち一つに他のロボットが存在している状態を維持しながら移動をするものとする。この手法では1つのロボット自身が、一台のロボットのサイズ分の距離を移動することで、一回の動作の移動量を正確に測ることができるというメリットがある。また、一つの辺を共有する隣り合うロボットとの相対的な位置を計測しあうことで、ロボットの群れ全体の中での各ロボットの位置も容易に知ることができる。このため、ロボットの移動量の誤差によって、隊列が崩れるといった問題を起こしにくい。また、図3のように、複数のロボットを連結したように、同時に複数のロボットを移動させていくことが可能である。図3では、隊列Aから隊列Bに変形する際に、及び、隊列Dから隊列Eに変形する際に二台のロボットが連結したように同時に移動する。なお、ロボットは、隣の位置に他のロボットが存在しているか否か、障害物があるか否か、そして、自身が目標位置上にいるかどうかを知ることができるものとする。例えば、何れのロボットもロボットの周囲のマスに存在する他のロボットと通信できるものとし、少なくとも一台のロボットがGPSを備えるか、または、少なくとも1台のロボットが一回の行動制御において移動しない場合、GPSを備えるロボットや移動しなかったロボットを基準として、隣接するロボットと通信することで、各ロボットは自身の絶対的な位置を容易に知ることができる。もしくは、少なくとも一台のロボットの絶対位置が開始位置にて既知であるならば、それを使用してGPSなしでも、各時刻の各ロボットの絶対位置を知ることが出来る。
任務を行うロボットは、p台(pは2以上の整数の何れかであり、例えばp≧50)であり、各ロボットは、隣接するロボットと一辺以上を共有しつつ、二次元平面におけるX-Y軸方向(この例では、図面の紙面上下左右の四方向)に移動可能とする。ただし、p台のロボットで1つの群れを成すものとする。各格子にはロボットは一台しか存在することができない。それぞれのロボットは、移動しようとする方向に障害物か他のロボットがある場合には、静止をするものと仮定する。図2において、Rが記載された格子はロボットが存在する位置を示し、Oが記載された格子は障害物が存在する位置を示す。また、太線の破線で囲まれた領域は開始位置の集合を示し、太線の一点鎖線で囲まれた領域は目標位置の集合Gで表される領域(以下、この領域のことを「目標隊列エリアG」ともいう)を示し、太線の実線で囲まれた領域は後述する目標隊列エリアGの入口位置Peを示す。このように、各開始位置及び各目標位置は、それぞれ上下左右方向の少なくとも何れかの方向において他の開始位置及び目標位置と隣接し、ロボットの開始位置及び目標位置での隊列形状はそれぞれ一塊の任意の形状である。
[ロボットの座標設定]
それぞれのロボットi(iはロボット番号を表すi=0,1,2,3,,,p-1)の初期位置(開始位置)を(Xr0[i],Yr0[i])とし、目標位置を(Xre[i],Yre[i])とするとき、本問題は、開始位置に配置されたロボットが、目標位置まで移動するための行動計画を求めることと定義できる。
[任務空間の定義]
このような問題に対して単純にマルコフ状態遷移モデルを適用しようとする場合、マルコフ状態空間は、iをロボット番号としたとき、ロボットiの位置(Xr[i],Yr[i])、ロボットiの行動aによって構成される。各状態(ロボットの位置と行動)は離散値で表現される。部屋をX,Yの直交座標系からなる2次元平面で表すと、X軸、Y軸をそれぞれ離散化表現した値により各位置を表現する。つまり、図2のように部屋(2次元平面)は格子で区切られ、各格子が各位置に対応する。また、各格子において、障害物の「ある/なし」が予め設定されている。
[ロボット動作の定義]
また、行動主体は部屋に配置されている各ロボットとなる。ロボットiの行動a[i]は、静止、上下左右方向への1格子分の移動の計5種類のうちのいずれかを取る。例えば、a[i]∈{0,1,2,3,4}として、
0: 静止
1: 二次元平面上でX座標値が増える方向(図2で右方向)に1格子だけ移動する
2: 二次元平面上でY座標値が増える方向(図2で下方向)に1格子だけ移動する
3: 二次元平面上でX座標値が減る方向(図2で左方向)に1格子だけ移動する
4: 二次元平面上でY座標値が減る方向(図2で上方向)に1格子だけ移動する
とする。
[探索計算上の問題点]
このような任務環境におけるマルコフ状態空間は、ロボット数×2の次元数の状態を持ち、かつ選択可能な行動数は、ロボットの行動(=5通り)のロボット数乗だけ存在する。例えば、ロボット数が50で、部屋の縦横方向の格子数がそれぞれ20であるとすれば状態数は20の100乗個にもなり、探索計算に要する資源の量は膨大なものとなる。さらにロボット数が1台増えるごとに、その状態数は400倍増加していくことになる。
[問題設定]の項で説明したように、ロボット同士が接しているという拘束条件を取り入れても、根本的な計算量の削減は難しく、複数のロボットを使用する場合の大きな問題となっている。
具体的には、例えば、多数のロボットを複数の目標位置に誘導する問題においては、一台のロボットがある位置へ至るための経路を探索計算により求めることができるとしても、各ロボットにどの目標位置を割り振るかが大きな問題となる。この目標位置の割り振りがうまくいかなければ、早めに目標位置内に到達したロボットが、後から来るロボットの移動を邪魔するような位置に居座ってしまい、全体でのロボットの隊列形成を困難にしてしまう。そのようなことを避けるための各ロボットへの目標位置への割り振り方を探索により計算することを考えた場合、ロボットの台数の階乗分だけの目標位置への割り振り方が存在するため、計算にかかる負荷はロボットの台数とともに劇的に増加する。
また、ロボットが互いに一辺を共有しつつ移動を行うための探索計算について考えた場合の探索計算も、各ロボットのお互いの移動を考慮したうえで行うために、必要な計算量はロボットの台数に対して指数関数的に増えてしまう。
[二つの動作計画の導入]
そこで本実施形態では、これらの計算負荷の問題を解決するための方策の一つとして、ロボットの動作決定における探索計算を二つに分けることとする。ここでそのための準備として、ある隊列Gaをなしているロボットが、次になすべき隊列の形状としてGbを考える。隊列Gaと隊列Gbの間には、隊列Gaにて存在し、隊列Gbにて存在しない位置にあるロボットと、隊列Gbにて存在し隊列Gaにて存在しない位置にあるロボットがある(図4参照)。前者を尾部ロボットとし、後者を頭部ロボットとする。本実施形態では、ちょうど、頭部ロボットの位置にあるロボットが、ロボット群の移動において先頭を務め、尾部ロボットが、移動の最後尾を務めるロボットになるように、隊列Gaと隊列Gbとを定義する。
この定義の元、一つ目の探索計算は、隊列Gaをなすロボットの群が、障害物を回避しつつも、目標位置まで移動するためには、次の隊列Gbとしてどの隊列を選択すればよいかを決定するための動作計画計算(以下「移動先隊列決定用動作計画」ともいう)である。この探索計算は、事実上、頭部ロボット位置に移動するロボットとして、隊列Gaのどのロボットを選択するかと、隊列Gaにおける尾部ロボットを決定するための計算である。
二つ目の探索計算は、ロボットが互いに接した位置関係を維持しつつも、隊列Gaから隊列Gbへの変形する際の各ロボットの動作を決定するための動作計画計算(以下「各ロボット動作用動作計画」ともいう)である。これは、事実上、移動先隊列決定用動作計画により決定済みの頭部ロボット及び尾部ロボットに対し、尾部ロボットの位置からロボットを追い出し、隊列Gbにおける頭部ロボットの位置へのロボット誘導のための探索計算である。
前者、後者ともに動的計画法を使用した探索計算を使用するが、ここでは、前者の頭部ロボットの決定のための探索計算ではマルコフ決定過程における動的計画法を利用する。また、前者の尾部ロボットの決定と、後者の探索計算ではロボット同士の隣接関係の情報を使用したダイクストラ法等の動的計画法を使用する。なお、前者の頭部ロボットを決定する際に用いる価値関数Q(s,a)(詳細は後述する)の計算は、ロボットの群れが開始位置からの移動を開始する前にあらかじめ行い、価値関数Q(s,a)を用いた実際の前者の頭部ロボットの決定ロボット移動中の実時間で行う。また、後者の探索計算とそれを使用した尾部ロボットの決定も、ロボット移動中の実時間で行う。
[2種類のボイド制御]
これらの二つの探索計算の計算負荷の軽減のため、本実施形態では、ボイド制御の考え方を導入する。まず、ここでいうボイドとは、あるロボットが別の位置に移動した後に、元いた位置にできる空隙のことである。別の言い方をすると、ボイドとは、ロボットの移動する方向と反対の方向に移動する仮想的な存在である。こうした群ロボットの隊列形成問題においては、複数のロボットの動作に着目するがゆえに、その探索計算量が爆発してしまうが、視点を変えて、ボイドの動きに着目すれば、多数のロボットの動作計画の問題を単一のボイドの動作計画として考えることができる。そのため、ボイド制御の考え方を導入することは、群ロボットの隊列形成問題における探索計算負荷の軽減に適している。
まず、移動先隊列決定用動作計画において、ロボット群の移動の先頭を務める頭部ロボットの動作について考える。本実施形態では、目標隊列エリアGに一か所の入口位置Peを設けて、他の位置からは頭部ロボットが目標隊列エリアGに入ることはできないこととする。また、一度目標隊列エリアG内に入った全てのロボットは、二度と目標隊列エリアG外には出られないこととする。この条件のもと、目標隊列エリアG外にいる頭部ロボットがPeに至るまでのロボットの経路決定問題は、一台のロボットを入口位置Peまで誘導するための探索問題を解けばよく、得られた解を頭部ロボットの選択と誘導のために使用すればよい。目標隊列エリアG内の頭部ロボットの動作については、ボイドの動きに着目して、ボイドの誘導について同様のことを行う。すなわち、目標隊列エリアG内の頭部ロボットに望まれる動作とは、適切に頭部ロボットが入口位置Peから遠ざかり、目標隊列エリアG内の各場所に散らばっていきつつ目標隊列エリアGを埋めていくことである。これをボイドの動きとしてみれば、ロボットが入口位置Peから、目標隊列エリアG内に入るたびに、ボイドはそれに伴って、入口位置Peから目標隊列エリアGの外に出ていくのである。このとき、目標隊列エリアG内のボイドは、すべて一点の入口位置Peに向かって移動していくのが理想的な動作である。つまり、目標隊列エリアG内の頭部ロボットを目標隊列エリアGに適切に散らばるように誘導するためには、目標隊列エリアG内に位置する各ボイドが入口位置Peに至るための経路を探索計算すればよく、そうして求められたボイドの動作を頭部ロボットを動かすことで実現するようにすればよい。この考え方ならば、すべての位置にあるロボットが入口位置Peを目指して動作するための動作計画(価値関数Q(s,a)の計算)を一回行えばよいので、計算負荷が劇的に少なくなる。
続いて、隊列Gaを維持しているロボット群が、隊列Gbに変形することを考える。このとき、ロボット群が隊列Gaから隊列Gbに変形する動作とは、頭部ロボットの位置にいた一つのボイドが、尾部ロボットの位置に移動していくプロセスとしてとらえることができる(図4及び図5参照)。このようなボイドの動作は、頭部ロボットの位置をスタート位置とし、尾部ロボットの位置をゴール位置とした、一つのボイドの動作計画によって計算可能であり、計算負荷も小さい。この計算において考慮すべきボイドの移動の拘束条件としては、ボイドが移動する際に、ロボットが存在する位置をたどっていくという制限を設けるだけでよい。
[4マスロボット単位の導入]
さらに、本実施形態では、図6に示すように、田の字状に隣接した4つのロボットを一つの単位とし(以下、「ロボット単位」ともいう)、ロボットは、この田の字型のロボット単位を維持しつつ移動を行うこととする。言い換えると、四台毎に1つのロボット単位を構成し、1つのロボット単位を構成する四台のロボットはそれぞれ2つの方向において1つのロボット単位を構成する他のロボットと隣接した状態を維持しつつ移動を行う。このロボット単位の集団は、互いにロボット単位ごとに一辺を共有し、接しながら移動をするように制御される。
このような4つのロボットを一つの単位とした移動を行う理由としては、このような状態で移動を行う限り、ロボットの群れの中のいずれのロボットが一台欠けても、各ロボットはお互いに一つの辺で接しあう位置関係を崩さずに済むからである。すなわちこれは、各ロボット動作用動作計画において、ロボット同士の接続を考慮するための計算負荷を軽減することにつながるからである。
すなわち、先に述べた移動先隊列決定用動作計画は、4台のロボットがなすロボット単位がなす群れの移動について行う。先に述べた頭部ロボット、尾部ロボットは、それぞれ4台のロボットで構成される頭部ロボット単位、尾部ロボット単位となる。各ロボット動作用動作計画は、頭部ロボット単位に含まれる4つのロボット位置に、ロボットを誘導し、尾部ロボット単位位置に含まれるロボットから、4つのロボットを追い払うための動作を探索計算する。
ここでは4台のロボットがなすロボット単位に対応する四つのマスが一つのマスの単位(以下「マス単位」ともいう)であるとし、一つのマス単位を一状態として状態空間を組む。言い換えると、ロボット単位の位置を(Xr_unit[j],Yr_unit[j])(j=0,1,2,…j_max-1)としたとき、そのロボット単位に所属するロボットをi1,i2,i3,i4とすれば、
Xr[i1] = 2 ×Xr_unit[j]
Yr[i1] = 2 ×Yr_unit[j]
Xr[i2] = 2 ×Xr_unit[j] + 1
Yr[i2] = 2 ×Yr_unit[j]
Xr[i3] = 2 ×Xr_unit[j]
Yr[i3] = 2 ×Yr_unit[j] + 1
Xr[i4] = 2 ×Xr_unit[j] + 1
Yr[i4] = 2 ×Yr_unit[j] + 1
である。なお、ロボットの全体数pが、4の倍数でない場合には、端数のロボットが存在することになるが、それらのロボットは、皆、移動先隊列決定用動作計画においては切り捨てられ(存在しないものとして扱い)、各ロボット動作用動作計画においては、尾部ロボット単位のメンバとして扱われる。
ロボット単位の頭部ロボット決定用の目標位置の集合をGU(以下「目標隊列エリア単位GU」ともいう)とする。目標隊列エリア単位GUは、ロボット単位と同様に4つのロボット位置が一単位となったマス単位で構成され、図7、図8で示すように、目標隊列エリア単位GUを構成するマスが、目標隊列エリアGをはみ出さないように設定される。このとき、目標隊列エリアGに属するが目標隊列エリア単位GUに属さないロボット目標位置(4マスを構成できない端数のロボット目標位置)が存在する場合がある。なお、目標隊列エリアGは以下の2つの条件を満たすことを前提とする。(1)目標隊列エリアGが目標隊列エリア単位GUから飛び出している部分は目標隊列エリア単位GUに隣接するマス単位に含まれるものとする(図7参照)。(2)目標隊列エリアGが目標隊列エリア単位GUから飛び出している部分は、かぎ型のように飛び出したL字型とはならないものとする(図7参照)。このように、目標隊列エリアG及び目標隊列エリア単位GUを設定するため、移動先隊列決定用動作計画にて使用するロボット単位の総数は、目標隊列エリア単位GU内のロボット単位の数と同じかそれ以上となる。よって、目標隊列エリアGに属するが目標隊列エリア単位GUに属さないロボット目標位置の個数が4を超えることは起こりうるが、本実施形態はそのような場合でも使用可能である。すべての目標隊列エリア単位GU内にロボットが満たされたら、移動先隊列決定用動作計画はそれ以降は行わない。それ以降は、各ロボット動作決定用動作計画によって、目標隊列エリア単位GUに属さないが目標隊列エリアGに属する目標位置へロボットを埋めるための動作が計算される。
[移動先隊列決定用動作計画のためのMDP状態空間]
移動先隊列決定用動作計画での探索計算用のマルコフ状態空間を、一つのロボット単位の状態変数のみで構成することにする。すなわち、
状態変数s=(Xr_unit,Yr_unit),行動変数a∈{0,1,2,3,4}
である。頭部ロボット単位の選択と誘導は、この状態変数を引数とした一つの価値関数Q(s,a)を使用して行動決定を行う。価値関数Q(s,a)の計算は、動的計画法を使用して、任務の事前に行うものとする。入口位置Peを含む入口位置単位をPeUとし(図8参照)、動的計画法にて計算を行う際に、報酬の値は、入口位置単位PeUに頭部ロボット単位が移動した場合において高報酬値1が与えられ、その他は0の報酬が与えられる。
すなわち、価値関数Q(s,a)を計算するために必要なマルコフ状態空間での状態遷移確率と報酬値の設定は、行動aにより、状態がsからs'に移動したとして、その遷移確率をP(s'|s,a)とすると、例えば、設定方法の一例として
(1)sが障害物でなく、s'が行動aの行先のマス単位のとき、
P(s'|s,a)←1
(2)sが障害物でなく、s'が行動aの行先のマス単位でないとき、
P(s'|s,a)←0
(3)sが障害物のときで、s'=sのとき、
P(s'|s,a)←1
(4)sが障害物のときで、s'=sではないとき、
P(s'|s,a)←0
のように設定される。なお、マス単位の中に1つでも障害物が含まれる場合には、そのロボット単位の状態sを障害物とする。報酬Rについては、
If s'= PeUthen R(s',s, a) ← r_plus
Else If (sがGU内かつs'がGU外) then R(s',s, a) ← -r_minus
Else If (sがGU外かつs'がGU内でかつs'=PeUでない) then R(s',s, a) ← -r_minus
Else R(s',s, a) ← 0
である。r_minusとr_plusはともに正値だが、r_minus > 10 × r_plusとするのが望ましい。頭部ロボット単位が障害物には入れず、また、入口位置単位PeU以外から目標隊列エリア単位GUに入れず、目標隊列エリア単位GU内からは出られないという条件が記述できていれば、遷移確率と報酬の設定方法はこの限りではない。すべてのマス単位にあるロボット単位が入口位置単位PeUを目指して動作するための動作計画(価値関数Q(s,a)の計算)を一回行えばよいので、前述の通り、計算負荷が劇的に少なくなる。また、マス単位の個数は、マスの個数の4分の1となるため、状態の個数が減り計算負荷が少なくなる。
通常は、各状態sにある頭部ロボット単位が、Q(s,a)を使用して行動選択を行う場合は、各状態sにおいて、価値関数Q(s,a)の値を最大にする行動aを選択するが、以上に提示した条件設定で、価値関数Q(s,a)を計算した場合、目標隊列エリア単位GU外にいる頭部ロボット単位も目標隊列エリア単位GU内にいる頭部ロボット単位もともに、入口位置単位PeUを目指して移動することになる。そこで、本実施形態では以下のルールにより行動選択を行うものとする。この行動方策を行動方策Policy_Gとする。
(行動方策Policy_G)
(1)sがGU内のとき、頭部ロボット単位は、他のロボット単位の位置や障害物位置に移動しない行動であって、かつ、GU外に出ていかない行動であり、かつ、Q(s,a)<Q(s,0)を満たす行動aの中でQ(s,a)を最小化する行動を選択する。そのような行動がない場合は行動a=0(静止)を選択する。
(2)sがGU外のとき、頭部ロボット単位は、他のロボットの位置や障害物位置に移動しない行動であって、かつ、Q(s,a) > Q(s,0)を満たす行動aの中でQ(s,a)を最大化する行動を選択する。そのような行動がない場合は行動a=0(静止)を選択する。
このようにすることで、一度、(1)によりGU内に入った頭部ロボット単位は、入口位置単位PeUからなるべく離れた(遠い他の)GU内の位置に移動する。一方、(2)により、GU外の頭部ロボット単位は、入口位置単位PeUに向かって移動し、入口位置単位PeUよりGU内に入ろうとする行動をとるようにできる。また、他のロボットや障害物との衝突も避けることができる。なお(1)において、条件を満たす行動aが二つ以上存在するとき、その行動aにより移動した先のロボット単位が移動元ロボット単位以外のロボット単位と接していないならば、そのようなロボット単位に移動する行動aを優先出力する。
(頭部決定処理Head_Robot_Decision)
以上の価値関数Q(s,a)、行動方策Policy_Gを用いて、ある隊列Gaをなすロボット単位の群が、つぎに移動すべき隊列Gbの頭部ロボット単位を決定する方法は以下のとおりである。なお、本処理を、頭部決定処理Head_Robot_Decisionともいう。
(1)GU内の各ロボット単位jについて、ロボット単位jの位置sにおける全行動aの中でのQ(s,a)の最小値Qmin(j)を計算する。
(2)GU内の各ロボット単位jについて、Qmin(j)の値が小さい順に順位付けを行う。
(3)GU外の各ロボット単位jについて、ロボット単位jの位置sにおける全行動aの中でのQ(s,a)の最大値Qmax(j)を計算する。
(4)GU外の各ロボット単位jについて、Qmax(j)の値が大きい順に順位付けを行う。
(5)GU外の各ロボット単位jの順位値にGU内にあるロボット単位数を加算する。
(6)変数head_num←0とする。
(7) (6)までで計算した順位値の第head_num位の、ロボット単位jを選択し、j_head←jとする。ロボット単位j_headの行動a_headを行動方策Policy_Gにより計算する。a_head=0でない場合、ロボット単位j_headを頭部ロボット単位位置に移動するロボット単位として選択する。ロボット単位j_headを行動a_headによって移動させた先の位置を、頭部ロボット単位位置とし、頭部ロボット単位をj_newとする。a_head=0のとき、head_numをインクリメントし、(7)を繰り返す。
以上の処理では、GU外にしかロボット単位が存在しないときになるべくPeUに近いロボット単位か、もしくは、GU内にロボット単位が存在するときには、なるべくQ_min(j)の値の小さいロボット単位のうちで、行動方策Policy_Gにより選択される行動が静止ではないものを頭部ロボット単位として選んでいる。
(ロボット単位群内序列決定処理Unit_Joretu_Decision)
続いて、尾部ロボット単位位置を決定するための手法を述べる。まず、各ロボット単位が、頭部ロボット単位からどれだけの距離離れているかを計算する。この計算はダイクストラ法などの動的計画法で計算可能であるが、本実施形態で使用する方法を一例として以下に述べる。なお、本処理をロボット単位群内序列決定処理Unit_Joretu_Decisionともいう。
(1)各ロボット単位にて、上下左右4方向に隣接するロボット単位の番号を調べる。ロボット単位jの行動aの移動方向にロボット単位j_nextが隣接して存在する場合、next_u[a][j]変数の値をj_nextに設定する(next_u[a][j]←j_next)。ロボットが存在しないときは、next_u[a][j]変数の値をj_maxに設定する(next_u[a][j]←j_max)。ただし、j_maxはロボット単位の個数である。
(2)状態空間内(Xr_unit,Yr_unit)の各位置の序列変数値Joretu[Xr_unit][Yr_unit]の値をj_maxに初期化する(Joretu[Xr_unit][Yr_unit]←j_max)。
(3)ロボット単位j_headの位置の序列変数値Joretu[Xr_unit[j_head]][Yr_unit[j_head]]の値をj_minに初期化する(Joretu[Xr_unit[j_head]][Yr_unit[j_head]]←j_min)。ただし、j_minの値は、例えば、j_min=0とする。
(4)ロボット単位j_head以外の、各ロボット単位jの、全行動aについて、next_u[a][j]の値がj_maxではない場合の、Joretu[Xr_unit[next_u[a][j]]][Yr_unit[next_u[a][j]]]の値を調べ、その最小値に1を加えた値が、現在のJoretu[Xr_unit[j]][Yr_unit[j]]よりも小さい場合は、その値をJoretu[Xr_unit[j]][Yr_unit[j]]に代入する(Joretu[Xr_unit[j]][Yr_unit[j]] ←Joretu[Xr_unit[next_u[a][j]]][Yr_unit[next_u[a][j]]]+1)。
(5) (4)の処理にて、Joretu値の更新がなくなるまで、(4)を繰り返す。この処理により、ロボット単位j_headから離れた位置にあるロボット単位jの序列変数値Joretu[Xr_unit[j]][Yr_unit[j]]ほど大きな値となるように更新される(図9参照)。なお、図9の丸括弧内の数値は序列変数値Joretu[Xr_unit[j]][Yr_unit[j]]を表す。
(尾部ロボット決定処理Tail_robot_Decision)
以上の、ロボット単位群内序列決定処理Joretu_Decisionが済んだうえで、Joretu[Xr_unit[j]][Yr_unit[j]]が最大となる位置にあるロボット単位を尾部ロボット単位j_tailとする。なお、尾部ロボット単位を決定する処理を尾部ロボット決定処理Tail_robot_Decisionともいう。以上の処理では、頭部ロボット単位からもっとも離れたロボット単位を尾部ロボット単位として設定している。
(移動先隊列決定用動作計画処理Next_Formation_Decision)
以上の処理をまとめて、以下のように、移動先隊列決定用動作計画処理Next_Formation_Decisionが行われる。
(1)頭部決定処理Head_Robot_Decisionを行う。
(2)ロボット単位群内序列決定処理Unit_Joretu_Decisionを行う。
(3)尾部ロボット決定処理Tail_robot_Decisionを行う。
(4)ロボット単位j_headが行動a_headを行った後の、移動後の位置に新たな頭部ロボット単位j_newを設定し、(3)にて、尾部ロボット単位位置が特定できたので、現在の隊列Gaから尾部ロボット位置j_tailのロボット単位を削除し、隊列Gaに頭部ロボット単位j_newを追加し、隊列Gbとする(図9参照)。
[簡略化された移動先隊列決定用動作計画処理]
なお、移動先隊列決定用動作計画処理Next_Formation_Decisionは、以下のように簡略化してもよい。
(1)現時点で、4つのロボットが収まっているロボット単位位置を特定し、隊列Gaのロボット単位の要素として設定する。
(2)頭部決定処理Head_Robot_Decisionを行う。
(3)ロボット単位j_headが行動a_headを行った後の、移動後の位置に新たな頭部ロボット単位j_newを設定し、頭部ロボット単位j_newとロボット単位j_headとからなるロボット単位隊列を、隊列Gbとする(図10参照)。なお、隊列Gbに含まれれないロボットの群れを尾部ロボット群G_tailという。この時点では、尾部ロボット群G_tailに含まれるどのロボットが削除されるかは決定していない。
後述する各ロボット動作決定用動作計画においては、ロボット単位j_headと頭部ロボット単位j_new以外は、直接計算に使用されないので、省いて構わない。その代り、簡略化された移動先隊列決定用動作計画処理における(1)の処理にて、毎回、4つのロボットで埋まっているロボット単位の特定を行う。
[各ロボット動作決定用動作計画]
移動先隊列決定用動作計画においてロボット単位j_headと頭部ロボット単位j_newが決定され、次の隊列Gbが決定されたので、現隊列Gaから次隊列Gbへの移動を各ロボットの移動によって実現するための探索計算を各ロボット動作決定用動作計画にて行う。
まず、各ロボット動作決定用動作計画においては、隊列Gb内のどのロボット単位にも属さない端数のロボットを特定し、それらを尾部ロボット群G_tailに属するロボットとする(図10参照)。
本実施形態では、4つのロボットを組にしたロボット単位を維持しつつロボット群が移動を行うようにしているので、ボイド制御を行う際の、各ロボットの接続維持を考える際には、尾部ロボット単位j_tail(前述の通り、各ロボット動作決定用動作計画における尾部ロボット単位は、何れのロボット単位にも属さない端数のロボットをメンバとする)と頭部ロボット単位j_new付近でのボイドの動きにさえ気を配れば、それ以外は、ボイドがロボット群内のどの位置にあるかを考慮する必要はない。
各ロボット動作決定用動作計画においては、以下の2つのモードが存在する。
モード1:GUがロボットで満たされていない場合。
モード2:GUがロボットで満たされている場合。
(モード1)
まず、モード1のGUがロボットで満たされていない場合の各ロボット動作決定用動作計画の動作について述べる。
まず、ロボット単位j_headに所属するロボットのうち、頭部ロボット単位j_newに接した位置にある2つのロボットをロボットi_move_11,i_move_21とし(図11参照)、ロボットi_move_11,i_move_21と行動a_headの移動方向の逆方向に接しているロボットをそれぞれ、ロボットi_move_12,i_move_22とする。頭部ロボット単位j_newに所属し、かつ、ロボットi_move_11,i_move21に、行動a_headの方向で接するロボットがある場合は、そのロボットをそれぞれi_move_101,i_move_201とし, ロボットi_move_101,i_move201の位置に、行動a_headの方向で接する位置にロボットがある場合は、そのロボットをそれぞれi_move_102,i_move_202とする。モード1の動作は、以下の手順で行われる。
(手順1) ロボットi_move_101,i_move102の両方が存在する場合は(図11参照、なお、図11においては破線で示したロボットi_move_101,i_move_102が存在する場合)、手順7へ。その他の場合で、ロボットi_move_101が存在する場合は(図12A参照)、ロボットi_move_11とロボットi_move12とロボットi_move101をa_head方向に移動する(図12B参照)。その他の場合で、ロボットi_move_101が存在しない場合は(図13A)、ロボットi_move_11とロボットi_move12をa_head方向に移動する(図13B)。
(手順2) 手順1で生じたボイド(ロボットi_move12の元あった位置)を位置void_endとする(図12B、図13B参照)。
(手順3) 位置void_endを、ロボットi_move_11とロボットi_move12以外のロボットで埋めていくことで、尾部ロボット群G_tailに所属するロボットのうち、もっとも位置void_endから離れた位置のロボットを現在位置より、1マス分位置void_endに近づける。例えば、図13Bから図14Aに遷移する。
(手順4) ロボットi_move_101かロボットi_move_102が存在する場合は(図12、図13参照、なお、図13においては破線で示したロボットi_move_102が存在する場合)、手順7へ。どちらも存在しない場合は(図14A参照)、ロボットi_move_11とロボットi_move12と、「ロボットi_move12に、行動a_headの移動方向と逆の方向で接するロボット」を、a_head方向に移動する(図14B参照)。
(手順5) 手順4で生じたボイド(手順1実行前にロボットi_move12の元あった位置)を、位置void_endとする。
(手順6) 位置void_endを、ロボットi_move_11とロボットi_move12以外のロボットで埋めていくことで、尾部ロボット群G_tailに所属するロボットのうち、もっとも位置void_endから離れた位置のロボットを現在位置より、1マス分位置void_endに近づける。
以上、手順1から手順6により、頭部ロボット単位j_newの下側のマスをロボットで埋める。同様の処理を、手順7から手順12で行い、頭部ロボット単位j_newの上側のマスをロボットで埋める。頭部ロボット単位j_newの上側のマスにおいて同様の処理を行えばよいため、図を省略する。
(手順7) ロボットi_move_201,i_move202の両方が存在する場合は(図11参照)、モード1の各ロボット動作決定用動作計画を終了する。頭部ロボット単位j_newが4台のロボットで埋まったことを意味する。
その他の場合で、ロボットi_move_201が存在する場合は、ロボットi_move_21とロボットi_move22とロボットi_move201をa_head方向に移動する。その他の場合で、ロボットi_move_201が存在しない場合は、ロボットi_move_21とロボットi_move22をa_head方向に移動する。
(手順8) 手順7で生じたボイド(ロボットi_move22の元あった位置)を位置void_endとする。
(手順9) 位置void_endを、ロボットi_move_21とロボットi_move22以外のロボットで埋めていくことで、尾部ロボット群G_tailに所属するロボットのうち、もっともを位置void_endから離れた位置のロボットを現在位置より、1マス分位置void_endに近づける。
(手順10) ロボットi_move_201かロボットi_move_202が存在する場合は、終了する。どちらも存在しない場合は、ロボットi_move_21とロボットi_move22と、「ロボットi_move22に、行動a_headの移動方向と逆の方向で接するロボット」を、a_head方向に移動する。
(手順11) 手順10で生じたボイド(手順7実行前にロボットi_move22の元あった位置)を位置void_endとする。
(手順12) 位置void_endを、ロボットi_move_21とロボットi_move22以外のロボットで埋めていくことで、尾部ロボット群G_tailに所属するロボットのうち、もっともを位置void_endから離れた位置のロボットを現在位置より、1マス分位置void_endに近づける。
ロボット単位j_headがロボット単位群の移動の先頭に位置する場合には、通常、頭部ロボット単位j_newに他のロボットは存在しない(言い換えると、図11においては破線で示した4つのロボットi_move_101,i_move_102,i_move_201,i_move202が存在しない)が、開始位置の隊列によって(図15参照)、ロボット単位j_headの移動方向に、ロボット単位を構成しない端数のロボットi_move_101,i_move_102,i_move_201,i_move202の多くとも何れか3つが存在する場合がある。その場合、手順1〜手順12を行うことで、ロボットi_move_101,i_move_102,i_move_201,i_move202を頭部ロボット単位の一部として取り込む。つまり、ロボットi_move_101,i_move_102,i_move_201,i_move202の多くとも何れか3つが存在する場合、ロボット単位j_headを構成していた4台のロボットi_move_11,ロボットi_move_12,ロボットi_move_21,ロボットi_move_22がそのまま頭部ロボット単位j_newを構成するのではなく、存在するロボットi_move_101,i_move_102,i_move_201,i_move202の多くとも何れか3つと、4台のロボットi_move_11,ロボットi_move_12,ロボットi_move_21,ロボットi_move_22の何れか(足らない部分を補充するもの)とで、頭部ロボット単位j_newを構成する。例えば、図15の場合には、ロボットi_move_201,i_move202と、ロボットi_move_11,ロボットi_move_12とで頭部ロボット単位j_newを構成する。
以上の処理のうち、手順3,6,9,12は、共通の処理である。以下、この処理をボイド制御処理Robot_Void_Controlともいい、この処理について説明する。
(1)前回、本処理Robot_Void_Controlが実行された際のi_tail値を変数pre_i_tailに格納する(pre_i_tail←i_tail)。本処理が実行されるのがこれが最初ならば、pre_i_tail←-1とする。
(2)各ロボットが位置void_endからどれだけの距離離れているかを計算する。以下、この処理をロボット序列計算処理Robot_Joretu_Decisionともいう。ロボット序列計算処理Robot_Joretu_Decisionでは、各位置の序列変数値Joretu[Xr][Yr]を計算する。ロボット序列計算処理Robot_Joretu_Decisionについては後述する。
(3)(a)pre_i_tailが-1以外の値のとき(本処理を行うのが2回目以降のとき)で、ロボットpre_i_tailが一時刻ステップ前に所属していたロボット単位の位置に所属していて、かつG外にあるロボットがある場合は、その中で最もvoid_endから離れているロボット(joretu値のもっとも大きい位置にあるロボット)を選択し、ロボットi_tailとする(選択したロボットの番号をi_tailに代入する)。(b)pre_i_tailが-1以外の値のときで、ロボットpre_i_tailが一時刻ステップ前に所属していたロボット単位の位置に一つもロボットが所属していなく、他にロボット単位位置内に4つのロボットが充填されていないロボット単位位置があるときは、そのようなロボット単位内にありかつ、G外にあり、その中で最もvoid_endから離れているロボット(joretu値のもっとも大きい位置にあるロボット)ロボットを選択し、ロボットi_tailとする。(b)のような選択を行うことで、4つのロボットが充填されているロボット単位を構成するようにし、ロボット単位を構成しない端数のロボット数が4未満となるようにしている。(c)pre_i_tailが-1以外の値のときで、ロボットpre_i_tailが一時刻ステップ前に所属していたロボット単位の位置に一つもロボットが所属してなく、他に4つのロボットが充填されていないロボット単位位置がない場合は、尾部ロボット群G_tailに所属するロボットのうち、G外にあるものの中で、最もvoid_endから離れているロボット(joretu値のもっとも大きい位置にあるロボット)を選択し、ロボットi_tailとする。(d)pre_i_tailが-1のとき(本処理を行うのが1回目のとき)、尾部ロボット群G_tailに所属するロボットのうち、G外にあるものの中で、最もvoid_endから離れているロボット(joretu値のもっとも大きい位置にあるロボット)を選択し、ロボットi_tailとする。例えば、図16は、図11の状態において、モード1の手順1でロボットi_move_11とi_move_12とがa_head方向に移動し、ボイドが位置void_endに存在し、ロボットi_tailが設定された例を示す。
(4)ロボットi_tailを用いて以下の位置void_startを求める。ロボットi_tailの位置から、隣接したロボットをたどって同じ方向に2マス以上移動可能であり、2マス以上移動した先にあるロボットの所属するロボット単位が、ロボット単位j_headではなく、かつ、内に4つのロボットが所属しているという条件を満たす方向を探す。その方向と同じ方向に移動する行動をa_tailとする(図16参照)。続いて、行動a_tailの方向に2マス以上移動した先にあるロボットの所属するロボット単位の番号j_startを特定する。言い換えると、ロボットi_tailの位置から、同じ方向dに2台以上ロボットが連続して隣接しており、その方向dにおいて、ロボットi_tailから2マス以上離れたマス(2つ以上離れた位置)にあり、連続して隣接するロボットの何れかが所属するロボット単位が、ロボット単位j_headではなく、かつ、内に4つのロボットが所属しているという条件を満たすとき、方向dに移動する行動をa_tailとする。上述の条件(ロボットi_tailから2つ以上離れた位置にあり、連続して隣接するロボットの何れかが所属し、ロボット単位j_headではなく、かつ、内に4つのロボットが所属しているという条件)を満たすロボット単位の番号j_startを特定する。なお、上述の条件を満たすロボット単位は、複数個存在しうるので、その中から任意のロボット単位を、ロボット単位j_startとして特定しうる。
行動a_tailとロボット単位j_startの位置(Xr_unit[j_start],Yr_unit[j_start])とから、以下のようにから位置void_startを設定する。
a_tail=1のとき:void_startのX座標を2 ×Xr_unit[j_start] + 1、Y座標をYr[i_tail]とする。
a_tail=2のとき:void_startのX座標をXr[i_tail]、Y座標を2 × Yr_unit[j_start] + 1、とする。
a_tail=3のとき:void_startのX座標を2 × Xr_unit[j_start] 、Y座標をYr[i_tail]とする。
a_tail=4のとき:void_startのX座標をXr[i_tail]、Y座標を2 × Yr_unit[j_start] 、とする。
(5)位置void_startから、位置void_endにいたるボイドの移動経路を計算する。以下、この処理をボイド経路計算処理Void_Trajectory_Decisionともいう。
(6) (5)で計算されたボイドの移動経路を、void_endから_void_startに逆にたどり、ボイドを埋めていく。以下、この処理をボイド移動処理Void_Motionともいう。
なお、処理(4)は、尾部ロボット単位に属するロボットを動かす際に、ロボットの接続状態を維持するためには、「ボイドの位置が、尾部ロボット単位に隣接するロボット単位に含まれるロボットのうち、尾部ロボット単位に接するロボットの位置であってはならない」ことを考慮したものである。よって、制御システムは、尾部ロボット単位に隣接するロボット単位に含まれるロボットのうち、尾部ロボット単位に接するロボットの位置にボイドが存在しないように、p台のロボットの行動を制御する。なお、前述の通り、各ロボット動作用動作計画においては、図16の端数のロボットi_tailは、尾部ロボット単位に所属するロボットとして扱われる。図16において、ボイドが移動経路NGを用いた場合、ロボットi_tailが上下左右方向において隣接するロボットがなくなってしまい、p台のロボット全てが一つの群れを成すことができず、ロボット同士の接続を維持することができない。そこで、位置void_endにあるボイドを一旦、位置void_startに移動させ、その後、一気にロボットi_tailの位置に移動させるように制御する。このような行動制御を行うことで、p台のロボット全てが一つの群れを成し、ロボット同士の接続を維持することができる。以下、このような制御を実現するためのロボット序列計算処理Robot_Joretu_Decision、ボイド経路計算処理Void_Trajectory_Decision、ボイド移動処理Void_Motionについて説明する。
(ロボット序列計算処理Robot_Joretu_Decision)
ロボット序列計算処理Robot_Joretu_Decisionは、ダイクストラ法などを用いることができる。例えば以下のとおりである。
(1)各ロボットにて、上下左右4方向に隣接するロボットの番号を調べる。ロボットiの行動aの移動方向にロボットi_nextが隣接して存在する場合、next[a][i]変数の値をi_nextに設定する。ロボットが存在しないときは、next[a][i]変数の値をp(ロボットの台数を表す)に設定する。
(2)状態空間内(Xr,Yr)各位置の序列変数値Joretu[Xr][Yr]の値をpに初期化する(Joretu[Xr][Yr]←p)。
(3)void_endの位置の序列変数値Joretuの値を0とする(Joretu[Xr][Yr]←0)。さらに、本処理を実行する直前に行動a_headによって移動した全てのロボットの位置の序列変数値Joretuの値を-1に初期化する。さらに、それが所属するロボット単位が、4台のロボットで充填されていないロボットの位置の序列変数値Joretuの値を-1に初期化する。さらに、void_startの位置から行動a_tailの逆向きに隣接するロボット位置のJoretu値を-1にする。
(4)void_endの位置と、void_endから、行動a_headの移動方向に隣接してたどれるロボットの位置以外の、各ロボットiの、全行動aについて、next[a][j]の値がpではない場合の、Joretu[Xr[next[a][i]]][Yr[next[a][i]]]の値を調べ、Joretu[Xr[next[a][i]]][Yr[next[a][i]]]の値が-1でない場合で、かつ、その最小値に1を加えた値が、現在のJoretu[Xr[i]][Yr[i]]よりも小さい場合は、その値をJoretu[Xr[i]][Yr[i]]に代入する(Joretu[Xr[i]][Yr[i]]←Joretu[Xr[next[a][i]]][Yr[next[a][i]]]+1)。
(5) (4)の処理にて、Joretu値の更新がなくなるまで、(4)を繰り返す。
この処理により、(a)行動a_headによって移動した全てのロボットの位置、(b)そのロボットが所属するロボット単位が4台のロボットで充填されていない場合には、そのロボット単位に所属する他のロボットの位置、(c)void_startの位置から行動a_tailの逆向きに隣接するロボットの位置を除き、位置void_endから離れた位置の序列変数値Joretu[Xr[i]][Yr[i]]ほど大きな値となるように更新される。図16の角括弧内の数値は、更新がなくなったときの序列変数値Joretuの値の例を示す。
(ボイド経路計算処理Void_Trajectory_Decision)
ボイド経路計算処理Void_Trajectory_Decisionは、以下のとおりである。
(1)位置void_startの位置をボイド軌道(X,Y)=(void_trj_x[h], void_trj_y[h])(h=0,1,2,3…)の最初の位置とする。
(2)軌道番号h_trj←0とする。
(3)現ボイド軌道位置(void_trj_x[h_trj],void_trj_y[h_trj])から、全方向にて隣接する位置にあるロボットiのうち、そのロボットiの位置における序列値Joretu[Xr[i]][Yr[i]]が、-1以外であって、かつ、Joretu[void_trj_x[h_trj]][void_trj_y[h_trj]]よりも小さいロボットiの位置を次のボイド軌道位置(void_trj_x[h_trj+1],void_trj_y[h_trj+1])とする。その際の、ボイドの移動の方向と同じ行動の番号をボイド行動履歴a_void[h_trj]に格納する。h_trjをインクリメントする。
(4)現ボイド軌道位置が、位置void_endに等しくなるまで(3)を繰り返す。
この処理により、位置void_endから位置void_startまでのボイドの経路を計算する。
(ボイド移動処理Void_Motion)
ボイド移動処理Void_Motionは、例えば、以下のとおりである。計算されたボイド軌道に沿って、同じ方向に動くロボットを一度に移動させている。もちろん、一度に移動させず一台ずつ動かしてもよい。
(1)h_trj_buffer←h_trj-1とする。
(2)h_trjをデクリメントし、a_void[h_trj]の値を、a_void_bufferに格納する。
(3)h_trj=0でなければ、h_trjをデクリメントし、a_void[h_trj]= a_void_bufferであるか否かを判定し、a_void[h_trj]= a_void_bufferのとき、(3)を繰りかえす。そうでなければ(a_void[h_trj]≠ a_void_bufferのとき)、ボイド軌道(void_trj_x[h_trj_buffer], void_trj_y[h_trj_buffer])から、(void_trj_x[h_trj+1], void_trj_y[h_trj+1])までの位置にあるロボットを皆、a_void_bufferに格納された行動値で移動させ(4)にいく。この処理により、同じ方向に動くロボットを一度に移動させている。h_trj=0のとき、ボイド軌道(void_trj_x[h_trj_buffer], void_trj_y[h_trj_buffer])から、(void_trj_x[0], void_trj_y[0])までの位置にあるロボットをa_void[0]に格納された行動値で移動させ(5)にいく。
(4)h_trjをインクリメントし、(1)に戻る。
(5)ロボットi_tailから行動a_tailの向きに隣接し、位置void_startに至るまでの位置にあるロボットを皆、行動a_tailで移動させる。なお、この移動は、一台ずつではなく、全て一緒に移動させる必要がある。この処理により位置void_startにあるボイドをロボットi_tailの位置に一気に移動させ、ロボットi_tailに隣接するロボットが無くなることを防ぐ。
GUがロボットで満たされるまで、移動先隊列決定用動作計画処理Next_Formation_Decisionの後、モード1(手順1〜手順12)を使用してロボットを移動させる処理を繰り返す(図8、図17〜図19参照)。GUがロボットで満たされるとモード2に移行する。
(モード2)
続いて、モード2のGUがロボットで満たされている場合の各ロボット動作決定用動作計画の動作について述べる。
(i_startの選択)
モード2では、先頭のロボットを選択する際に、頭部ロボット単位は使用しない。先頭ロボットの番号をi_startとする。start_select[i]変数をロボットiの先頭ロボットとしての選択回数を記憶する変数とし、ロボットの移動開始前に0にあらかじめ初期化する(start_select[i]←0)。
まず、前ステップで本モード2の処理が実行されたときの先頭ロボットi_startが前ステップでの移動を行った後の位置から、前ステップでのロボットi_startの移動方向a_startの移動する方向に隣接していて、「GUに属さず、Gに属す目標位置であって、そこに他のロボットが存在していない位置」があるとき、引き続きロボットi_startを先頭ロボットとして選択する。start_select[i_start]をインクリメントする。
そうでない場合は、これまで、先頭ロボットとして選択されたことのないロボットで、かつ、「GUに属さず、Gに属す目標位置で、ロボットが存在していない位置」に隣接するロボットiのうちで、その隣接する目標位置に移動する行動をa_startとしたとき、以下の条件1を満たさないロボットを先頭ロボットi_startとして選択する。start_select[i_start]をインクリメントする。なお、ロボットi_startの選択は、目標位置への入口位置単位PeUに属するものから優先的に選択する。(G外に残留するロボット数が残り少なくなって4つ以下になったときに、入口位置単位PeUからi_startを選ぶと、ロボットi_startが口述するモード2内手順3で計算されるロボット単位j_start内に含まれてしまうこととなり、本実施形態ではそのような場合に対応できないからである。)
条件1:あるロボットiについて、そのロボットが所属するロボット単位jに行動a_startの方向で隣接するロボット単位の位置の中にGUに属さずGに属する位置が3個であり、その中で、ロボット単位jに隣接しない位置が2つ以上ある。
図20に条件1を満たす例を示す。なお、図20のロボット単位j1のロボットi1は条件1を満たすため選択されない。一方、図20のロボット単位j2に属するロボットi2やi3は条件2を満たさない(ロボット単位jに隣接しない位置が1つしかない)ため、選択されうる。
モード2の動作は以下のとおりである。
(手順1) ロボットi_startの選択が2回目の場合(start_select[i_start]=2)、ロボットi_startとロボットi_startと行動a_startの逆の方向で隣接するロボットと、さらにそのロボットに行動a_startの逆の方向で隣接するロボットをa_start方向に移動する。ロボットi_startの選択が1回目の場合、ロボットi_startとロボットi_startと行動a_startの逆の方向で隣接するロボットをa_start方向に移動する。なお、目標隊列エリアGが目標隊列エリア単位GUから飛び出している部分は目標隊列エリア単位GUに隣接するマス単位に含まれることを前提としているため、start_select[i_start]は1または2となる。
(手順2) 手順1で生じたボイド(手順1で最後尾で移動したロボットの元あった位置)を位置void_endとする。
(手順3) 位置void_endを、手順1にて行動a_startで移動したロボット以外のロボットで埋めていくことで、尾部ロボット単位i_tailに所属するロボットのうち、もっとも位置void_endから離れた位置のロボットを現在位置より、1マス分位置void_endに近づける。
手順3はモード1と同じものである。
以上の処理を、G内にロボットが充填されるまで繰り返す(図19、図21、図22参照)。
<第一実施形態に係る行動制御システム100>
第一実施形態に係る行動制御システム100は、以上に説明した各処理によって構成される全体動作について以下にまとめる。
(1)移動先隊列決定用動作計画のために使用する価値関数Q(s,a)をMDPの動的計画法で計算する。
(2)開始位置で、4つのロボットが収まっているロボット単位位置を特定し、Gaのロボット単位の要素として設定する。
(3)以下(4),(5)を全G内にロボットが充填されるまで繰り返す。
(4)GUがロボットで充填されていない場合、移動先隊列決定用動作計画処理Next_Formation_Decisionを実行する。充填されているならなにもしない。
(5)GUがロボットで充填されていない場合、各ロボット動作決定用動作計画処理のモード1を実行する。GUがロボットで充填されている場合、モード2を実行する。
以下、これらの処理を実行する構成について説明する。
図23は第一実施形態に係る行動制御システム100の機能ブロック図を、図24はその処理フローの例を示す。行動制御システム100は、図23に示すように、動作計画部110と、行動選択部120と、隣接状態判定部124と、位置更新部123と、位置判定部126と、記憶部140と、通信部150と、入力部160とを含む。行動選択部120は移動先隊列決定用動作計画部121と各制御対象物動作用動作計画部122とを含む。
以下では、制御の対象となる制御対象物が、ロボットである場合を例に挙げて説明する。もちろん、制御対象物は、制御の対象となり得るものであれば、ロボット以外であってもよい。
本実施形態では、行動制御システム100は、p台のロボットの行動を制御し、p台のロボットの内の1つのロボット上に実装される。なお、行動制御システム100が実装されていないp-1台のロボットについても、通信部150と、隣接状態判定部124とを含む。
<動作計画部110>
動作計画部110は、価値関数Q(s,a)の値を、動的計画法により、ロボットの任務行動開始前に事前に計算し(S110)、記憶部140に格納する。ここで、動作計画部110の計算は、一つのロボット単位を使用した強化学習(例:Q学習)に置き換えてもよい。なお、別装置で価値関数Q(s,a)を計算しておき、ロボットの任務行動開始前に事前に記憶部140に格納しておけば、行動制御システム100は、動作計画部110を備えなくともよい。
なお、価値関数Q(s,a)の計算については、[移動先隊列決定用動作計画のためのMDP状態空間]で説明した通りである。
<入力部160>
入力部160には、p台のロボットiのそれぞれの初期位置(Xr0[i],Xr0[i])及びp個の目標位置の集合G={(Xre[0],Yre[0]),(Xre[1],Yre[1]),…,(Xre[p-1],Yre[p-1])}が入力され、記憶部140に記憶される。
なお、目標位置は、所定の入口位置Peを含むとする。この入口位置Peについての情報も、入力部160から入力され、記憶部140に記憶されるとする。
<記憶部140>
記憶部140には、位置s及びa∈{0,1,2,3,4}の組み合わせのそれぞれについての価値関数Q(s,a)が記憶されているとする。sの取りうる範囲は、対象となる二次元平面上の領域内のロボット単位jが存在しうる全ての座標である。
各位置sの報酬r(s)についても、記憶部140に記憶されているとする。各位置sの報酬r(s)についての情報は、例えば入力部160から入力される。
<通信部150>
行動制御システム100が実装されているロボットも含め、全てのロボットは、通信部150を介して、二次元平面上の上下左右方向(以下「4方向」ともいう)において隣接する他のロボットと通信することができる。
<行動選択部120>
行動選択部120は、記憶部140から価値関数Qを取り出す。
行動選択部120は、上述の方法で説明した方法で、p台のロボットを制御する(s120)。
行動選択部120は、まず、p台のロボットの位置から4つのロボットが収まっているロボット単位位置を特定し、隊列Gaに含まれるロボット単位として設定する。なお、各ロボットの位置を必要とするが、各ロボットの位置の初期位置(Xr0[i],Xr0[i])については、前述の通り、入力部160を介して入力され記憶部140に記憶されているものを利用し、移動後の各ロボットの位置については、後述する位置判定部126で求め記憶部140に記憶されているものを利用すればよい。
行動選択部120は、位置判定部126で求め記憶部140に記憶されている各ロボットの位置と、目標隊列エリア単位GUとを照合し、目標隊列エリア単位GUが全てロボットで充填されているか否かを判定する(s120−1)。なお、目標隊列エリア単位GU及び入口位置単位PeUについては、記憶部140からp個の目標位置の集合G及び入口位置Peを取り出し、集合G及び入口位置Peから求めてもよいし、価値関数Q(s,a)を求める際に用いたものを用いてもよい。
充填されていない場合には、行動選択部120の移動先隊列決定用動作計画部121は、価値関数Q(s,a)を用いて、移動先隊列決定用動作計画処理Next_Formation_Decision(または、簡略化された移動先隊列決定用動作計画処理)を行い(s121)、開始位置の集合に配置されたp台のロボットを目標位置の集合に移動させる際に、頭部ロボット単位が移動の先頭を務めるように、頭部ロボット単位の位置を出力する。
充填されていない場合、さらに、行動選択部120の各制御対象物動作用動作計画部122は、頭部ロボット単位の位置を受け取り、各ロボット動作用動作計画のモード1を行い(s122−1)、頭部ロボット単位の位置に4台のロボットが位置するように、各ロボットに対して制御信号を送る。各ロボットは制御信号に従って行動する。
充填されている場合、行動選択部120の各制御対象物動作用動作計画部122は、各ロボット動作用動作計画のモード2を行い(s122−2)、目標エリア単位GUに属さず、目標エリアGに属す目標位置で、ロボットが存在していない位置に隣接するロボットを選択し、目標エリア単位GUに属さず、目標エリアGに属す目標位置の先端(そのロボット位置の最大2マス先の位置)にそのロボットが移動するように、各ロボットに対して制御信号を送る。各ロボットは制御信号に従って行動する。例えば、行動選択部120は、記憶部140に格納されている目標エリアGと目標エリア単位GUとを照合し、目標エリア単位GUに属さず、目標エリアGに属す目標位置を予め求めておき、移動後の各ロボットの位置から、目標エリア単位GUに属さず、目標エリアGに属す目標位置で、ロボットが存在していない位置に隣接するロボットを選択すればよい。
なお、一回の行動制御により、モード1では1回の移動先隊列決定用動作計画処理Next_Formation_Decisionで決定された頭部ロボット単位を充填する処理が行われ、モード2では、ロボットを、目標エリア単位GUに属さず、目標エリアGに属す目標位置の先端(最大2マス)まで移動させる処理が行われる。
移動先隊列決定用動作計画処理Next_Formation_Decision(または、簡略化された移動先隊列決定用動作計画処理)において行われる頭部決定処理Head_Robot_Decisionの中で用いられる行動方策Policy_Gにおいて、各ロボット単位の位置や障害物位置を必要とするが、各ロボット単位の位置ついては前述の通り、取得可能である。また、障害物の位置に関しては、価値関数Q(s,a)を学習する際に利用した障害物の位置を利用してもよいし、後述する隣接状態判定部124で判定した判定結果を用いて得られるものを利用してもよい。
<位置更新部123>
位置更新部123は、各i=0,1,…,p-1について、i番目のロボットの現在の位置(Xr[i],Yr[i])において、行動選択部120で決定した行動を実行した場合のロボットの移動後(行動後)の位置(Xr'[i],Yr'[i])を計算し、計算された(Xr'[i],Yr'[i])で記憶部140に格納されたi番目のロボットの位置を更新する(S125)。言い換えれば、位置更新部123は、行動選択部120で決定した行動に基づいて、ロボットが行動した場合に想定される位置(以下、「想定位置」ともいう)を計算し、ロボットの位置を更新し記憶部140に格納する。具体的には、図10のs8(位置の更新)を行う。
<隣接状態判定部124>
隣接状態判定部124は、ロボットの2次元平面上の上下左右の隣接する位置に、障害物または他のロボットが存在するか否かを判定し、(S121),判定結果を記憶部140に格納する。
なお、上述の通り、行動制御システム100が実装されていないp-1台のロボットについても、通信部150と、隣接状態判定部124とを含む。そのため、各ロボットiは隣接状態判定部124において、自身の上下左右方向に障害物または他のロボットがいるかどうかを判定し、通信部150を介して判定結果を行動制御システム100に出力することができる。行動制御システム100は、通信部150を介して各ロボットiから判定結果を受け取り、行動制御システム100に含まれる隣接状態判定部124の判定結果と一緒に記憶部140に格納する。なお、p台のロボットは、各ロボットの隣り合う位置(4方向)に必ず、他のロボットが存在し、隣り合うロボット同士がなす群れは、一塊なので、各ロボットiは通信部150を介してp-1個の判定結果を直接、または、他のロボットを介して、行動制御システム100に送信することができる。また、行動制御システム100は、通信部150を介して、直接、または、他のロボットを介して、各ロボットiに選択した行動を実行するように制御信号を送信することができる。また、他の情報もp台のロボット間で送受信可能となる。
なお、ロボットが移動するように制御したとしても、何らかのトラブル(感知できなかった障害物の存在や、機器の故障等)により、行動選択部120の制御通りに移動できるとは限らない。一方、動かなかったロボットの位置は、制御する前と変わらない。よって、少なくとも1台のロボットが動かないように制御することで、動かなかったロボットの位置を基準として、隣接状態判定部124による判定結果を用いて、移動するように制御されたロボットの、実際に行動した後の位置(以下「行動後位置」ともいう)(Xr"[i],Yr"[i])を求めることができる。また、GPS等の少なくとも一台のロボットがGPSを備えれば、そのロボットを基準として、同様に移動後位置を求めることができる。
<位置判定部126>
位置判定部126は、隣接状態判定部124の判定結果を用いて、行動後位置を求め、行動後位置(Xr"[i],Yr"[i])と想定位置(Xr'[i],Yr'[i])とが一致するか否かを判定する(S126)。なお、一致しない場合には、移動するように制御されたロボットが何らかのトラブルにより、制御通りに移動できなかったと考えられる。この場合、行動後位置(Xr"[i],Yr"[i])と想定位置(Xr'[i],Yr'[i])との少なくとも一方を補正すればよい。補正方法としては様々な手法が考えられる。例えば、移動した全てのロボットに対して、制御前の位置に戻るように指示し、行動後位置(Xr"[i],Yr"[i])を補正してもよいし、想定位置(Xr'[i],Yr'[i])を行動後位置(Xr"[i],Yr"[i])に合わせて補正してもよい。
各時刻ステップごとに、すべてのロボットがG内にあるかどうかを判定し(S127)、すべてのロボットがG内にあるときは、任務を終了する。そうでないときは、任務を継続する。
例えば、図示しない目標位置到達判定部において、各i=0,1,…,p-1について、位置判定部126から出力された行動後位置(Xr"[i],Yr"[i])∈Gであるか否かを判定し、全てのiについて(Xr"[i],Yr"[i])∈Gである場合には、任務を終了する。少なくとも1つ以上のiについて(Xr"[i],Yr"[i])∈Gを満たさない場合には、行動選択部120を再度実行するよう制御する。
以上に述べた処理s120〜s127を毎時刻ステップごとに行う。
<効果>
このような構成により、一つのロボット単位に必要な分だけのマルコフ状態空間を用意し、それを用いて動的計画法を利用して各位置でのロボット単位の行動方策を計算し、その行動方策を利用することで、ロボット群に任意の隊列形状と、任務環境内の任意の障害物形状に対応した障害物回避アルゴリズムを獲得でき、ロボット同士が接した状態を維持したうえでの多数ロボットのための隊列形成アルゴリズムを獲得することができる。すなわち、計算負荷がロボット数の階乗に比例せず、実時間で実行可能な低計画計算負荷での自己位置座標定義型隊列形成アルゴリズム獲得ができる。また、静止しているロボットに対する相対的な位置を判定することで、絶対的な位置を取得することができるため、付加的な位置計測用の装備を必要としない。または少なくとも一台のGPSを備えるロボットか、開始状態にて位置の定義されたロボットに対する相対的な位置を判定することで、絶対的な位置を取得することができるため、全てのロボットがGPS等を備えなくともよい。
また、ロボット単位で制御することで、ロボットの群れの中のいずれのロボットが一台欠けても、各ロボットはお互いに一つの辺で接しあう位置関係を崩さずに済む。ロボットの移動量の誤差による隊列崩れも起こりにくい。
<変形例>
本実施形態では、各格子(マス)は、正方形であるが、他の形状であってもよい。格子は左右方向及び上下方向に連続して配置される。また、各格子は左右方向で他の二つの格子と隣接し、上下方向で他の二つの格子と隣接する。言い換えると、各格子は、ロボットの移動できる方向と同じ方向においてのみ、他の格子と隣接する。この条件を満たせば、各格子はどのような形状であってもよい。また、「直交」とは、厳密に「垂直に交わること」を意味しなくともよく、例えば、図25のように、各格子は、菱形であってもよく、各格子が他の二つの格子と隣接する方向の一方を上下方向とし、他方を左右方向とすればよく、このとき、上下方向と左右方向とは直交するものとする。
別の言い方をすると、制御対象物は、二次元平面上の、第一方向(例えば右方向)、第一方向に対して平行でない方向である第二方向(例えば上方向)、第一方向に対して反対方向である第三方向(例えば左方向)、第二方向に対して反対方向である第四方向(例えば下方向)に移動可能であり、一回の行動制御により、現在いる領域(格子、マス)から、現在いる領域に対して、第一方向、第二方向、第三方向、第四方向において隣接する領域の何れかに移動するように制御される。また、この場合、ロボットの2次元平面上の、第一方向において隣接する位置を第一位置、第二方向において隣接する位置を第二位置、第三方向において隣接する位置を第三位置、第四方向において隣接する位置を第四位置、第一位置に第二方向において隣接する位置を第五位置、第二位置に第三方向において隣接する位置を第六位置、第三位置に第四方向において隣接する位置を第七位置、第四位置に第一方向において隣接する位置を第八位置と呼んでもよい。
本実施形態では、行動制御システム100が、p台のロボットの内の1つのロボット上に実装される例を示したが、コンピュータ上の制御対象物に対して行動制御を行ってもよい。その場合、意図的にトラブルを発生させない限り、制御した通りに制御対象物は移動するため、想定位置(Xr'[i],Yr'[i])と移動後位置(Xr"[i],Yr"[i])とが一致する。そのような状態で、各制御対象物i毎の理想的な行動計画を行ってもよい。その結果得られた任務を終了するまでの行動計画を実ロボットに実行させる。実ロボットは、通信部150と隣接状態判定部124を備え、各行動を終えた後に、隣接状態を判定し、判定結果を用いて、行動後位置を求め、行動後位置(Xr"[i],Yr"[i])と想定位置(Xr'[i],Yr'[i])とが一致するか否かを判定する。なお、一致しない場合には、移動するように制御されたロボットが何らかのトラブルにより、制御通りに移動できなかったと考えられる。その後の処理については第一実施形態と同様でもよいし、他の処理を行ってもよい。このような構成により、少なくとも制御通りに移動できなかったことを検知することができる。
本実施形態では、一回の行動制御に対して、一回の位置判定を行っているが、一回の行動制御において、複数のロボットを移動させる場合には、各ロボットが移動の度に位置判定を行う構成としてもよい。
本実施形態では、ロボット単位は、2×2の4台のロボットからなるが、M×N台のロボットからなってもよい。ただし、M及びNはそれぞれ2以上の整数の何れかである。なお、ロボットの台数pはロボット単位に含まれるロボットの台数M×N以上とする。このような状態で移動を行った場合にも、2×2のロボット単位のときと同様に、ロボットの群れの中のいずれのロボットが一台欠けても、各ロボットはお互いに一つの辺で接しあう位置関係を崩さずに済む。M×Nの台数を大きくすると、価値関数Q(s,a)の学習において、行動できるパターンが減るため、価値関数Q(s,a)の学習の計算量が減る。しかし、価値関数Q(s,a)の学習において、M×N個のマスを一つの単位とするマス単位の中に1つでも障害物が含まれる場合には、そのマス単位の状態sは障害物として扱うため、M×Nの台数を大きくすると、障害物の範囲が多くなり、行動できる範囲が小さくなる。そもそも一つのロボット単位に必要な分だけのマルコフ状態空間を用意し、それを用いて動的計画法を利用して各位置でのロボットの行動方策を計算すればよいため、従来技術に比べれば、十分に価値関数Q(s,a)の学習の計算量が減っている。そのため、行動できる範囲を大きく保つために2×2台のロボットを一つの単位とするロボット単位とすることが望ましい。
<第二実施形態>
第一実施形態との違いを中心に説明する。第一実施形態の制御方法を三次元空間に拡張する。本実施形態では、
(1)ロボット隊列を3次元化する。
(2)ボイドコントロールを並列処理化して隊列形成動作を高速化する。
(3)動作計画の計算量をO(n2)からO(n)に軽減する。
(4)頭部ロボット単位Dの選択方法を改良して、24個以上のロボット単位で構成される任意形状のロボット群への適用を保証する。
本実施形態では、多数のロボットの存在を考慮しつつも、計画計算に必要な計算時間をロボットの台数の一乗に比例するように抑え、また、他のロボットの面の上でのスライディング動作しかできないロボット同士が接したまま状態を維持しつつ任意の隊列から、別の任意の隊列へ障害物のある環境にて変形動作を行うことを可能とする。
また、本実施形態に拠れば、詳しくは後述するが、ロボットが変形を行う空間に含まれる格子数に比例した計算量で、ロボットの動作計画が可能であり、その動作計画の結果を利用することで、ロボット台数の2乗に比例した実行時間で、任意形状の障害物が存在する環境において、ロボットに任意の形状から任意の形状への変形をさせることが可能である。
[問題設定]
多数のロボットが協調して開始位置における隊列形成状態から、各ロボットが接した状態を維持しつつ移動を行い、目標位置での隊列形成を行う任務は、例えば図26に例示するような、互いに接する面同志をスライドさせて移動していくことが可能な立方体型のロボットの使用を想定する。図27に示すように、壁で区切られた部屋(ただし図中、壁を省略する)においての開始位置から目標位置まで複数のロボットの移動によって実現するものである。
ロボットについては、例えば図26に示すように、ロボットの周囲縦横高さ方向(以下「上下左右前後方向」ともいう)6マスのうち一つに他のロボットが存在している状態を維持しながら移動をするものとする。この手法では1つのロボット自身が、一台のロボットのサイズ分の距離を移動することで、一回の動作の移動量を正確に測ることができるというメリットがある。また、一つの面を共有する隣り合うロボットとの相対的な位置を計測しあうことで、ロボットの群れ全体の中での各ロボットの位置も容易に知ることができる。このため、ロボットの移動量の誤差によって、隊列が崩れるといった問題を起こしにくい。また、複数のロボットを連結したように、同時に複数のロボットを移動させていくことが可能である。
なお、ロボットは、隣の位置に他のロボットが存在しているか否か、障害物があるか否か、そして、自身が目標位置上にいるかどうかを知ることができるものとする。
任務を行うロボットは、p台(p≧192=24×8)であり、各ロボットは、隣接するロボットと一面以上を共有しつつ、三次元空間におけるX-Y-Z軸方向に移動可能とする。図26の各立方体は、それぞれのロボットの位置を示すものである。各立方体にはロボットは一台しか存在することができない。それぞれのロボットは、移動しようとする方向に障害物か他のロボットがある場合には、静止をするものと仮定する。なお、ロボットが存在しうる立方体状の空間をマス、または、格子ともいう。図27において、グレーに塗りつぶされたマスはロボットが存在する位置を示し、実線で囲まれた白抜きのマスは障害物が存在する位置を示す。図27Aのロボットが存在する位置はロボットの開始位置の集合を示し、図27Bのロボットが存在する位置はロボットの目標位置の集合を示す。目標位置の集合で表される領域を目標隊列エリアともいう。このように、各開始位置及び各目標位置は、それぞれ縦横高さ方向の少なくとも何れかの方向において他の開始位置及び目標位置と隣接し、ロボットの開始位置及び目標位置での隊列形状はそれぞれ一塊の任意の形状である。
[ロボットの座標設定]
それぞれのロボットi(iはロボット番号を表すi=0,1,2,3,,,p-1)の初期位置を(Xr0[i],Yr0[i],Zr0[i])とし、目標位置を(Xre[i],Yre[i],Zre[i])とするとき、本問題は、初期位置に配置されたロボットが、目標位置まで移動するための行動計画を求めることと定義できる。目標位置(Xre[i],Yre[i],Zre[i])の集合をGとする。
[任務空間の定義]
iをロボット番号としたとき、ロボットiの各状態(ロボットの位置と行動)は離散値で表現される。部屋をX,Y,Zの直交座標系からなる3次元空間で表すと、X軸、Y軸、Z軸をそれぞれ離散化表現した値により各位置を表現する。つまり、部屋(3次元空間)は格子で区切られ、各格子が各位置に対応する。また、各格子において、障害物の「ある/なし」が予め設定されている。
[ロボット動作の定義]
また、行動主体は部屋に配置されている各ロボットとなる。ロボットi(iはロボット番号)の行動aは、静止、縦横高さ方向への1格子分の移動、の計7種類のうちのいずれかを取る。例えば、a∈{0,1,2,3,4,5,6}として、
0: 静止
1: 三次元空間内でX軸正方向に1格子だけ移動する
2: 三次元空間内でY軸正方向に1格子だけ移動する
3: 三次元空間内でX軸負方向に1格子だけ移動する
4: 三次元空間内でY軸負方向に1格子だけ移動する
5: 三次元空間内でZ軸正方向に1格子だけ移動する
6: 三次元空間内でZ軸負方向に1格子だけ移動する
とする。
[探索計算上の問題点]
このような任務環境における状態空間は、ロボット数×3の次元数の状態を持ち、かつ選択可能な行動数は、ロボットの行動(=7通り)のロボット数乗だけ存在する。例えば、ロボット数が50で、部屋の縦横高さ方向の格子数がそれぞれ20であるとすれば状態数は20の150乗個にもなり、探索計算に要する資源の量は膨大なものとなる。さらにロボット数が1台増えるごとに、その状態数は8000倍増加していくことになる。本実施形態の[問題設定]の項で説明したように、ロボット同士が接しているという拘束条件を取り入れる場合、ロボットのお互いの移動を考慮したうえで探索計算行わなければならないために、根本的な計算量の削減は難しく、複数ロボットを使用する場合の大きな問題となっている。
[二つの動作計画の導入]
そこで、第一実施形態の場合と同様に二つの動作計画を導入する。本実施形態で必要とされる探索計算は、大きく二つにわけられる。ここでそのための準備として、ある隊列Gaをなしているロボットが、次になすべき隊列の形状としてGbを考える。隊列Gaと隊列Gbの間には、隊列Gaにて存在し、隊列Gbにて存在しない位置にあるロボットと、隊列Gbにて存在し隊列Gaにて存在しない位置にあるロボットがある。前者を尾部ロボットとし、後者を頭部ロボットとする。本実施形態では、ちょうど、頭部ロボット位置にあるロボットが、ロボット群の移動において先頭を務め、尾部ロボットが、移動の最後尾を務めるロボットになるように、隊列Gaと隊列Gbを定義する。
この定義の元、一つ目の探索計算は、隊列Gaをなすロボットの群が、障害物を回避しつつも、目標位置まで移動するためには、次の隊列Gbとしてどの隊列を選択すればよいかを決定するための(図28)動作計画計算(移動先隊列決定用動作計画)である。この探索計算は、事実上、頭部ロボット位置に移動するロボットとして、隊列Gaのどのロボットを選択するかと、隊列Gaにおける尾部ロボットを決定するための計算である。
二つ目の探索計算は、ロボットが互いに接した位置関係を維持しつつも、隊列Gaから隊列Gbへ変形する際の各ロボットの動作を決定するための動作計画計算(各ロボット動作用動作計画)である。これは、事実上、移動先隊列決定用動作計画により決定済みの頭部ロボット及び尾部ロボットに対し、尾部ロボットの位置からロボットを追い出し、隊列Gbにおける頭部ロボットの位置へロボットを誘導するための探索計算である。
本実施形態では、これらの探索計算を、目標位置の集合G内に一点の入口位置を設定し、その入口位置からの各ロボット位置の全体ロボット構造内でのマンハッタン距離を計算することで行う。
[ボイド制御]
上記二つの探索計算負荷の軽減のため、本実施形態においても、ボイド制御の考え方を導入する。まず、ここでいうボイドとは、あるロボットが別の位置に移動した後に、元いた位置にできる空隙のことである。こうした群ロボットの隊列形成問題においては、複数のロボットの動作に着目するがゆえに、その探索計算量が爆発してしまうが、視点を変えて、ボイドの動きに着目すれば、多数のロボットの動作計画の問題を単一のボイドの動作計画として考えることができ、探索計算負荷の軽減に適している。
まず、移動先群決定用動作計画において、ロボット群の移動の先頭を務める頭部ロボットの動作について考える。本実施形態では、目標位置の集合Gに一か所の入口位置Peを設けて、他の位置からは頭部ロボットがGに入ることはできないこととする。また、一度G内に入った全てのロボットは、二度とG外には出られないこととする。この条件のもと、G外にいる頭部ロボットが入口位置Peに至るまでのロボットの経路決定問題は、一台のロボットを入口位置Peまで誘導するための探索問題を解けばよく、得られた解を頭部ロボットの選択と誘導のために使用すればよい。目標位置の集合G内の頭部ロボットの動作については、ボイドの動きに着目して、ボイドの誘導について同様のことを行う。すなわち、目標位置の集合G内の頭部ロボットに望まれる動作とは、適切に頭部ロボットが入口位置Peから遠ざかり、目標位置の集合G内の各場所に散らばっていきつつ目標位置の集合Gを埋めていくことであるが、これをボイドの動きとしてみれば、ロボットが入口位置Peから、目標位置の集合G内に入るたびに、ボイドはそれに伴って、入口位置Peから目標位置の集合Gの外に出ていくのである。このとき、目標位置の集合G内のボイドは、すべて一点の入口位置Peに向かって移動していくのが理想的な動作である。つまり、目標位置の集合G内の頭部ロボットを目標位置の集合Gに適切に散らばるように誘導するためには、目標位置の集合G内に位置する各ボイドが入口位置Peに至るための経路を探索計算すればよく、そうして求められたボイドの動作を頭部ロボットを動かすことで実現するようにすればよい。この考え方ならば、すべてのロボットが、一点、入口位置Peを目指して動作するための動作計画を一回行えばよいので、計算負荷が劇的に少なくなる。
続いて、隊列Gaを維持しているロボット群が、隊列Gbに変形することを考える。このとき、ロボット群が隊列Gaから隊列Gbに変形する動作とは、頭部ロボットの位置にいた一つのボイドが、尾部ロボットの位置に移動していくプロセスとしてとらえることができる(図28及び図29参照)。このようなボイドの動作は、頭部ロボット位置をスタート位置とし、尾部ロボット位置をゴール位置とした、一つのボイドの動作計画によって計算可能であり、計算負荷も小さい。この計算において考慮すべきボイドの移動の拘束条件としては、ボイドが移動する際に、ロボットが存在する位置をたどっていくという制限を設けるだけでよい。
[8マスロボット単位の導入]
さらに、本実施形態では、図30に示すように、8つの田の字状に隣接したロボットを一つの単位とし(ロボット単位)、ロボットは、この田の字型のロボット単位を維持しつつ移動を行うとする。言い換えると、8台毎に1つのロボット単位を構成し、1つのロボット単位を構成する8台のロボットはそれぞれ3つの方向において1つのロボット単位を構成する他のロボットと隣接した状態を維持しつつ移動を行う。このロボット単位の集団は、互いにロボット単位ごとに一面を共有し、接しながら移動をするように制御される。
このような8つのロボットを一つの単位とした移動を行う理由としては、このような状態で移動を行う限り、各ロボット単位の中のいずれのロボットが一台のみ欠けても、各ロボット単位はお互いに一つの面で接しあう位置関係を崩さずに済むからである。すなわちこれは、隊列形態の維持を考量しなければならない各ロボット動作用動作計画において、ロボット同士の接続を考慮するための計算負荷を軽減することにつながるからである。各ロボット単位内のボイドが1つ以内であれば、全ロボット単位内にボイドが存在してもよいことになるので、一度に複数のボイドをロボット群の中に並列で存在させて、ロボットの隊列変形動作を高速化することも可能である。
先に述べた移動先隊列決定用動作計画は、8台のロボットによるロボット単位がなす群れの移動について行う。先に述べた頭部ロボット、尾部ロボットは、それぞれ8台のロボットで構成される頭部ロボット単位、尾部ロボット単位となる。各ロボット動作用動作計画は、頭部ロボット単位に含まれる8つのロボットの位置に、ロボットを誘導し、尾部ロボット単位の位置に含まれるロボットから、8つのロボットを追い払うための動作を探索計算する。
ここでは8台のロボットがなすロボット単位が一つのマスの単位(本実施形態では、以下、この単位を「マス単位」または「位置単位」ともいう)であるとし、一つのマス単位を一状態として状態空間を組む。ロボット単位の位置を(Xr_unit[j],Yr_unit[j], Zr_unit[j])(j=0,1,2,…j_max-1)としたとき、そのロボット単位jに所属するロボットをi1,i2,i3,i4,i5,i6,i7,i8とすれば、
Xri1 = 2 x Xr_unit[j]
Yri1 = 2 x Yr_unit[j]
Zri1 = 2 x Zr_unit[j]
Xri2 = 2 x Xr_unit[j] + 1
Yri2 = 2 x Yr_unit[j]
Zri2 = 2 x Zr_unit[j]
Xri3 = 2 x Xr_unit[j]
Yri3 = 2 x Yr_unit[j] + 1
Zri3 = 2 x Zr_unit[j]
Xri4 = 2 x Xr_unit[j] + 1
Yri4 = 2 x Yr_unit[j] + 1
Zri4 = 2 x Zr_unit[j]
Xri5 = 2 x Xr_unit[j]
Yri5 = 2 x Yr_unit[j]
Zri5 = 2 x Zr_unit[j] + 1
Xri6 = 2 x Xr_unit[j] + 1
Yri6 = 2 x Yr_unit[j]
Zri6 = 2 x Zr_unit[j] + 1
Xri7 = 2 x Xr_unit[j]
Yri7 = 2 x Yr_unit[j] + 1
Zri7 = 2 x Zr_unit[j] + 1
Xri8 = 2 x Xr_unit[j] + 1
Yri8 = 2 x Yr_unit[j] + 1
Zri8 = 2 x Zr_unit[j] + 1
である。
頭部ロボット単位決定用の開始位置の集合をSU、目標位置の集合をGUとする。開始位置の集合SU,目標位置の集合GUは、ロボット単位と同様に8つのロボット位置が一単位となったマスで構成される。GU内には一つの入口位置単位PeUが設けられ、各ロボットは、PeU内の位置を経由してGU内に入る。なお、移動先隊列決定用動作計画にて使用するロボット単位の総数は、開始位置の集合SU及び目標位置の集合GU内のロボット単位の数と同じでなければならない。よって、ロボットの全体数pを8の倍数とし、開始位置の集合SU及び目標位置の集合GUにおいて、全てのロボット単位は8台のロボットが充填され、端数のロボットは生じないものとする。また目標位置の集合GU及び開始位置の集合SUはそれぞれR個の位置単位からなる一塊の任意の形状を成す。
[移動先隊列決定用動作計画]
本実施形態では、ロボットが動作を開始する前にあらかじめ、2つの動作計画のために使用する任務空間内の各位置単位の入口位置単位PeUからのマンハッタン距離の計算を行う。そのために、まず、任務空間内の各位置単位(X,Y,Z)にて、入口位置単位PeUからの各位置単位へのマンハッタン距離δ[X][Y][Z]を以下の計算手続きで求める。なお、以下において、説明を簡単にするため「位置単位」を単に「位置」ともいい、「入口位置単位PeU」を単に「入口位置Pe」ともいう。
[マンハッタン距離δの計算]
(1)各位置(X,Y,Z)において、next[a][X][Y][Z]を用意し、隣接する行動aの方向に障害物があるか、もしくは位置(X,Y,Z)が入口位置Pe以外の目標位置の集合GU内の位置の場合に、隣接する行動aの方向の位置が目標位置の集合GUの外であるか、もしくは位置(X,Y,Z)が目標位置の集合GU外の場合に、隣接する行動aの方向の位置が入口位置Pe以外の目標位置の集合GU内の位置である場合には、next[a][X][Y][Z]←0とし、それ以外の場合はnext[a][X][Y][Z]←1とする。すなわち、next[a][X][Y][Z]=0は位置(X,Y,Z)において行動aを実行できないことを、next[a][X][Y][Z]=1は位置(X,Y,Z)において行動aを実行できることを意味する。
(2)状態空間内の各位置(X,Y,Z)のマンハッタン距離δ[X][Y][Z]を状態空間内の格子数より大きな値s_maxに初期化する。
(3)入口位置Peのマンハッタン距離δを0に初期化する。
(4)入口位置Pe以外の、各位置(X,Y,Z)の全行動aについて、next[a][X][Y][Z]の値が0ではない場合の、行動aによって位置(X,Y,Z)から移動した先の位置(X’,Y’,Z’)でのマンハッタン距離δ[X’][Y’][Z’]を調べ、その最小値に1を加えた値が、現在のδ[X][Y][Z]よりも小さい場合は、その値をδ[X][Y][Z]に代入する。
(5)上述の(4)の処理にて、δ[X][Y][Z]値の更新がなくなるまで、(4)を繰り返す。
以上の処理で計算したマンハッタン距離δ[X][Y][Z]を使用し、続いて開始位置の集合SUと目標位置の集合GUをつなぐパスPを決定する。パスPの決定は以下の処理によってなされる。パスPをなす位置をp[ip](ip=0,1,2,3…)とする。
[パスPの決定]
(1)開始位置の集合SU内にて、最もマンハッタン距離δ[X][Y][Z]値の小さな位置をPsとする。
(2)位置Psに隣接し、位置Psにおけるマンハッタン距離δよりも1だけ小さなマンハッタン距離δを持つ開始位置の集合SUの外の位置をパスPの始点p[0]とする。
(3)ip←0とする。
(4)位置p[ip]に隣接する位置の中で、位置p[ip]におけるマンハッタン距離δよりも1だけ小さなマンハッタン距離δを持つ位置をp[ip+1]とする。もし、p[ip+1]が入口位置Peに一致しないならば、ipをインクリメントし、(4)を繰りかえす。一致する場合は(5)へ移行する。
(5)目標位置の集合GU及びパスPの何れにも含まれない全ての位置のマンハッタン距離δをs_maxに再設定する。
(6)開始位置の集合SU内の全ての位置(X,Y,Z)の全行動aについて、next[a][X][Y][Z]の値が0ではない場合の、行動aによって位置(X,Y,Z)から移動した先の位置(X’,Y’,Z’)でのマンハッタン距離δ[X’][Y’][Z’]を調べ、その最小値に1を加えた値が、現在のδ[X][Y][Z]よりも小さい場合は、その値をδ[X][Y][Z]に代入する。
(7)上述の(6)の処理にて、δ[X][Y][Z]値の更新がなくなるまで、(6)を繰り返す。
(8)目標位置の集合GU内の全ての点のマンハッタン距離δの符号を負にする。この処理により、目標位置の集合GU内では、入口位置Peより離れるほどマンハッタン距離δが小さくなる。
以上の処理で計算されたマンハッタン距離δは、SU+P+GUの中のみでのロボットの移動を考慮したマンハッタン距離の値となる。マンハッタン距離δを使用して、ある隊列Gaをなすロボット単位の群が、つぎに移動すべき隊列Gbの頭部ロボットを決定する方法は以下のとおりである。本処理を、頭部決定処理Head_Robot_Decisionとする。。なお、以上の処理で計算されたマンハッタン距離δが第一実施形態の価値関数に相当し、ロボット単位がそのロボット単位の現在の位置単位において各行動を取ったときの適切さを表す。具体的には、マンハッタン距離δが小さくなる方向に移動するようにロボット単位を制御する。よって、第一実施形態の価値関数に相当する価値関数(ロボット単位がそのロボット単位の現在の位置単位において各行動を取ったときの適切さを表す1個の価値関数)が、ある位置単位から入口位置単位までのマンハッタン距離を用いて得られると言える。
[Head_Robot_Decision]
(1)各ロボット単位の位置(Xr_unit[j],Yr_unit[j],Zr_unit[j])において、位置(Xr_unit[j],Yr_unit[j],Zr_unit[j])に隣接し、かつロボットが存在しておらず、かつパスP及び目標位置の集合GUの何れかに属する位置の中で、マンハッタン距離δ[Xr_unit[j]][Yr_unit[j]][Zr_unit[j]]の値より1小さい、マンハッタン距離δをもつ位置を求め、その位置のマンハッタン距離δをδ_neighbor_max[Xr_unit[j]][Yr_unit[j]][Zr_unit[j]]とする。
(2)全ロボット単位中で最大のδ_neighbor_max[Xr_unit[j]][Yr_unit[j]][Zr_unit[j]]の値を持つロボット単位H(なお、ロボット単位Hの位置を(Xrh,Yrh,Zrh)とする)を選択し、ロボット単位Hに隣接し、かつロボットが存在しておらず、かつパスP及び目標位置の集合GUの何れかに属する位置の中で、マンハッタン距離δがロボット単位Hのそれより1小さいマンハッタン距離δをもつ位置を頭部ロボット単位Dの位置とする。ロボット単位Hから頭部ロボット単位Dの位置に向かう行動の方向をa_headとする。
以上の処理では、目標位置の集合GU外にしかロボット単位が存在しないときに、ロボットの群れがパスPを通して入口位置Peに近づいていくか、もしくは、目標位置の集合GU内にロボット単位が存在するときには、入口位置Peに近い位置から優先的にロボットを埋めていけるように、頭部ロボット単位Dを選択している。
続いて、尾部ロボット単位位置を決定するための手法Tail_Robot_Decisionを述べる。
[Tail_Robot_Decision]
(1)各ロボット単位位置(Xr_unit[j],Yr_unit[j],Zr_unit[j])において、
δ'[Xr_unit[j]][Yr_unit[j]][Zr_unit[j]]
=δ[Xr_unit[j]][Yr_unit[j]][Zr_unit[j]]-δ[Xrh][Yrh][Zrh]
を計算する。
(2)各ロボット単位位置(Xr_unit[j],Yr_unit[j],Zr_unit[j])において、隣接する全てのロボット単位N(なお、ロボット単位Nの位置を(Xrn,Yrn,Zrn)とする)について、δ'[Xr_unit[j]][Yr_unit[j]][Zr_unit[j]]≧δ'[Xrn][Yrn][Zrn]を満たし、かつ、δ'[Xr_unit[j]][Yr_unit[j]][Zr_unit[j]]≧3であるロボット単位の何れか一つを尾部ロボット単位Tとして選択する。つまり、尾部ロボット単位Tは、隣接する全てのロボット単位N以上にロボット単位Hから離れており、かつ、ロボット単位Hから3マス単位以上離れている(ロボット単位Hと尾部ロボット単位Tとのマンハッタン距離が3マス単位以上離れている)。
以上の処理では、隊列Gaより取り払ったとしても、隊列Gaの連続性を失わないロボット単位を尾部ロボット単位として設定している。
以上の処理をまとめて、以下のように、移動先隊列決定用動作計画処理(Next_Formation_Decision)が行われる。
(1)頭部決定処理Head_Robot_Decisionを行う。
(2)尾部ロボット決定処理Tail_robot_Decisionを行う。
(3)上述の(2)にて特定した尾部ロボット単位Tを、現在の隊列Gaから削除し、隊列Gaに頭部ロボット単位Dを追加し、隊列Gbとする。
[各ロボット動作決定用動作計画]
移動先隊列決定用動作計画において頭部ロボット単位Dと尾部ロボット単位Tが決定され、次の隊列Gbが決定されたので、現隊列Gaから次隊列Gbへの変形を各ロボットの移動によって実現するための探索計算を各ロボット動作決定用動作計画にて行う。
本実施形態では、8つのロボットを組にしたロボット単位を維持しつつロボット群が移動を行うようにしているので、ボイド制御を行う際の、各ロボットの接続維持を考える際には、尾部ロボット単位Tと頭部ロボット単位D付近でのボイドの動きにさえ気を配れば、それ以外は、ボイドが各ロボット単位内に1つ以内であるようにすればよい。
以下、各ロボット動作決定用動作計画の動作について述べる。ロボット動作決定用動作計画においては、ロボット単位Hから頭部ロボット単位Dへロボット単位を移動させるたびに、8つのボイドが発生するので、まずは、それら発生した各々のボイドについてそのボイドがロボット単位Hから尾部ロボット単位Tまでたどるべき経路を計算する。
まず、ロボット単位Hに所属するロボットのうち、頭部ロボット単位Dに接した位置にある4つのロボットをロボットi_move_11,i_move_21,i_move_31,i_move_41とし、ロボットi_move_11,i_move_21,i_move_31,i_move_41と行動a_headの移動方向の逆方向に接しているロボットをそれぞれ、ロボットi_move_12,i_move_22, i_move_32,i_move_42と順序付けする。
ロボット単位Hから頭部ロボット単位Dへの移動においては、ロボット単位H内のロボットi_move_r1(rは1,2,3,4の何れか)とロボットi_move_r2がペアとなって、a_head方向にスライドすることで、ロボットが移動する。そのため、ロボット単位H内にて発生するボイドの位置は、かならずロボットi_move_12,i_move_22, i_move_32,i_move_42のいずれかとなる。ロボットが開始位置の集合SUから目標位置の集合GUへの隊列形成動作を開始してからの発生ボイドの通し番号をiv(=0,1,2,3…)で管理し、フル充填されたロボット単位Hから頭部ロボット単位Dへのロボットの移動が開始されたときに、それまでに発生しているボイドの数をiv_prevとすれば、iv_prevは、(8の倍数-1)である。ロボット単位Hから頭部ロボット単位Dへの移動で発生するボイドをvoid[iv_prev+k](k=1,2,3,4,5,6,7,8)とする。各ボイドの軌道を( void_trj_x[iv_prev+k][t], void_trj_y[iv_prev+k][t] , void_trj_z[iv_prev+k][t] ) (t=0,1,2,3…)で表現する。
各ボイドの軌道計算処理(Void_Trajectory_Decision)は、以下の手順で行われる。
[Void_Trajectory_Decision]
(1)各ボイドの発生位置を以下のようにする。
void[iv_prev+1]、void[iv_prev+2]の発生位置→ロボットi_move_12の位置
void[iv_prev+3]、void[iv_prev+4]の発生位置→ロボットi_move_22の位置
void[iv_prev+5]、void[iv_prev+6]の発生位置→ロボットi_move_32の位置
void[iv_prev+7]、void[iv_prev+8]の発生位置→ロボットi_move_42の位置
(2)各ボイドの発生位置を各ボイドの軌道の終点void_end[iv_prev]とする。
(3)上述の(1)で発生位置を設定した8つのボイドがロボット単位Hの位置から尾部ロボット単位Tの位置までたどるべき位置単位の道筋を(void_unit_trj_x[tu], void_unit_trj_y[tu], void_unit_trj_z[tu]) (tu=0,1,2,3…)とし、後述するVoid_Unit_Trajectory_Decisionにて(void_unit_trj_x[tu], void_unit_trj_y[tu], void_unit_trj_z[tu])を決定する。tuの値は、Tから近い方の道筋上の点で0としてHに近づくにつれて大きくなるようにボイドの動きと逆向きに設定する。
(4)(void_unit_trj_x[1], void_unit_trj_y[1], void_unit_trj_z[1])をT'、 (void_unit_trj_x[2], void_unit_trj_y[2], void_unit_trj_z[2])をT"とする。T'は尾部ロボット単位Tに隣接するロボット単位であり、T"はロボット単位T'に隣接するロボット単位である。
(5)ロボット単位T'内にあり、尾部ロボット単位T内の位置に接しない位置にある4つのロボットをロボットi_tail_0,i_tail_1,i_tail_2,i_tail_3とし、各ボイドの目標位置を以下のように設定する。
void[iv_prev+1]、void[iv_prev+2]の目標位置→ロボットi_tail_0の位置
void[iv_prev+3]、void[iv_prev+4]の目標位置→ロボットi_tail_1の位置
void[iv_prev+5]、void[iv_prev+6]の目標位置→ロボットi_tail_2の位置
void[iv_prev+7]、void[iv_prev+8]の目標位置→ロボットi_tail_3の位置
(6)ロボット単位T"内における各ボイドの発生位置と同じ位置(ロボット単位Hをロボット単位T"の位置に平行移動させた場合のロボット単位H内の各ボイドの発生位置)から、ロボット単位T'内の各ボイド目標位置までの軌道( void_trj_x[iv_prev+k][t], void_trj_y[iv_prev+k][t] , void_trj_z[iv_prev+k][t] )を後述するVoid_Local_Trajectroy_Decisionで決定する。tの値は、ロボット単位T'内の目標位置で0としてロボット単位T"内各ボイド発生位置に近づくにつれて大きくなるようにボイドの動きと逆向きに設定する。
(7)上述の(6)で決定された軌道( void_trj_x[iv_prev+k][t], void_trj_y[iv_prev+k][t] , void_trj_z[iv_prev+k][t] )の終点(t=tsとする。)から、ロボット単位Hの位置内のボイド発生位置に至る軌道を(8)以下の処理で設定する。
(8)it←2とする。
(9)(void_unit_trj_x[2+it/2-1], void_unit_trj_y[2+it/2-1], void_unit_trj_z[2+it/2-1])がロボット単位Hの位置に一致していないならば、(void_unit_trj_x[2+(it)/2-1], void_unit_trj_y[2+(it)/2-1], void_unit_trj_z[2+(it)/2-1])から(void_unit_trj_x[2+it/2], void_unit_trj_y[2+it/2], void_unit_trj_z[2+it/2])へ移動する方向に、( void_trj_x[iv_prev+k][ts+it-2], void_trj_y[iv_prev+k][ts+it-2] , void_trj_z[iv_prev+k][ts+it-2] )から1ステップ移動した位置を( void_trj_x[iv_prev+k][ts+it-1], void_trj_y[iv_prev+k][t+it-1] , void_trj_z[iv_prev+k][t+it-1] )とし、2ステップ移動した位置を( void_trj_x[iv_prev+k][ts+it], void_trj_y[iv_prev+k][ts+it] , void_trj_z[iv_prev+k][ts+it] )とし、itを2回インクリメントする。(void_unit_trj_x[2+it/2-1], void_unit_trj_y[2+it/2-1], void_unit_trj_z[2+it/2-1])がロボット単位Hの位置に一致するまで(9)を繰り返す。(void_unit_trj_x[2+it/2-1], void_unit_trj_y[2+it/2-1], void_unit_trj_z[2+it/2-1])がロボット単位Hの位置に一致しているならば、軌道内点数trj_num[iv_prev+k]←ts+it-2として終了する。
[Void_Local_Trajectroy_Decision]
Void_Local_Trajectroy_Decisionの処理は、以下のとおりである。まず、ロボットが動作を開始する前に、あらかじめ、以下の6つの位置関係にある尾部ロボット単位T及びロボット単位T'において、ロボット単位T'に5通りのロボット単位T"[kt](kt=1,2,3,4,5)が接しているとして、ロボット単位T'内の尾部ロボット単位Tに接しない位置とロボット単位T"の全ての位置について、ロボット単位T'内の尾部ロボット単位Tに接しない4つの位置からのマンハッタン距離δlocal[vs][al](X,Y,Z)(vs=0,1,2,3。 al=1,2,3,4,5,6)を全て計算する。ここでは、ロボット単位ではなく、ロボットのマンハッタン距離を求める。なお、alはロボット単位Tの位置からロボット単位T'の位置に向かう6つの方向の行動であり、vsはロボット単位T'内の尾部ロボット単位Tに接しない4つのロボット(その位置)のインデックスである。
(1)al=1, T=(0,0,0), T'=(1,0,0), T"[1]=(1,1,0), T"[2]=(1,-1,0) , T"[3]=(2,0,0), T"[4]=(1,0,1), T"[5]=(1,0,-1)
(2)al=2, T=(0,0,0), T'=(0,1,0) , T"[1]=(1,1,0), T"[2]=(-1,1,0) ,T"[3]=(0,2,0), T"[4]=(0,1,1), T"[5]=(0,1,-1)
(3)al=3, T=(0,0,0),T'=(-1,0,0) ,T"[1]=(-1,1,0), T"[2]=(-1,-1,0) , T"[3]=(-2,0,0), T"[4]=(-1,0,1), T"[5]=(-1,0,-1)
(4)al=4, T=(0,0,0),T'=(0,-1,0) ,T"[1]=(1,-1,0), T"[2]=(-1,-1,0) , T"[3]=(0,-2,0), T"[4]=(0,-1,1), T"[5]=(0,-1,-1)
(5)al=5, T=(0,0,0),T'=(0,0,1) ,T"[1]=(0,1,1), T"[2]=(0,-1,1) , T"[3]=(0,0,2), T"[4]=(1,0,1), T"[5]=(-1,0,1)
(6)al=6, T=(0,0,0),T'=(0,0,-1) ,T"[1]=(0,1,-1), T"[2]=(0,-1,-1) , T"[3]=(0,0,-2), T"[4]=(1,0,-1), T"[5]=(-1,0,-1)
以下、δlocal[vs][al](X,Y,Z)の計算方法を示す。
[Calculate_delta_local]
(1)ロボット単位T'内の尾部ロボット単位Tに接しない位置とロボット単位T"の全ての位置(X,Y,Z)において、next_local[al][a][X][Y][Z]を用意し、位置(X,Y,Z)に隣接するロボット単位T'内の尾部ロボット単位Tに接しない位置か、ロボット単位T"内の位置があるならば、next_local[al][a][X][Y][Z]←1とし、それ以外の場合はnext_local[al][a][X][Y][Z]←0とする。
(2)ロボット単位T'内の尾部ロボット単位Tに接しない位置とロボット単位T"の全ての位置(X,Y,Z)について、各位置(X,Y,Z)のδlocal[vs][al](X,Y,Z)値を44(T'内4つ、T"内8x5つの位置の数)より大きな値s_maxに初期化する。
(3)各vs,alについて、以下の位置を目標位置target_local[vs][al]とし、目標位置でのマンハッタン距離δlocal[vs][al] (24通り)を0に初期化する。
target_local[0][1]=(3,0,0)
target_local[1][1]=(3,0,1)
target_local[2][1]=(3,1,0)
target_local[3][1]=(3,1,1)
target_local[0][2]=(0,3,0)
target_local[1][2]=(0,3,1)
target_local[2][2]=(1,3,0)
target_local[3][2]=(1,3,1)
target_local[0][3]=(-2,0,0)
target_local[1][3]=(-2,0,1)
target_local[2][3]=(-2,1,0)
target_local[3][3]=(-2,1,1)
target_local[0][4]=(0,-2,0)
target_local[1][4]=(0,-2,1)
target_local[2][4]=(1,-2,0)
target_local[3][4]=(1,-2,1)
target_local[0][5]=(0,0,3)
target_local[1][5]=(0,1,3)
target_local[2][5]=(1,0,3)
target_local[3][5]=(1,1,3)
target_local[0][6]=(0,0,-2)
target_local[1][6]=(0,1,-2)
target_local[2][6]=(1,0,-2)
target_local[3][6]=(1,1,-2)
(4)目標位置target_local[vs][al]以外の、各位置(X,Y,Z)の全行動aについて、next_local[al][a][X][Y][Z]の値が0ではない場合の、δlocal[vs][al](X,Y,Z)の値を調べ、その最小値に1を加えた値が、現在のδlocal[vs][al](X,Y,Z)よりも小さい場合は、その値をδlocal[vs][al](X,Y,Z)に代入する。δlocal[vs][al](X,Y,Z)値の更新がなくなるまで、(4)を繰り返す。
Void_Local_Trajectory_Decisionの処理は以下のとおりである。
[Void_Local_Trajectroy_Decision]
(1)ロボット単位T'の位置を(XT',YT',ZT')、ロボット単位T"の位置を(XT",YT",ZT")として、T->T’に向かう方向の行動をal値とする。。i_tail_0の位置をtarget_local[0][al](vs=0とする), i_tail_1の位置をtarget_local[1][al] (vs=1とする), i_tail_2の位置をtarget_local[2][al] (vs=2とする), i_tail_3の位置をtarget_local[3][al] (vs=3とする)とする。
(2)各ボイドvoid[iv_prev+k]の発生位置を(xv[iv_prev+k],yv[iv_prev+k],zv[iv_prev+k])として、ロボット単位T"内の位置vt"を以下のように計算する。
ロボット単位T'からロボット単位T"への移動量ベクトルの値を(Xdt,Ydt,Zdt)= (XT",YT",ZT")-(XT',YT',ZT')として、
If al=1,
vt"←(xv[iv_prev+k]-xrh*2+2+Xdt*2, yv[iv_prev+k]-yrh*2+Ydt*2, zv[iv_prev+k]-zrh*2+Zdt*2)
If al=2,
vt"←(xv[iv_prev+k]-xrh*2+Xdt*2, yv[iv_prev+k]-yrh*2+2+Ydt*2, zv[iv_prev+k]-zrh*2+Zdt*2)
If al=3,
vt"←(xv[iv_prev+k]-xrh*2-2+Xdt*2, yv[iv_prev+k]-yrh*2+Ydt*2, zv[iv_prev+k]-zrh*2+Zdt*2)
If al=4,
vt"←(xv[iv_prev+k]-xrh*2+Xdt*2, yv[iv_prev+k]-yrh*2-2+Ydt*2, zv[iv_prev+k]-zrh*2+Zdt*2)
If al=5,
vt"←(xv[iv_prev+k]-xrh*2+Xdt*2, yv[iv_prev+k]-yrh*2+Ydt*2, zv[iv_prev+k]-zrh*2+2+Zdt*2)
If al=6,
vt"←(xv[iv_prev+k]-xrh*2+Xdt*2, yv[iv_prev+k]-yrh*2+Ydt*2, zv[iv_prev+k]-zrh*2-2+Zdt*2)
(3)tl←0とし、vt"の位置を(void_local_x[iv_prev+k][tl], void_local_y[iv_prev+k][tl], void_local_z[iv_prev+k][tl])とする。
(4)位置(void_local_x[iv_prev+k][tl], void_local_y[iv_prev+k][tl], void_local_z[iv_prev+k][tl])が、target_local[vs][al]に一致しないとき、
位置(void_local_x[iv_prev+k][tl], void_local_y[iv_prev+k][tl], void_local_z[iv_prev+k][tl])に隣接し、δlocal[vs][al]の値が(void_local_x[iv_prev+k][tl], void_local_y[iv_prev+k][tl], void_local_z[iv_prev+k][tl])の位置のδlocal[vs][al]の値より小さい位置を(void_local_x[iv_prev+k][tl+1], void_local_y[iv_prev+k][tl+1], void_local_z[iv_prev+k][tl+1])とし、tlをインクリメントする。(void_local_x[iv_prev+k][tl], void_local_y[iv_prev+k][tl], void_local_z[iv_prev+k][tl])が、target_local[vs][al]に一致するまで(4)を繰り返す。位置(void_local_x[iv_prev+k][tl], void_local_y[iv_prev+k][tl], void_local_z[iv_prev+k][tl])が、target_local[vs][al]に一致するとき、(5)へ移行する。
(5)( void_trj_x[iv_prev+k][t], void_trj_y[iv_prev+k][t] , void_trj_z[iv_prev+k][t] )← (void_local_x[iv_prev+k][tl-t], void_local_y[iv_prev+k][tl-t], void_local_z[iv_prev+k][tl-t])とし、ts←tlとする。
Void_Unit_Trajectory_Decisionの処理は以下のとおりである。
[Void_Unit_Trajectory_Decision]
(1)尾部ロボット単位Tの位置を(void_unit_trj_x[0], void_unit_trj_y[0], void_unit_trj_z[0])とする。tu←1とし、尾部ロボット単位Tよりも小さなマンハッタン距離δを持つ隣接のロボット単位の位置を(void_unit_trj_x[tu], void_unit_trj_y[tu], void_unit_trj_z[tu])とする。
(2)もし、(void_unit_trj_x[tu], void_unit_trj_y[tu], void_unit_trj_z[tu])が入口位置Peでもロボット単位Hでなければ、tuをインクリメントし、位置(void_unit_trj_x[tu-1], void_unit_trj_y[tu-1], void_unit_trj_z[tu-1])にあるロボット単位よりも小さなマンハッタン距離δを持つ隣接のロボット単位の位置を(void_unit_trj_x[tu], void_unit_trj_y[tu], void_unit_trj_z[tu])とする。(void_unit_trj_x[tu], void_unit_trj_y[tu], void_unit_trj_z[tu])が入口位置Peまたはロボット単位Hの位置になるまで(2)を繰り返す。
もし、(void_unit_trj_x[tu], void_unit_trj_y[tu], void_unit_trj_z[tu])が入口位置Pe(Hでなく)の場合は、(3)へ移行する。
もし、(void_unit_trj_x[tu], void_unit_trj_y[tu], void_unit_trj_z[tu])がロボット単位Hの位置の場合は、Void_Unit_Trajectory_Decisionを終了する。
(3)ロボット単位Hの位置を(void_unit_trj_rev_x[0], void_unit_trj_rev_y[0], void_unit_trj_rev_z[0])とする。tr←1とし、ロボット単位Hよりも大きなマンハッタン距離δを持つ隣接のロボット単位の位置を(void_unit_trj_rev_x[tr], void_unit_trj_rev_y[tr], void_unit_trj_rev_z[tr])とする。
(4)もし、(void_unit_trj_rev_x[tr], void_unit_trj_rev_y[tr], void_unit_trj_rev_z[tr])が入口位置Peでなければ、trをインクリメントし、位置(void_unit_trj_rev_x[tr-1], void_unit_trj_rev_y[tr-1], void_unit_trj_rev_z[tr-1]) にあるロボット単位よりも大きなマンハッタン距離δを持つ隣接のロボット単位の位置を(void_unit_trj_rev_x[tr], void_unit_trj_rev_y[tr], void_unit_trj_rev_z[tr])とする。(void_unit_trj_rev_x[tr], void_unit_trj_rev_y[tr], void_unit_trj_rev_z[tr])が入口位置Peになるまで(4)を繰り返す。
もし、(void_unit_trj_rev_x[tr], void_unit_trj_rev_y[tr], void_unit_trj_rev_z[tr])が入口位置Peの場合は、(5)へ移行する。
(5)it=1,,,trとして、(void_unit_trj_x[tu+it], void_unit_trj_y[tu+it], void_unit_trj_z[tu+it])←(void_unit_trj_rev_x[tr-it], void_unit_trj_rev_y[tr-it], void_unit_trj_rev_z[tr-it])とする。
[ボイド移動制御]
以下、上記の各ロボット動作決定用動作計画を使用して、ボイドをロボット単位Hの位置から尾部ロボット単位Tの位置に移動させる制御方法を示す。図31に示すように、ロボット単位H内の頭部ロボット単位Dに接する位置のロボットと、ロボット単位T'内の尾部ロボット単位Tに接する位置にあるロボット位置に空白が生じないように、ロボット単位Hでのボイド発生と尾部ロボット単位Tでのボイド追い出しをしていることで、ロボット群全体の接続は保たれている。ロボット単位Hとロボット単位T'が直接、接しないように、尾部ロボット単位Tの選択アルゴリズムにおいて、尾部ロボット単位Tの位置のδ'(ロボット単位Hと尾部ロボット単位Tとのマンハッタン距離)が3以上という条件を設定している。本制御方法で、各ロボット単位内において、ボイドが一つ以内に収まるように制御されている。
以下を目標位置の集合GUが満たされるまで、繰り返す。
[Void_Control]
(1)Void_Trajectory_Decisionを実行する。trj_cnt[iv_prev+1],,, trj_cnt[iv_prev+8],を-1にする。iv_prevの値を8回インクリメントする。
(2)以下をvoid[iv_prev]がロボット単位Hの外に出るまで繰り返す。
発生番号の大きいもの(iv=iv_prev)から以下の処理をする。
(2-i)trj_cnt[iv]=-10のとき→void[iv]について何もしない。
(2-ii)trj_cnt[iv]< trj_num[iv] && trj_cnt[iv]>=0のとき→
i= trj_cnt[iv]からtrj_num[iv]まで以下を行う:
位置nv(void_trj_x[trj_num[iv]-i-1],void_trj_y[trj_num[iv]-i-1], void_trj_z[trj_num[iv]-i-1])が含まれるロボット単位Nvに他のvoidがないこと、自分より番号の小さいvoidが、すべてロボット単位Nvよりもマンハッタン距離δの大きいロボット単位に所属していることを確認する。確認できたなら、nvの位置にあるロボットを位置(void_trj_x[trj_num[iv]-i],void_trj_y[trj_num[iv]-i],void_trj_z[trj_num[iv]-i])に移動させる。
trj_cnt[iv]をインクリメントし、確認できなくなるまで処理を繰り返し、確認できないならなにもせず、ループ終了する。
(2-iii)trj_cnt[iv]=trj_num[iv]のとき→
現在のvoid[iv]の位置から、alの方向の逆方向に隣接していて、たどれるロボットを全て、al方向に1ステップ移動させて、trj_cnt[iv]←‐10とする。
(2-iv)trj_cnt[iv]=‐1のとき→
ロボット単位Hが8つのロボットで満たされている場合、void[iv]の発生位置にあるロボットと、そのロボットに行動a_headの方向で隣接しているロボット、さらにその先にa_headの方向で隣接しているロボットがあればそのロボットを皆まとめて、a_headの方向に1ステップ移動させる。trj_cnt[iv]←0とする。満たされてない場合なにもしない。
以上の手法によるロボットの隊列形成は、24個以上のロボット単位で構成される任意の形状の開始位置の集合SU、、目標位置の集合GUのロボット群に適用可能である。
<第二実施形態に係る行動制御システム200>
第二実施形態に係る行動制御システム200は、以上に説明した各処理によって構成される全体動作について以下にまとめる。
(1)移動先隊列決定用動作計画のために使用するマンハッタン距離δ(各位置単位から入口位置単位PeUまでのマンハッタン距離)を計算する。尾部ロボット単位近辺のロボット動作計画に使用するマンハッタン距離δlocalをCalculate_delta_localを実行し計算する。
(2)以下(3),(4)を全GU内にロボットが充填されるまで繰り返す。
(3)移動先隊列決定用動作計画処理Next_Formation_Decisionを実行する。
(4)各ロボット動作決定用動作計画処理を実行する。
以下、これらの処理を実行する構成について説明する。
図32は第一実施形態に係る行動制御システム200の機能ブロック図を、図33はその処理フローの例を示す。行動制御システム200は、図32に示すように、動作計画部210と、行動選択部220と、隣接状態判定部124と、位置更新部123と、位置判定部126と、記憶部240と、通信部150と、入力部160とを含む。行動選択部220は移動先隊列決定用動作計画部221と各制御対象物動作用動作計画部222とを含む。第一実施形態と異なる部分である動作計画部210と、行動選択部220と、記憶部240を中心に説明する。他の部分については、第一実施形態と同様の処理を行う。ただし、通信部150及び隣接状態判定部124では、二次元平面上の上下左右方向ではなく、三次元空間上の上下左右前後方向(以下「6方向」ともいう)において、通信を行ったり、隣接状態を判定したりする。
本実施形態では、行動制御システム200は、p(pは、192以上の整数の何れかであって、8の倍数)台のロボットの行動を制御し、p台のロボットの内の1つのロボット上に実装される。
<動作計画部210>
動作計画部210は、上述の[マンハッタン距離δの計算]及び[パスPの決定]で説明した方法により、開始位置の集合SU、目標位置の集合GU及びパスPの何れかの各位置から入口位置Peまでのマンハッタン距離δを、ロボットの任務行動開始前に事前に計算し(S210)、記憶部140に格納する。ただし、目標位置の集合の各位置から入口位置Peまでのマンハッタン距離δは、その符号を負とする。また、開始位置の集合SU、目標位置の集合GU及びパスPの何れにも含まれない全ての位置のマンハッタン距離δをs_max(状態空間内の格子数より大きな値)として記憶部140に格納する。また、同様にロボットの任務行動開始前にCalculate_delta_localを実行し、尾部ロボット単位近辺のロボット動作計画に使用するマンハッタン距離δlocalを計算する。なお、別装置でマンハッタン距離δを計算しておき、ロボットの任務行動開始前に事前に記憶部140に格納しておけば、行動制御システム100は、動作計画部210を備えなくともよい。
<記憶部240>
記憶部240には、各位置sから入口位置Peまでのマンハッタン距離δと、尾部ロボット単位近辺のロボット動作計画用マンハッタン距離δlocalが記憶されているとする。sの取りうる範囲は、対象となる三次元空間上の領域内のロボット単位が存在しうる全ての座標である。
<行動選択部220>
行動選択部220は、記憶部240からマンハッタン距離δ、δlocalを取り出す。
行動選択部220は、上述の方法で説明した方法で、p台のロボットを制御する(s220)。
行動選択部220の移動先隊列決定用動作計画部221は、マンハッタン距離δを用いて、移動先隊列決定用動作計画処理Next_Formation_Decisionを行い(s221)、開始位置の集合に配置されたp台のロボットを目標位置の集合に移動させる際に、頭部ロボット単位が移動の先頭を務めるように、各位置単位におけるマンハッタン距離δを用いてある時刻の隊列Gaに対して隊列Gbを決定し、頭部ロボット単位及び尾部ロボット単位の位置を出力する。
さらに、行動選択部220の各制御対象物動作用動作計画部222は、頭部ロボット単位及び尾部ロボット単位の位置を受け取り、マンハッタン距離δlocalを使って各ロボット動作用動作計画を行い(s222−1)、頭部ロボット単位の位置に8台のロボットが位置するように、各ロボットに対して制御信号を送り、各ロボットの動作を制御する。各ロボットは制御信号に従って行動する。
各ロボットは制御信号に従って行動する。
なお、一回の行動制御により、1回の移動先隊列決定用動作計画処理Next_Formation_Decisionで決定された頭部ロボット単位を充填する処理が行われる。
移動先隊列決定用動作計画処理Next_Formation_Decisionにおいて行われる頭部決定処理Head_Robot_Decisionの中で、各ロボット単位の位置や障害物位置を必要とするが、各ロボット単位の位置ついては前述の通り、取得可能である。また、障害物の位置に関しては、マンハッタン距離δを計算する際に利用した障害物の位置を利用してもよいし、隣接状態判定部124で判定した判定結果を用いて得られるものを利用してもよい。
本実施形態により制御され、図27Aの開始位置の集合から図27Bの目標位置の集合に変形する際のロボット群の遷移状態の例を図34に示す。
<効果>
このような構成により、第一実施形態と同様の効果を得ることができる。また、2次元平面上だけでなく、三次元空間上での制御対象物の制御が可能となる。
<変形例>
本実施形態では、各格子(マス)は、立方体であるが、他の形状であってもよい。格子は左右方向、上下方向及び前後方向に連続して配置される。また、各格子は左右方向で他の二つの格子と隣接し、上下方向で他の二つの格子と隣接し、前後方向で他の二つの格子と隣接する。言い換えると、各格子は、ロボットの移動できる方向と同じ方向においてのみ、他の格子と隣接する。この条件を満たせば、各格子はどのような形状であってもよい。また、「直交」とは、厳密に「垂直に交わること」を意味しなくともよく、例えば、各格子は、平行六面体であってもよく、各格子が他の二つの格子と隣接する方向の一方を上下方向とし、他方を左右方向とすればよく、上下方向及び左右方向とからなる平面に対して平行でない方向を前後方向とすればよい。
別の言い方をすると、制御対象物は、三次元空間上の、第一方向(例えば右方向)、第一方向に対して平行でない方向である第二方向(例えば上方向)、第一方向に対して反対方向である第三方向(例えば左方向)、第二方向に対して反対方向である第四方向(例えば下方向)、第一方向及び第二方向の成す平面に対して平行でない方向を第五方向(例えば前方向)、第五方向に対して反対方向である第六方向に移動可能であり、一回の行動制御により、現在いる領域(格子、マス)から、現在いる領域に対して、第一方向、第二方向、第三方向、第四方向、第五方向、第六方向において隣接する領域の何れかに移動するように制御される。また、この場合、ロボットの2次元平面上の、第一方向において隣接する位置を第一位置、第二方向において隣接する位置を第二位置、第三方向において隣接する位置を第三位置、第四方向において隣接する位置を第四位置、第五方向において隣接する位置を第五位置、第六方向において隣接する位置を第六位置と呼んでもよい。
本実施形態では、行動制御システム100が、p台のロボットの内の1つのロボット上に実装される例を示したが、コンピュータ上の制御対象物に対して行動制御を行ってもよい。その場合、意図的にトラブルを発生させない限り、制御した通りに制御対象物は移動するため、想定位置(Xr'[i],Yr'[i])と移動後位置(Xr"[i],Yr"[i])とが一致する。そのような状態で、各制御対象物i毎の理想的な行動計画を行ってもよい。その結果得られた任務を終了するまでの行動計画を実ロボットに実行させる。実ロボットは、通信部150と隣接状態判定部124を備え、各行動を終えた後に、隣接状態を判定し、判定結果を用いて、行動後位置を求め、行動後位置(Xr"[i],Yr"[i])と想定位置(Xr'[i],Yr'[i])とが一致するか否かを判定する。なお、一致しない場合には、移動するように制御されたロボットが何らかのトラブルにより、制御通りに移動できなかったと考えられる。その後の処理については第一実施形態と同様でもよいし、他の処理を行ってもよい。このような構成により、少なくとも制御通りに移動できなかったことを検知することができる。
本実施形態では、一回の行動制御に対して、一回の位置判定を行っているが、一回の行動制御において、複数のロボットを移動させる場合には、各ロボットが移動の度に位置判定を行う構成としてもよい。
本実施形態では、ロボット単位は、2×2×2の8台のロボットからなるが、M×N×Q台のロボットからなってもよい。ただし、M、N及びQはそれぞれ2以上の整数の何れかである。なお、ロボットの台数pはロボット単位に含まれるロボットの台数M×N×Qの24以上の倍数とする。つまり、p=M×N×Q×Rであり、Rは24以上の整数の何れかである。このような状態で移動を行った場合にも、2×2×2のロボット単位のときと同様に、ロボットの群れの中のいずれのロボットが一台欠けても、各ロボットはお互いに一つの辺で接しあう位置関係を崩さずに済む。M×N×Qの台数を大きくすると、ロボット単位の個数が減り、行動できるパターンが減るため、マンハッタン距離δの計算量が減る。しかし、M×N×Q個のマスを一つの単位とするマス単位の中に1つでも障害物が含まれる場合には、そのマス単位には移動できないものとして扱うため、M×N×Qの台数を大きくすると、移動できない範囲が多くなり、行動できる範囲が小さくなる。そもそも動作計画において、各位置から入口位置Peまでのマンハッタン距離を調べさえすればよいため、従来技術に比べれば、十分に計算量が減っている。そのため、行動できる範囲を大きく保つために2×2×2台のロボットを一つの単位とするロボット単位とすることが望ましい。
<その他の変形例>
本発明は上記の実施形態及び変形例に限定されるものではない。例えば、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
<プログラム及び記録媒体>
また、上記の実施形態及び変形例で説明した各装置における各種の処理機能をコンピュータによって実現してもよい。その場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD−ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させてもよい。
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶部に格納する。そして、処理の実行時、このコンピュータは、自己の記憶部に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実施形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよい。さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、プログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
また、コンピュータ上で所定のプログラムを実行させることにより、各装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。

Claims (2)

  1. 開始位置の集合に配置されたp台の制御対象物からなる開始隊列を目標位置の集合からなる目標隊列に移動させるための行動制御を行う行動制御システムであって、
    前記目的位置の集合には、所定の入口位置が予め設定されているものとし、
    各時刻において、前記p台の制御対象物の各々は、少なくとも1以上の辺で他の制御対象物と接続した状態を維持するものとし、
    前記移動は、1<q<pを満たすq台の隣接する制御対象物からなる一塊の単位を制御対象物単位として、前記制御対象物単位の移動は、当該制御対象物単位と隣接する制御対象物単位とが接している辺同士をスライドさせる方向でのみ許容されるものとし、
    行動aの種類を、静止、または、前記辺同士をスライドさせる各方向への移動として、
    前記制御対象物単位の移動は、当該制御対象物単位が現在の位置sにおいて各行動aを取ったときの適切さを表す1個の価値関数に基づいて制御されるものとし、
    前記価値関数は、空間上の全ての位置において、該位置にある制御対象物単位が前記所定の入口位置を目指して動作するための動作計画により計算されるものとし
    前記目標隊列を前記制御対象物単位の大きさで分割したときの制御対象物単位ごとの位置の集合を目的位置単位の集合として、
    前記価値関数が記憶される記憶部と、
    入力された隊列をGaとし、前記目的位置単位の集合に含まれる各位置が前記隊列Gaをなす各制御対象物単位で充填されていない場合に、前記隊列Gaをなす各制御対象物単位の中から頭部制御対象物単位を決定し、隊列Ga内の制御対象物単位のうち当該頭部制御対象物単位から最も遠い位置に存在する制御対象物単位を尾部制御対象物単位として決定し、隊列Gaから尾部制御対象物単位の位置を削除した隊列に、前記頭部制御対象物単位が前記価値関数により特定される行動に応じて移動した後の位置を追加してなる隊列を移動後の隊列Gbとして決定する移動先隊列決定用動作計画部と、
    隊列Gaと隊列Gbとを入力として、前記目的位置単位の集合に含まれる各位置が前記隊列Gaをなす各制御対象物単位で充填されるまで、前記頭部制御対象物単位から前記尾部制御対象物単位まで順に隊列Ga内で隣接する制御対象物単位を移動させるように各制御対象物の動作を決定する各制御対象物動作用動作計画部と、
    前記各制御対象物動作用動作計画部の結果に基づいて各制御対象物単位を移動させた後の位置の集合と前記目的位置の集合とが一致するまで、移動後の位置を新たに隊列Gaとして前記移動先隊列決定用動作計画部と前記各制御対象物動作用動作計画部とを繰り返し実行させる位置判定部と、を含み、
    前記各制御対象物動作用動作計画部は、
    前記隊列Gaにおける前記頭制御対象物単位中の位置のうち、前記頭部制御対象物単位の移動先の位置単位と隣接する位置以外の位置にボイドが発生するように前記各制御対象物を移動させ、
    前記隊列Gaにおける前記尾部制御対象物単位に隣接する制御対象物単位内の各位置のうち、当該尾部制御対象物単位と隣接する位置が前記ボイドの位置とならないようにボイドの位置を定め、前記尾部制御対象物単位に含まれる各制御対象物を隊列Gb中の尾部制御対象物単位の位置へ移動させる
    行動制御システム。
  2. 請求項1の行動制御システムとしてコンピュータを機能させるためのプログラム。
JP2015094398A 2014-12-17 2015-05-01 行動制御システム、及びそのプログラム Active JP6489923B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2014254650 2014-12-17
JP2014254650 2014-12-17

Publications (2)

Publication Number Publication Date
JP2016119040A JP2016119040A (ja) 2016-06-30
JP6489923B2 true JP6489923B2 (ja) 2019-03-27

Family

ID=56244303

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015094398A Active JP6489923B2 (ja) 2014-12-17 2015-05-01 行動制御システム、及びそのプログラム

Country Status (1)

Country Link
JP (1) JP6489923B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230018658A1 (en) * 2019-12-16 2023-01-19 Nippon Telegraph And Telephone Corporation Action control apparatus, method and program for the same

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6553000B2 (ja) * 2016-07-13 2019-07-31 日本電信電話株式会社 制御対象物位置入れ替え制御装置、制御対象物位置入れ替え制御方法、プログラム
CN108858179B (zh) * 2017-05-09 2020-11-24 北京京东尚科信息技术有限公司 确定分拣机器人行车路径的方法和装置
JP6777661B2 (ja) 2018-02-14 2020-10-28 日本電信電話株式会社 制御装置、方法及びプログラム
JP7335096B2 (ja) * 2019-06-07 2023-08-29 ファナック株式会社 ロボットシステムの障害物探索装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2933247B2 (ja) * 1991-10-29 1999-08-09 川崎重工業株式会社 ロボット装置
JP3200914B2 (ja) * 1992-01-14 2001-08-20 ソニー株式会社 配置制御方法および装置
US6459957B1 (en) * 2001-04-17 2002-10-01 Fuji Xerox Co., Ltd. Programmable smart membranes and methods therefor
JP2003048179A (ja) * 2001-05-29 2003-02-18 Japan Science & Technology Corp 複数歯車型ユニットで構成される変形可能な移動装置
JP4049629B2 (ja) * 2002-07-09 2008-02-20 シャープ株式会社 群ロボットシステム
JP5563505B2 (ja) * 2011-03-18 2014-07-30 株式会社デンソーアイティーラボラトリ 群ロボット制御システム、群ロボット制御装置、及び群ロボット制御方法
US10857669B2 (en) * 2013-04-05 2020-12-08 Massachusetts Institute Of Technology Modular angular-momentum driven magnetically connected robots

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230018658A1 (en) * 2019-12-16 2023-01-19 Nippon Telegraph And Telephone Corporation Action control apparatus, method and program for the same

Also Published As

Publication number Publication date
JP2016119040A (ja) 2016-06-30

Similar Documents

Publication Publication Date Title
JP6489923B2 (ja) 行動制御システム、及びそのプログラム
JP6559591B2 (ja) 行動制御システム、その方法及びプログラム
Qin et al. Autonomous exploration and mapping system using heterogeneous UAVs and UGVs in GPS-denied environments
US11231715B2 (en) Method and system for controlling a vehicle
Hu et al. An efficient RRT-based framework for planning short and smooth wheeled robot motion under kinodynamic constraints
Augugliaro et al. Generation of collision-free trajectories for a quadrocopter fleet: A sequential convex programming approach
Ge et al. Queues and artificial potential trenches for multirobot formations
CN110471426B (zh) 基于量子狼群算法的无人驾驶智能车自动避碰方法
Ma et al. Overview: A hierarchical framework for plan generation and execution in multirobot systems
CN113552877A (zh) 用于机器人优化动作规划的初始参考生成
Lam et al. Path planning as a service PPaaS: Cloud-based robotic path planning
He et al. Multiagent soft actor-critic based hybrid motion planner for mobile robots
CN112650306A (zh) 一种基于动力学rrt*的无人机运动规划方法
Liao et al. Model predictive control for cooperative hunting in obstacle rich and dynamic environments
Cao et al. Neptune: nonentangling trajectory planning for multiple tethered unmanned vehicles
Musiyenko et al. Simulation the behavior of robot sub-swarm in spatial corridors
Merckaert et al. Real-time constraint-based planning and control of robotic manipulators for safe human–robot collaboration
JP6285849B2 (ja) 行動制御システム、その方法及びプログラム
Sinkar et al. Multi-agent path finding using dynamic distributed deep learning model
JP6685957B2 (ja) 制御対象物位置入れ替え制御装置、制御対象物位置入れ替え制御方法、プログラム
JP6633467B2 (ja) 行動制御システム、行動制御方法、プログラム
JP6559582B2 (ja) 行動制御システム、その方法及びプログラム
Alonso-Mora Collaborative motion planning for multi-agent systems
Ivanov et al. Distribution of roles in a dynamic swarm of robots in conditions of limited communications
Ghosh et al. Planning Large-scale Object Rearrangement Using Deep Reinforcement Learning

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170619

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180423

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180501

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180613

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180814

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181010

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20181204

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190125

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20190205

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190225

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190226

R150 Certificate of patent or registration of utility model

Ref document number: 6489923

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150