def reamostrar(particulas, n_particulas = num_particulas): """ Reamostra as partículas devolvendo novas particulas sorteadas de acordo com a probabilidade e deslocadas de acordo com uma variação normal O notebook como_sortear tem dicas que podem ser úteis Depois de reamostradas todas as partículas precisam novamente ser deixadas com probabilidade igual Use 1/n ou 1, não importa desde que seja a mesma """ pesos = [] for p in particulas: pesos.append(p.w) particulas = draw_random_sample(particulas, pesos, n_particulas) desvio = 9 for p in particulas: p.x += np.random.normal(0,desvio,1)[0] p.y += np.random.normal(0,desvio,1)[0] p.theta += np.random.normal(0,math.radians(15), 1)[0] p.w = 1 return particulas
def reamostrar(particulas, n_particulas = num_particulas): """ Reamostra as partículas devolvendo novas particulas sorteadas de acordo com a probabilidade e deslocadas de acordo com uma variação normal O notebook como_sortear tem dicas que podem ser úteis Depois de reamostradas todas as partículas precisam novamente ser deixadas com probabilidade igual Use 1/n ou 1, não importa desde que seja a mesma """ probs = [p.w for p in particulas] print("Probabilidades: ") print(probs) print("Soma probs") print(sum(probs)) pfinal = draw_random_sample(particulas, probs, n_particulas) for p in pfinal: p.x+=norm.rvs(scale=std_resample_x) p.y+=norm.rvs(scale=std_resample_y) p.theta+=norm.rvs(scale=std_resample_theta) p.w = 1.0 return pfinal
def reamostrar(particulas, n_particulas=num_particulas): """ Reamostra as partículas devolvendo novas particulas sorteadas de acordo com a probabilidade e deslocadas de acordo com uma variação normal O notebook como_sortear tem dicas que podem ser úteis Depois de reamostradas todas as partículas precisam novamente ser deixadas com probabilidade igual Use 1/n ou 1, não importa desde que seja a mesma """ lista_pesos = [] dp = 3 # Desvio padrão linear dp_theta = 0.0523 # Desvio padrão angular # Cria a lista com os pesos for p in particulas: lista_pesos.append(p.w) p.w = 1 # Reseta o w para 1 # Redesenha as partículas baseado nos pesos particulas = draw_random_sample(particulas, lista_pesos, n_particulas) for p in particulas: p.x = p.x + np.random.normal(0, dp, 1)[0] p.y = p.y + np.random.normal(0, dp, 1)[0] p.theta = p.theta + np.random.normal(0, dp_theta, 1)[0] return particulas
def reamostrar(particulas, n_particulas=num_particulas): particulas_pesos = [p.w for p in particulas] novas_particulas = draw_random_sample(particulas, particulas_pesos, 1000) # Reamostragem com incertezas for particula in novas_particulas: particula.w = 1 particula.x += stats.norm.rvs(scale=6) particula.y += stats.norm.rvs(scale=6) particula.theta += stats.norm.rvs(scale=math.radians(7)) return novas_particulas
def reamostrar(particulas, n_particulas=num_particulas): """ Reamostra as partículas devolvendo novas particulas sorteadas de acordo com a probabilidade e deslocadas de acordo com uma variação normal O notebook como_sortear tem dicas que podem ser úteis Depois de reamostradas todas as partículas precisam novamente ser deixadas com probabilidade igual Use 1/n ou 1, não importa desde que seja a mesma """ prob_all = [p.w for p in particulas] particulas = draw_random_sample(particulas, prob_all, num_particulas) particulas = [desv(p, 5, math.radians(5), True) for p in particulas] return particulas
def reamostrar(particulas, n_particulas=num_particulas): """ Reamostra as partículas devolvendo novas particulas sorteadas de acordo com a probabilidade e deslocadas de acordo com uma variação normal O notebook como_sortear tem dicas que podem ser úteis Depois de reamostradas todas as partículas precisam novamente ser deixadas com probabilidade igual Use 1/n ou 1, não importa desde que seja a mesma """ particulas_pesos = [p.w for p in particulas] novas_particulas = draw_random_sample(particulas, particulas_pesos, n_particulas) for p in novas_particulas: p.x += norm.rvs(loc=0, scale=6) p.y += norm.rvs(loc=0, scale=6) p.theta += norm.rvs(0, math.radians(10)) p.w = 1 return novas_particulas
def reamostrar(particulas, n_particulas=num_particulas): """ Reamostra as partículas devolvendo novas particulas sorteadas de acordo com a probabilidade e deslocadas de acordo com uma variação normal O notebook como_sortear tem dicas que podem ser úteis Depois de reamostradas todas as partículas precisam novamente ser deixadas com probabilidade igual Use 1/n ou 1, não importa desde que seja a mesma """ particulas_pesos = [p.w for p in particulas] print(particulas_pesos) particulas = draw_random_sample(particulas, particulas_pesos, num_particulas) for p in particulas: p.x = norm.rvs(p.x, 10) p.y = norm.rvs(p.y, 10) p.theta = norm.rvs(p.theta, 0.09) p.w = 1 return particulas