示例#1
0
class ObstaclesOccGrid(FieldGen):
    def __init__(self, bzrc):
        super(ObstaclesOccGrid, self).__init__(bzrc)

        self.bzrc = bzrc
        self.world_map = WorldMap(bzrc)
        self.time_diff = 3
        self.last_time = time.time() - self.time_diff

    def vector_at(self, x, y):
        # update the occ grid if enough time has passed
        if time.time() - self.last_time >= self.time_diff:
            self.world_map.update_grid(self.bzrc)
            self.last_time = time.time()

        closest_edge = self.world_map.obstacle_edge_at(x, y, EFFECTIVE_RANGE)
        if closest_edge is None:
            return Vec2d(0, 0), False

        # position vector
        vector_s = Vec2d(x, y)

        # vector for endpoint 1
        vector_a = Vec2d(closest_edge[0])

        # vector for endpoint 2
        vector_c = Vec2d(closest_edge[1])

        # final vector is the sum of vector from C to S and from A to S
        final_vector = (vector_s - vector_c) + (vector_s - vector_a)

        return final_vector.normalized(), False