JP6489923B2 - 行動制御システム、及びそのプログラム - Google Patents
行動制御システム、及びそのプログラム Download PDFInfo
- 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
Links
- 230000009471 action Effects 0.000 claims description 162
- 230000015572 biosynthetic process Effects 0.000 claims description 133
- 239000011800 void material Substances 0.000 claims description 126
- 238000000034 method Methods 0.000 description 151
- 238000005755 formation reaction Methods 0.000 description 125
- 238000004364 calculation method Methods 0.000 description 90
- 230000008569 process Effects 0.000 description 77
- 238000012545 processing Methods 0.000 description 65
- 230000006399 behavior Effects 0.000 description 52
- 230000006870 function Effects 0.000 description 42
- 238000010586 diagram Methods 0.000 description 16
- 238000004891 communication Methods 0.000 description 14
- 230000007423 decrease Effects 0.000 description 8
- 230000007704 transition Effects 0.000 description 6
- 230000010391 action planning Effects 0.000 description 5
- 230000001276 controlling effect Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000005259 measurement Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000002787 reinforcement Effects 0.000 description 4
- 230000001131 transforming effect Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 241000209094 Oryza Species 0.000 description 2
- 235000007164 Oryza sativa Nutrition 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 235000009566 rice Nutrition 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 208000031968 Cadaver Diseases 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 230000005021 gait Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000010187 selection method Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Landscapes
- Manipulator (AREA)
- Control Of Position, Course, Altitude, Or Attitude Of Moving Bodies (AREA)
Description
まず、行動制御システム及び方法の理論的背景について説明する。以下、行動制御の対象である制御対象物が、ロボットである場合を例に挙げて説明するが、制御対象物は、制御の対象となり得るものであれば、ロボット以外であってもよい。
多数のロボットが協調して開始位置における隊列形成状態から、各ロボットが接した状態を維持しつつ移動を行い、目標位置での隊列形成を行う任務は、例えば図1に例示するような、互いに接する辺同志をスライドさせて移動していくことが可能な正方形型のロボットの使用を想定し、図2に示すように、壁で区切られた部屋においての開始位置から目標位置まで複数のロボットの移動によって実現するものである。
それぞれのロボット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とを定義する。
これらの二つの探索計算の計算負荷の軽減のため、本実施形態では、ボイド制御の考え方を導入する。まず、ここでいうボイドとは、あるロボットが別の位置に移動した後に、元いた位置にできる空隙のことである。別の言い方をすると、ボイドとは、ロボットの移動する方向と反対の方向に移動する仮想的な存在である。こうした群ロボットの隊列形成問題においては、複数のロボットの動作に着目するがゆえに、その探索計算量が爆発してしまうが、視点を変えて、ボイドの動きに着目すれば、多数のロボットの動作計画の問題を単一のボイドの動作計画として考えることができる。そのため、ボイド制御の考え方を導入することは、群ロボットの隊列形成問題における探索計算負荷の軽減に適している。
さらに、本実施形態では、図6に示すように、田の字状に隣接した4つのロボットを一つの単位とし(以下、「ロボット単位」ともいう)、ロボットは、この田の字型のロボット単位を維持しつつ移動を行うこととする。言い換えると、四台毎に1つのロボット単位を構成し、1つのロボット単位を構成する四台のロボットはそれぞれ2つの方向において1つのロボット単位を構成する他のロボットと隣接した状態を維持しつつ移動を行う。このロボット単位の集団は、互いにロボット単位ごとに一辺を共有し、接しながら移動をするように制御される。
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の倍数でない場合には、端数のロボットが存在することになるが、それらのロボットは、皆、移動先隊列決定用動作計画においては切り捨てられ(存在しないものとして扱い)、各ロボット動作用動作計画においては、尾部ロボット単位のメンバとして扱われる。
移動先隊列決定用動作計画での探索計算用のマルコフ状態空間を、一つのロボット単位の状態変数のみで構成することにする。すなわち、
状態変数s=(Xr_unit,Yr_unit),行動変数a∈{0,1,2,3,4}
である。頭部ロボット単位の選択と誘導は、この状態変数を引数とした一つの価値関数Q(s,a)を使用して行動決定を行う。価値関数Q(s,a)の計算は、動的計画法を使用して、任務の事前に行うものとする。入口位置Peを含む入口位置単位をPeUとし(図8参照)、動的計画法にて計算を行う際に、報酬の値は、入口位置単位PeUに頭部ロボット単位が移動した場合において高報酬値1が与えられ、その他は0の報酬が与えられる。
(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となるため、状態の個数が減り計算負荷が少なくなる。
(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(静止)を選択する。
以上の価値関数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)を繰り返す。
続いて、尾部ロボット単位位置を決定するための手法を述べる。まず、各ロボット単位が、頭部ロボット単位からどれだけの距離離れているかを計算する。この計算はダイクストラ法などの動的計画法で計算可能であるが、本実施形態で使用する方法を一例として以下に述べる。なお、本処理をロボット単位群内序列決定処理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]]を表す。
以上の、ロボット単位群内序列決定処理Joretu_Decisionが済んだうえで、Joretu[Xr_unit[j]][Yr_unit[j]]が最大となる位置にあるロボット単位を尾部ロボット単位j_tailとする。なお、尾部ロボット単位を決定する処理を尾部ロボット決定処理Tail_robot_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が決定され、次の隊列Gbが決定されたので、現隊列Gaから次隊列Gbへの移動を各ロボットの移動によって実現するための探索計算を各ロボット動作決定用動作計画にて行う。
モード1:GUがロボットで満たされていない場合。
モード2:GUがロボットで満たされている場合。
(モード1)
まず、モード1のGUがロボットで満たされていない場合の各ロボット動作決定用動作計画の動作について述べる。
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] 、とする。
ロボット序列計算処理Robot_Joretu_Decisionは、ダイクストラ法などを用いることができる。例えば以下のとおりである。
ボイド経路計算処理Void_Trajectory_Decisionは、以下のとおりである。
(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_Motion)
ボイド移動処理Void_Motionは、例えば、以下のとおりである。計算されたボイド軌道に沿って、同じ方向に動くロボットを一度に移動させている。もちろん、一度に移動させず一台ずつ動かしてもよい。
(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に隣接するロボットが無くなることを防ぐ。
続いて、モード2のGUがロボットで満たされている場合の各ロボット動作決定用動作計画の動作について述べる。
モード2では、先頭のロボットを選択する際に、頭部ロボット単位は使用しない。先頭ロボットの番号をi_startとする。start_select[i]変数をロボットiの先頭ロボットとしての選択回数を記憶する変数とし、ロボットの移動開始前に0にあらかじめ初期化する(start_select[i]←0)。
条件1:あるロボットiについて、そのロボットが所属するロボット単位jに行動a_startの方向で隣接するロボット単位の位置の中にGUに属さずGに属する位置が3個であり、その中で、ロボット単位jに隣接しない位置が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に近づける。
第一実施形態に係る行動制御システム100は、以上に説明した各処理によって構成される全体動作について以下にまとめる。
(2)開始位置で、4つのロボットが収まっているロボット単位位置を特定し、Gaのロボット単位の要素として設定する。
(3)以下(4),(5)を全G内にロボットが充填されるまで繰り返す。
(4)GUがロボットで充填されていない場合、移動先隊列決定用動作計画処理Next_Formation_Decisionを実行する。充填されているならなにもしない。
(5)GUがロボットで充填されていない場合、各ロボット動作決定用動作計画処理のモード1を実行する。GUがロボットで充填されている場合、モード2を実行する。
動作計画部110は、価値関数Q(s,a)の値を、動的計画法により、ロボットの任務行動開始前に事前に計算し(S110)、記憶部140に格納する。ここで、動作計画部110の計算は、一つのロボット単位を使用した強化学習(例:Q学習)に置き換えてもよい。なお、別装置で価値関数Q(s,a)を計算しておき、ロボットの任務行動開始前に事前に記憶部140に格納しておけば、行動制御システム100は、動作計画部110を備えなくともよい。
入力部160には、p台のロボットiのそれぞれの初期位置(Xr0[i],Xr0[i])及びp個の目標位置の集合G={(Xre[0],Yre[0]),(Xre[1],Yre[1]),…,(Xre[p-1],Yre[p-1])}が入力され、記憶部140に記憶される。
記憶部140には、位置s及びa∈{0,1,2,3,4}の組み合わせのそれぞれについての価値関数Q(s,a)が記憶されているとする。sの取りうる範囲は、対象となる二次元平面上の領域内のロボット単位jが存在しうる全ての座標である。
行動制御システム100が実装されているロボットも含め、全てのロボットは、通信部150を介して、二次元平面上の上下左右方向(以下「4方向」ともいう)において隣接する他のロボットと通信することができる。
行動選択部120は、記憶部140から価値関数Qを取り出す。
位置更新部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は、ロボットの2次元平面上の上下左右の隣接する位置に、障害物または他のロボットが存在するか否かを判定し、(S121),判定結果を記憶部140に格納する。
位置判定部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])に合わせて補正してもよい。
このような構成により、一つのロボット単位に必要な分だけのマルコフ状態空間を用意し、それを用いて動的計画法を利用して各位置でのロボット単位の行動方策を計算し、その行動方策を利用することで、ロボット群に任意の隊列形状と、任務環境内の任意の障害物形状に対応した障害物回避アルゴリズムを獲得でき、ロボット同士が接した状態を維持したうえでの多数ロボットのための隊列形成アルゴリズムを獲得することができる。すなわち、計算負荷がロボット数の階乗に比例せず、実時間で実行可能な低計画計算負荷での自己位置座標定義型隊列形成アルゴリズム獲得ができる。また、静止しているロボットに対する相対的な位置を判定することで、絶対的な位置を取得することができるため、付加的な位置計測用の装備を必要としない。または少なくとも一台のGPSを備えるロボットか、開始状態にて位置の定義されたロボットに対する相対的な位置を判定することで、絶対的な位置を取得することができるため、全てのロボットがGPS等を備えなくともよい。
本実施形態では、各格子(マス)は、正方形であるが、他の形状であってもよい。格子は左右方向及び上下方向に連続して配置される。また、各格子は左右方向で他の二つの格子と隣接し、上下方向で他の二つの格子と隣接する。言い換えると、各格子は、ロボットの移動できる方向と同じ方向においてのみ、他の格子と隣接する。この条件を満たせば、各格子はどのような形状であってもよい。また、「直交」とは、厳密に「垂直に交わること」を意味しなくともよく、例えば、図25のように、各格子は、菱形であってもよく、各格子が他の二つの格子と隣接する方向の一方を上下方向とし、他方を左右方向とすればよく、このとき、上下方向と左右方向とは直交するものとする。
第一実施形態との違いを中心に説明する。第一実施形態の制御方法を三次元空間に拡張する。本実施形態では、
(1)ロボット隊列を3次元化する。
多数のロボットが協調して開始位置における隊列形成状態から、各ロボットが接した状態を維持しつつ移動を行い、目標位置での隊列形成を行う任務は、例えば図26に例示するような、互いに接する面同志をスライドさせて移動していくことが可能な立方体型のロボットの使用を想定する。図27に示すように、壁で区切られた部屋(ただし図中、壁を省略する)においての開始位置から目標位置まで複数のロボットの移動によって実現するものである。
それぞれのロボット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を定義する。
上記二つの探索計算負荷の軽減のため、本実施形態においても、ボイド制御の考え方を導入する。まず、ここでいうボイドとは、あるロボットが別の位置に移動した後に、元いた位置にできる空隙のことである。こうした群ロボットの隊列形成問題においては、複数のロボットの動作に着目するがゆえに、その探索計算量が爆発してしまうが、視点を変えて、ボイドの動きに着目すれば、多数のロボットの動作計画の問題を単一のボイドの動作計画として考えることができ、探索計算負荷の軽減に適している。
さらに、本実施形態では、図30に示すように、8つの田の字状に隣接したロボットを一つの単位とし(ロボット単位)、ロボットは、この田の字型のロボット単位を維持しつつ移動を行うとする。言い換えると、8台毎に1つのロボット単位を構成し、1つのロボット単位を構成する8台のロボットはそれぞれ3つの方向において1つのロボット単位を構成する他のロボットと隣接した状態を維持しつつ移動を行う。このロボット単位の集団は、互いにロボット単位ごとに一面を共有し、接しながら移動をするように制御される。
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
である。
本実施形態では、ロボットが動作を開始する前にあらかじめ、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)を繰り返す。
(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より離れるほどマンハッタン距離δが小さくなる。
(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とする。
(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マス単位以上離れている)。
(1)頭部決定処理Head_Robot_Decisionを行う。
(2)尾部ロボット決定処理Tail_robot_Decisionを行う。
(3)上述の(2)にて特定した尾部ロボット単位Tを、現在の隊列Gaから削除し、隊列Gaに頭部ロボット単位Dを追加し、隊列Gbとする。
移動先隊列決定用動作計画において頭部ロボット単位Dと尾部ロボット単位Tが決定され、次の隊列Gbが決定されたので、現隊列Gaから次隊列Gbへの変形を各ロボットの移動によって実現するための探索計算を各ロボット動作決定用動作計画にて行う。
(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の処理は、以下のとおりである。まず、ロボットが動作を開始する前に、あらかじめ、以下の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つのロボット(その位置)のインデックスである。
(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)の計算方法を示す。
(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)を繰り返す。
(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"を以下のように計算する。
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とする。
(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)を繰り返す。
(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)を繰り返す。
(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以上という条件を設定している。本制御方法で、各ロボット単位内において、ボイドが一つ以内に収まるように制御されている。
(1)Void_Trajectory_Decisionを実行する。trj_cnt[iv_prev+1],,, trj_cnt[iv_prev+8],を-1にする。iv_prevの値を8回インクリメントする。
(2)以下をvoid[iv_prev]がロボット単位Hの外に出るまで繰り返す。
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])に移動させる。
現在のvoid[iv]の位置から、alの方向の逆方向に隣接していて、たどれるロボットを全て、al方向に1ステップ移動させて、trj_cnt[iv]←‐10とする。
ロボット単位Hが8つのロボットで満たされている場合、void[iv]の発生位置にあるロボットと、そのロボットに行動a_headの方向で隣接しているロボット、さらにその先にa_headの方向で隣接しているロボットがあればそのロボットを皆まとめて、a_headの方向に1ステップ移動させる。trj_cnt[iv]←0とする。満たされてない場合なにもしない。
第二実施形態に係る行動制御システム200は、以上に説明した各処理によって構成される全体動作について以下にまとめる。
(1)移動先隊列決定用動作計画のために使用するマンハッタン距離δ(各位置単位から入口位置単位PeUまでのマンハッタン距離)を計算する。尾部ロボット単位近辺のロボット動作計画に使用するマンハッタン距離δlocalをCalculate_delta_localを実行し計算する。
(2)以下(3),(4)を全GU内にロボットが充填されるまで繰り返す。
(3)移動先隊列決定用動作計画処理Next_Formation_Decisionを実行する。
(4)各ロボット動作決定用動作計画処理を実行する。
動作計画部210は、上述の[マンハッタン距離δの計算]及び[パスPの決定]で説明した方法により、開始位置の集合SU、目標位置の集合GU及びパスPの何れかの各位置から入口位置Peまでのマンハッタン距離δを、ロボットの任務行動開始前に事前に計算し(S210)、記憶部140に格納する。ただし、目標位置の集合の各位置から入口位置Peまでのマンハッタン距離δは、その符号を負とする。また、開始位置の集合SU、目標位置の集合GU及びパスPの何れにも含まれない全ての位置のマンハッタン距離δをs_max(状態空間内の格子数より大きな値)として記憶部140に格納する。また、同様にロボットの任務行動開始前にCalculate_delta_localを実行し、尾部ロボット単位近辺のロボット動作計画に使用するマンハッタン距離δlocalを計算する。なお、別装置でマンハッタン距離δを計算しておき、ロボットの任務行動開始前に事前に記憶部140に格納しておけば、行動制御システム100は、動作計画部210を備えなくともよい。
記憶部240には、各位置sから入口位置Peまでのマンハッタン距離δと、尾部ロボット単位近辺のロボット動作計画用マンハッタン距離δlocalが記憶されているとする。sの取りうる範囲は、対象となる三次元空間上の領域内のロボット単位が存在しうる全ての座標である。
行動選択部220は、記憶部240からマンハッタン距離δ、δlocalを取り出す。
このような構成により、第一実施形態と同様の効果を得ることができる。また、2次元平面上だけでなく、三次元空間上での制御対象物の制御が可能となる。
本実施形態では、各格子(マス)は、立方体であるが、他の形状であってもよい。格子は左右方向、上下方向及び前後方向に連続して配置される。また、各格子は左右方向で他の二つの格子と隣接し、上下方向で他の二つの格子と隣接し、前後方向で他の二つの格子と隣接する。言い換えると、各格子は、ロボットの移動できる方向と同じ方向においてのみ、他の格子と隣接する。この条件を満たせば、各格子はどのような形状であってもよい。また、「直交」とは、厳密に「垂直に交わること」を意味しなくともよく、例えば、各格子は、平行六面体であってもよく、各格子が他の二つの格子と隣接する方向の一方を上下方向とし、他方を左右方向とすればよく、上下方向及び左右方向とからなる平面に対して平行でない方向を前後方向とすればよい。
本発明は上記の実施形態及び変形例に限定されるものではない。例えば、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
また、上記の実施形態及び変形例で説明した各装置における各種の処理機能をコンピュータによって実現してもよい。その場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
Claims (2)
- 開始位置の集合に配置された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中の尾部制御対象物単位の位置へ移動させる
行動制御システム。 - 請求項1の行動制御システムとしてコンピュータを機能させるためのプログラム。
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)
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)
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)
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 |
-
2015
- 2015-05-01 JP JP2015094398A patent/JP6489923B2/ja active Active
Cited By (1)
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 |