def plotOccupancy():
    data = plot.readBMPAsNumpyArray("../map/maze_map.bmp")

    startPos = np.array([300, 1200])
    # startPos = np.array([1200, 1800])
    numRays = 8

    paths = rc.raycastOmnidirection(data, startPos, numRays, True, 1000)

    endPoints = rc.raycastOmnidirection(data, startPos, numRays, limit=3)

    for i in range(len(paths)):
        for j in range(len(paths[i])):
            x = paths[i][j][0]
            y = paths[i][j][1]
            data[y, x] = 0

    plot.plotOccupancyGrid(data, 0.01)
    robot_width = 0.3
    robot_length = 0.6
    local_planner = rlp.RectangleLocalPlanner(obstacle_map, resolution,
                                              step_size, robot_width,
                                              robot_length)

    config_sampler = rcs.RandomConfigSampler(local_planner)
    num_samples = 20

    # Uniformly sample configurations.

    uniform_configs = []
    for i in range(num_samples):
        uniform_configs.append(config_sampler.uniform_collision_free_sample())

    plot.plotOccupancyGrid(obstacle_map, resolution)
    plot.plotRectangles(uniform_configs, robot_width, robot_length)
    plot.show()

    # Sample around obstacles.
    sigmas = (0.1, 0.1, 0.5)
    biased_configs = []
    num_biased_samples = 20
    for i in range(num_biased_samples):
        new_config = config_sampler.sample_around_obstacle(sigmas, trials=200)
        if new_config is not None:
            biased_configs.append(new_config)

    plot.plotOccupancyGrid(obstacle_map, resolution)
    plot.plotRectangles(biased_configs, robot_width, robot_length)
    plot.show()
                                 bucket_interval=5.0)

    # Compute the A star path.
    print("start")
    pr.enable()
    planner.compute(start_config, end_config)
    pr.disable()
    path = planner.get_path()
    all_path = planner.get_all_explored_path()

    # Optimize the A star path.
    path_points = planner.get_path_points(point_interval=1.0)
    pr.enable()
    optimized_points = path_optimizer.optimize_path(path_points)
    pr.disable()

    ps = pstats.Stats(pr).sort_stats('cumulative')
    ps.print_stats()

    uplt.plotOccupancyGrid(map, grid_resolution)
    show([start_config, end_config], all_path, 0, 50, 0, 50)
    uplt.show()

    uplt.plotOccupancyGrid(map, grid_resolution)
    show([start_config, end_config], path, 0, 50, 0, 50, point_interval=0.1)
    uplt.show()

    uplt.plotOccupancyGrid(map, grid_resolution)
    show_path_points([start_config, end_config], optimized_points, 0, 50, 0,
                     50)
    uplt.show()
                                               z_max=limit)

    robot = bot.Robot(grid, initialPose, motionModel, numRays, noiseSigma,
                      resolution, limit)

    poses, measurements = generateData(robot, command1, initialPose)

    shape = (int(grid.shape[0] / 10), int(grid.shape[1] / 10))
    origin = [0, 0]
    mapResolution = 0.1
    locc = 1
    lfree = -1
    alpha = 0.5
    beta = 2 * math.pi / numRays
    map = occmap.OccupancyMap(shape[:], origin, mapResolution, locc, lfree,
                              limit, alpha, beta)

    for i in range(len(poses)):
        pose = poses[i]
        measurement = measurements[i]
        map.update(pose, measurement)

    plt.figure()
    probOccMap = map.generateProbabilityOccupancyGrid(probFree=True)
    plt.imshow(probOccMap, cmap='gray', origin='lower')

    plt.figure()
    plot.plotOccupancyGrid(grid, resolution)
    plot.plotRobotPoses(poses)
    plot.show()