2016-10-17 11 views
1

赤と緑のグリッドセルの2Dワールドでのロボットのローカライズには、次のコードで苦労しています。私は基本的に、そのリストのインデックスが範囲外であるというエラーを取得しています。ルーチン意味で2D世界でのローカライゼーション

enter image description here

p=[.2,.2,.2,.2,.2]# Initial cell probability 
w=[['R','G','G','R','R'], 
    ['R','R','G','R','R'], 
    ['R','R','G','G','R'], 
    ['R','R','R','R','R']]# World 
meas = ['G','G','G','G','G'] # measurements 
mov = [[0,0],[0,1],[1,0],[1,0],[0,1]]    # motion 
phit = .6      # Probability to measure: R->0.6 
pmiss = .2      # Probability to measure: R->0.2 
pExact = .8     # Prob. exact motion 
pOver = .1      # Prob. overshoot 
pUnder = .1     # Prob. undershoot 

def entropy (p): 
    s = [p[i]*log(p[i]) for i in range(len(p))] 
    return round(-sum(s), 2) 

def sense(p, z): 
    q = [] 
    for i in range(len(p)): 
     hit = w[i]==z 
     q.append(p[i]*(phit*hit + pmiss*(1-hit))) 
    s = sum(q) 
    q = [i/s for i in q] 
    return q 

#Moving u cells 
def move(p, u): 
    q = [] 
    for i in range(len(p)): 
     motion = pExact * p[(i-u)%len(p)] 
     motion += pOver * p[(i-u-1)%len(p)] 
     motion += pUnder * p[(i-u+1)%len(p)] 
     q.append(motion) 
    return q 

for i in range(len(meas)): 
    p = sense(p, meas[i]) 
    r = [format(j,'.3f') for j in p] 
    print "Sense %i:"%(i), 
    print r, entropy(p) 
    p = move(p, mov[i]) 
    r = [format(j,'.3f') for j in p] 
    print "Move %i:"%(i), 
    print r, entropy(p) 
    print 
+2

用語についてニックピッチ:*ローカリゼーションという用語は、何かを見つける方法を意味するものではありません。代わりに、プログラムがドイツのコンピュータで実行されている場合は、文字列をドイツ語に変換するなど、さまざまな*ロケール*の出力をどのように変換するかについてです。 [その件についての詳細はこちら](https://en.wikipedia.org/wiki/Language_localisation) –

+0

こんにちは@JoachimPileborg、ロボット工学では、ローカリゼーションは、 "世界の自分の位置を決定する"を意味するために使用されます。 [Robot Mapping](https://en.m.wikipedia.org/wiki/Robotic_mapping)を参照してください。 –

答えて

0

()プログラムがワットリストの5番目の要素(リストのインデックス4)にアクセスしようとすると、残念ながらワットのみ4つの要素(唯一のインデックス0を有します、1、2、3が有効である)

範囲(LEN(P))戻り[0、1、2、3、4]

またW [i]は== Zは真ではありません。確かにW [i]をは(Zは、単一の文字

感覚で、文字のリストである)は、おそらくあなたは、もともとすることを目的と何をしていません。

+0

この問題に対処する方法を教えてもらえますか? –