目次
前
次
システム状態遷移
センサー、モータを動かすブロックが完成したなら
システムの状態遷移を考えます。
状態遷移図を描いて、最上位でのテスト、デバッグを
やりやすくして、開発時間を短縮します。
通勤電車の中で描いた、最終状態遷移図は、以下。
各状態の概要を、次のようにしました。
NONE
電源投入、動作上限時間経過で、状態NONEになります。
start gateが開いたなら、次の状態に遷移。
start gateの開閉判定は、用意したAPI get_start を利用。
NORMAL
クランクとレーンチェンジのマーカーを検出するまで
状態NORMALで動作させます。
クランクマーカーは、1本の白線になるので、センサーが
ALL_WHITEを検出時とします。
NORMAL→CRANKの状態遷移の条件は、ALL_WHITE検出。
レーンチェンジマーカーは、左右のどちらかに寄せた白線に
なるので、センサーがLEFT_WHITEあるいはRIGHT_WHITEを検出
時とします。
NORMAL→LANEの状態遷移条件は、LEFT_WHITEかRIGHT_WHITE検出。
CRANK
状態CRANKは、LEFT_WHITEかRIGHT_WHITEを検出するまでに限定。
動作は状態NORMALのときと同じですが、移動速度を抑えて直進。
状態CRANKから状態ROTATEに遷移するための条件が必要なので
単純にLEFT_WHITEかRIGHT_WHITEを検出したときとします。
CRANK→ROTATEの状態遷移条件は、LEFT_WHITEかRIGHT_WHITE検出。
状態ROTATEで利用ため、方向をLEFTかRIGHTとして記憶します。
ROTATE
状態ROTATEは、左あるいは右に90度旋回することにしました。
90度旋回が終わるのは、センターラインCENTERを検出したときにします。
CENTER検出まで、指定方向に信地旋回を継続。
ROTATE→NORMALの状態遷移条件は、CENTER検出。
LANE
状態LANEは、LEFT_WHITEかRIGHT_WHITEを検出してからALL_BLACKを
検出するまで。
レーンチェンジの場合、コース上にセンターラインがない
ALL_BLACKがあります。これを検出してから方向を変えます。
ALL_BLACKを検出したなら、次の状態に遷移させます。
LANE→CHANGEの状態遷移条件は、ALL_BLACK検出。
CHANGE
状態CHANGEは、ALL_BLACKを検出してから指定時間経過までとします。
コースから脱輪すると失格になるので、移動速度により
左右に傾ける角度が変わることに。そこで、移動速度を
利用して、傾けてから直進に戻すまでの時間と計算。
これを指定時間とします。
BLIND
状態BLINDは、センターラインCENTERを検出するまでとします。
状態と大まかな動作を考えたので、スクリプト言語で状態NONEを
除いた内容を記述しました。
#!/usr/bin/python
# BLIND
def perform_blind(x) :
# get state
xstate = x[0]
# sensor
xsensor = x[1]
xl = 30
xr = 30
# direction
if len(x) > 2:
xdir = x[1]
dir = 'DIR_CENTER'
# next state
state = xstate+1
if xstate == 61:
# judge
if xsensor == 'CENTER':
state = 63
if xstate == 63:
# judge
if xdir == 'DIR_LEFT':
xl = 35
xr = 30
dir = 'DIR_LEFT'
elif xdir == 'DIR_RIGHT':
xl = 30
xr = 35
dir = 'DIR_RIGHT'
if xstate == 67:
state = 10
# concatenate
result = [state,xl,xr,dir]
return result
# CHNAGE
def perform_change(x):
# get state
xstate = x[0]
# sensor
xsensor = x[1]
xl = 30
xr = 30
# direction
xdir = x[2]
if xdir == 'DIR_LEFT':
dir = 'DIR_RIGHT'
elif xdir == 'DIR_RIGHT':
dir = 'DIR_LEFT'
else:
dir = ''
# next state
state = xstate+1
if xstate == 50:
# judge
if xdir == 'DIR_LEFT':
xl = 30
xr = 50
dir = 'DIR_RIGHT'
elif xdir == 'DIR_RIGHT':
xl = 50
xr = 30
dir = 'DIR_LEFT'
else:
xl = 30
xr = 30
dir = ''
if xstate == 54:
state = 60
# concatenate
result = [state,xl,xr]
if xstate == 54:
result = [state,xl,xr,dir]
return result
# LANE
def perform_lane(x):
# get state
xstate = x[0]
# sensor
xsensor = x[1]
if xsensor == 'ALL_BLACK':
xl = 20
xr = 20
if xsensor == 'LEFT_WHITE':
xl = 30
xr = 30
if xsensor == 'RIGHT_WHIT':
xl = 30
xr = 30
elif xsensor == 'CENTER':
xl = 30
xr = 30
elif xsensor == 'TINY_LEFT':
xl = 30
xr = 35
elif xsensor == 'LEFT':
xl = 30
xr = 35
elif xsensor == 'BIG_LEFT':
xl = 30
xr = 35
elif xsensor == 'TINY_RIGHT':
xl = 35
xr = 30
elif xsensor == 'RIGHT':
xl = 35
xr = 30
elif xsensor == 'BIG_RIGHT':
xl = 35
xr = 30
else:
xl = 30
xr = 30
# direction
xdir = x[2]
if xdir == 'DIR_LEFT':
dir = ['DIR_LEFT','DIR_RIGHT']
elif xdir == 'DIR_RIGHT':
dir = ['DIR_RIGHT','DIR_LEFT']
else:
dir = ['DIR_CENTER','DIR_CENTER']
# next state
state = xstate+1
if xstate == 43:
# judge
if xsensor == 'ALL_BLACK':
state = 50
else:
state = 40
# concatenate
result = [state,xl,xr]
if state > 49:
result = [state,xl,xr,dir]
return result
# ROTATE
def perform_rotate(x):
# get state
xstate = x[0]
# sensor
xsensor = x[1]
if xsensor == 'ALL_BLACK':
xl = 20
xr = 20
elif xsensor == 'CENTER':
xl = 30
xr = 30
elif xsensor == 'TINY_LEFT':
xl = 30
xr = 35
elif xsensor == 'LEFT':
xl = 30
xr = 35
elif xsensor == 'BIG_LEFT':
xl = 30
xr = 35
elif xsensor == 'TINY_RIGHT':
xl = 35
xr = 30
elif xsensor == 'RIGHT':
xl = 35
xr = 30
elif xsensor == 'BIG_RIGHT':
xl = 35
xr = 30
else:
xl = 30
xr = 30
# direction
dir = 'DIR_CENTER'
# next state
state = xstate+1
if xstate == 33:
# judge
if xsensor == 'CENTER':
state = 10
else:
state = 30
# concatenate
result = [state,xl,xr]
if state == 10:
result = [state,xl,xr,'return NORMAL']
return result
# CRANK
def perform_crank(x):
# get state
xstate = x[0]
# sensor
xsensor = x[1]
if xsensor == 'ALL_BLACK':
xl = 20
xr = 20
elif xsensor == 'ALL_WHITE':
xl = 20
xr = 20
elif xsensor == 'LEFT_WHITE':
xl = 25
xr = 25
elif xsensor == 'RIGHT_WHITE':
xl = 25
xr = 25
elif xsensor == 'CENTER':
xl = 30
xr = 30
elif xsensor == 'TINY_LEFT':
xl = 35
xr = 30
elif xsensor == 'LEFT':
xl = 40
xr = 30
elif xsensor == 'BIG_LEFT':
xl = 45
xr = 30
elif xsensor == 'TINY_RIGHT':
xl = 50
xr = 55
elif xsensor == 'RIGHT':
xl = 30
xr = 40
elif xsensor == 'BIG_RIGHT':
xl = 30
xr = 45
elif xsensor == 'BOTH_WHITE':
xl = 30
xr = 20
else:
xl = 30
xr = 30
# direction
if xsensor == 'LEFT_WHITE':
dir = 'DIR_LEFT'
elif xsensor == 'RIGHT_WHITE':
dir = 'DIR_RIGHT'
else:
dir = 'DIR_CENTER'
# next state
state = xstate+1
if xstate == 23:
# judge
if xsensor == 'LEFT_WHITE':
state = 30
elif xsensor == 'RIGHT_WHITE':
state = 30
else:
state = 20
# concatenate
result = [state,xl,xr]
if state > 29:
result = [state,xl,xr,dir]
return result
# NORMAL
def perform_normal(x):
# get state
xstate = x[0]
# sensor
xsensor = x[1]
if xsensor == 'ALL_BLACK':
xl = 30
xr = 30
elif xsensor == 'ALL_WHITE':
xl = 40
xr = 40
elif xsensor == 'LEFT_WHITE':
xl = 45
xr = 45
elif xsensor == 'RIGHT_WHITE':
xl = 45
xr = 45
elif xsensor == 'CENTER':
xl = 50
xr = 50
elif xsensor == 'TINY_LEFT':
xl = 55
xr = 50
elif xsensor == 'LEFT':
xl = 60
xr = 50
elif xsensor == 'BIG_LEFT':
xl = 70
xr = 50
elif xsensor == 'TINY_RIGHT':
xl = 50
xr = 55
elif xsensor == 'RIGHT':
xl = 50
xr = 60
elif xsensor == 'BIG_RIGHT':
xl = 50
xr = 70
elif xsensor == 'BOTH_WHITE':
xl = 20
xr = 20
else:
xl = 50
xr = 50
# direction
if xsensor == 'LEFT_WHITE':
dir = 'DIR_LEFT'
elif xsensor == 'RIGHT_WHITE':
dir = 'DIR_RIGHT'
else:
dir = 'DIR_CENTER'
# next state
state = xstate+1
if xstate == 13:
# judge
if xsensor == 'ALL_WHITE':
state = 20
elif xsensor == 'LEFT_WHITE':
state = 40
elif xsensor == 'RIGHT_WHITE':
state = 40
else:
state = 10
# concatenate
result = [state,xl,xr]
if state > 19:
result = [state,xl,xr,dir]
return result
# NORMAL stimulus
def normal_stimulus():
ii = range(10,14)
for e in ii:
for ee in range(0,len(mydic)):
xx = [e,mydic[ee]]
print xx,'=>',perform_normal(xx)
# CRANK stimulus
def crank_stimulus():
ii = range(20,24)
for e in ii:
for ee in range(0,len(mydic)):
xx = [e,mydic[ee]]
print xx,'=>',perform_crank(xx)
# ROTATE stimulus
def rotate_stimulus():
ii = range(30,34)
for e in ii:
for ee in range(0,len(mydic)):
xx = [e,mydic[ee]]
print xx,'=>',perform_rotate(xx)
# LANE stimulus
def lane_stimulus():
ii = range(40,44)
dlist = ['DIR_LEFT','DIR_RIGHT']
for e in ii:
for e1 in range(0,len(mydic)):
for e2 in dlist:
xx = [e,mydic[e1],e2]
print xx,'=>',perform_lane(xx)
# CHANGE stimulus
def change_stimulus():
ii = range(50,55)
dlist = ['DIR_LEFT','DIR_RIGHT']
for e in ii:
for e1 in range(0,len(mydic)):
for e2 in dlist:
xx = [e,mydic[e1],e2]
print xx,'=>',perform_change(xx)
# BLIND
def blind_stimulus():
ii = range(60,68)
dlist = ['DIR_LEFT','DIR_RIGHT']
for e in ii:
for e1 in range(0,len(mydic)):
for e2 in dlist:
xx = [e,mydic[e1],e2]
print xx,'=>',perform_blind(xx)
mydic = []
mydic.append('ALL_BLACK')
mydic.append('ALL_WHITE')
mydic.append('LEFT_WHITE')
mydic.append('RIGHT_WHITE')
mydic.append('CENTER')
mydic.append('TINY_RIGHT')
mydic.append('RIGHT')
mydic.append('BIG_RIGHT')
mydic.append('TINY_LEFT')
mydic.append('LEFT')
mydic.append('BIG_LEFT')
mydic.append('BOTH_WHITE')
mydic.append('ILLEAGAL')
# NORMAL
normal_stimulus()
# CRANK
crank_stimulus()
# ROTATE
rotate_stimulus()
# LANE
lane_stimulus()
# CHANGE
change_stimulus()
# BLIND
blind_stimulus()
Pythonを利用し、状態遷移に必要な次のパラメータを入力。
- 現在の状態値
- センサー値
- 旋回方向(変更する車線位置)
現在の状態値は整数、他の2パラメータは文字列とします。
文字列の利用で、考えやすくなります。
関数からの変値は、次の状態値、左右のモータ用DUTY比、旋回に
利用する方向としてまとめ。
NORMAL状態のときに、状態値とセンサー値を与えた時の
動作を確認。
[10,'ALL_BLACK'] => [11,30,30]
[10,'ALL_WHITE'] => [11,40,40]
[10,'LEFT_WHITE'] => [11,45,45]
[10,'RIGHT_WHITE'] => [11,45,45]
[10,'CENTER'] => [11,50,50]
[10,'TINY_RIGHT'] => [11,50,55]
[10,'RIGHT'] => [11,50,60]
[10,'BIG_RIGHT'] => [11,50,70]
[10,'TINY_LEFT'] => [11,55,50]
[10,'LEFT'] => [11,60,50]
[10,'BIG_LEFT'] => [11,70,50]
[10,'BOTH_WHITE'] => [11,20,20]
[10,'ILLEAGAL'] => [11,50,50]
[11,'ALL_BLACK'] => [12,30,30]
[11,'ALL_WHITE'] => [12,40,40]
[11,'LEFT_WHITE'] => [12,45,45]
[11,'RIGHT_WHITE'] => [12,45,45]
[11,'CENTER'] => [12,50,50]
[11,'TINY_RIGHT'] => [12,50,55]
[11,'RIGHT'] => [12,50,60]
[11,'BIG_RIGHT'] => [12,50,70]
[11,'TINY_LEFT'] => [12,55,50]
[11,'LEFT'] => [12,60,50]
[11,'BIG_LEFT'] => [12,70,50]
[11,'BOTH_WHITE'] => [12,20,20]
[11,'ILLEAGAL'] => [12,50,50]
[12,'ALL_BLACK'] => [13,30,30]
[12,'ALL_WHITE'] => [13,40,40]
[12,'LEFT_WHITE'] => [13,45,45]
[12,'RIGHT_WHITE'] => [13,45,45]
[12,'CENTER'] => [13,50,50]
[12,'TINY_RIGHT'] => [13,50,55]
[12,'RIGHT'] => [13,50,60]
[12,'BIG_RIGHT'] => [13,50,70]
[12,'TINY_LEFT'] => [13,55,50]
[12,'LEFT'] => [13,60,50]
[12,'BIG_LEFT'] => [13,70,50]
[12,'BOTH_WHITE'] => [13,20,20]
[12,'ILLEAGAL'] => [13,50,50]
[13,'ALL_BLACK'] => [10,30,30]
[13,'ALL_WHITE'] => [20,40,40,'DIR_CENTER']
[13,'LEFT_WHITE'] => [40,45,45,'DIR_LEFT']
[13,'RIGHT_WHITE'] => [40,45,45,'DIR_RIGHT']
[13,'CENTER'] => [10,50,50]
[13,'TINY_RIGHT'] => [10,50,55]
[13,'RIGHT'] => [10,50,60]
[13,'BIG_RIGHT'] => [10,50,70]
[13,'TINY_LEFT'] => [10,55,50]
[13,'LEFT'] => [10,60,50]
[13,'BIG_LEFT'] => [10,70,50]
[13,'BOTH_WHITE'] => [10,20,20]
[13,'ILLEAGAL'] => [10,50,50]
状態遷移図にある、3つのセンサー値で、対応する
状態に遷移していることを確認できました。
[13,'ALL_WHITE'] => [20,40,40,'DIR_CENTER']
[13,'LEFT_WHITE'] => [40,45,45,'DIR_LEFT']
[13,'RIGHT_WHITE'] => [40,45,45,'DIR_RIGHT']
CRANK状態のときに、状態値とセンサー値を与えて動作確認。
[20,'ALL_BLACK'] => [21,20,20]
[20,'ALL_WHITE'] => [21,20,20]
[20,'LEFT_WHITE'] => [21,25,25]
[20,'RIGHT_WHITE'] => [21,25,25]
[20,'CENTER'] => [21,30,30]
[20,'TINY_RIGHT'] => [21,50,55]
[20,'RIGHT'] => [21,30,40]
[20,'BIG_RIGHT'] => [21,30,45]
[20,'TINY_LEFT'] => [21,35,30]
[20,'LEFT'] => [21,40,30]
[20,'BIG_LEFT'] => [21,45,30]
[20,'BOTH_WHITE'] => [21,30,20]
[20,'ILLEAGAL'] => [21,30,30]
[21,'ALL_BLACK'] => [22,20,20]
[21,'ALL_WHITE'] => [22,20,20]
[21,'LEFT_WHITE'] => [22,25,25]
[21,'RIGHT_WHITE'] => [22,25,25]
[21,'CENTER'] => [22,30,30]
[21,'TINY_RIGHT'] => [22,50,55]
[21,'RIGHT'] => [22,30,40]
[21,'BIG_RIGHT'] => [22,30,45]
[21,'TINY_LEFT'] => [22,35,30]
[21,'LEFT'] => [22,40,30]
[21,'BIG_LEFT'] => [22,45,30]
[21,'BOTH_WHITE'] => [22,30,20]
[21,'ILLEAGAL'] => [22,30,30]
[22,'ALL_BLACK'] => [23,20,20]
[22,'ALL_WHITE'] => [23,20,20]
[22,'LEFT_WHITE'] => [23,25,25]
[22,'RIGHT_WHITE'] => [23,25,25]
[22,'CENTER'] => [23,30,30]
[22,'TINY_RIGHT'] => [23,50,55]
[22,'RIGHT'] => [23,30,40]
[22,'BIG_RIGHT'] => [23,30,45]
[22,'TINY_LEFT'] => [23,35,30]
[22,'LEFT'] => [23,40,30]
[22,'BIG_LEFT'] => [23,45,30]
[22,'BOTH_WHITE'] => [23,30,20]
[22,'ILLEAGAL'] => [23,30,30]
[23,'ALL_BLACK'] => [20,20,20]
[23,'ALL_WHITE'] => [20,20,20]
[23,'LEFT_WHITE'] => [30,25,25,'DIR_LEFT']
[23,'RIGHT_WHITE'] => [30,25,25,'DIR_RIGHT']
[23,'CENTER'] => [20,30,30]
[23,'TINY_RIGHT'] => [20,50,55]
[23,'RIGHT'] => [20,30,40]
[23,'BIG_RIGHT'] => [20,30,45]
[23,'TINY_LEFT'] => [20,35,30]
[23,'LEFT'] => [20,40,30]
[23,'BIG_LEFT'] => [20,45,30]
[23,'BOTH_WHITE'] => [20,30,20]
[23,'ILLEAGAL'] => [20,30,30]
CRANK→ROTATEは、センサー値としてLEFT_WHITEかRIGHT_WHITEを
検出したときなので、それができたことを確認。
[23,'LEFT_WHITE'] => [30,25,25,'DIR_LEFT']
[23,'RIGHT_WHITE'] => [30,25,25,'DIR_RIGHT']
ROTATE状態のときに、状態値とセンサー値を与えて動作を確認。
[30,'ALL_BLACK'] => [31,20,20]
[30,'ALL_WHITE'] => [31,30,30]
[30,'LEFT_WHITE'] => [31,30,30]
[30,'RIGHT_WHITE'] => [31,30,30]
[30,'CENTER'] => [31,30,30]
[30,'TINY_RIGHT'] => [31,35,30]
[30,'RIGHT'] => [31,35,30]
[30,'BIG_RIGHT'] => [31,35,30]
[30,'TINY_LEFT'] => [31,30,35]
[30,'LEFT'] => [31,30,35]
[30,'BIG_LEFT'] => [31,30,35]
[30,'BOTH_WHITE'] => [31,30,30]
[30,'ILLEAGAL'] => [31,30,30]
[31,'ALL_BLACK'] => [32,20,20]
[31,'ALL_WHITE'] => [32,30,30]
[31,'LEFT_WHITE'] => [32,30,30]
[31,'RIGHT_WHITE'] => [32,30,30]
[31,'CENTER'] => [32,30,30]
[31,'TINY_RIGHT'] => [32,35,30]
[31,'RIGHT'] => [32,35,30]
[31,'BIG_RIGHT'] => [32,35,30]
[31,'TINY_LEFT'] => [32,30,35]
[31,'LEFT'] => [32,30,35]
[31,'BIG_LEFT'] => [32,30,35]
[31,'BOTH_WHITE'] => [32,30,30]
[31,'ILLEAGAL'] => [32,30,30]
[32,'ALL_BLACK'] => [33,20,20]
[32,'ALL_WHITE'] => [33,30,30]
[32,'LEFT_WHITE'] => [33,30,30]
[32,'RIGHT_WHITE'] => [33,30,30]
[32,'CENTER'] => [33,30,30]
[32,'TINY_RIGHT'] => [33,35,30]
[32,'RIGHT'] => [33,35,30]
[32,'BIG_RIGHT'] => [33,35,30]
[32,'TINY_LEFT'] => [33,30,35]
[32,'LEFT'] => [33,30,35]
[32,'BIG_LEFT'] => [33,30,35]
[32,'BOTH_WHITE'] => [33,30,30]
[32,'ILLEAGAL'] => [33,30,30]
[33,'ALL_BLACK'] => [30,20,20]
[33,'ALL_WHITE'] => [30,30,30]
[33,'LEFT_WHITE'] => [30,30,30]
[33,'RIGHT_WHITE'] => [30,30,30]
[33,'CENTER'] => [10,30,30,'return NORMAL']
[33,'TINY_RIGHT'] => [30,35,30]
[33,'RIGHT'] => [30,35,30]
[33,'BIG_RIGHT'] => [30,35,30]
[33,'TINY_LEFT'] => [30,30,35]
[33,'LEFT'] => [30,30,35]
[33,'BIG_LEFT'] => [30,30,35]
[33,'BOTH_WHITE'] => [30,30,30]
[33,'ILLEAGAL'] => [30,30,30]
ROTATE→NORMALは、センサー値としてCENTERを検出した
ときなので、それができたことを確認。
[33,'CENTER'] => [10,30,30,'return NORMAL']
LANE状態のときに、状態値とセンサー値を与えた時の
動作を確認。
[40,'ALL_BLACK','DIR_LEFT'] => [41,30,30]
[40,'ALL_BLACK','DIR_RIGHT'] => [41,30,30]
[40,'ALL_WHITE','DIR_LEFT'] => [41,30,30]
[40,'ALL_WHITE','DIR_RIGHT'] => [41,30,30]
[40,'LEFT_WHITE','DIR_LEFT'] => [41,30,30]
[40,'LEFT_WHITE','DIR_RIGHT'] => [41,30,30]
[40,'RIGHT_WHITE','DIR_LEFT'] => [41,30,30]
[40,'RIGHT_WHITE','DIR_RIGHT'] => [41,30,30]
[40,'CENTER','DIR_LEFT'] => [41,30,30]
[40,'CENTER','DIR_RIGHT'] => [41,30,30]
[40,'TINY_RIGHT','DIR_LEFT'] => [41,35,30]
[40,'TINY_RIGHT','DIR_RIGHT'] => [41,35,30]
[40,'RIGHT','DIR_LEFT'] => [41,35,30]
[40,'RIGHT','DIR_RIGHT'] => [41,35,30]
[40,'BIG_RIGHT','DIR_LEFT'] => [41,35,30]
[40,'BIG_RIGHT','DIR_RIGHT'] => [41,35,30]
[40,'TINY_LEFT','DIR_LEFT'] => [41,30,35]
[40,'TINY_LEFT','DIR_RIGHT'] => [41,30,35]
[40,'LEFT','DIR_LEFT'] => [41,30,35]
[40,'LEFT','DIR_RIGHT'] => [41,30,35]
[40,'BIG_LEFT','DIR_LEFT'] => [41,30,35]
[40,'BIG_LEFT','DIR_RIGHT'] => [41,30,35]
[40,'BOTH_WHITE','DIR_LEFT'] => [41,30,30]
[40,'BOTH_WHITE','DIR_RIGHT'] => [41,30,30]
[40,'ILLEAGAL','DIR_LEFT'] => [41,30,30]
[40,'ILLEAGAL','DIR_RIGHT'] => [41,30,30]
[41,'ALL_BLACK','DIR_LEFT'] => [42,30,30]
[41,'ALL_BLACK','DIR_RIGHT'] => [42,30,30]
[41,'ALL_WHITE','DIR_LEFT'] => [42,30,30]
[41,'ALL_WHITE','DIR_RIGHT'] => [42,30,30]
[41,'LEFT_WHITE','DIR_LEFT'] => [42,30,30]
[41,'LEFT_WHITE','DIR_RIGHT'] => [42,30,30]
[41,'RIGHT_WHITE','DIR_LEFT'] => [42,30,30]
[41,'RIGHT_WHITE','DIR_RIGHT'] => [42,30,30]
[41,'CENTER','DIR_LEFT'] => [42,30,30]
[41,'CENTER','DIR_RIGHT'] => [42,30,30]
[41,'TINY_RIGHT','DIR_LEFT'] => [42,35,30]
[41,'TINY_RIGHT','DIR_RIGHT'] => [42,35,30]
[41,'RIGHT','DIR_LEFT'] => [42,35,30]
[41,'RIGHT','DIR_RIGHT'] => [42,35,30]
[41,'BIG_RIGHT','DIR_LEFT'] => [42,35,30]
[41,'BIG_RIGHT','DIR_RIGHT'] => [42,35,30]
[41,'TINY_LEFT','DIR_LEFT'] => [42,30,35]
[41,'TINY_LEFT','DIR_RIGHT'] => [42,30,35]
[41,'LEFT','DIR_LEFT'] => [42,30,35]
[41,'LEFT','DIR_RIGHT'] => [42,30,35]
[41,'BIG_LEFT','DIR_LEFT'] => [42,30,35]
[41,'BIG_LEFT','DIR_RIGHT'] => [42,30,35]
[41,'BOTH_WHITE','DIR_LEFT'] => [42,30,30]
[41,'BOTH_WHITE','DIR_RIGHT'] => [42,30,30]
[41,'ILLEAGAL','DIR_LEFT'] => [42,30,30]
[41,'ILLEAGAL','DIR_RIGHT'] => [42,30,30]
[42,'ALL_BLACK','DIR_LEFT'] => [43,30,30]
[42,'ALL_BLACK','DIR_RIGHT'] => [43,30,30]
[42,'ALL_WHITE','DIR_LEFT'] => [43,30,30]
[42,'ALL_WHITE','DIR_RIGHT'] => [43,30,30]
[42,'LEFT_WHITE','DIR_LEFT'] => [43,30,30]
[42,'LEFT_WHITE','DIR_RIGHT'] => [43,30,30]
[42,'RIGHT_WHITE','DIR_LEFT'] => [43,30,30]
[42,'RIGHT_WHITE','DIR_RIGHT'] => [43,30,30]
[42,'CENTER','DIR_LEFT'] => [43,30,30]
[42,'CENTER','DIR_RIGHT'] => [43,30,30]
[42,'TINY_RIGHT','DIR_LEFT'] => [43,35,30]
[42,'TINY_RIGHT','DIR_RIGHT'] => [43,35,30]
[42,'RIGHT','DIR_LEFT'] => [43,35,30]
[42,'RIGHT','DIR_RIGHT'] => [43,35,30]
[42,'BIG_RIGHT','DIR_LEFT'] => [43,35,30]
[42,'BIG_RIGHT','DIR_RIGHT'] => [43,35,30]
[42,'TINY_LEFT','DIR_LEFT'] => [43,30,35]
[42,'TINY_LEFT','DIR_RIGHT'] => [43,30,35]
[42,'LEFT','DIR_LEFT'] => [43,30,35]
[42,'LEFT','DIR_RIGHT'] => [43,30,35]
[42,'BIG_LEFT','DIR_LEFT'] => [43,30,35]
[42,'BIG_LEFT','DIR_RIGHT'] => [43,30,35]
[42,'BOTH_WHITE','DIR_LEFT'] => [43,30,30]
[42,'BOTH_WHITE','DIR_RIGHT'] => [43,30,30]
[42,'ILLEAGAL','DIR_LEFT'] => [43,30,30]
[42,'ILLEAGAL','DIR_RIGHT'] => [43,30,30]
[43,'ALL_BLACK','DIR_LEFT'] => [50,30,30,['DIR_LEFT','DIR_RIGHT']]
[43,'ALL_BLACK','DIR_RIGHT'] => [50,30,30,['DIR_RIGHT','DIR_LEFT']]
[43,'ALL_WHITE','DIR_LEFT'] => [40,30,30]
[43,'ALL_WHITE','DIR_RIGHT'] => [40,30,30]
[43,'LEFT_WHITE','DIR_LEFT'] => [40,30,30]
[43,'LEFT_WHITE','DIR_RIGHT'] => [40,30,30]
[43,'RIGHT_WHITE','DIR_LEFT'] => [40,30,30]
[43,'RIGHT_WHITE','DIR_RIGHT'] => [40,30,30]
[43,'CENTER','DIR_LEFT'] => [40,30,30]
[43,'CENTER','DIR_RIGHT'] => [40,30,30]
[43,'TINY_RIGHT','DIR_LEFT'] => [40,35,30]
[43,'TINY_RIGHT','DIR_RIGHT'] => [40,35,30]
[43,'RIGHT','DIR_LEFT'] => [40,35,30]
[43,'RIGHT','DIR_RIGHT'] => [40,35,30]
[43,'BIG_RIGHT','DIR_LEFT'] => [40,35,30]
[43,'BIG_RIGHT','DIR_RIGHT'] => [40,35,30]
[43,'TINY_LEFT','DIR_LEFT'] => [40,30,35]
[43,'TINY_LEFT','DIR_RIGHT'] => [40,30,35]
[43,'LEFT','DIR_LEFT'] => [40,30,35]
[43,'LEFT','DIR_RIGHT'] => [40,30,35]
[43,'BIG_LEFT','DIR_LEFT'] => [40,30,35]
[43,'BIG_LEFT','DIR_RIGHT'] => [40,30,35]
[43,'BOTH_WHITE','DIR_LEFT'] => [40,30,30]
[43,'BOTH_WHITE','DIR_RIGHT'] => [40,30,30]
[43,'ILLEAGAL','DIR_LEFT'] => [40,30,30]
[43,'ILLEAGAL','DIR_RIGHT'] => [40,30,30]
LANE→CHANGEの状態遷移は、センサー値としてALL_BLACKを
検出したときなので、それができたことを確認。
[43,'ALL_BLACK','DIR_LEFT'] => [50,30,30,['DIR_LEFT','DIR_RIGHT']]
[43,'ALL_BLACK','DIR_RIGHT'] => [50,30,30,['DIR_RIGHT','DIR_LEFT']]
CHANGEでは、左か右のどちらかに車体を寄せます。
CHANGEで方向を変えたなら、BLINDで逆方向に車体を寄せるように制御します。
CHANGE状態のときに、状態値とセンサー値を与えた時の
動作を確認。
[50,'ALL_BLACK','DIR_LEFT'] => [51,30,50]
[50,'ALL_BLACK','DIR_RIGHT'] => [51,50,30]
[50,'ALL_WHITE','DIR_LEFT'] => [51,30,50]
[50,'ALL_WHITE','DIR_RIGHT'] => [51,50,30]
[50,'LEFT_WHITE','DIR_LEFT'] => [51,30,50]
[50,'LEFT_WHITE','DIR_RIGHT'] => [51,50,30]
[50,'RIGHT_WHITE','DIR_LEFT'] => [51,30,50]
[50,'RIGHT_WHITE','DIR_RIGHT'] => [51,50,30]
[50,'CENTER','DIR_LEFT'] => [51,30,50]
[50,'CENTER','DIR_RIGHT'] => [51,50,30]
[50,'TINY_RIGHT','DIR_LEFT'] => [51,30,50]
[50,'TINY_RIGHT','DIR_RIGHT'] => [51,50,30]
[50,'RIGHT','DIR_LEFT'] => [51,30,50]
[50,'RIGHT','DIR_RIGHT'] => [51,50,30]
[50,'BIG_RIGHT','DIR_LEFT'] => [51,30,50]
[50,'BIG_RIGHT','DIR_RIGHT'] => [51,50,30]
[50,'TINY_LEFT','DIR_LEFT'] => [51,30,50]
[50,'TINY_LEFT','DIR_RIGHT'] => [51,50,30]
[50,'LEFT','DIR_LEFT'] => [51,30,50]
[50,'LEFT','DIR_RIGHT'] => [51,50,30]
[50,'BIG_LEFT','DIR_LEFT'] => [51,30,50]
[50,'BIG_LEFT','DIR_RIGHT'] => [51,50,30]
[50,'BOTH_WHITE','DIR_LEFT'] => [51,30,50]
[50,'BOTH_WHITE','DIR_RIGHT'] => [51,50,30]
[50,'ILLEAGAL','DIR_LEFT'] => [51,30,50]
[50,'ILLEAGAL','DIR_RIGHT'] => [51,50,30]
[51,'ALL_BLACK','DIR_LEFT'] => [52,30,30]
[51,'ALL_BLACK','DIR_RIGHT'] => [52,30,30]
[51,'ALL_WHITE','DIR_LEFT'] => [52,30,30]
[51,'ALL_WHITE','DIR_RIGHT'] => [52,30,30]
[51,'LEFT_WHITE','DIR_LEFT'] => [52,30,30]
[51,'LEFT_WHITE','DIR_RIGHT'] => [52,30,30]
[51,'RIGHT_WHITE','DIR_LEFT'] => [52,30,30]
[51,'RIGHT_WHITE','DIR_RIGHT'] => [52,30,30]
[51,'CENTER','DIR_LEFT'] => [52,30,30]
[51,'CENTER','DIR_RIGHT'] => [52,30,30]
[51,'TINY_RIGHT','DIR_LEFT'] => [52,30,30]
[51,'TINY_RIGHT','DIR_RIGHT'] => [52,30,30]
[51,'RIGHT','DIR_LEFT'] => [52,30,30]
[51,'RIGHT','DIR_RIGHT'] => [52,30,30]
[51,'BIG_RIGHT','DIR_LEFT'] => [52,30,30]
[51,'BIG_RIGHT','DIR_RIGHT'] => [52,30,30]
[51,'TINY_LEFT','DIR_LEFT'] => [52,30,30]
[51,'TINY_LEFT','DIR_RIGHT'] => [52,30,30]
[51,'LEFT','DIR_LEFT'] => [52,30,30]
[51,'LEFT','DIR_RIGHT'] => [52,30,30]
[51,'BIG_LEFT','DIR_LEFT'] => [52,30,30]
[51,'BIG_LEFT','DIR_RIGHT'] => [52,30,30]
[51,'BOTH_WHITE','DIR_LEFT'] => [52,30,30]
[51,'BOTH_WHITE','DIR_RIGHT'] => [52,30,30]
[51,'ILLEAGAL','DIR_LEFT'] => [52,30,30]
[51,'ILLEAGAL','DIR_RIGHT'] => [52,30,30]
[52,'ALL_BLACK','DIR_LEFT'] => [53,30,30]
[52,'ALL_BLACK','DIR_RIGHT'] => [53,30,30]
[52,'ALL_WHITE','DIR_LEFT'] => [53,30,30]
[52,'ALL_WHITE','DIR_RIGHT'] => [53,30,30]
[52,'LEFT_WHITE','DIR_LEFT'] => [53,30,30]
[52,'LEFT_WHITE','DIR_RIGHT'] => [53,30,30]
[52,'RIGHT_WHITE','DIR_LEFT'] => [53,30,30]
[52,'RIGHT_WHITE','DIR_RIGHT'] => [53,30,30]
[52,'CENTER','DIR_LEFT'] => [53,30,30]
[52,'CENTER','DIR_RIGHT'] => [53,30,30]
[52,'TINY_RIGHT','DIR_LEFT'] => [53,30,30]
[52,'TINY_RIGHT','DIR_RIGHT'] => [53,30,30]
[52,'RIGHT','DIR_LEFT'] => [53,30,30]
[52,'RIGHT','DIR_RIGHT'] => [53,30,30]
[52,'BIG_RIGHT','DIR_LEFT'] => [53,30,30]
[52,'BIG_RIGHT','DIR_RIGHT'] => [53,30,30]
[52,'TINY_LEFT','DIR_LEFT'] => [53,30,30]
[52,'TINY_LEFT','DIR_RIGHT'] => [53,30,30]
[52,'LEFT','DIR_LEFT'] => [53,30,30]
[52,'LEFT','DIR_RIGHT'] => [53,30,30]
[52,'BIG_LEFT','DIR_LEFT'] => [53,30,30]
[52,'BIG_LEFT','DIR_RIGHT'] => [53,30,30]
[52,'BOTH_WHITE','DIR_LEFT'] => [53,30,30]
[52,'BOTH_WHITE','DIR_RIGHT'] => [53,30,30]
[52,'ILLEAGAL','DIR_LEFT'] => [53,30,30]
[52,'ILLEAGAL','DIR_RIGHT'] => [53,30,30]
[53,'ALL_BLACK','DIR_LEFT'] => [54,30,30]
[53,'ALL_BLACK','DIR_RIGHT'] => [54,30,30]
[53,'ALL_WHITE','DIR_LEFT'] => [54,30,30]
[53,'ALL_WHITE','DIR_RIGHT'] => [54,30,30]
[53,'LEFT_WHITE','DIR_LEFT'] => [54,30,30]
[53,'LEFT_WHITE','DIR_RIGHT'] => [54,30,30]
[53,'RIGHT_WHITE','DIR_LEFT'] => [54,30,30]
[53,'RIGHT_WHITE','DIR_RIGHT'] => [54,30,30]
[53,'CENTER','DIR_LEFT'] => [54,30,30]
[53,'CENTER','DIR_RIGHT'] => [54,30,30]
[53,'TINY_RIGHT','DIR_LEFT'] => [54,30,30]
[53,'TINY_RIGHT','DIR_RIGHT'] => [54,30,30]
[53,'RIGHT','DIR_LEFT'] => [54,30,30]
[53,'RIGHT','DIR_RIGHT'] => [54,30,30]
[53,'BIG_RIGHT','DIR_LEFT'] => [54,30,30]
[53,'BIG_RIGHT','DIR_RIGHT'] => [54,30,30]
[53,'TINY_LEFT','DIR_LEFT'] => [54,30,30]
[53,'TINY_LEFT','DIR_RIGHT'] => [54,30,30]
[53,'LEFT','DIR_LEFT'] => [54,30,30]
[53,'LEFT','DIR_RIGHT'] => [54,30,30]
[53,'BIG_LEFT','DIR_LEFT'] => [54,30,30]
[53,'BIG_LEFT','DIR_RIGHT'] => [54,30,30]
[53,'BOTH_WHITE','DIR_LEFT'] => [54,30,30]
[53,'BOTH_WHITE','DIR_RIGHT'] => [54,30,30]
[53,'ILLEAGAL','DIR_LEFT'] => [54,30,30]
[53,'ILLEAGAL','DIR_RIGHT'] => [54,30,30]
[54,'ALL_BLACK','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'ALL_BLACK','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'ALL_WHITE','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'ALL_WHITE','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'LEFT_WHITE','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'LEFT_WHITE','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'RIGHT_WHITE','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'RIGHT_WHITE','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'CENTER','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'CENTER','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'TINY_RIGHT','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'TINY_RIGHT','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'RIGHT','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'RIGHT','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'BIG_RIGHT','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'BIG_RIGHT','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'TINY_LEFT','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'TINY_LEFT','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'LEFT','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'LEFT','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'BIG_LEFT','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'BIG_LEFT','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'BOTH_WHITE','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'BOTH_WHITE','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
[54,'ILLEAGAL','DIR_LEFT'] => [60,30,30,'DIR_RIGHT']
[54,'ILLEAGAL','DIR_RIGHT'] => [60,30,30,'DIR_LEFT']
CHANGE→BLINDと遷移する時、BLIND→NORMALに遷移する時に
方向を予め設定しておきます。
BLIND状態に入るときに、NORMALへ遷移する条件を携えます。
BLIND状態のときに、状態値とセンサー値を与えた時の
動作を確認。
[60,'ALL_BLACK','DIR_LEFT'] => [61,30,30]
[60,'ALL_BLACK','DIR_RIGHT'] => [61,30,30]
[60,'ALL_WHITE','DIR_LEFT'] => [61,30,30]
[60,'ALL_WHITE','DIR_RIGHT'] => [61,30,30]
[60,'LEFT_WHITE','DIR_LEFT'] => [61,30,30]
[60,'LEFT_WHITE','DIR_RIGHT'] => [61,30,30]
[60,'RIGHT_WHITE','DIR_LEFT'] => [61,30,30]
[60,'RIGHT_WHITE','DIR_RIGHT'] => [61,30,30]
[60,'CENTER','DIR_LEFT'] => [61,30,30]
[60,'CENTER','DIR_RIGHT'] => [61,30,30]
[60,'TINY_RIGHT','DIR_LEFT'] => [61,30,30]
[60,'TINY_RIGHT','DIR_RIGHT'] => [61,30,30]
[60,'RIGHT','DIR_LEFT'] => [61,30,30]
[60,'RIGHT','DIR_RIGHT'] => [61,30,30]
[60,'BIG_RIGHT','DIR_LEFT'] => [61,30,30]
[60,'BIG_RIGHT','DIR_RIGHT'] => [61,30,30]
[60,'TINY_LEFT','DIR_LEFT'] => [61,30,30]
[60,'TINY_LEFT','DIR_RIGHT'] => [61,30,30]
[60,'LEFT','DIR_LEFT'] => [61,30,30]
[60,'LEFT','DIR_RIGHT'] => [61,30,30]
[60,'BIG_LEFT','DIR_LEFT'] => [61,30,30]
[60,'BIG_LEFT','DIR_RIGHT'] => [61,30,30]
[60,'BOTH_WHITE','DIR_LEFT'] => [61,30,30]
[60,'BOTH_WHITE','DIR_RIGHT'] => [61,30,30]
[60,'ILLEAGAL','DIR_LEFT'] => [61,30,30]
[60,'ILLEAGAL','DIR_RIGHT'] => [61,30,30]
[61,'ALL_BLACK','DIR_LEFT'] => [62,30,30]
[61,'ALL_BLACK','DIR_RIGHT'] => [62,30,30]
[61,'ALL_WHITE','DIR_LEFT'] => [62,30,30]
[61,'ALL_WHITE','DIR_RIGHT'] => [62,30,30]
[61,'LEFT_WHITE','DIR_LEFT'] => [62,30,30]
[61,'LEFT_WHITE','DIR_RIGHT'] => [62,30,30]
[61,'RIGHT_WHITE','DIR_LEFT'] => [62,30,30]
[61,'RIGHT_WHITE','DIR_RIGHT'] => [62,30,30]
[61,'CENTER','DIR_LEFT'] => [62,30,30]
[61,'CENTER','DIR_RIGHT'] => [62,30,30]
[61,'TINY_RIGHT','DIR_LEFT'] => [62,30,30]
[61,'TINY_RIGHT','DIR_RIGHT'] => [62,30,30]
[61,'RIGHT','DIR_LEFT'] => [62,30,30]
[61,'RIGHT','DIR_RIGHT'] => [62,30,30]
[61,'BIG_RIGHT','DIR_LEFT'] => [62,30,30]
[61,'BIG_RIGHT','DIR_RIGHT'] => [62,30,30]
[61,'TINY_LEFT','DIR_LEFT'] => [62,30,30]
[61,'TINY_LEFT','DIR_RIGHT'] => [62,30,30]
[61,'LEFT','DIR_LEFT'] => [62,30,30]
[61,'LEFT','DIR_RIGHT'] => [62,30,30]
[61,'BIG_LEFT','DIR_LEFT'] => [62,30,30]
[61,'BIG_LEFT','DIR_RIGHT'] => [62,30,30]
[61,'BOTH_WHITE','DIR_LEFT'] => [62,30,30]
[61,'BOTH_WHITE','DIR_RIGHT'] => [62,30,30]
[61,'ILLEAGAL','DIR_LEFT'] => [62,30,30]
[61,'ILLEAGAL','DIR_RIGHT'] => [62,30,30]
[62,'ALL_BLACK','DIR_LEFT'] => [63,30,30]
[62,'ALL_BLACK','DIR_RIGHT'] => [63,30,30]
[62,'ALL_WHITE','DIR_LEFT'] => [63,30,30]
[62,'ALL_WHITE','DIR_RIGHT'] => [63,30,30]
[62,'LEFT_WHITE','DIR_LEFT'] => [63,30,30]
[62,'LEFT_WHITE','DIR_RIGHT'] => [63,30,30]
[62,'RIGHT_WHITE','DIR_LEFT'] => [63,30,30]
[62,'RIGHT_WHITE','DIR_RIGHT'] => [63,30,30]
[62,'CENTER','DIR_LEFT'] => [63,30,30]
[62,'CENTER','DIR_RIGHT'] => [63,30,30]
[62,'TINY_RIGHT','DIR_LEFT'] => [63,30,30]
[62,'TINY_RIGHT','DIR_RIGHT'] => [63,30,30]
[62,'RIGHT','DIR_LEFT'] => [63,30,30]
[62,'RIGHT','DIR_RIGHT'] => [63,30,30]
[62,'BIG_RIGHT','DIR_LEFT'] => [63,30,30]
[62,'BIG_RIGHT','DIR_RIGHT'] => [63,30,30]
[62,'TINY_LEFT','DIR_LEFT'] => [63,30,30]
[62,'TINY_LEFT','DIR_RIGHT'] => [63,30,30]
[62,'LEFT','DIR_LEFT'] => [63,30,30]
[62,'LEFT','DIR_RIGHT'] => [63,30,30]
[62,'BIG_LEFT','DIR_LEFT'] => [63,30,30]
[62,'BIG_LEFT','DIR_RIGHT'] => [63,30,30]
[62,'BOTH_WHITE','DIR_LEFT'] => [63,30,30]
[62,'BOTH_WHITE','DIR_RIGHT'] => [63,30,30]
[62,'ILLEAGAL','DIR_LEFT'] => [63,30,30]
[62,'ILLEAGAL','DIR_RIGHT'] => [63,30,30]
[63,'ALL_BLACK','DIR_LEFT'] => [64,30,30]
[63,'ALL_BLACK','DIR_RIGHT'] => [64,30,30]
[63,'ALL_WHITE','DIR_LEFT'] => [64,30,30]
[63,'ALL_WHITE','DIR_RIGHT'] => [64,30,30]
[63,'LEFT_WHITE','DIR_LEFT'] => [64,30,30]
[63,'LEFT_WHITE','DIR_RIGHT'] => [64,30,30]
[63,'RIGHT_WHITE','DIR_LEFT'] => [64,30,30]
[63,'RIGHT_WHITE','DIR_RIGHT'] => [64,30,30]
[63,'CENTER','DIR_LEFT'] => [64,30,30]
[63,'CENTER','DIR_RIGHT'] => [64,30,30]
[63,'TINY_RIGHT','DIR_LEFT'] => [64,30,30]
[63,'TINY_RIGHT','DIR_RIGHT'] => [64,30,30]
[63,'RIGHT','DIR_LEFT'] => [64,30,30]
[63,'RIGHT','DIR_RIGHT'] => [64,30,30]
[63,'BIG_RIGHT','DIR_LEFT'] => [64,30,30]
[63,'BIG_RIGHT','DIR_RIGHT'] => [64,30,30]
[63,'TINY_LEFT','DIR_LEFT'] => [64,30,30]
[63,'TINY_LEFT','DIR_RIGHT'] => [64,30,30]
[63,'LEFT','DIR_LEFT'] => [64,30,30]
[63,'LEFT','DIR_RIGHT'] => [64,30,30]
[63,'BIG_LEFT','DIR_LEFT'] => [64,30,30]
[63,'BIG_LEFT','DIR_RIGHT'] => [64,30,30]
[63,'BOTH_WHITE','DIR_LEFT'] => [64,30,30]
[63,'BOTH_WHITE','DIR_RIGHT'] => [64,30,30]
[63,'ILLEAGAL','DIR_LEFT'] => [64,30,30]
[63,'ILLEAGAL','DIR_RIGHT'] => [64,30,30]
[64,'ALL_BLACK','DIR_LEFT'] => [65,30,30]
[64,'ALL_BLACK','DIR_RIGHT'] => [65,30,30]
[64,'ALL_WHITE','DIR_LEFT'] => [65,30,30]
[64,'ALL_WHITE','DIR_RIGHT'] => [65,30,30]
[64,'LEFT_WHITE','DIR_LEFT'] => [65,30,30]
[64,'LEFT_WHITE','DIR_RIGHT'] => [65,30,30]
[64,'RIGHT_WHITE','DIR_LEFT'] => [65,30,30]
[64,'RIGHT_WHITE','DIR_RIGHT'] => [65,30,30]
[64,'CENTER','DIR_LEFT'] => [65,30,30]
[64,'CENTER','DIR_RIGHT'] => [65,30,30]
[64,'TINY_RIGHT','DIR_LEFT'] => [65,30,30]
[64,'TINY_RIGHT','DIR_RIGHT'] => [65,30,30]
[64,'RIGHT','DIR_LEFT'] => [65,30,30]
[64,'RIGHT','DIR_RIGHT'] => [65,30,30]
[64,'BIG_RIGHT','DIR_LEFT'] => [65,30,30]
[64,'BIG_RIGHT','DIR_RIGHT'] => [65,30,30]
[64,'TINY_LEFT','DIR_LEFT'] => [65,30,30]
[64,'TINY_LEFT','DIR_RIGHT'] => [65,30,30]
[64,'LEFT','DIR_LEFT'] => [65,30,30]
[64,'LEFT','DIR_RIGHT'] => [65,30,30]
[64,'BIG_LEFT','DIR_LEFT'] => [65,30,30]
[64,'BIG_LEFT','DIR_RIGHT'] => [65,30,30]
[64,'BOTH_WHITE','DIR_LEFT'] => [65,30,30]
[64,'BOTH_WHITE','DIR_RIGHT'] => [65,30,30]
[64,'ILLEAGAL','DIR_LEFT'] => [65,30,30]
[64,'ILLEAGAL','DIR_RIGHT'] => [65,30,30]
[65,'ALL_BLACK','DIR_LEFT'] => [66,30,30]
[65,'ALL_BLACK','DIR_RIGHT'] => [66,30,30]
[65,'ALL_WHITE','DIR_LEFT'] => [66,30,30]
[65,'ALL_WHITE','DIR_RIGHT'] => [66,30,30]
[65,'LEFT_WHITE','DIR_LEFT'] => [66,30,30]
[65,'LEFT_WHITE','DIR_RIGHT'] => [66,30,30]
[65,'RIGHT_WHITE','DIR_LEFT'] => [66,30,30]
[65,'RIGHT_WHITE','DIR_RIGHT'] => [66,30,30]
[65,'CENTER','DIR_LEFT'] => [66,30,30]
[65,'CENTER','DIR_RIGHT'] => [66,30,30]
[65,'TINY_RIGHT','DIR_LEFT'] => [66,30,30]
[65,'TINY_RIGHT','DIR_RIGHT'] => [66,30,30]
[65,'RIGHT','DIR_LEFT'] => [66,30,30]
[65,'RIGHT','DIR_RIGHT'] => [66,30,30]
[65,'BIG_RIGHT','DIR_LEFT'] => [66,30,30]
[65,'BIG_RIGHT','DIR_RIGHT'] => [66,30,30]
[65,'TINY_LEFT','DIR_LEFT'] => [66,30,30]
[65,'TINY_LEFT','DIR_RIGHT'] => [66,30,30]
[65,'LEFT','DIR_LEFT'] => [66,30,30]
[65,'LEFT','DIR_RIGHT'] => [66,30,30]
[65,'BIG_LEFT','DIR_LEFT'] => [66,30,30]
[65,'BIG_LEFT','DIR_RIGHT'] => [66,30,30]
[65,'BOTH_WHITE','DIR_LEFT'] => [66,30,30]
[65,'BOTH_WHITE','DIR_RIGHT'] => [66,30,30]
[65,'ILLEAGAL','DIR_LEFT'] => [66,30,30]
[65,'ILLEAGAL','DIR_RIGHT'] => [66,30,30]
[66,'ALL_BLACK','DIR_LEFT'] => [67,30,30]
[66,'ALL_BLACK','DIR_RIGHT'] => [67,30,30]
[66,'ALL_WHITE','DIR_LEFT'] => [67,30,30]
[66,'ALL_WHITE','DIR_RIGHT'] => [67,30,30]
[66,'LEFT_WHITE','DIR_LEFT'] => [67,30,30]
[66,'LEFT_WHITE','DIR_RIGHT'] => [67,30,30]
[66,'RIGHT_WHITE','DIR_LEFT'] => [67,30,30]
[66,'RIGHT_WHITE','DIR_RIGHT'] => [67,30,30]
[66,'CENTER','DIR_LEFT'] => [67,30,30]
[66,'CENTER','DIR_RIGHT'] => [67,30,30]
[66,'TINY_RIGHT','DIR_LEFT'] => [67,30,30]
[66,'TINY_RIGHT','DIR_RIGHT'] => [67,30,30]
[66,'RIGHT','DIR_LEFT'] => [67,30,30]
[66,'RIGHT','DIR_RIGHT'] => [67,30,30]
[66,'BIG_RIGHT','DIR_LEFT'] => [67,30,30]
[66,'BIG_RIGHT','DIR_RIGHT'] => [67,30,30]
[66,'TINY_LEFT','DIR_LEFT'] => [67,30,30]
[66,'TINY_LEFT','DIR_RIGHT'] => [67,30,30]
[66,'LEFT','DIR_LEFT'] => [67,30,30]
[66,'LEFT','DIR_RIGHT'] => [67,30,30]
[66,'BIG_LEFT','DIR_LEFT'] => [67,30,30]
[66,'BIG_LEFT','DIR_RIGHT'] => [67,30,30]
[66,'BOTH_WHITE','DIR_LEFT'] => [67,30,30]
[66,'BOTH_WHITE','DIR_RIGHT'] => [67,30,30]
[66,'ILLEAGAL','DIR_LEFT'] => [67,30,30]
[66,'ILLEAGAL','DIR_RIGHT'] => [67,30,30]
[67,'ALL_BLACK','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'ALL_BLACK','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'ALL_WHITE','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'ALL_WHITE','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'LEFT_WHITE','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'LEFT_WHITE','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'RIGHT_WHITE','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'RIGHT_WHITE','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'CENTER','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'CENTER','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'TINY_RIGHT','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'TINY_RIGHT','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'RIGHT','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'RIGHT','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'BIG_RIGHT','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'BIG_RIGHT','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'TINY_LEFT','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'TINY_LEFT','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'LEFT','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'LEFT','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'BIG_LEFT','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'BIG_LEFT','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'BOTH_WHITE','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'BOTH_WHITE','DIR_RIGHT'] => [10,30,30,'return NORMAL']
[67,'ILLEAGAL','DIR_LEFT'] => [10,30,30,'return NORMAL']
[67,'ILLEAGAL','DIR_RIGHT'] => [10,30,30,'return NORMAL']
目次
前
次