diff scripts/safety-analysis.py @ 352:72aa44072093

safety analysis script with option for prediction method
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 27 Jun 2013 01:35:47 -0400
parents 891858351bcb
children e5fe0e6d48a1
line wrap: on
line diff
--- a/scripts/safety-analysis.py	Thu Jun 27 00:25:51 2013 -0400
+++ b/scripts/safety-analysis.py	Thu Jun 27 01:35:47 2013 -0400
@@ -9,27 +9,32 @@
 
 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('--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)
+parser.add_argument('--prediction-method', dest = 'predictionMethod', help = 'prediction method (constant velocity, normal adaptation, point set prediction)', choices = ['cv', 'na', 'ps'])
 args = parser.parse_args()
 
-# TODO work on the way to indicate an interaction definition
-
-# if False: # test if there is a configuration file?
 params = utils.TrackingParameters()
 params.loadConfigFile(args.configFilename)
 
 # parameters for prediction methods
-constantVelocityPredictionParameters = prediction.ConstantPredictionParameters(params.maxPredictedSpeed)
+if args.predictionMethod:
+    predictionMethod = args.predictionMethod
+else:
+    predictionMethod = params.predictionMethod
 
-normalAdaptationPredictionParameters = prediction.NormalAdaptationPredictionParameters(params.maxPredictedSpeed, 
-                                                                                       params.nPredictedTrajectories, 
-                                                                                       params.maxAcceleration,
-                                                                                       params.maxSteering,
-                                                                                       params.useFeaturesForPrediction)
-
-featurePredictionParameters = prediction.PointSetPredictionParameters(params.maxPredictedSpeed, 
-                                                                      params.nPredictedTrajectories)
+if predictionMethod == 'cv':
+    predictionParameters = prediction.ConstantPredictionParameters(params.maxPredictedSpeed)
+elif predictionMethod == 'na':
+    predictionParameters = prediction.NormalAdaptationPredictionParameters(params.maxPredictedSpeed, 
+                                                                           params.nPredictedTrajectories, 
+                                                                           params.maxAcceleration,
+                                                                           params.maxSteering,
+                                                                           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()
 
 evasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed, 
                                                                                  params.nPredictedTrajectories, 
@@ -38,33 +43,24 @@
                                                                                  params.maxSteering,
                                                                                  params.useFeaturesForPrediction)
 
-featureEvasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed, 
-                                                                                        params.nPredictedTrajectories, 
-                                                                                        params.minAcceleration,
-                                                                                        params.maxAcceleration,
-                                                                                        params.maxSteering,
-                                                                                        params.useFeaturesForPrediction)
-
-
-
 objects = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'object')
-# features = storage.loadTrajectoriesFromSqlite('amherst-10.sqlite','feature') # needed if normal adaptation
+if params.useFeaturesForPrediction:
+    features = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'feature') # needed if normal adaptation
+    for obj in objects:
+        obj.setFeatures(features)
 
 interactions = events.createInteractions(objects)
-for inter in interactions:
+for inter in interactions[:1]:
     inter.computeIndicators()
-    inter.computeCrossingsCollisions(constantVelocityPredictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones)
+    inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones)
 
 storage.saveIndicators(params.databaseFilename, interactions)
 
-# if display:
-#     plt.figure()
-#     plt.axis('equal')
-#     for inter in interactions[:2]:
-#         for collisionPoints in inter.collisionPoints.values():
-#             for cp in collisionPoints:
-#                 plot([cp.x], [cp.y], 'x')
-
-# for the demo, output automatically a map
-# possibility to process longitudinal coords only
+if False:
+    plt.figure()
+    plt.axis('equal')
+    for inter in interactions:
+        for collisionPoints in inter.collisionPoints.values():
+            for cp in collisionPoints:
+                plt.plot([cp.x], [cp.y], 'x')