JP6559582B2 - 行動制御システム、その方法及びプログラム - Google Patents
行動制御システム、その方法及びプログラム Download PDFInfo
- Publication number
- JP6559582B2 JP6559582B2 JP2016007760A JP2016007760A JP6559582B2 JP 6559582 B2 JP6559582 B2 JP 6559582B2 JP 2016007760 A JP2016007760 A JP 2016007760A JP 2016007760 A JP2016007760 A JP 2016007760A JP 6559582 B2 JP6559582 B2 JP 6559582B2
- Authority
- JP
- Japan
- Prior art keywords
- control
- robot
- control object
- positions
- coordinate
- 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
- 238000000034 method Methods 0.000 title claims description 135
- 230000008569 process Effects 0.000 claims description 109
- 238000012545 processing Methods 0.000 claims description 77
- 238000007906 compression Methods 0.000 claims description 26
- 238000011161 development Methods 0.000 claims description 4
- 238000003825 pressing Methods 0.000 claims description 2
- 230000015572 biosynthetic process Effects 0.000 description 32
- 238000005755 formation reaction Methods 0.000 description 32
- 230000009471 action Effects 0.000 description 29
- 101100425598 Solanum lycopersicum tm-1 gene Proteins 0.000 description 11
- 238000004891 communication Methods 0.000 description 10
- 238000003860 storage Methods 0.000 description 10
- 230000001131 transforming effect Effects 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 6
- 230000006835 compression Effects 0.000 description 5
- 238000010276 construction Methods 0.000 description 3
- 230000006837 decompression Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000001276 controlling effect Effects 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 125000005842 heteroatom Chemical group 0.000 description 2
- 241000254173 Coleoptera Species 0.000 description 1
- 230000008901 benefit Effects 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
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Landscapes
- Control Of Position, Course, Altitude, Or Attitude Of Moving Bodies (AREA)
Description
まず、行動制御システム及び方法の理論的背景について説明する。以下、行動制御の対象である制御対象物が、ロボットである場合を例に挙げて説明するが、制御対象物は、制御の対象となり得るものであれば、ロボット以外であってもよい。
多数のロボットが協調して開始位置における隊列形成状態から、各ロボットが接した状態を維持しつつ移動を行い、目標位置での隊列形成を行う任務は、例えば図1に例示するような、互いに接する面同士をスライドさせて移動していくことが可能な立方体型のロボットの使用を想定し、図2に示すように、開始位置の集合Sから目標位置の集合Gまで複数のロボットの移動によって実現するものである。
それぞれのロボットi(iはロボット番号を表す、i=0,1,2,3,…,p-1)の位置を(Xr[i],Yr[i],Zr[i])とし、開始位置の集合Sに含まれる位置を(Xrs[j],Yrs[j],Zrs[j])とし、目標位置の集合Gに含まれる位置を(Xrg[j],Yrg[j],Zrg[j])(jは目標位置の番号を表す、j=0,1,2,3,…,p-1)とする。中間位置の集合M1に含まれる位置を(Xm1[j],Ym1[j],Zm1[j])、中間位置の集合M2に含まれる位置を(Xm2[j],Ym2[j],Zm2[j])、中間位置の集合M3に含まれる位置を(Xm3[j],Ym3[j],Zm3[j])とし、開始位置の集合S、目標位置の集合G、中間位置の集合M1,M2,M3に含まれる位置のうち、X、Y座標が最大かつ、Z座標が最小の位置を点(Xthresh,Ythresh,Zthresh)とする。言い換えると、集合S、G、M1,M2,M3に含まれる位置のうち、X座標が最大となる位置のX座標値をXthreshとし、集合S、G、M1,M2,M3に含まれる位置のうち、Y座標が最大となる位置のY座標値をYthreshとし、集合S、G、M1,M2,M3に含まれる位置のうち、Z座標が最小となる位置のZ座標値をZthreshとする。さらに、中間位置の集合M1,M2,M3にあるロボットは、以下の条件[中間位置条件1]を満たす(図4参照)。
(1)全てのロボットのX座標は、ある定数値Xthresh以下の値である。
(2)全てのロボットのY座標は、ある定数値Ythresh以下の値である。
(3)全てのロボットのZ座標は、ある定数値Zthresh以上の値である。
(4)X座標値がXthreshでない全てのロボットは、X軸正方向に接するロボットを持つ。
(5)Y座標値がYthreshでない全てのロボットは、Y軸正方向に接するロボットを持つ。
(6)Z座標値がZthreshでなく、X座標値がXthresh,Y座標値がYthreshの全てのロボットは、Z軸負方向に接するロボットを持つ。
(1)Z座標値が最大であるロボットは、全体で一辺の長さが偶数のX、Y平面内の長方形をなす。以下、この長方形状のことを天井ともいう。全体で一辺の長さが偶数となるため、天井は2×2のマスの塊で構成されているとも言える。
(2)Z座標が最大値ではないロボットは、必ずZ軸正方向に接するロボットを持つ。
(3)Z座標が最大値ではないロボットが必ず一つ存在する。
行動主体は部屋に配置されている各ロボットとなる。ロボットiの行動aは、静止、上下左右前後方向への1格子分の移動の計7種類のうちのいずれかを取る。例えば、a[i]∈{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倍増加していくことになる。
本実施形態では、これらの計算負荷の問題を解決するための方策の一つとして、ロボットの動作の過程を3つの段階にわけて考える。一つ目は、開始位置の集合Sから中間位置の集合M1、中間位置の集合M3から目標位置の集合Gへの圧縮および展開過程、二つ目は、中間位置の集合M1から中間位置の集合M2、中間位置の集合M2から中間位置の集合M3への中間変形過程、三つ目は、中間位置の集合M2における入れ替え過程である。
圧縮および展開過程のうち、まず圧縮過程について述べる。展開過程については、圧縮過程を時間的に逆再生させることで計算する。圧縮過程は2つの過程を含む。一つ目の過程においては、X=Xthresh+1の位置に固定されたX軸に垂直な第一仮想面と、開始位置(Xrs[j],Yrs[j],Zrs[j])にある仮想的なロボット(以下、「仮想ロボット」、または、単に「ロボット」ともいう)をX負方向無限遠からX軸正の方向に移動してくる第二仮想面を想定し、第二仮想面に当たったロボットを押して、かつ、すべてのロボットが第一仮想面を超えないようにし、X座標値がXthresh以下になるように圧縮する(後述するCompression_Process_Xにより実現する)。ここで、第二仮想面が押そうとするロボットがすでに第一仮想面の支えにより動くことが出来ない場合は、そのロボットについては、第一仮想面の支えを優先する。二つ目の過程においては、Y=Ythresh+1の位置に固定されたY軸に垂直な第三仮想面と、上記一つ目の圧縮過程後の各位置(Xr[i],Yr[i],Zr[i])にある仮想的なロボットをY負方向無限遠からY軸正の方向に移動してくる第四仮想面を想定し、第四仮想面に当たったロボットを押して、かつ、すべてのロボットが第三仮想面を超えないようにし、Y座標値がYthresh以下になるように圧縮する(後述するCompression_Process_Yにより実現する)。ここで、第三仮想面が押そうとするロボットがすでに第四仮想面の支えにより動くことが出来ない場合は、そのロボットについては、第三仮想面の支えを優先する。
(1)ロボットiの現時刻tmでの位置を変数(motion_x[tm][i],motion_y[tm][i],motion_z[tm][i])に格納する(i=0,1,…,p-1)。
(2)tmをインクリメントする。
(1) tm=0とする。ロボットiの位置を開始位置の集合Sに含まれる位置(Xrs[i],Yrs[i],Zrs[i])に設定する。[Motion_Data_Update]を実行する。
(2)後述の[Compression_Process_X_]を実行する。
(3)後述の[Compression_Process_Y]を実行する。
(4)現時刻tmでのロボットiの位置で、Z座標の最大値をZmax[1]に、各Z座標値が_zでの、X座標が_xであるロボットの数(つまり、__x,_zにおいて、Y軸方向に並んだロボットの数)を_y_num[1][_x][_z]に、各Z座標値_zでの、Y座標値が_yであるロボットの数(つまり、__y,_zにおいて、X軸方向に並んだロボットの数)を_x_num[1][_y][_z]に格納する。なお、_x_num[a][y][z]は、中間位置の集合Ma(aは1,2,3の何れか)における、Y座標値がyかつZ座標値がzであるロボットの個数を示す変数であり、_y_num[a][x][z]は、中間位置の集合Maにおける、X座標値がxかつZ座標値がzであるロボットの個数を示す変数である。Zmax[a]は、中間位置の集合MaにおけるZ座標の最大値を示す変数である。
(5)以上のロボット動作における、各時刻tのロボットiの位置(motion_x[t][i],motion_y[t][i],motion_z[t][i])を変数(motion_x_s_m1[t][i],motion_y_s_m1[t][i],motion_z_s_m1[t][i])に格納する。tm-1の値をt_s_m1に格納する。
(motion_x_s_m1[t][i],motion_y_s_m1[t][i],motion_z_s_m1[t][i])←(motion_x[t][i],motion_y[t][i],motion_z[t][i]).
t_s_m1←tm-1.
なお、a←bは変数aに値bを代入することを示す。この処理により、開始位置の集合Sを中間位置の集合M1に変形(圧縮)する。なお、motion_x_a_b[t][i],motion_y_a_b[t][i],motion_z_a_b[t][i]は、それぞれ、位置の集合a(aはS,M1,M2,M3の何れか)から位置の集合b(M1,M2,M3,Gの何れか)にロボットが移動、変形する際の時刻tにおけるロボットiのX座標値,Y座標値,Z座標値を示す変数である。
(1)tm=0とする。ロボットiの位置を目標位置の集合Gに含まれる位置(Xrg[i],Yrg[i],Zrg[i])に設定する。[Motion_Data_Update]を実行する。
(2)後述の[Compression_Process_X_]を実行する。
(3)後述の[Compression_Process_Y]を実行する。
(4)現時刻tmでのロボットiの位置で、Z座標の最大値をZmax[3]に、各Z座標値_zでの、(X座標が_xであるロボットの数)を_y_num[3][_x][_z]に、各Z座標値_zでの、(Y座標値が_yであるロボットの数)を_x_num[3][_y][_z]に格納する。
(5)以上のロボット動作における、各時刻tのロボットiの位置(motion_x[t][i],motion_y[t][i],motion_z[t][i])を変数(motion_x_m3_g[(tm-1)-t][i],motion_y_m3_g[(tm-1)-t][i],motion_z_m3_g[(tm-1)-t][i])に格納する。tm-1の値をt_m3_gに格納する。
(motion_x_m3_g[(tm-1)-t][i],motion_y_m3_g[(tm-1)-t][i],motion_z_m3_g[(tm-1)-t][i])
←(motion_x[t][i],motion_y[t][i],motion_z[t][i]).
t_m3_g←tm-1.
この処理により、中間位置の集合M3を目標位置の集合Gに変形(展開)する。以下、Compression_Process_X、Compression_Process_Yの例を説明する。
(1)現時刻tmでの仮想ロボット位置のX座標の最小値をXminとし、_xw=Xminとして、_xw< Xthreshの間、(2)〜(4)を繰り返す。
(2)全てのロボットiについて変数destination_to_be_compressed[i]=0とする。_flg_c=0とする。destination_to_be_compressed[i]はロボットiが移動(圧縮)するか否かを示す変数(1のとき移動し、0のとき移動しない)であり、_flg_cは移動(圧縮)するロボットが存在するか否かを示す変数(1のとき存在し、0のとき存在しない)を示す。
(3)X座標値が_xwである仮想ロボットiについて、以下を実行する。
(4)_flg_c=1のとき、destination_to_be_compressed[i]=1である全てのロボットのX座標値をインクリメントし、[Motion_Data_Update]を実行する。_xwをインクリメントする。
(1)現時刻tmでの仮想ロボット位置のY座標の最小値をYminとし、_yw=Yminとして、_yw<Ythreshの間、(2)〜(5)を繰り返す。
(2)全てのロボットiについて変数destination_to_be_compressed[i]=0とする。_flg_c=0とする。
(4)Y座標値が_ywである仮想ロボットiについて、以下を実行する。
(5)_flg_c=1のとき、destination_to_be_compressed[i]=1である全てのロボットのY座標値をインクリメントし、[Motion_Data_Update]を実行する。_ywをインクリメントする。
(1)全てのロボットのX座標は、ある定数値Xthresh以下の値である。
(2)全てのロボットのY座標は、ある定数値Xthresh以下の値である。
(3)全てのロボットのZ座標は、ある定数値Zthresh以上の値である。
(4)X座標値がXthreshでない全てのロボットは、X軸正方向に接するロボットを持つ。
(5)Y座標値がYthreshでない全てのロボットは、Y軸正方向に接するロボットを持つ。
(6)Z座標値がZthreshでなく、X座標値がXthresh,Y座標値がYthreshの全てのロボットは、Z軸負方向に接するロボットを持つ。
及び、[中間位置条件2]
(1)Z座標値が最大であるロボットは、全体で一辺の長さが偶数のX、Y平面内の長方形をなす。
(2)Z座標が最大値ではないロボットは、必ずZ軸正方向に接するロボットを持つ。
(3)Z座標が最大値ではないロボットが必ず一つ存在する。
を満たす。上記条件を満たすのであれば、中間位置の集合M2の成す形状はどのような形状であってもよい。例えば、天井を一辺が2×a個のロボットの位置からなる正方形状とする(天井に含まれるロボットの数は(2×a)2であり、aは1以上の偶数である)。中間位置の個数pを(2×a)2で割ったときの商bとし、剰余をcとしたとき、(2×a)2×b個のロボットの位置からなる直方体(幅:2×a,奥行き2×a,高さb)と、その直方体の底面に接するようにc個のロボットの位置を配置した形状を中間位置の集合M2の成す形状とする。このような天井により[中間位置条件2]の(1)を満たす。なお、[中間位置条件2]の(2),(3)を満たすために、b≧2とc≧1との少なくとも一方を満たす。c≧1のとき、底面に接するように配置されたc個のロボットの位置の内の1つは、中間位置条件1の(4),(5),(6)を満たすために、X座標値をXthreshとし、Y座標値をYthreshとする位置に配置される。c個のロボットの位置の内の他の位置は、中間位置条件1の(4),(5)を満たすために、X軸正方向及びY軸正方向において、他のロボットの位置と接する[中間位置条件1]の(1)〜(3)を満たす位置にその直方体の底面に接するように配置すればよい。例えば、底面に接するように配置されたc個のロボットの位置の内の1つが原点(Xthresh,Ythresh,Zthresh)に位置するように配置する。
(1)tm=0とする。[Motion_Data_Update]を実行する。
(2)Seed_Genedationを実行する。
(3)Middle_Transformを実行する。
(4)Seed_UnGenerationを実行する。
(5)各時刻tのロボットiの位置の値(motion_x[t][i], motion_y[t][i], motion_z[t][i])を変数(motion_x_m1_m2[t][i], motion_y_m1_m2[t][i], motion_z_m1_m2[t][i])に格納する。tm-1の値を、t_m1_m2に格納する。
(motion_x_m1_m2[t][i],motion_y_m1_m2[t][i],motion_z_m1_m2[t][i])
← (motion_x[t][i],motion_y[t][i],motion_z[t][i]).
t_m1_m2 ← tm-1.
(1)Xr[i]=Xthresh-(_x_num[1][Yr[i]][Zr[i]]-1)かつ、Xr[i]!=Xtrheshであり、Yr[i]が_x_num[1][Yr[i]][Zr[i]]>1を満たす最小値となるロボットiを選択し、_x_num[1][Yr[i]][Zr[i]],_y_num[1][Xr[i]][Zr[i]]をデクリメントする。
(2)ロボットiと同じY、Z座標値のロボットを全て、X軸正方向に1ステップ移動させ、X座標がXthresh+1のロボットをロボットi_seed1とする(図7A、図7B参照)。[Motion_Data_Update]を実行する。
(3)ロボットi_seed1をY座標がYthreshになるまで、Y軸正方向に1ステップ移動させて、[Motion_Data_Update]を実行することを繰り返す。
(4)ロボットi_seed1をZ座標がZthreshになるまで、Z軸負方向に1ステップ移動させて、[Motion_Data_Update]を実行することを繰り返す(図7B、図7C参照)。
(5)Yr[i]=Ythresh-(_y_num[1][Xr[i]][Zr[i]]-1)かつ、Yr[i]!=Ytrheshであり、Xr[i]が_y_num[1][Xr[i]][Zr[i]]>1を満たす最小値となるロボットiを選択し、_y_num[1][Xr[i]][Zr[i]],_x_num[1][Yr[i]][Zr[i]]をデクリメントする。
(6)ロボットiと同じX、Z座標値のロボットを全て、Y軸正方向に1ステップ移動させ、Y座標がYthresh+1のロボットをロボットi_seed2とする。[Motion_Data_Update]を実行する。(図7D参照)
(7)ロボットi_seed2をX座標がXthreshになるまで、X軸正方向に1ステップ移動させて、[Motion_Data_Update]を実行することを繰り返す。
(8)ロボットi_seed2をZ座標がZthreshになるまで、Z軸負方向に1ステップ移動させて、[Motion_Data_Update]を実行することを繰り返す(図7E参照)。
(9)中間位置の集合M2内でX座標値Xm2[i]がXthresh-(_x_num[2][Ym2[i]][Zm2[i]]-1)であり、かつ、Xm2[i]!=Xtrheshであり、Ym2[i]が_x_num[2][Ym2[i]][Zm2[i]]>1を満たす最小値となる位置iを選択し、_x_num[2][Ym2[i]][Zm2[i]],_y_num[2][Xm2[i]][Zm2[i]]をデクリメントする。Xseed[1] ← Xm2[i],Yseed[1] ← Ym2[i],Zseed[1] ← Zm2[i]。なお、Xma[i],Yma[i],Zma[i]はそれぞれ中間位置の集合Ma(aは1,2,3の何れか)におけるロボットiのX座標値、Y座標値、Z座標値を示す変数である。Xseed[a]、Yseed[a]、Zseed[a](aは1,または2)はそれぞれ、2つのシードロボットi_seedaのX座標値、Y座標値、Z座標値を示す変数である。
(10)中間位置の集合M2内でX座標値Xm2[i]がYthresh-( _y_num[2][Xm2[i]][Zm2[i]] - 1 )かつ、Ym2[i] != Ytrheshであり、Xm2[i]が_y_num[2][Xm2[i]][Zm2[i]]>1を満たす最小値となる位置iを選択し、_x_num[2][Ym2[i]][Zm2[i]],_y_num[2][Xm2[i]][Zm2[i]]をデクリメントする。Xseed[2] ← Xm2[i],Yseed[2] ← Ym2[i],Zseed[2] ←Z m2[i]。
柱部:Xr[i]=XthreshかつYr[i]=Ythreshの位置にあるロボットで構成される部分。
旗部:Xr[i]=XthreshかつYr[i]!=Ythreshの位置にあるロボットで構成される部分。
床部:柱部、旗部に属さないその他の部分全て。
(1)Remove_from_Floorを実行する。
(2)Remove_from_Flagを実行する。
(3)Remove_from_Poleを実行する。
(1)z = Zmax[1]からZthreshの全てのzについて、(2)〜(8)を繰り返す。
(2)y=Ythresh-(_y_num[1][Xthresh][z]-1)からYthreshの全てのyについて(3)〜(8)を繰り返す。
(3)_x_num[1][y][z]>_x_num[2][y][z]の間、(4)〜(8)を繰り返す。
(4)後述のAdjust_Seed_height(z)を実行する。
(5)Yr[i]=yかつZr[i]=zのロボットiを全て、X軸正方向に1ステップ移動させる。Motion_Data_Updateを実行する。Xr[i]=Xthresh+1のロボットiをロボットi_workとする。
(6)Yr[i_work] < Ythreshの間、ロボットi_workをY軸正方向に1ステップ移動させ、Motion_Data_Updateを実行することを繰り返す。
(7)後述のAdd_to_Destinationを実行する。
(8)_x_num[1][y][z]をデクリメントする。
(1)z = Zmax[1]からZthreshの全てのzについて、(2)〜(9)を繰り返す。
(2)_y_num[1][Xthresh][z] > _y_num[2][Xthresh][z]の間、(3)〜(9)を繰り返す。
(3)後述のAdjust_Seed_Height(z)を実行する。
(4)Xr[i]=XthreshかつZr[i]=zのロボットiを全て、Y軸正方向に1ステップ移動させる。Motion_Data_Updateを実行する。Yr[i]=Ythresh+1のロボットiをロボットi_workとする。
(5)ロボットi_workとロボットi_seed2をX軸正方向に1ステップ移動させる。Motion_Data_Updateを実行する。
(6)ロボットi_workをY軸負方向に1ステップ移動させる。Motion_Data_Updateを実行する。
(7)ロボットi_seed2をX軸負方向に1ステップ移動させる。Motion_Data_Updateを実行する。
(8)後述のAdd_to_Destinationを実行する。
(9)_y_num[1][Xthresh][z]をデクリメントする。
(1)Zmax[1]がZthreshより大きい間、(2)〜(4)を繰り返す。
(2)z=Zmax[1]とし、Adjust_Seed_Height(z)を実行する。
(3)Xr[i]=XthreshかつYr[i]=YthreshかつZr[i]=Zmax[1]のロボットiをX軸正方向に1ステップ移動させる。Motion_Data_Updateを実行する。
(4)後述のAdd_to_Destinationを実行する。
(5)Zmax[1]をデクリメントする。
(1) z != Zthreshの場合、z_target ← z-1とし、それ以外の場合、z_traget ← z+1とする。
(2) Zr[i_seed1] > z_targetの間、ロボットi_seed1とi_seed2をZ軸負方向に1ステップ移動させ、Motion_Data_Updateを実行することを繰り返す。
(3) Zr[i_seed1] < z_targetの間、ロボットi_seed1とi_seed2をZ軸正方向に1ステップ移動させ、Motion_Data_Updateを実行することを繰り返す。
(1)中間位置の集合M2の柱部が完成していなければAdd_to_Poleを実行して終了する。
(2)中間位置の集合M2の旗部が完成していなければAdd_to_Flagを実行して終了する。
(3)中間位置の集合M2の床部が完成していなければAdd_to_Floorを実行して終了する。
(1)後述のAdjust_Work_height(Zmax[1]+1)を実行する。
(2)Zr[i_work] < Zmax[1]+1の間、ロボットi_work,i_seed1,i_seed2をZ軸正方向に1ステップ移動させ、Motion_Data_Updateを実行することを繰り返す。
(3)ロボットi_workをX軸負方向に1ステップ移動させる。Motion_Data_Updateを実行する。
(4)Zmax[1]をインクリメントする。
(1)z_targetの値を、_y_num[2][Xthresh][z] > _y_num[1][Xthresh][z]を満たす最大のzの値に設定する。
(2)後述のAdjust_Work_Height(z_target)を実行する。
(3)ロボットi_workとi_seed1をY軸正方向に1ステップ移動させる。Motion_Data_Updateを実行する。
(4)ロボットi_workをX軸負方向に1ステップ移動させる。Motion_Data_Updateを実行する。
(5)ロボットi_seed1をY軸負方向に1ステップ移動させる。Motion_Data_Updateを実行する。
(6)Zr[i_work] > z_targetの間、ロボットi_work、i_seed1,i_seed2をZ軸負方向に1ステップ移動させ、Motion_Data_Updateを実行することを繰り返す。
(7)Zr[i_work] < z_targetの間、ロボットi_work、i_seed1,i_seed2をZ軸正方向に1ステップ移動させ、Motion_Data_Updateを実行することを繰り返す。
(8)Xr[i]=XthreshかつZr[i]=z_targetを満たす全てのロボットをY軸負方向に1ステップ移動させ、Motion_Data_Updateを実行する
(9)_y_num[1][Xthresh][z_target]をインクリメントする。
(1)y_target, z_targetの値を、_x_num[2][y][z] > _x_num[1][y][z]を満たす最大のy,zの値に設定する。
(2)後述のAdjust_Work_Height(z_target)を実行する。
(3)Zr[i_work]>z_targetの間、ロボットi_work、i_seed1,i_seed2をZ軸負方向に1ステップ移動させ、Motion_Data_Updateを実行することを繰り返す。
(4)Zr[i_work]<z_targetの間、ロボットi_work、i_seed1,i_seed2をZ軸正方向に1ステップ移動させ、Motion_Data_Updateを実行することを繰り返す。
(5)Yr[i_work]>y_targetの間、ロボットi_workをY軸負方向に1ステップ移動させ、Motion_Data_Updateを実行することを繰り返す。
(6)Yr[i]=y_targetかつZr[i]=z_targetを満たす全てのロボットをX軸負方向に1ステップ移動させ、Motion_Data_Updateを実行する
(7)_x_num[1][y_target][z_target]をインクリメントする。
(1)z != ZthreshかつZr[i_work] < Zr[i_seed1]の場合、ロボットi_workとi_seed1をZ軸正方向に1ステップ移動し、ロボットi_workをシードモジュール1とし、ロボットi_seed1をロボットi_workとして番号を入れ替える。Motion_Data_Updateを実行する。
(2)z = Zthresh かつ Zr[i_work] > Zr[i_seed1]の場合、以下の処理を行う。
(1) Zr[i_seed2] > Zseed[2] の間、ロボットi_seed2をZ軸負方向に1ステップ移動し、Motion_Data_Updateを実行することを繰り返す。
(2) Zr[i_seed2] < Zseed[2] の間、ロボットi_seed2をZ軸正方向に1ステップ移動し、Motion_Data_Updateを実行することを繰り返す。
(3) Xr[i_seed2] > Xseed[2] の間、ロボットi_seed2をX軸負方向に1ステップ移動し、Motion_Data_Updateを実行することを繰り返す。
(4)Xr[i]=Xseed[2], かつZr[i]=Zseed[2]を満たす全てのロボットをY軸負方向に1ステップ移動させる。Motion_Data_Updateを実行する。
(5) Zr[i_seed1] > Zseed[1] の間、ロボットi_seed1をZ軸負方向に1ステップ移動し、Motion_Data_Updateを実行することを繰り返す。
(6) Zr[i_seed1] < Zseed[1] の間、ロボットi_seed1をZ軸正方向に1ステップ移動し、Motion_Data_Updateを実行することを繰り返す。
(7) Yr[i_seed1] > Yseed[1] の間、ロボットi_seed1をY軸負方向に1ステップ移動し、Motion_Data_Updateを実行することを繰り返す。
(8)Yr[i]=Yseed[1], かつZr[i]=Zseed[1]を満たす全てのロボットをX軸負方向に1ステップ移動させる。Motion_Data_Updateを実行する。
上述の[Transform_from_M1_to_M2]における変数を以下のように入れ替える。
Zmax[1] → Zmax[2],Zmax[2] → Zmax[3].
_x_num[1][_y][_z] → _x_num[2][_y][_z],_x_num[2][_y][_z] → _x_num[3][_y][_z].
_y_num[1][_x][_z] → _y_num[2][_x][_z],_y_num[2][_x][_z] → _y_num[3][_x][_z].
Xm1→Xm2, Ym1→Ym2, Zm1→Zm2.
Xm2→Xm3, Ym2→Ym3, Zm2→Zm3.
(motion_x_m1_m2[t][i], motion_y_m1_m2[t][i], motion_z_m1_m2[t][i])→
(motion_x_m2_m3[t][i], motion_y_m2_m3[t][i], motion_z_m2_m3[t][i]).
t_m1_m2→t_m2_m3.
同様に[Transform_from_M1_to_M2]における変数を以下のように入れ替える。
Zmax[2] → Zmax[3].
_x_num[2][_y][_z] → _x_num[3][_y][_z].
_y_num[2][_x][_z] → _y_num[3][_x][_z].
Xm2 → Xm3, Ym2 → Ym3, Zm2 → Zm3
(motion_x_m1_m2[t][i], motion_y_m1_m2[t][i], motion_z_m1_m2[t][i]) →
(motion_x_m1_m3[t][i], motion_y_m1_m3[t][i], motion_z_m1_m3[t][i]).
t_m1_m2→t_m1_m3.
なお、この処理[Transform_from_M1_to_M3]は、中間位置の集合M2を経ずに、中間位置の集合M1から中間位置の集合M3に変形するときに用いる。
以上の処理を結合して、開始位置の集合Sから目標位置の集合Gまでの変形過程が求められる。
(1)[Compression_Process]を実行する。
(2)[Extension_Process]を実行する。
(3)[Transform_from_M1_to_M3]を実行する。
(4)変数(transform_S_to_G_x[t][i], transform_S_to_G_y[t][i] transform_S_to_G_z[t][i])のt=0〜t_s_m1に、変数 (motion_x_s_m1[t][i], motion_y_s_m1[t][i], motion_z_s_m1[t][i])の値を格納する。
(5)変数(transform_S_to_G_x[t][i], transform_S_to_G_y[t][i] transform_S_to_G_z[t][i])のt=t_s_m1+1〜t_s_m1+1 + t_m1_m3に、変数(motion_x_m1_m3[t][i], motion_y_m1_m3[t][i], motion_z_m1_m3[t][i])の値を格納する。
(6)全てのロボットiに対し(motion_x_m1_m3[t_m1_m3][i], motion_y_m1_m3[t_m1_m3][i], motion_z_m1_m3[t_m1_m3][i])= (motion_x_m3_g[0][j], motion_y_m3_g[0][j],motion_z_m3_g[0][j])となるjの値を探し、match[i]に格納する。match[i]には、中間位置の集合M1のロボットiに対応する中間位置の集合M3のロボットのインデックスjが格納される。
(7)変数(transform_S_to_G_x[t][i], transform_S_to_G_y[t][i] transform_S_to_G_z[t][i])のt=t_s_m1 + 1 + t_m1_m3 + 1〜t_s_m1 + 1 + t_m1_m3 + 1 + t_m3_gに、変数 (motion_x_m1_m3[t][match[i]], motion_y_m1_m3[t][match[i]], motion_z_m1_m3[t][ match[i]])の値を格納する。
開始位置の集合S内の位置jと目標位置の集合G内の位置jは、同じロボットによって占有されるものとする。そのような場合、開始位置の集合S内の特定の位置jにあったロボットiが、目標位置の集合G内の決まった特定位置jに移動するためには、先述のTrandformation_from_S_to_G_Homoの処理に加えて、中間位置の集合M2にあるロボットの位置の入れ替えを行う必要がある。そのための入れ替え処理を[Transformation_M2_to_M2]として、開始位置の集合Sから目標位置の集合Gまでのヘテロ隊列変形処理は以下のとおりである。
(1)[Compression_Process]を実行する。
(2)[Extension_Process]を実行する。
(3)[Transform_from_M1_to_M2]を実行する。
(4)[Transform_from_M2_to_M3]を実行する。
(5)全てのロボットiに対し(motion_x_m2_m3[t_m2_m3][i],motion_y_m2_m3[t_m2_m3][i],motion_z_m2_m3[t_m2_m3][i])=(motion_x_m3_g[0][j],motion_y_m3_g[0][j],motion_z_m3_g[0][j])となるjの値を探し、match[j]=iとする。
(6)[Transformation_from_M2_to_M2]を実行する。
(7)変数(transform_S_to_G_x[t][i],transform_S_to_G_y[t][i]transform_S_to_G_z[t][i])のt=0〜t_s_m1に、変数(motion_x_s_m1[t][i],motion_y_s_m1[t][i],motion_z_s_m1[t][i])の値を格納する。
(8)変数(transform_S_to_G_x[t][i], transform_S_to_G_y[t][i]transform_S_to_G_z[t][i])のt=t_s_m1+1〜t_s_m1+1 + t_m1_m2に、変数(motion_x_m1_m2[t][i],motion_y_m1_m2[t][i],motion_z_m1_m2[t][i])の値を格納する。
(9)変数(transform_S_to_G_x[t][i], transform_S_to_G_y[t][i]transform_S_to_G_z[t][i])のt=t_s_m1+1+t_m1_m2+1〜t_s_m1+1+t_m1_m2+1+t_m2_m2に、変数(motion_x_m2_m2[t][i],motion_y_m2_m2[t][i],motion_z_m2_m2[t][i])の値を格納する。
(10)変数(transform_S_to_G_x[t][i], transform_S_to_G_y[t][i]transform_S_to_G_z[t][i])のt= t_s_m1+1 + t_m1_m2+1 + t_m2_m2+1〜t_s_m1+1 + t_m1_m2+1 + t_m2_m2+1 + t_m2_m3に、変数 (motion_x_m2_m3[t][match[i]], motion_y_m2_m3[t][match[i]], motion_z_m2_m3[t][ match[i]])の値を格納する。
(11)変数(transform_S_to_G_x[t][i], transform_S_to_G_y[t][i] transform_S_to_G_z[t][i])のt= t_s_m1+1 + t_m1_m2+1 + t_m2_m2+1 + t_m2_m3+1〜t_s_m1+1 + t_m1_m2+1 + t_m2_m2+1 + t_m2_m3+1 + t_m3_gに、変数(motion_x_m3_g[t][i], motion_y_m3_g[t][i], motion_z_m3_g[t][i])の値を格納する。
中間位置の集合M2は、天井がXY平面内の辺の長さが偶数の長方形をなしている。したがって中間位置の集合M2の天井は2×2の正方形の集合である。もし、一つのロボットが天井の上に乗っていると仮定したとき、その天井上のロボットと、中間位置の集合M2内にある任意のロボットは、図9に示すような動作で入れ替えが可能である。しかし、中間位置の集合M2におけるロボットの入れ替え過程の任意の時点で、この天井の上のロボットの存在を確保することが出来なければ、中間位置の集合M2における入れ替え動作は完了できない。通常、天井の上に移動することが可能なロボットは、天井内にあって、Z軸負方向にロボットが接しているロボットである。しかし、中間位置の集合M2は、天井のZ軸方向の厚みには特に制限はないので、天井の厚み1でかつ、天井の下に一つのロボットが接しているのみという状況がありうる。この場合、中間位置の集合M2での入れ替え動作を開始した時点で、天井の上に出ることが可能なロボットは一つのみである。このロボットをi1(図9のi_originに対応)として入れ替えを開始したとする。ロボットi1がまず、Z軸負方向に接するロボットとともにZ軸正方向に1ステップ移動して天井上に押し出される。その後、ロボットi1が、入れ替え先のロボットi2(図9のi_targetに対応)と位置を入れ替える。ロボットi1に追い出されて天井上に出たロボットi2が、入れ替え先のロボットi3と位置を入れ替える。ロボットi2に追い出されて天井上に出たロボットi3が、入れ替え先のロボットi4と位置を入れ替える…の一連の入れ替え動作を繰り返していく。この一連の入れ替え動作は、天井上に追い出されたロボットinの行先がロボットi1が元あった位置になるまでは繰り返すことが可能であるが、それ以降は不可能である。それ以降は、天井の上に出ることが可能となるロボットは、ロボットi1が元あった位置にありすでに入れ替えの済んだロボットinのみだからである。このロボットi1からinまでの入れ替え動作を処理Permutation_1で行う。当然であるが、この時点で、まだ入れ替えが完了していないロボットが存在しない保証はない。よって、これ以降は、このロボットinを利用して、入れ替え動作を継続する必要がある。このロボットinを利用した入れ替え動作を処理Permutation_2で行う。処理Permutation_2では、まず、ロボットinをロボットi1のときと同様に、天井の上に押し出す。続いて、まだ入れ替えの済んでいないロボットのうち一台を選択してロボットin+1とする。ここで、ロボットinは、ロボットin+1と位置を入れ替えて、ロボットin+1を天井上に追い出す。この後、ロボットinに追い出されて天井上に出たロボットin+1が、入れ替え先のロボットin+2と位置を入れ替える。ロボットin+1に追い出されて天井上に出たロボットin+2が、入れ替え先のロボットin+3と位置を入れ替える…の一連の入れ替え動作を繰り返していく。そして、この一連の入れ替え動作は、天井上に追い出されたロボットin+mの行先がロボットin+1が元あった位置になるまでは繰り返すことが出来る。ロボットin+mの行先がロボットin+1が元あった位置に収まったとき、天井に追い出されるのはロボットinである。以後、同様に、ロボットinを使用した入れ替えを開始していけばよい。
(1)全てのロボットiについて、変数perm[i]=0とする。
(2)全てのロボットiについて、もし、match[i]=iならば、perm[i]=1とする。変数perm[i]は、中間位置の集合M2においてロボットiが本来あるべき位置にあるか否かを示す変数である(この例ではperm[i]=1はあるべき位置にあることを示し、perm[i]=0はあるべき位置にないことを示す)。
(3)[Permutation_1]を実行する。
(4)perm[i]=0なるiが存在する間、繰り返し[Permutation_2]を実行する。
(1)天井内に、perm[i]=0かつ、Z軸負方向に接するロボットを持つロボットiを選択し、ロボットi_originとする。もしそのようなロボットが見つからないなら、Z軸負方向に接するロボットを持つロボットiを選択し、ロボットi_origin2とし、Xhome ← Xr[i_origin2],Yhome ← Yr[i_origin2]として、終了する。なお、Xhome,Yhomeはロボットi_origin2の元の位置(X座標値、Y座標値)を示す変数である。
(2)変数i_destの値をmatch[i_origin]とする(i_dest ← match[i_origin])。
(3)i_origin1 ← i_origin, Xhome ← Xr[i_origin], Yhome ← Yr[i_origin].
(4)Xr[i]=Xr[i_origin]かつYr[i]=Yr[i_origin]を満たす全てのロボットをZ軸正方向に1ステップ移動させる。
(5)i_dest!=i_origin1の間、(6)〜(8)を繰り返す。
(6)Cube_Exchange(i_dest,i_origin)を実行する。
(7)perm[i_origin]←1とする。
(8)i_origin ← i_dest,とした後i_dest ← perm[i_origin]。
(9)Go_Home(Xhome,Yhome,i_origin)を実行する。perm[i_origin]←1とする。
(10)位置(Xhome, Yhome, Zmax[2])にあるロボットをロボットi_origin2とする。
(1)perm[i]=0であるロボットiを選択し、ロボットi_originとする。
(2)i_dest ← perm[i_origin], i_origin3 ← i_originとする。
(3)Xhome2 ← Xr[i_origin3], Yhome2 ← Yr[i_origin3], Zhome2[i_origin3]とする。
(4) Xr[i]=Xr[i_origin2]かつ Yr[i]=Yr[i_origin2]を満たす全てのロボットをZ軸正方向に1ステップ移動させる。
(5)Cube_Exchange(i_origin3, i_origin2)を実行する。
(6)i_dest != i_origin3の間、(7)〜(9)を繰り返す。
(7)Cube_Exchange(i_dest, i_origin)を実行する。
(8)perm[i_origin]←1とする。
(9)i_origin ← i_dest, とした後、i_dest ← perm[i_origin]。
(10)Cube_Exchange(i_origin2, i_origin)を実行する。
(11)perm[i_origin]←1とする。
(12)Go_Home(Xhome,Yhome, i_origin2)を実行する。
(1)Horizontal_Exchange(i_dest, i_origin)を実行する。
(2)Vertical_Exchange(i_dest, i_origin)を実行する。
天井上のロボットi_originを、位置(Xr[i_dest],Yr[i_dest],Zmax[2]+1)に、XかY方向に接する位置に移動させる。
(1)ロボットi_originとロボットi_destのX座標が等しい時、(1-1)に移行し、それ以外の場合(2)に移行する。
ロボットi_destとX、Y座標が等しく、ロボットi_destよりZ座標が大きい全てのロボットをY軸負方向に1ステップ移動する。Motion_Data_Updateを実行する。
(2)もしロボットi_originのY座標-Ythreshが奇数ならば(2-1)に移行し、それ以外の場合(2-2)に移行する。
ロボットiを位置(x,y,Zmax[2]+1)まで移動させ、その後、ロボットiとX、Y座標が同じ全てのロボットとともにZ軸負方向に1ステップ移動する。
図10は第一実施形態に係る行動制御システム100の機能ブロック図を、図11はその処理フローの例を示す。行動制御システム100は、図10に示すように、行動選択部120と、隣接状態判定部124と、位置更新部123と、位置判定部126と、記憶部140と、通信部150と、入力部160とを含む。行動選択部120は、圧縮過程処理部120Aと展開過程処理部120Bと中間変形過程処理部120Cと入れ替え過程処理部120Dとを含む。
入力部160には、中間位置M2の形状を表す変数の値Zmax[2], _y_num[2][_x][_z],_x_num[2][_y][_z])及び、
p台のロボットiのそれぞれの開始位置、言い換えると、p個の開始位置の集合S={(Xrs[0],Yrs[0],Zrs[0]),(Xrs[1],Yrs[1],Zrs[1]),…,(Xrs[p-1],Yrs[p-1],Zrs[p-1])}、p個の目標位置の集合G={(Xrg[0],Yrg[0],Zrg[0]),(Xrg[1],Yrg[1],Zrg[1]),…,(Xrg[p-1],Yrg[p-1],Zrg[p-1])}が入力され、記憶部140に記憶される。なお、開始位置の集合及び目標位置の集合については、各ロボットiが各位置の集合の中でどの位置に位置するのか特定されている。一方、中間位置の集合M2については、この時点では、各ロボットiが中間位置の集合M2の中でどの位置に位置するのか特定されていない。中間位置の集合M2がどのような形状、配置であるかが特定されており、入力される。
行動制御システム100が実装されているロボットも含め、全てのロボットは、通信部150を介して、三次元空間上の上下左右前後方向(以下「6方向」ともいう)において隣接する他のロボットと通信することができる。
行動選択部120は、上述の方法で、p台のロボットを制御する(s120)。なお、圧縮過程処理部120A、展開過程処理部120B、中間変形過程処理部120C、入れ替え過程処理部120Dでは、ロボットの動作開始前に、各ロボットの動作の順序、方向を予め計算し、記憶部140に記憶しておく。なお、開始位置の集合Sに位置するロボットまたは仮想的なロボットを目標位置の集合Gに位置するように隊列変形する処理は、開始位置の集合Sを目標位置の集合Gに変形する処理に相当し、ロボットを移動する処理と、仮想的なロボットを移動する処理と、(開始、目的もしくは中間)位置を移動する処理とは同じ処理に相当する。また、上述の方法により、各時刻におけるロボットの位置が特定できるため、時刻tにおけるロボットの位置と、時刻t-1におけるロボットの位置の差分から各ロボットの動作、方向を計算することができる。行動選択部120は、記憶部140から各時刻における各ロボットの動作を取り出し、各時刻において移動させるロボットに対して移動方向を示す制御信号を送信し、各ロボットはその制御信号に従って動作する。
圧縮過程処理部120Aは、X=Xthresh+1の位置に固定されたX軸に垂直な第一仮想面と、X負方向無限遠からX軸正の方向に移動してくる第二仮想面を想定し、第二仮想面に当たった位置(開始位置の集合Sに含まれる位置、または、含まれていた位置)を押して、かつ、すべての位置が第一仮想面を超えないようにし、X座標値がXthresh以下になるように圧縮する。例えば、第二仮想面に当たった、X座標値が小さい、開始位置の集合Sに含まれる位置から順に、X軸正の方向におけるX座標値が大きい、開始位置の集合Sに含まれる位置と隣接する場合にはその隣接する位置と一緒に、X軸正の方向に平行移動させる(圧縮する)。なお、第二仮想面が押そうとする位置がすでに第一仮想面の支えにより(第一仮想面に到達し)動くことが出来ない場合は、その位置については、第一仮想面の支えを優先する(第一仮想面を超えないことを優先する)。
展開過程処理部120Bは、X=Xthresh+1の位置に固定されたX軸に垂直な第一仮想面と、X負方向無限遠からX軸正の方向に移動してくる第二仮想面を想定する。第二仮想面に当たった位置(目標位置の集合Gに含まれる位置、または、含まれていた位置)を押して、かつ、すべての位置が第一仮想面を超えないようにし、X座標値がXthresh以下になるように圧縮する。例えば、第二仮想面に当たった、X座標値が小さい、目標位置の集合Gに含まれる位置から順に、X軸正の方向におけるX座標値が大きい、目標位置の集合Gに含まれる位置と隣接する場合にはその隣接する位置と一緒に、X軸正の方向に平行移動させる(圧縮する)。なお、第二仮想面が押そうとする位置がすでに第一仮想面の支えにより(第一仮想面に到達し)動くことが出来ない場合は、その位置については、第一仮想面の支えを優先する(第一仮想面を超えないことを優先する)。
中間変形過程処理部120Cは、中間位置の集合M1と中間位置の集合M3とを受け取り、中間位置の集合M1を中間位置の集合M3に変形する過程を計算する。ここで、ホモ隊列変形の場合には、中間位置の集合M2を経ずに、中間位置の集合M1を中間位置の集合M3に変形する。一方、ヘテロ隊列変形の場合には、中間位置の集合M1を中間位置の集合M2に変形する過程、及び、中間位置の集合M2を中間位置の集合M3に変形する過程を計算する。ここで、中間位置の集合M1,M3は、以下の条件(1)-(6)を、M2は以下の条件(1)-(9)を満たす形状である。
(1)全てのロボットのX座標は、ある定数値Xthresh以下の値である。
(2)全てのロボットのY座標は、ある定数値Ythresh以下の値である。
(3)全てのロボットのZ座標は、ある定数値Zthresh以上の値である。
(4)X座標値がXthreshでない全てのロボットは、X軸正方向に接するロボットを持つ。
(5)Y座標値がYthreshでない全てのロボットは、Y軸正方向に接するロボットを持つ。
(6)Z座標値がZthreshでなく、X座標値がXthresh,Y座標値がYthreshの全てのロボットは、Z軸負方向に接するロボットを持つ。
(7)Z座標値が最大であるロボットは、全体で一辺の長さが偶数のX、Y平面内の長方形をなす。
(8)Z座標が最大値ではないロボットは、必ずZ軸正方向に接するロボットを持つ。
(9)Z座標が最大値ではないロボットが必ず一つ存在する。
柱部:Xr[i]=XthreshかつYr[i]=Ythreshの位置にあるロボットで構成される部分。
旗部:Xr[i]=XthreshかつYr[i]!=Ythreshの位置にあるロボットで構成される部分。
床部:柱部、旗部に属さないその他の部分全て。
である。中間変形過程処理部120Cは、上述のMiddle_Transformを実行することで、中間位置の集合M1から中間位置の集合M2の柱部、旗部、床部を建造する。
入れ替え部120Dは、目標位置の集合Gから中間位置の集合M3を経て中間位置の集合M2に変形した際の、ロボットiの中間位置の集合M3における位置を中間変形過程処理部120Cから取得する。例えば、上述の[Extension_Process]を実行し、中間位置の集合M3を目標位置の集合Gに展開する過程とは、逆の順番で、反対の方向に移動させることで、目標位置の集合Gから中間位置の集合M3に変形する過程を得ることができる。
位置更新部123は、各i=0,1,…,p-1について、i番目のロボットの現在の位置(Xr[i],Yr[i],Zr[i])において、行動選択部120で決定した行動を実行した場合のロボットの移動後(行動後)の位置(Xr'[i],Yr'[i],Zr'[i])を計算し、計算された(Xr'[i],Yr'[i],Zr'[i])で記憶部140に格納されたi番目のロボットの位置を更新する(S123)。言い換えれば、位置更新部123は、行動選択部120で決定した行動に基づいて、ロボットが行動した場合に想定される位置(以下、「想定位置」ともいう)を計算し、ロボットの位置を更新し記憶部140に格納する。
隣接状態判定部124は、ロボットの2次元平面上の上下左右の隣接する位置に、他のロボットが存在するか否かを判定し、(S124),判定結果を記憶部140に格納する。
位置判定部126は、隣接状態判定部124の判定結果を用いて、行動後位置を求め、行動後位置(Xr"[i],Yr"[i],Zr"[i])と想定位置(Xr'[i],Yr'[i],Zr'[i])とが一致するか否かを判定する(S126)。なお、一致しない場合には、移動するように制御されたロボットが何らかのトラブルにより、制御通りに移動できなかったと考えられる。この場合、行動後位置(Xr"[i],Yr"[i],Zr"[i])と想定位置(Xr'[i],Yr'[i],Zr'[i])との少なくとも一方を補正すればよい。補正方法としては様々な手法が考えられる。例えば、移動した全てのロボットに対して、制御前の位置に戻るように指示し、行動後位置(Xr"[i],Yr"[i],Zr"[i])を補正してもよいし、想定位置(Xr'[i],Yr'[i],Zr'[i])を行動後位置(Xr"[i],Yr"[i],Zr"[i])に合わせて補正してもよい。
このような構成により、制御対象物が移動する際に、他の制御対象物の周りを回り込まずに、制御対象物同士が、接続状態を維持したまま、移動を行うという前提での隊列制御を実現し、複雑な機構を必要とせずに、制御対象物同士が接したままの状態を維持しつつ任意の開始位置における隊列形成状態から、他の任意の目標位置における隊列形成状態へ変形動作を行うことができる。
本実施形態では、各格子(マス)は、立方体であるが、他の形状であってもよい。格子は左右方向、上下方向及び前後方向に連続して配置される。また、各格子は左右方向で他の二つの格子と隣接し、上下方向で他の二つの格子と隣接し、前後方向で他の二つの格子と隣接する。言い換えると、各格子は、ロボットの移動できる方向と同じ方向においてのみ、他の格子と隣接する。この条件を満たせば、各格子はどのような形状であってもよい。また、「直交」とは、厳密に「垂直に交わること」を意味しなくともよく、例えば、各格子は、平行六面体であってもよく、各格子が他の二つの格子と隣接する方向の一方を上下方向とし、他方を左右方向とすればよく、上下方向及び左右方向とからなる平面に対して平行でない方向を前後方向とすればよい。
本発明は上記の実施形態及び変形例に限定されるものではない。例えば、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
また、上記の実施形態及び変形例で説明した各装置における各種の処理機能をコンピュータによって実現してもよい。その場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
Claims (7)
- pを5以上の整数の何れかとし、p台の制御対象物をp個の開始位置の集合からp個の目標位置の集合に移動させるための行動制御を行う行動制御システムであって、
第一方向に対して平行でない方向を第二方向とし、第一方向に対して反対の方向を第三方向とし、第二方向に対して反対の方向を第四方向とし、第一方向と第二方向との成す平面に対して平行でない方向を第五方向とし、第五方向に対して反対の方向を第六方向とし、各開始位置及び各目標位置は、それぞれ前記第一方向〜第六方向の少なくとも何れかの方向において他の開始位置及び目標位置と隣接し、目標位置の集合に配置されたp台の制御対象物及び開始位置の集合に配置されたp台の制御対象物はそれぞれ一塊の任意の形状を成し、
前記制御対象物は、当該制御対象物の3次元空間上の第一方向において隣接する第一位置、第二方向において隣接する第二位置、第三方向において隣接する第三位置、第四方向において隣接する第四位置とし、第五方向において隣接する第五位置とし、第六方向において隣接する第六位置とし、静止するか、または、3次元空間上の第一〜第六位置の何れかに移動するように制御されるものとし、
開始位置の集合及び目標位置の集合に含まれる位置のうち、第一方向における最大の座標値をXthreshとし、第二方向における最大の座標値をYthreshとし、第五方向における最小の座標値をZthreshとし、
第一方向における座標値Xthresh+1に固定された第一方向に垂直な第一仮想面と、第三方向無限遠から第一方向に移動してくる第二仮想面とを想定し、第二仮想面に当たった開始位置の集合に配置される制御対象物、または、配置されていた制御対象物を第二仮想面の移動方向に押して、かつ、すべての制御対象物が第一仮想面を超えないようにし、第一方向の座標値がXthresh以下になるように圧縮し、第二方向における座標値Ythresh+1に固定された第二方向に垂直な第三仮想面と、第四方向無限遠から第二方向に移動してくる第四仮想面とを想定し、第四仮想面に当たった、先の第一仮想面及び第二仮想面を使用して圧縮された形状に含まれる制御対象物を第四仮想面の移動方向に押して、かつ、すべての制御対象物が第三仮想面を超えないようにし、第二方向の座標値がYthresh以下になるように圧縮し、圧縮された形状に含まれる制御対象物の位置を中間位置の集合M1として求める圧縮過程処理部と、
前記第二仮想面に当たった目標位置の集合に配置される仮想的な制御対象物、または、配置されていた仮想的な制御対象物を押して、かつ、すべての仮想的な制御対象物が第一仮想面を超えないようにし、第一方向の座標値がXthresh以下になるように圧縮し、前記第四仮想面に当たった、先の第一仮想面及び第二仮想面を使用して圧縮された形状に含まれる仮想的な制御対象物を第四仮想面の移動方向に押して、かつ、すべての仮想的な制御対象物が第三仮想面を超えないようにし、第二方向の座標値がYthresh以下になるように圧縮し、圧縮された形状に含まれる仮想的な制御対象物の位置を中間位置の集合M3として求め、前記目標位置の集合から前記中間位置の集合M3を求める際の順番とは逆の順番で、前記目標位置の集合に配置される仮想的な制御対象物から前記中間位置の集合M3を求める際の移動方向とは反対の方向に各制御対象物を移動させる展開過程処理部と、
前記中間位置の集合M1に配置される制御対象物が成す形状を前記中間位置の集合M3に配置される制御対象物が成す形状に変形する過程を求める中間変形過程処理部とを含む、
行動制御システム。 - 請求項1の行動制御システムであって、
前記中間変形過程処理部は、
(A)前記中間位置の集合M1に配置される制御対象物の中から2つのシード制御対象物を選択し、一方のシード制御対象物をX座標がXthresh,Y座標がYthresh+1である待機位置に移動させ、他方のシード制御対象物をX座標がXthresh+1,Y座標がYthreshである待機位置に移動させ、両方のシード制御対象物の待機位置がおなじZ座標値であり、シード制御対象物の位置を含まない中間位置の集合M1を求め、
(B)前記中間位置の集合M1及びM3に配置される制御対象物において、Xthreshであり、かつ、Ythreshである位置に配置される制御対象物を柱部とし、Xthreshであり、かつ、Ythreshでない位置に配置される制御対象物を旗部とし、柱部、旗部に属さない位置に配置される制御対象物を床部とし、前記シード制御対象物を用いて、前記シード制御対象物を含まない中間位置の集合M1に配置される制御対象物を柱部、旗部、床部に分解し、前記シード制御対象物を含まない中間位置の集合M3に配置される制御対象物の柱部、旗部、床部を建造し、
(C)待機位置のシード制御対象物の位置を中間位置の集合M3に組み込み、前記シード制御対象物の位置を含む中間位置の集合M3を求める、
行動制御システム。 - 請求項1の行動制御システムであって、
(1)中間位置の集合M2に配置される全ての制御対象物の第一方向における座標値はXthresh以下であり、(2)中間位置の集合M2に配置される全ての制御対象物の第二方向における座標値はYthresh以下であり、(3)中間位置の集合M2に配置される全ての制御対象物の第五方向における座標値はZthresh以上であり、(4)中間位置の集合M2に配置される制御対象物の内、第一方向における座標値がXthreshでない全ての制御対象物は、第一方向において他の制御対象物と接し、(5)中間位置の集合M2に配置される制御対象物の内、第二方向における座標値がYthreshでない全ての制御対象物は、第二方向において他の制御対象物と接し、(6)中間位置の集合M2に配置される制御対象物の内、第五方向における座標値がZthreshでなく、第一方向における座標値がXthresh,第二方向における座標値がYthreshの全ての制御対象物は、第六方向において他の制御対象物と接し、(7)中間位置の集合M2に配置される制御対象物の内、第五方向における座標値が最大である制御対象物は、全体で一辺の長さが偶数の第一方向及び第二方向を含む平面内において長方形をなし、(8)中間位置の集合M2に配置される制御対象物の内、第五方向における座標値が最大値ではない制御対象物は、必ず第五方向において他の制御対象物と接し、(9)中間位置の集合M2に配置される制御対象物には、第五方向における座標値が最大値ではない制御対象物が必ず一つ存在するものとし、
前記中間変形過程処理部は、
(A)前記中間位置の集合M1に配置される制御対象物の中から2つのシード制御対象物を選択し、一方のシード制御対象物をX座標がXthresh,Y座標がYthresh+1である待機位置に移動させ、他方のシード制御対象物をX座標がXthresh+1,Y座標がYthreshである待機位置に移動させ、両方のシード制御対象物の待機位置がおなじZ座標値であり、シード制御対象物の位置を含まない中間位置の集合M1を求め、
(B)前記中間位置の集合M1及びM2に配置される制御対象物において、Xthreshであり、かつ、Ythreshである制御対象物を柱部とし、Xthreshであり、かつ、Ythreshでない制御対象物を旗部とし、柱部、旗部に属さない制御対象物を床部とし、前記シード制御対象物を用いて、前記シード制御対象物の位置を含まない中間位置の集合M1に配置される制御対象物を柱部、旗部、床部に分解し、前記シード制御対象物の位置を含まない中間位置の集合M2に配置される制御対象物の柱部、旗部、床部を建造し、
(C)待機位置のシード制御対象物の位置を前記シード制御対象物の位置を含まない中間位置の集合M2に組み込み、前記シード制御対象物の位置を含む中間位置の集合M2を求め、
(D)前記中間変形過程処理部は、前記中間位置の集合M2に配置される制御対象物の中から2つのシード制御対象物を選択し、一方のシード制御対象物をX座標がXthresh,Y座標がYthresh+1である待機位置に移動させ、他方のシード制御対象物をX座標がXthresh+1,Y座標がYthreshである待機位置に移動させ、両方のシード制御対象物の待機位置がおなじZ座標値であり、シード制御対象物の位置を含まない中間位置の集合M2を求め、
(E)前記シード制御対象物を用いて、前記シード制御対象物の位置を含まない中間位置の集合M2に配置される制御対象物を柱部、旗部、床部に分解し、前記シード制御対象物の位置を含まない中間位置の集合M3に配置される制御対象物の柱部、旗部、床部を建造し、
(F)待機位置のシード制御対象物の位置を前記シード制御対象物の位置を含まない中間位置の集合M3に組み込み、前記シード制御対象物の位置を含む中間位置の集合M3を求め、
(G)開始位置の集合に配置されたp台の制御対象物を中間位置の集合M2に移動させた際の、中間位置の集合M2における各制御対象物を、目標位置の集合に配置されたp台の仮想的な制御対象物を中間位置の集合M2に移動させた際の、中間位置の集合M2における各制御対象物に移動させるための各制御対象物の対応関係を計算する、
行動制御システム。 - pを5以上の整数の何れかとし、p台の制御対象物をp個の開始位置の集合からp個の目標位置の集合に移動させるための行動制御を行う行動制御方法であって、
第一方向に対して平行でない方向を第二方向とし、第一方向に対して反対の方向を第三方向とし、第二方向に対して反対の方向を第四方向とし、第一方向と第二方向との成す平面に対して平行でない方向を第五方向とし、第五方向に対して反対の方向を第六方向とし、各開始位置及び各目標位置は、それぞれ前記第一方向〜第六方向の少なくとも何れかの方向において他の開始位置及び目標位置と隣接し、目標位置の集合に配置されたp台の制御対象物及び開始位置の集合に配置されたp台の制御対象物はそれぞれ一塊の任意の形状を成し、
前記制御対象物は、当該制御対象物の3次元空間上の第一方向において隣接する第一位置、第二方向において隣接する第二位置、第三方向において隣接する第三位置、第四方向において隣接する第四位置とし、第五方向において隣接する第五位置とし、第六方向において隣接する第六位置とし、静止するか、または、3次元空間上の第一〜第六位置の何れかに移動するように制御されるものとし、
開始位置の集合及び目標位置の集合に含まれる位置のうち、第一方向における最大の座標値をXthreshとし、第二方向における最大の座標値をYthreshとし、第五方向における最小の座標値をZthreshとし、
圧縮過程処理部が、第一方向における座標値Xthresh+1に固定された第一方向に垂直な第一仮想面と、第三方向無限遠から第一方向に移動してくる第二仮想面とを想定し、第二仮想面に当たった開始位置の集合に配置される制御対象物、または、配置されていた制御対象物を第二仮想面の移動方向に押して、かつ、すべての制御対象物が第一仮想面を超えないようにし、第一方向の座標値がXthresh以下になるように圧縮し、第二方向における座標値Ythresh+1に固定された第二方向に垂直な第三仮想面と、第四方向無限遠から第二方向に移動してくる第四仮想面とを想定し、第四仮想面に当たった、先の第一仮想面及び第二仮想面を使用して圧縮された形状に含まれる制御対象物を第四仮想面の移動方向に押して、かつ、すべての制御対象物が第三仮想面を超えないようにし、第二方向の座標値がYthresh以下になるように圧縮し、圧縮された形状に含まれる制御対象物の位置を中間位置の集合M1として求める圧縮過程処理ステップと、
展開過程処理部が、前記第二仮想面に当たった目標位置の集合に配置される仮想的な制御対象物、または、配置されていた仮想的な制御対象物を押して、かつ、すべての仮想的な制御対象物が第一仮想面を超えないようにし、第一方向の座標値がXthresh以下になるように圧縮し、前記第四仮想面に当たった、先の第一仮想面及び第二仮想面を使用して圧縮された形状に含まれる仮想的な制御対象物を第四仮想面の移動方向に押して、かつ、すべての仮想的な制御対象物が第三仮想面を超えないようにし、第二方向の座標値がYthresh以下になるように圧縮し、圧縮された形状に含まれる仮想的な制御対象物の位置を中間位置の集合M3として求め、前記目標位置の集合から前記中間位置の集合M3を求める際の順番とは逆の順番で、前記目標位置の集合に配置される仮想的な制御対象物から前記中間位置の集合M3を求める際の移動方向とは反対の方向に各制御対象物を移動させる展開過程処理ステップと、
中間変形過程処理部が、前記中間位置の集合M1に配置される制御対象物が成す形状を前記中間位置の集合M3に配置される制御対象物が成す形状に変形する過程を求める中間変形過程処理ステップとを含む、
行動制御方法。 - 請求項4の行動制御方法であって、
前記中間変形過程処理ステップは、
(A)前記中間位置の集合M1に配置される制御対象物の中から2つのシード制御対象物を選択し、一方のシード制御対象物をX座標がXthresh,Y座標がYthresh+1である待機位置に移動させ、他方のシード制御対象物をX座標がXthresh+1,Y座標がYthreshである待機位置に移動させ、両方のシード制御対象物の待機位置がおなじZ座標値であり、シード制御対象物の位置を含まない中間位置の集合M1を求め、
(B)前記中間位置の集合M1及びM3に配置される制御対象物において、Xthreshであり、かつ、Ythreshである位置に配置される制御対象物を柱部とし、Xthreshであり、かつ、Ythreshでない位置に配置される制御対象物を旗部とし、柱部、旗部に属さない位置に配置される制御対象物を床部とし、前記シード制御対象物を用いて、前記シード制御対象物を含まない中間位置の集合M1に配置される制御対象物を柱部、旗部、床部に分解し、前記シード制御対象物を含まない中間位置の集合M3に配置される制御対象物の柱部、旗部、床部を建造し、
(C)待機位置のシード制御対象物の位置を中間位置の集合M3に組み込み、前記シード制御対象物の位置を含む中間位置の集合M3を求める、
行動制御方法。 - 請求項4の行動制御方法であって、
(1)中間位置の集合M2に配置される全ての制御対象物の第一方向における座標値はXthresh以下であり、(2)中間位置の集合M2に配置される全ての制御対象物の第二方向における座標値はYthresh以下であり、(3)中間位置の集合M2に配置される全ての制御対象物の第五方向における座標値はZthresh以上であり、(4)中間位置の集合M2に配置される制御対象物の内、第一方向における座標値がXthreshでない全ての制御対象物は、第一方向において他の制御対象物と接し、(5)中間位置の集合M2に配置される制御対象物の内、第二方向における座標値がYthreshでない全ての制御対象物は、第二方向において他の制御対象物と接し、(6)中間位置の集合M2に配置される制御対象物の内、第五方向における座標値がZthreshでなく、第一方向における座標値がXthresh,第二方向における座標値がYthreshの全ての制御対象物は、第六方向において他の制御対象物と接し、(7)中間位置の集合M2に配置される制御対象物の内、第五方向における座標値が最大である制御対象物は、全体で一辺の長さが偶数の第一方向及び第二方向を含む平面内において長方形をなし、(8)中間位置の集合M2に配置される制御対象物の内、第五方向における座標値が最大値ではない制御対象物は、必ず第五方向において他の制御対象物と接し、(9)中間位置の集合M2に配置される制御対象物には、第五方向における座標値が最大値ではない制御対象物が必ず一つ存在するものとし、
前記中間変形過程処理ステップは、
(A)前記中間位置の集合M1に配置される制御対象物の中から2つのシード制御対象物を選択し、一方のシード制御対象物をX座標がXthresh,Y座標がYthresh+1である待機位置に移動させ、他方のシード制御対象物をX座標がXthresh+1,Y座標がYthreshである待機位置に移動させ、両方のシード制御対象物の待機位置がおなじZ座標値であり、シード制御対象物の位置を含まない中間位置の集合M1を求め、
(B)前記中間位置の集合M1及びM2に配置される制御対象物において、Xthreshであり、かつ、Ythreshである制御対象物を柱部とし、Xthreshであり、かつ、Ythreshでない制御対象物を旗部とし、柱部、旗部に属さない制御対象物を床部とし、前記シード制御対象物を用いて、前記シード制御対象物の位置を含まない中間位置の集合M1に配置される制御対象物を柱部、旗部、床部に分解し、前記シード制御対象物の位置を含まない中間位置の集合M2に配置される制御対象物の柱部、旗部、床部を建造し、
(C)待機位置のシード制御対象物の位置を前記シード制御対象物の位置を含まない中間位置の集合M2に組み込み、前記シード制御対象物の位置を含む中間位置の集合M2を求め、
(D)前記中間変形過程処理部は、前記中間位置の集合M2に配置される制御対象物の中から2つのシード制御対象物を選択し、一方のシード制御対象物をX座標がXthresh,Y座標がYthresh+1である待機位置に移動させ、他方のシード制御対象物をX座標がXthresh+1,Y座標がYthreshである待機位置に移動させ、両方のシード制御対象物の待機位置がおなじZ座標値であり、シード制御対象物の位置を含まない中間位置の集合M2を求め、
(E)前記シード制御対象物を用いて、前記シード制御対象物の位置を含まない中間位置の集合M2に配置される制御対象物を柱部、旗部、床部に分解し、前記シード制御対象物の位置を含まない中間位置の集合M3に配置される制御対象物の柱部、旗部、床部を建造し、
(F)待機位置のシード制御対象物の位置を前記シード制御対象物の位置を含まない中間位置の集合M3に組み込み、前記シード制御対象物の位置を含む中間位置の集合M3を求め、
(G)開始位置の集合に配置されたp台の制御対象物を中間位置の集合M2に移動させた際の、中間位置の集合M2における各制御対象物を、目標位置の集合に配置されたp台の仮想的な制御対象物を中間位置の集合M2に移動させた際の、中間位置の集合M2における各制御対象物に移動させるための各制御対象物の対応関係を計算する、
行動制御方法。 - 請求項1から請求項3に記載の何れかの行動制御システムとしてコンピュータを機能させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016007760A JP6559582B2 (ja) | 2016-01-19 | 2016-01-19 | 行動制御システム、その方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016007760A JP6559582B2 (ja) | 2016-01-19 | 2016-01-19 | 行動制御システム、その方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2017129954A JP2017129954A (ja) | 2017-07-27 |
JP6559582B2 true JP6559582B2 (ja) | 2019-08-14 |
Family
ID=59396714
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016007760A Active JP6559582B2 (ja) | 2016-01-19 | 2016-01-19 | 行動制御システム、その方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6559582B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6777661B2 (ja) * | 2018-02-14 | 2020-10-28 | 日本電信電話株式会社 | 制御装置、方法及びプログラム |
US20230018658A1 (en) * | 2019-12-16 | 2023-01-19 | Nippon Telegraph And Telephone Corporation | Action control apparatus, method and program for the same |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2933247B2 (ja) * | 1991-10-29 | 1999-08-09 | 川崎重工業株式会社 | ロボット装置 |
JP6174523B2 (ja) * | 2014-06-25 | 2017-08-02 | 日本電信電話株式会社 | 行動制御システム、その方法及びプログラム |
-
2016
- 2016-01-19 JP JP2016007760A patent/JP6559582B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2017129954A (ja) | 2017-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114193447B (zh) | 多机器人控制方法、电子设备及存储介质 | |
JP6154543B2 (ja) | 3次元造形システム、情報処理装置、3次元造形モデル配置方法および3次元造形モデル配置プログラム | |
JP6559591B2 (ja) | 行動制御システム、その方法及びプログラム | |
JP6174523B2 (ja) | 行動制御システム、その方法及びプログラム | |
CN111714895B (zh) | 游戏数据的处理方法及装置、存储介质、计算机设备 | |
JP6879233B2 (ja) | 制御装置、方法及びプログラム | |
JP6559582B2 (ja) | 行動制御システム、その方法及びプログラム | |
CN103744999A (zh) | 基于层次划分存储结构的空间矢量数据在线交互制图方法 | |
JP6489923B2 (ja) | 行動制御システム、及びそのプログラム | |
CN114700937B (zh) | 机械臂及其运动路径规划方法、控制系统、介质及机器人 | |
JP6285849B2 (ja) | 行動制御システム、その方法及びプログラム | |
JP6392187B2 (ja) | 行動制御システム、その方法及びプログラム | |
JP7226588B2 (ja) | 行動制御装置、その方法及びプログラム | |
JP6633467B2 (ja) | 行動制御システム、行動制御方法、プログラム | |
JP6939395B2 (ja) | 制御装置、方法及びプログラム | |
WO2019159927A1 (ja) | 制御装置、方法及びプログラム | |
JP7136365B2 (ja) | 移動ロボット、移動ロボットの制御方法及びプログラム | |
JP6939396B2 (ja) | 隊列制御装置、隊列制御方法、およびプログラム | |
US11625050B2 (en) | Moving robot, moving robot control method and program therefor | |
Lu et al. | Overview of Algorithms Based on Warehousing Path Planning | |
JP6881352B2 (ja) | 制御装置、方法及びプログラム | |
JP2020035123A (ja) | 移動ロボット、移動ロボットの制御方法及びプログラム | |
WO2022153475A1 (ja) | 制御装置、ハミルトン閉路拡張装置、方法及びプログラム | |
CN114415827B (zh) | 一种为虚拟物体提供实体交互的方法、系统及装置 | |
JP6553000B2 (ja) | 制御対象物位置入れ替え制御装置、制御対象物位置入れ替え制御方法、プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20180228 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20181225 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20181226 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20190208 |
|
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: 20190716 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20190717 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6559582 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |