changeset 483:30b3455978d9

Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 02 Apr 2014 17:25:50 -0400
parents f6415f012640
children 6464e4f0cc26
files python/utils.py scripts/safety-analysis.py tracking.cfg
diffstat 3 files changed, 31 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/python/utils.py	Wed Apr 02 16:12:24 2014 -0400
+++ b/python/utils.py	Wed Apr 02 17:25:50 2014 -0400
@@ -593,6 +593,9 @@
 #########################
 
 class TrackingParameters:
+    '''Class for tracking and safety parameters
+
+    Note: framerate is already taken into account'''
     def loadConfigFile(self, filename):
         from ConfigParser import ConfigParser
         from numpy import loadtxt
@@ -617,9 +620,11 @@
         self.crossingZones = config.getboolean(self.sectionHeader, 'crossing-zones')
         self.predictionMethod = config.get(self.sectionHeader, 'prediction-method')
         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
+        self.maxNormalAcceleration = config.getfloat(self.sectionHeader, 'max-normal-acceleration')/self.videoFrameRate**2
+        self.maxNormalSteering = config.getfloat(self.sectionHeader, 'max-normal-steering')/self.videoFrameRate
+        self.minExtremeAcceleration = config.getfloat(self.sectionHeader, 'min-extreme-acceleration')/self.videoFrameRate**2
+        self.maxExtremeAcceleration = config.getfloat(self.sectionHeader, 'max-extreme-acceleration')/self.videoFrameRate**2
+        self.maxExtremeSteering = config.getfloat(self.sectionHeader, 'max-extreme-steering')/self.videoFrameRate
         self.useFeaturesForPrediction = config.getboolean(self.sectionHeader, 'use-features-prediction')
 
 class SceneParameters:
--- a/scripts/safety-analysis.py	Wed Apr 02 16:12:24 2014 -0400
+++ b/scripts/safety-analysis.py	Wed Apr 02 17:25:50 2014 -0400
@@ -2,7 +2,7 @@
 
 import utils, storage, prediction, events, moving
 
-import sys, argparse
+import sys, argparse, random
 
 import matplotlib.pyplot as plt
 import numpy as np
@@ -11,7 +11,7 @@
 # add computation of probality of unsucessful evasive action
 
 parser = argparse.ArgumentParser(description='The program processes indicators for all pairs of road users in the scene')
-parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file')
+parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file', required = True)
 parser.add_argument('--prediction-method', dest = 'predictionMethod', help = 'prediction method (constant velocity (vector computation), constant velocity, normal adaptation, point set prediction)', choices = ['cvd', 'cv', 'na', 'ps'])
 parser.add_argument('--display-cp', dest = 'displayCollisionPoints', help = 'display collision points', action = 'store_true')
 args = parser.parse_args()
@@ -25,28 +25,29 @@
 else:
     predictionMethod = params.predictionMethod
 
+accelerationDistribution = lambda: random.triangular(-params.maxNormalAcceleration, params.maxNormalAcceleration, 0.)
+steeringDistribution = lambda: random.triangular(-params.maxNormalSteering, params.maxNormalSteering, 0.)
+
 if predictionMethod == 'cvd':
     predictionParameters = prediction.CVDirectPredictionParameters()
 elif predictionMethod == 'cv':
     predictionParameters = prediction.ConstantPredictionParameters(params.maxPredictedSpeed)
 elif predictionMethod == 'na':
-    predictionParameters = prediction.NormalAdaptationPredictionParameters(params.maxPredictedSpeed, 
+    predictionParameters = prediction.NormalAdaptationPredictionParameters(params.maxPredictedSpeed,
                                                                            params.nPredictedTrajectories, 
-                                                                           params.maxAcceleration,
-                                                                           params.maxSteering,
+                                                                           accelerationDistribution,
+                                                                           steeringDistribution,
                                                                            params.useFeaturesForPrediction)
 elif predictionMethod == 'ps':
     predictionParameters = prediction.PointSetPredictionParameters(params.nPredictedTrajectories,
                                                                    params.maxPredictedSpeed)
-else:
-    print('Prediction method {} is not valid. See help.'.format(predictionMethod))
-    sys.exit()
+# no else required, since parameters is required as argument
 
 # evasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed, 
 #                                                                                  params.nPredictedTrajectories, 
-#                                                                                  params.minAcceleration,
-#                                                                                  params.maxAcceleration,
-#                                                                                  params.maxSteering,
+#                                                                                  params.minExtremeAcceleration,
+#                                                                                  params.maxExtremeAcceleration,
+#                                                                                  params.maxExtremeSteering,
 #                                                                                  params.useFeaturesForPrediction)
 
 objects = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'object')
@@ -58,7 +59,7 @@
 interactions = events.createInteractions(objects)
 for inter in interactions:
     inter.computeIndicators()
-    inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones)
+    inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon*params.videoFrameRate, params.crossingZones)
 
 storage.saveIndicators(params.databaseFilename, interactions)
 
--- a/tracking.cfg	Wed Apr 02 16:12:24 2014 -0400
+++ b/tracking.cfg	Wed Apr 02 17:25:50 2014 -0400
@@ -77,11 +77,15 @@
 prediction-method = na
 # number of predicted trajectories (use depends on prediction method)
 npredicted-trajectories = 10
-# minimum acceleration for input distribution (m/s2) (used only for evasive action distributions)
-min-acceleration = -9.1
-# maximum acceleration for input distribution (m/s2)
-max-acceleration = 2
-# maximum steering for input distribution (rad/s)
-max-steering = 0.5
+# maximum acceleration for normal adaptation input symmetric distribution (m/s2)
+max-normal-acceleration = 2
+# maximum steering for normal adaptation input symmetric distribution (rad/s)
+max-normal-steering = 0.2
+# minimum acceleration for input distribution (m/s2) (extreme values used for evasive action distributions)
+min-extreme-acceleration = -9.1
+# maximum acceleration for input distribution (m/s2) (extreme values used for evasive action distributions)
+max-extreme-acceleration = 4.3
+# maximum steering for input distribution (rad/s) (extreme values used for evasive action distributions)
+max-extreme-steering = 0.5
 # use feature positions and velocities for prediction
 use-features-prediction = true