diff python/events.py @ 604:8ba4b8ad4c86

Motion Pattern Method
author MohamedGomaa
date Tue, 15 Jul 2014 13:25:15 -0400
parents 21bdeb29f855
children
line wrap: on
line diff
--- a/python/events.py	Tue Jul 08 15:22:30 2014 -0400
+++ b/python/events.py	Tue Jul 15 13:25:15 2014 -0400
@@ -1,7 +1,7 @@
 #! /usr/bin/env python
 '''Libraries for events
 Interactions, pedestrian crossing...'''
-
+import sys
 import numpy as np
 from numpy import arccos
 
@@ -141,6 +141,46 @@
                     pPETs[i] = prediction.SafetyPoint.computeExpectedIndicator(self.crossingZones[i])
             self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[9], pPETs))
 
+    def computeCrossingsCollisionsPrototype(self, predictionParameters, collisionDistanceThreshold, timeHorizon, prototypes,nMatching,objects,minSimilarity=0.5,index=None,mostMatched=None, computeCZ = False, debug = False, timeInterval = None,acceptPartialLength=30):
+        '''Computes all crossing and collision points at each common instant for two road users. '''
+        self.collisionPoints={}
+        self.crossingZones={}
+        TTCs = {}
+        route1=(self.roadUser1.startRouteID,self.roadUser1.endRouteID)
+        route2=(self.roadUser2.startRouteID,self.roadUser2.endRouteID)
+
+        if timeInterval:
+            commonTimeInterval = timeInterval
+        else:
+            commonTimeInterval = self.timeInterval
+        for i in list(commonTimeInterval)[:-1]: # do not look at the 1 last position/velocities, often with errors
+            sys.path.append("D:/behaviourAnalysis/libs")
+            import trajLearning
+            if  i-self.roadUser1.timeInterval.first >= acceptPartialLength and i-self.roadUser2.timeInterval.first >= acceptPartialLength:
+                inter1=moving.Interval(self.roadUser1.timeInterval.first,i)
+                inter2=moving.Interval(self.roadUser2.timeInterval.first,i)
+                partialObjPositions1= self.roadUser1.getObjectInTimeInterval(inter1).positions
+                partialObjPositions2= self.roadUser2.getObjectInTimeInterval(inter2).positions
+                prototypeTrajectories1=trajLearning.findPrototypes(prototypes,nMatching,objects,route1,partialObjPositions1,minSimilarity,index,mostMatched)
+                prototypeTrajectories2=trajLearning.findPrototypes(prototypes,nMatching,objects,route2,partialObjPositions2,minSimilarity,index,mostMatched)
+                if prototypeTrajectories1=={}:
+                    print self.roadUser1.num, 'is abnormal at instant', str(i)
+                elif prototypeTrajectories2=={}:
+                    print self.roadUser2.num, 'is abnormal at instant', str(i)
+                else:
+					self.collisionPoints[i], self.crossingZones[i] = predictionParameters.computeCrossingsCollisionsAtInstant(i, self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug,prototypeTrajectories1,prototypeTrajectories2)
+					if len(self.collisionPoints[i]) > 0:
+						TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(self.collisionPoints[i])
+        # add probability of collision, and probability of successful evasive action
+        self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[7], TTCs))
+        
+        if computeCZ:
+            pPETs = {}
+            for i in list(commonTimeInterval)[:-1]:
+                if i in self.crossingZones.keys() and len(self.crossingZones[i]) > 0:
+                    pPETs[i] = prediction.SafetyPoint.computeExpectedIndicator(self.crossingZones[i])
+            self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[9], pPETs))
+
     def addVideoFilename(self,videoFilename):
         self.videoFilename= videoFilename