2016-10-17 6 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, в робототехнике, локализация используется для обозначения «определения моего собственного местоположения в мире». См. [Сопоставление роботов] (https://en.m.wikipedia.org/wiki/Robotic_mapping). –

ответ

0

В рутинного смысле() программа пытается получить доступ к 5-й элемент списка ж (индекс 4 в списке), к сожалению ж имеет только 4 элемента (только индексы 0 , 1, 2, 3 справедливы)

диапазон (LEN (р)) возвращает [0, 1, 2, 3, 4]

Кроме ш [я] == г никогда не будет верно: действительно ш [я] список символов, г является одиночный символ

смысл(), вероятно, не делать то, что вы намеревались первоначально ,

+0

Можете ли вы рассказать мне, как решить эту проблему? –