comparison python/events.py @ 601:e1f3b789c632

add a definition of interaction and collision course intervals
author Mohamed Gomaa
date Thu, 02 May 2013 11:35:45 -0400
parents 414b2e7cd873
children
comparison
equal deleted inserted replaced
600:414b2e7cd873 601:e1f3b789c632
45 '''Computes the collision course cosine only if the cosine is positive''' 45 '''Computes the collision course cosine only if the cosine is positive'''
46 collisionCourseDotProducts = {}#[0]*int(self.timeInterval.length()) 46 collisionCourseDotProducts = {}#[0]*int(self.timeInterval.length())
47 collisionCourseAngles = {} 47 collisionCourseAngles = {}
48 distances = {}#[0]*int(self.timeInterval.length()) 48 distances = {}#[0]*int(self.timeInterval.length())
49 speedDifferentials = {} 49 speedDifferentials = {}
50 velocityAngle= {}
50 for instant in self.timeInterval: 51 for instant in self.timeInterval:
51 deltap = self.movingObject1.getPositionAtInstant(instant)-self.movingObject2.getPositionAtInstant(instant) 52 deltap = self.movingObject1.getPositionAtInstant(instant)-self.movingObject2.getPositionAtInstant(instant)
52 deltav = self.movingObject2.getVelocityAtInstant(instant)-self.movingObject1.getVelocityAtInstant(instant) 53 deltav = self.movingObject2.getVelocityAtInstant(instant)-self.movingObject1.getVelocityAtInstant(instant)
53 collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav) 54 collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav)
55 velocityDotProduct= moving.Point.dot(self.movingObject1.getVelocityAtInstant(instant),self.movingObject2.getVelocityAtInstant(instant))
56 velocityAngle[instant]= np.arccos(velocityDotProduct/ (self.movingObject1.getVelocityAtInstant(instant).norm2() * self.movingObject2.getVelocityAtInstant(instant).norm2()))
54 distances[instant] = deltap.norm2() 57 distances[instant] = deltap.norm2()
55 speedDifferentials[instant] = deltav.norm2() 58 speedDifferentials[instant] = deltav.norm2()
56 if collisionCourseDotProducts[instant] > 0: 59 if collisionCourseDotProducts[instant] > 0:
57 collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant])) 60 collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant]))
58 61
59 # todo shorten the time intervals based on the interaction definition 62 # todo shorten the time intervals based on the interaction definition
60 self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts)) 63 self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts))
61 self.addIndicator(indicators.SeverityIndicator('Distance', distances)) 64 self.addIndicator(indicators.SeverityIndicator('Distance', distances))
62 self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials)) 65 self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials))
66 self.addIndicator(indicators.SeverityIndicator('Velocity Angle', velocityAngle))
63 self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles)) 67 self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles))
64 68
65 # todo test for interaction instants and interval, compute indicators 69 # todo test for interaction instants and interval, compute indicators
66 70
67 # if we have features, compute other indicators 71 # if we have features, compute other indicators
80 collisionPoints,crossingZones = prediction.computeCrossingsCollisions(self.movingObject1, self.movingObject2, predictionParameters, collisionDistanceThreshold, timeHorizon,asWholeVehicle=True) 84 collisionPoints,crossingZones = prediction.computeCrossingsCollisions(self.movingObject1, self.movingObject2, predictionParameters, collisionDistanceThreshold, timeHorizon,asWholeVehicle=True)
81 self.addIndicator(indicators.SeverityIndicator('collisionPoints', collisionPoints)) 85 self.addIndicator(indicators.SeverityIndicator('collisionPoints', collisionPoints))
82 else: 86 else:
83 print('Features not associated with objects') 87 print('Features not associated with objects')
84 88
89 def defineInteractionInterval(self):
90 ''' interaction defined as the first and last time that the collion course is positive'''
91 keys=sorted(self.getIndicator('Collision Course Angle').values.keys())
92 if keys!=[]:
93 self.interactionInterval= moving.TimeInterval(keys[0],keys[-1])
94 else:
95 print('no interaction')
96 self.interactionInterval=None
97
98 def defineCollisionPointInterval(self):
99 ''' collision point defined as the first and last time that the collion point exist'''
100 values= self.getIndicator('TTC').values
101 keys=sorted(values.keys())
102 #keysReverse=sorted(values.keys(),reverse=True)
103 keysWithoutinf= [key for key in keys if values[key]!=np.inf]
104 if keysWithoutinf!=[]:
105 self.collisionPointInterval= moving.TimeInterval(min(keysWithoutinf),max(keysWithoutinf))
106 else:
107 print('no collision points')
108 self.collisionPointInterval=None
109
110 def removeIndicatorExtraValues(self,indicatorName):
111 ''' refine the indicators value wrt interaction definition'''
112 self.defineInteractionInterval()
113 refinedIndicator = {}
114 if self.interactionInterval!= None:
115 for i in xrange(self.interactionInterval.first,self.interactionInterval.last+1):
116 if self.getIndicator(indicatorName).values.get(i)== None:
117 refinedIndicator[i]= None
118 else:
119 refinedIndicator[i]= self.getIndicator(indicatorName).values[i]
120 self.addIndicator(indicators.SeverityIndicator(str(indicatorName)+' New', refinedIndicator))
121
122 def removeIndicatorExtraValuesCP(self,indicatorName):
123 ''' refine the indicators value wrt interaction definition'''
124 self.defineCollisionPointInterval()
125 refinedIndicator = {}
126 if self.collisionPointInterval!= None:
127 for i in xrange(self.collisionPointInterval.first,self.collisionPointInterval.last+1):
128 if self.getIndicator(indicatorName).values.get(i)== None:
129 refinedIndicator[i]= None
130 else:
131 refinedIndicator[i]= self.getIndicator(indicatorName).values[i]
132 self.addIndicator(indicators.SeverityIndicator(str(indicatorName)+'2', refinedIndicator))
133
85 def addVideoFilename(self,videoFilename): 134 def addVideoFilename(self,videoFilename):
86 self.videoFilename= videoFilename 135 self.videoFilename= videoFilename
87 136
88 def addInteractionType(self,interactionType): 137 def addInteractionType(self,interactionType):
89 ''' interaction types: conflict or collision if they are known''' 138 ''' interaction types: conflict or collision if they are known'''