Mercurial > hg > nsaunier > traffic-intelligence
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 351:891858351bcb | 352:72aa44072093 |
|---|---|
| 7 import matplotlib.pyplot as plt | 7 import matplotlib.pyplot as plt |
| 8 import numpy as np | 8 import numpy as np |
| 9 | 9 |
| 10 parser = argparse.ArgumentParser(description='The program processes indicators for all pairs of road users in the scene') | 10 parser = argparse.ArgumentParser(description='The program processes indicators for all pairs of road users in the scene') |
| 11 parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file') | 11 parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file') |
| 12 #parser.add_argument('--maxspeed', dest = 'maxSpeed', help = 'maximum speed when predicting future motion (km/h)', default = 50, type = int) | 12 parser.add_argument('--prediction-method', dest = 'predictionMethod', help = 'prediction method (constant velocity, normal adaptation, point set prediction)', choices = ['cv', 'na', 'ps']) |
| 13 #parser.add_argument('--time-horizon', dest = 'maxSpeed', help = 'maximum speed when predicting future motion (km/h)', default = 50, type = int) | |
| 14 args = parser.parse_args() | 13 args = parser.parse_args() |
| 15 | 14 |
| 16 # TODO work on the way to indicate an interaction definition | |
| 17 | |
| 18 # if False: # test if there is a configuration file? | |
| 19 params = utils.TrackingParameters() | 15 params = utils.TrackingParameters() |
| 20 params.loadConfigFile(args.configFilename) | 16 params.loadConfigFile(args.configFilename) |
| 21 | 17 |
| 22 # parameters for prediction methods | 18 # parameters for prediction methods |
| 23 constantVelocityPredictionParameters = prediction.ConstantPredictionParameters(params.maxPredictedSpeed) | 19 if args.predictionMethod: |
| 20 predictionMethod = args.predictionMethod | |
| 21 else: | |
| 22 predictionMethod = params.predictionMethod | |
| 24 | 23 |
| 25 normalAdaptationPredictionParameters = prediction.NormalAdaptationPredictionParameters(params.maxPredictedSpeed, | 24 if predictionMethod == 'cv': |
| 26 params.nPredictedTrajectories, | 25 predictionParameters = prediction.ConstantPredictionParameters(params.maxPredictedSpeed) |
| 27 params.maxAcceleration, | 26 elif predictionMethod == 'na': |
| 28 params.maxSteering, | 27 predictionParameters = prediction.NormalAdaptationPredictionParameters(params.maxPredictedSpeed, |
| 29 params.useFeaturesForPrediction) | 28 params.nPredictedTrajectories, |
| 30 | 29 params.maxAcceleration, |
| 31 featurePredictionParameters = prediction.PointSetPredictionParameters(params.maxPredictedSpeed, | 30 params.maxSteering, |
| 32 params.nPredictedTrajectories) | 31 params.useFeaturesForPrediction) |
| 32 elif predictionMethod == 'ps': | |
| 33 predictionParameters = prediction.PointSetPredictionParameters(params.nPredictedTrajectories, | |
| 34 params.maxPredictedSpeed) | |
| 35 else: | |
| 36 print('Prediction method {} is not valid. See help.'.format(predictionMethod)) | |
| 37 sys.exit() | |
| 33 | 38 |
| 34 evasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed, | 39 evasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed, |
| 35 params.nPredictedTrajectories, | 40 params.nPredictedTrajectories, |
| 36 params.minAcceleration, | 41 params.minAcceleration, |
| 37 params.maxAcceleration, | 42 params.maxAcceleration, |
| 38 params.maxSteering, | 43 params.maxSteering, |
| 39 params.useFeaturesForPrediction) | 44 params.useFeaturesForPrediction) |
| 40 | 45 |
| 41 featureEvasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed, | |
| 42 params.nPredictedTrajectories, | |
| 43 params.minAcceleration, | |
| 44 params.maxAcceleration, | |
| 45 params.maxSteering, | |
| 46 params.useFeaturesForPrediction) | |
| 47 | |
| 48 | |
| 49 | |
| 50 objects = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'object') | 46 objects = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'object') |
| 51 # features = storage.loadTrajectoriesFromSqlite('amherst-10.sqlite','feature') # needed if normal adaptation | 47 if params.useFeaturesForPrediction: |
| 48 features = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'feature') # needed if normal adaptation | |
| 49 for obj in objects: | |
| 50 obj.setFeatures(features) | |
| 52 | 51 |
| 53 interactions = events.createInteractions(objects) | 52 interactions = events.createInteractions(objects) |
| 54 for inter in interactions: | 53 for inter in interactions[:1]: |
| 55 inter.computeIndicators() | 54 inter.computeIndicators() |
| 56 inter.computeCrossingsCollisions(constantVelocityPredictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones) | 55 inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones) |
| 57 | 56 |
| 58 storage.saveIndicators(params.databaseFilename, interactions) | 57 storage.saveIndicators(params.databaseFilename, interactions) |
| 59 | 58 |
| 60 # if display: | 59 if False: |
| 61 # plt.figure() | 60 plt.figure() |
| 62 # plt.axis('equal') | 61 plt.axis('equal') |
| 63 # for inter in interactions[:2]: | 62 for inter in interactions: |
| 64 # for collisionPoints in inter.collisionPoints.values(): | 63 for collisionPoints in inter.collisionPoints.values(): |
| 65 # for cp in collisionPoints: | 64 for cp in collisionPoints: |
| 66 # plot([cp.x], [cp.y], 'x') | 65 plt.plot([cp.x], [cp.y], 'x') |
| 67 | |
| 68 # for the demo, output automatically a map | |
| 69 # possibility to process longitudinal coords only | |
| 70 | 66 |
