Mercurial Hosting > traffic-intelligence
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')