Локализация в 2D мире

#python #grid #cells

#python #сетка #ячейки

Вопрос:

Я борюсь со следующим кодом для локализации робота в 2D мире с красными и зелеными ячейками сетки. Я в основном получаю ошибку, в которой указано, что индекс списка находится вне диапазона.

введите описание изображения здесь

 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
 

Комментарии:

1. Просто чтобы придраться к терминологии: термин локализация не означает, как что-то найти. Вместо этого речь идет о том, как преобразовать выходные данные для разных языков , например, перевести строки на немецкий язык, если программа выполняется на немецком компьютере. Подробнее об этой теме читайте здесь .

2. Привет, @JoachimPileborg, в робототехнике локализация используется для обозначения «определения моего собственного местоположения в мире». См. Отображение робота .

Ответ №1:

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

range(len(p)) возвращает [0, 1, 2, 3, 4]

Также w [i]==z никогда не будет истинным: действительно, w [i] — это список символов, z — один символ

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

Комментарии:

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