예제 #1
0
파일: arty.py 프로젝트: pombredanne/keiro
 def freeprob_turn_line(self, p1, a1, p2, view, starttime):
     """Free probability for turning and then walking on a straight line"""
     a2 = (p2 - p1).angle()
     dt = abs(angle_diff(a1, a2)) / self.turningspeed
     free = self.freeprob_turn(p1, a1, a2, view, starttime)
     free *= self.freeprob_line(p1, p2, view, starttime + dt)
     return free
예제 #2
0
파일: arty.py 프로젝트: pombredanne/keiro
 def freeprob_turn(self, position, a1, a2, view, starttime):
     """ Probability that a turn started at starttime at position between angles a1 and a2 will be collision free """
     dur = abs(angle_diff(a1, a2)) / self.turningspeed
     for p in view.pedestrians:
         p1 = p.position
         p2 = self.future_position(p, dur)  # extrapolate
         if linesegdist2(p1, p2, position) < (self.radius + p.radius + self.FREEMARGIN) ** 2:
             self.freeprob_fail_pedestrian = p
             return 0
     return 1
예제 #3
0
파일: arty.py 프로젝트: pombredanne/keiro
 def _traversal_time(self, candidate_position, existing_node):
     distance = candidate_position.distance_to(existing_node.position)
     if existing_node.parent is None:
         # existing_node is goal node
         #i.e. once it's reached, we don't have to turn
         turndist = 0
     else:
         movement_vector = (existing_node.position - candidate_position)
         turndist = abs(angle_diff(movement_vector.angle(), existing_node.angle))
     traversal_time = (distance / self.speed) + (turndist / self.turningspeed)
     return traversal_time
예제 #4
0
파일: arty.py 프로젝트: freider/keiro
    def test_move(self, p1, a1, p2, view, starttime):
        """Get from a state (a1, p1) to ((p2-p1).angle(), p2)

        Returns (traversal_time, safeness)
        """
        diff = p2 - p1
        a2 = diff.angle()
        turningtime = abs(angle_diff(a1, a2)) / self.turningspeed
        movetime = diff.length() / self.speed
        turn_safeness = self.turn_safeness(p1, a1, a2, view, starttime)
        line_safeness = self.line_safeness(
            p1, p2, view,
            starttime + turningtime
        )
        return ((turningtime + movetime), turn_safeness * line_safeness)
예제 #5
0
파일: arty.py 프로젝트: freider/keiro
    def turn_safeness(self, position, a1, a2, view, starttime):
        """ Probability that a turn is collision free

            Started at starttime at position between
            angles a1 and a2.
        """
        dur = abs(angle_diff(a1, a2)) / self.turningspeed
        for p in view.pedestrians:
            # extrapolate to start of turn
            p1 = self.future_position(p, starttime)
            # extrapolate to end of turn
            p2 = self.future_position(p, starttime + dur)
            safedist2 = (self.radius + p.radius + self.FREEMARGIN) ** 2
            if linesegdist2(p1, p2, position) < safedist2:
                self.safeness_fail_pedestrian = p
                return 0
        return 1
예제 #6
0
파일: arty.py 프로젝트: pombredanne/keiro
 def segment_time(self, a1, p1, p2):
     """Returns time to get from a state (a1, p1) to ((p2-p1).angle(), p2)"""
     diff = p2 - p1
     turningtime = abs(angle_diff(a1, diff.angle())) / self.turningspeed
     movetime = diff.length() / self.speed
     return turningtime + movetime