changeset 350:7e9ad2d9d79c

added new parameters in safety analysis script
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 27 Jun 2013 00:18:39 -0400
parents e3f910c26fae
children 891858351bcb
files python/prediction.py python/utils.py scripts/safety-analysis.py
diffstat 3 files changed, 39 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/python/prediction.py	Thu Jun 27 00:07:44 2013 -0400
+++ b/python/prediction.py	Thu Jun 27 00:18:39 2013 -0400
@@ -80,7 +80,7 @@
                                                maxSpeed = self.maxSpeed)]
 
 class NormalAdaptationPredictionParameters(PredictionParameters):
-    def __init__(self, maxSpeed, nPredictedTrajectories, maxAcceleration, maxSteering):
+    def __init__(self, maxSpeed, nPredictedTrajectories, maxAcceleration, maxSteering):#, useFeatures = False
         PredictionParameters.__init__(self, 'normal adaptation', maxSpeed)
         self.nPredictedTrajectories = nPredictedTrajectories
         self.maxAcceleration = maxAcceleration
@@ -107,17 +107,19 @@
 
 class PointSetPredictionParameters(PredictionParameters):
     # todo generate several trajectories with normal adaptatoins from each position (feature)
-    def __init__(self, maxSpeed):
+    def __init__(self, nPredictedTrajectories, maxSpeed):
         PredictionParameters.__init__(self, 'point set', maxSpeed)
+        self.nPredictedTrajectories = nPredictedTrajectories
     
     def generatePredictedTrajectories(self, obj, instant):
         predictedTrajectories = []        
         features = [f for f in obj.features if f.existsAtInstant(instant)]
         positions = [f.getPositionAtInstant(instant) for f in features]
         velocities = [f.getVelocityAtInstant(instant) for f in features]
-        for initialPosition,initialVelocity in zip(positions, velocities):
-            predictedTrajectories.append(PredictedTrajectoryConstant(initialPosition, initialVelocity, 
-                                                                           maxSpeed = self.maxSpeed))
+        for i in xrange(self.nPredictedTrajectories):
+            for initialPosition,initialVelocity in zip(positions, velocities):
+                predictedTrajectories.append(PredictedTrajectoryConstant(initialPosition, initialVelocity, 
+                                                                         maxSpeed = self.maxSpeed))
         return predictedTrajectories
 
 class EvasiveActionPredictionParameters(PredictionParameters):
@@ -152,10 +154,10 @@
         for i in xrange(self.nPredictedTrajectories):
             for initialPosition,initialVelocity in zip(positions, velocities):
                 predictedTrajectories.append(PredictedTrajectoryConstant(initialPosition, 
-                                                                               initialVelocity, 
-                                                                               moving.NormAngle(self.accelerationDistribution(), 
-                                                                                                self.steeringDistribution()), 
-                                                                               maxSpeed = self.maxSpeed))
+                                                                         initialVelocity, 
+                                                                         moving.NormAngle(self.accelerationDistribution(), 
+                                                                                          self.steeringDistribution()), 
+                                                                         maxSpeed = self.maxSpeed))
         return predictedTrajectories
 
 class SafetyPoint(moving.Point):
--- a/python/utils.py	Thu Jun 27 00:07:44 2013 -0400
+++ b/python/utils.py	Thu Jun 27 00:18:39 2013 -0400
@@ -452,6 +452,15 @@
         self.firstFrameNum = config.getint(self.sectionHeader, 'frame1')
         self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps')
 
+        self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate
+        self.predictionTimeHorizon = config.getfloat(self.sectionHeader, 'prediction-time-horizon')*self.videoFrameRate
+        self.collisionDistance = config.getfloat(self.sectionHeader, 'collision-distance')
+        self.crossingZones = config.getboolean(self.sectionHeader, 'crossing-zones')
+        self.nPredictedTrajectories = config.getint(self.sectionHeader, 'npredicted-trajectories')
+        self.minAcceleration = config.getfloat(self.sectionHeader, 'min-acceleration')/self.videoFrameRate**2
+        self.maxAcceleration = config.getfloat(self.sectionHeader, 'max-acceleration')/self.videoFrameRate**2
+        self.maxSteering = config.getfloat(self.sectionHeader, 'max-steering')/self.videoFrameRate
+
 #########################
 # sqlite
 #########################
--- a/scripts/safety-analysis.py	Thu Jun 27 00:07:44 2013 -0400
+++ b/scripts/safety-analysis.py	Thu Jun 27 00:18:39 2013 -0400
@@ -8,7 +8,7 @@
 import numpy as np
 
 parser = argparse.ArgumentParser(description='The program processes indicators for all pairs of road users in the scene')
-parser.add_argument('configFilename', help = 'name of the configuration file')
+parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file')
 #parser.add_argument('--maxspeed', dest = 'maxSpeed', help = 'maximum speed when predicting future motion (km/h)', default = 50, type = int)
 #parser.add_argument('--time-horizon', dest = 'maxSpeed', help = 'maximum speed when predicting future motion (km/h)', default = 50, type = int)
 args = parser.parse_args()
@@ -19,30 +19,28 @@
 params = utils.TrackingParameters()
 params.loadConfigFile(args.configFilename)
 
-# configuration parameters # TODO from command line
-maxSpeed = args.maxSpeed/3.6/params.videoFrameRate # speed limit 50 km/h for urban envt, 90km/hr = 25 m/sec for highways
-timeHorizon= params.videoFrameRate*5 # prediction time Horizon = 1.5 s (reaction time) (5 second)
-collisionDistanceThreshold= 1.8 # m
-computeCZ = False
+# parameters for prediction methods
+constantVelocityPredictionParameters = prediction.ConstantPredictionParameters(params.maxPredictedSpeed)
 
-# display = False
+normalAdaptationPredictionParameters = prediction.NormalAdaptationPredictionParameters(params.maxPredictedSpeed, 
+                                                                                       params.nPredictedTrajectories, 
+                                                                                       params.maxAcceleration,
+                                                                                       params.maxSteering)
 
-# parameters for prediction methods
-constantVelocityPredictionParameters = prediction.ConstantPredictionParameters(maxSpeed)
-
-normalAdaptationPredictionParameters = prediction.NormalAdaptationPredictionParameters(maxSpeed, 100, 2./frameRate**2, # m/s2
-                                                                                       0.2/frameRate) # rad/s
+featurePredictionParameters = prediction.PointSetPredictionParameters(params.maxPredictedSpeed, params.nPredictedTrajectories)
 
-featurePredictionParameters = prediction.PointSetPredictionParameters(maxSpeed)
-
-evasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(maxSpeed, 100, -9.1/frameRate**2, # m/s2
-                                                                                 4.3/frameRate**2, # m/s2
-                                                                                 0.5/frameRate, # rad/s
+evasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed, 
+                                                                                 params.nPredictedTrajectories, 
+                                                                                 params.minAcceleration,
+                                                                                 params.maxAcceleration,
+                                                                                 params.maxSteering,
                                                                                  False)
 
-featureEvasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(maxSpeed, 10, -9.1/frameRate**2, # m/s2
-                                                                                        4.3/frameRate**2, # m/s2
-                                                                                        0.5/frameRate, # rad/s
+featureEvasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed, 
+                                                                                        params.nPredictedTrajectories, 
+                                                                                        params.minAcceleration,
+                                                                                        params.maxAcceleration,
+                                                                                        params.maxSteering,
                                                                                         True)
 
 
@@ -53,7 +51,7 @@
 interactions = events.createInteractions(objects)
 for inter in interactions:
     inter.computeIndicators()
-    inter.computeCrossingsCollisions(constantVelocityPredictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ)
+    inter.computeCrossingsCollisions(constantVelocityPredictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones)
 
 storage.saveIndicators(params.databaseFilename, interactions)