comparison python/extrapolation.py @ 266:aba9711b3149

small modificatons and reorganization
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 27 Jul 2012 10:29:24 -0400
parents 7a3bf04cf016
children 32e88b513f5c
comparison
equal deleted inserted replaced
265:7a3bf04cf016 266:aba9711b3149
61 61
62 def getControl(self): 62 def getControl(self):
63 return moving.NormAngle(self.accelerationDistribution(),self.steeringDistribution()) 63 return moving.NormAngle(self.accelerationDistribution(),self.steeringDistribution())
64 64
65 class ExtrapolationParameters: 65 class ExtrapolationParameters:
66 def __init__(self, name): 66 def __init__(self, name, maxSpeed):
67 self.name = name 67 self.name = name
68 self.maxSpeed = maxSpeed
69
70 def __str__(self):
71 return '{0} {1}'.format(self.name, self.maxSpeed)
68 72
69 def createExtrapolatedTrajectories(extrapolationParameters, obj, instant): 73 def createExtrapolatedTrajectories(extrapolationParameters, obj, instant):
70 '''extrapolationParameters specific to each method (in name field) ''' 74 '''extrapolationParameters specific to each method (in name field) '''
71 if extrapolationParameters.name == 'constant velocity': 75 if extrapolationParameters.name == 'constant velocity':
72 return [ExtrapolatedTrajectoryConstant(obj.getPositionAtInstant(instant), obj.getVelocityAtInstant(instant), 76 return [ExtrapolatedTrajectoryConstant(obj.getPositionAtInstant(instant), obj.getVelocityAtInstant(instant),
100 self.x = p.x 104 self.x = p.x
101 self.y = p.y 105 self.y = p.y
102 self.probability = probability 106 self.probability = probability
103 self.indicator = indicator 107 self.indicator = indicator
104 108
105 def saveSafetyPoints(out, objNum1, objNum2, instant, points): 109 @staticmethod
106 for p in points: 110 def save(out, points, objNum1, objNum2, instant):
107 out.write('{0} {1} {2} {3} {4} {5} {6}\n'.format(objNum1, objNum2, instant, p.x, p.y, p.probability, p.indicator)) 111 for p in points:
112 out.write('{0} {1} {2} {3} {4} {5} {6}\n'.format(objNum1, objNum2, instant, p.x, p.y, p.probability, p.indicator))
108 113
109 def computeExpectedIndicator(points): 114 def computeExpectedIndicator(points):
110 from numpy import sum 115 from numpy import sum
111 return sum([p.indicator*p.probability for p in points])/sum([p.probability for p in points]) 116 return sum([p.indicator*p.probability for p in points])/sum([p.probability for p in points])
112 117
113 def computeCrossingsCollisionsAtInstant(extrapolatedTrajectories1, extrapolatedTrajectories2, collisionDistanceThreshold, timeHorizon): 118 def computeCrossingsCollisionsAtInstant(i, obj1, obj2, extrapolationParameters, collisionDistanceThreshold, timeHorizon):
114 '''returns the lists of collision points and crossing zones ''' 119 '''returns the lists of collision points and crossing zones '''
120 extrapolatedTrajectories1 = createExtrapolatedTrajectories(extrapolationParameters, obj1, i)
121 extrapolatedTrajectories2 = createExtrapolatedTrajectories(extrapolationParameters, obj2, i)
122
115 collisionPoints = [] 123 collisionPoints = []
116 crossingZones = [] 124 crossingZones = []
117 for et1 in extrapolatedTrajectories1: 125 for et1 in extrapolatedTrajectories1:
118 for et2 in extrapolatedTrajectories2: 126 for et2 in extrapolatedTrajectories2:
119 t = 1 127 t = 1
153 commonTimeInterval = timeInterval 161 commonTimeInterval = timeInterval
154 else: 162 else:
155 commonTimeInterval = obj1.commonTimeInterval(obj2) 163 commonTimeInterval = obj1.commonTimeInterval(obj2)
156 for i in list(commonTimeInterval)[:-1]: # do not look at the 1 last position/velocities, often with errors 164 for i in list(commonTimeInterval)[:-1]: # do not look at the 1 last position/velocities, often with errors
157 print(obj1.num, obj2.num, i) 165 print(obj1.num, obj2.num, i)
158 extrapolatedTrajectories1 = createExtrapolatedTrajectories(extrapolationParameters, obj1, i) 166 collisionPoints[i], crossingZones[i] = computeCrossingsCollisionsAtInstant(i, obj1, obj2, extrapolationParameters, collisionDistanceThreshold, timeHorizon)
159 extrapolatedTrajectories2 = createExtrapolatedTrajectories(extrapolationParameters, obj2, i)
160
161 collisionPoints[i], crossingZones[i] = computeCrossingsCollisionsAtInstant(extrapolatedTrajectories1, extrapolatedTrajectories2, collisionDistanceThreshold, timeHorizon)
162 # if len(collisionPoints[i]) > 0: 167 # if len(collisionPoints[i]) > 0:
163 # TTCs[i] = extrapolation.computeExpectedIndicator(collisionPoints[i]) 168 # TTCs[i] = extrapolation.computeExpectedIndicator(collisionPoints[i])
164 # if len(crossingZones[i]) > 0: 169 # if len(crossingZones[i]) > 0:
165 # pPETs[i] = extrapolation.computeExpectedIndicator(crossingZones[i]) 170 # pPETs[i] = extrapolation.computeExpectedIndicator(crossingZones[i])
166 saveSafetyPoints(outCP, obj1.num, obj2.num, i, collisionPoints[i]) 171 SafetyPoint.save(outCP, collisionPoints[i], obj1.num, obj2.num, i)
167 saveSafetyPoints(outCZ, obj1.num, obj2.num, i, crossingZones[i]) 172 SafetyPoint.save(outCZ, crossingZones[i], obj1.num, obj2.num, i)
168 173
169 if debug: 174 if debug:
170 from matplotlib.pyplot import figure, axis, title 175 from matplotlib.pyplot import figure, axis, title
171 figure() 176 figure()
172 obj1.draw('r') 177 obj1.draw('r')