예제 #1
0
def main():
    global particles
    global recive_particles
    rospy.init_node('particle_filter', anonymous=True)
    PF_l = ParticleFilter(Np=300)
    PI_t = np.random.randn(300, 3)
    fusion = RobotFusion(PF_l.particles, PI_t)
    particles2fuse_cb = lambda x: particles2fuse(x, PF_l, fusion)
    rospy.Subscriber('/particlecloud2fuse_in', PoseArray, particles2fuse_cb)
    r = rospy.Rate(5)
    #plt.ion()
    #fig = plt.figure()
    time_last = rospy.Time.now()

    while not rospy.is_shutdown():
        time_now = rospy.Time.now()
        r.sleep()
        fusion.PI_s = PF_l.particles
        fusion.robot_tracking()

        PF_l.prediction()
        PF_l.likelihood_fild()
        if np.abs(PF_l.update_TH()) > 0.1:

            #PF_l.simpel_likelihood()
            PF_l.resampling()
            PF_l.i_TH = 0.0
            print 'Updating particles...'
        PF_l.pub()
        if time_now.to_sec() - time_last.to_sec() > 2:
            PF_l.pub2fuse()
            time_last = time_now

        if recive_particles:
            fusion.PI_t = particles
            PF_l.weights = fusion.update_weight()
            PF_l.resampling()
            recive_particles = 0

        #mean =  np.zeros(3)
        #mean = np.mean(PF_l.particles,axis=0)
        fusion.send_transfered_particles()
        #M = PF_l.scan.loction_based(mean)

        r.sleep()
        #plt.imshow(-M+PF_l.scan.occupancy_grid)
    # fig.canvas.draw()

    rospy.spin()
예제 #2
0
def main():
    global particles
    global recive_particles
    rospy.init_node('particle_filter', anonymous = True)
    PF_l = ParticleFilter(Np=200)
    PI_t = np.random.randn(200,3)
    fusion = RobotFusion(PF_l.particles, PI_t)
    particles2fuse_cb = lambda x: particles2fuse(x,PF_l,fusion)
    rospy.Subscriber('/particlecloud2fuse_in', PoseArray, particles2fuse_cb)
    r = rospy.Rate(5)
    time_last= rospy.Time.now()
    
    while not rospy.is_shutdown():
        time_now = rospy.Time.now()
        r.sleep()
        fusion.PI_s = PF_l.particles
        
        PF_l.pub()
        E_x = np.mean(fusion.PI_s,axis=0)
        if time_now.to_sec() - time_last.to_sec() > 1:
            PF_l.pub2fuse()
            time_last = time_now

        if recive_particles:
            print "recived particles!"
            fusion.PI_t = particles
            d = np.linalg.norm(np.mean(particles[:,0:2],axis=0) - fusion.mu_t_hat)
            print "d= ", d
            if d < 0.7:
                PF_l.weights = fusion.update_weight()
                PF_l.resampling()
            recive_particles = 0
        fusion.robot_tracking()    
        fusion.send_transfered_particles()

    rospy.spin()
예제 #3
0
            print("gg")
            break
    if collision:
        collision_count = 1

    print("\rState: "+car.state_str(), "| Goal:", nav_pos, end="\t")
    pos = (car.x, car.y, car.yaw)
    sdata = lmodel.measure(pos)
    plist = EndPoint(pos, [sensor_size,-120,120], sdata)

    # Particle Filter
    pf.feed((car.v, car.w, car.dt), sdata)
    print(pf.neff)
    if pf.neff < particle_size/2:
        print("re")
        pf.resampling()

    pmimg = pf.particle_list[5].gmap.adaptive_get_map_prob()
    pmimg = (255*pmimg).astype(np.uint8)
    pmimg = cv2.cvtColor(pmimg, cv2.COLOR_GRAY2RGB)
    pmimg_ = cv2.flip(pmimg,0)
    cv2.imshow("pmap", pmimg_)
    
    # Map
    gm.update_map(pos, [sensor_size,-120,120,max_dist], sdata)
    mimg = gm.adaptive_get_map_prob()
    mimg = (255*mimg).astype(np.uint8)
    mimg = cv2.cvtColor(mimg, cv2.COLOR_GRAY2RGB)
    mimg_ = cv2.flip(mimg,0)
    cv2.imshow("map", mimg_)
예제 #4
0
            action = 4

        if k == ord('i'):
            action = 5
        if k == ord('j'):
            action = 6
        if k == ord('l'):
            action = 7
        if k == ord('k'):
            action = 8

        if action > 0:
            robot.move(action)
            sensor_data = robot.measure(env)
            SensorMapping(m, robot.pose, robot.sensor.config, sensor_data)

            img = Draw(env, 1, robot.pose, sensor_data, robot.sensor.config)
            mimg = AdaptiveGetMap(m)

            pf.update(action, sensor_data)
            mid = np.argmax(pf.weights)
            imgp0 = AdaptiveGetMap(pf.particles[mid].grid_map)

            img = DrawParticle(img, pf.particles)
            cv2.imshow('view', img)
            cv2.imshow('map', mimg)

            cv2.imshow('particle_map', imgp0)
            pf.resampling(sensor_data)

    cv2.destroyAllWindows()