comparison python/events.py @ 387:91679eb2ff2c

cleaning up safety analysis and the new traditional constant velocity method
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 24 Jul 2013 12:48:12 -0400
parents ba813f148ade
children 6e0dedd34920
comparison
equal deleted inserted replaced
386:8bc632cb8344 387:91679eb2ff2c
85 speedDifferentials[instant] = deltav.norm2() 85 speedDifferentials[instant] = deltav.norm2()
86 #if collisionCourseDotProducts[instant] > 0: 86 #if collisionCourseDotProducts[instant] > 0:
87 collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant])) 87 collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant]))
88 88
89 # todo shorten the time intervals based on the interaction definition 89 # todo shorten the time intervals based on the interaction definition
90 self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts)) 90 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[0], collisionCourseDotProducts))
91 self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles)) 91 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[1], collisionCourseAngles))
92 self.addIndicator(indicators.SeverityIndicator('Distance', distances)) 92 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[2], distances))
93 self.addIndicator(indicators.SeverityIndicator('Velocity Angle', velocityAngles)) 93 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[4], velocityAngles))
94 self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials)) 94 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[5], speedDifferentials))
95 95
96 # todo test for interaction instants and interval, compute indicators 96 # todo test for interaction instants and interval, compute indicators
97 97
98 # if we have features, compute other indicators 98 # if we have features, compute other indicators
99 if self.roadUser1.features != None and self.roadUser2.features != None: 99 if self.roadUser1.features != None and self.roadUser2.features != None:
100 minDistance={} 100 minDistance={}
101 for instant in self.timeInterval: 101 for instant in self.timeInterval:
102 minDistance[instant] = moving.MovingObject.minDistance(self.roadUser1, self.roadUser2, instant) 102 minDistance[instant] = moving.MovingObject.minDistance(self.roadUser1, self.roadUser2, instant)
103 self.addIndicator(indicators.SeverityIndicator('Minimum Distance', minDistance)) 103 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[3], minDistance))
104 104
105 def computeCrossingsCollisions(self, predictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, timeInterval = None): 105 def computeCrossingsCollisions(self, predictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, timeInterval = None):
106 '''Computes all crossing and collision points at each common instant for two road users. ''' 106 '''Computes all crossing and collision points at each common instant for two road users. '''
107 self.collisionPoints={} 107 self.collisionPoints={}
108 self.crossingZones={} 108 self.crossingZones={}
115 for i in list(commonTimeInterval)[:-1]: # do not look at the 1 last position/velocities, often with errors 115 for i in list(commonTimeInterval)[:-1]: # do not look at the 1 last position/velocities, often with errors
116 self.collisionPoints[i], self.crossingZones[i] = predictionParameters.computeCrossingsCollisionsAtInstant(i, self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug) 116 self.collisionPoints[i], self.crossingZones[i] = predictionParameters.computeCrossingsCollisionsAtInstant(i, self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug)
117 if len(self.collisionPoints[i]) > 0: 117 if len(self.collisionPoints[i]) > 0:
118 TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(self.collisionPoints[i]) 118 TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(self.collisionPoints[i])
119 # add probability of collision, and probability of successful evasive action 119 # add probability of collision, and probability of successful evasive action
120 self.addIndicator(indicators.SeverityIndicator('TTC', TTCs)) 120 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[7], TTCs))
121 121
122 if computeCZ: 122 if computeCZ:
123 pPETs = {} 123 pPETs = {}
124 for i in list(commonTimeInterval)[:-1]: 124 for i in list(commonTimeInterval)[:-1]:
125 if len(self.crossingZones[i]) > 0: 125 if len(self.crossingZones[i]) > 0:
126 pPETs[i] = prediction.SafetyPoint.computeExpectedIndicator(self.crossingZones[i]) 126 pPETs[i] = prediction.SafetyPoint.computeExpectedIndicator(self.crossingZones[i])
127 self.addIndicator(indicators.SeverityIndicator('pPET', pPETs)) 127 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[9], pPETs))
128 128
129 def addVideoFilename(self,videoFilename): 129 def addVideoFilename(self,videoFilename):
130 self.videoFilename= videoFilename 130 self.videoFilename= videoFilename
131 131
132 def addInteractionType(self,interactionType): 132 def addInteractionType(self,interactionType):