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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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