annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
328
5e43b7389c25 script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
1 #! /usr/bin/env python
5e43b7389c25 script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
2
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
3 import utils, storage, prediction, events
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
4
337
dc2e68e936c7 work in progress
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 335
diff changeset
5 import sys, argparse
328
5e43b7389c25 script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
6
5e43b7389c25 script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
7 import matplotlib.pyplot as plt
5e43b7389c25 script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
8 import numpy as np
5e43b7389c25 script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
9
337
dc2e68e936c7 work in progress
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 335
diff changeset
10 parser = argparse.ArgumentParser(description='The program processes indicators for all pairs of road users in the scene')
350
7e9ad2d9d79c added new parameters in safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 348
diff changeset
11 parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file')
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
12 parser.add_argument('--prediction-method', dest = 'predictionMethod', help = 'prediction method (constant velocity, normal adaptation, point set prediction)', choices = ['cv', 'na', 'ps'])
337
dc2e68e936c7 work in progress
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 335
diff changeset
13 args = parser.parse_args()
348
c64a4f889b97 added safety analysis options to feature tracking (with default values for backward compatibility)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 344
diff changeset
14
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
15 params = utils.TrackingParameters()
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
16 params.loadConfigFile(args.configFilename)
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
17
350
7e9ad2d9d79c added new parameters in safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 348
diff changeset
18 # parameters for prediction methods
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
19 if args.predictionMethod:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
20 predictionMethod = args.predictionMethod
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
21 else:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
22 predictionMethod = params.predictionMethod
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
23
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
24 if predictionMethod == 'cv':
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
25 predictionParameters = prediction.ConstantPredictionParameters(params.maxPredictedSpeed)
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
26 elif predictionMethod == 'na':
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
27 predictionParameters = prediction.NormalAdaptationPredictionParameters(params.maxPredictedSpeed,
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
28 params.nPredictedTrajectories,
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
29 params.maxAcceleration,
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
30 params.maxSteering,
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
31 params.useFeaturesForPrediction)
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
32 elif predictionMethod == 'ps':
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
33 predictionParameters = prediction.PointSetPredictionParameters(params.nPredictedTrajectories,
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
34 params.maxPredictedSpeed)
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
35 else:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
36 print('Prediction method {} is not valid. See help.'.format(predictionMethod))
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
37 sys.exit()
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
38
350
7e9ad2d9d79c added new parameters in safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 348
diff changeset
39 evasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed,
7e9ad2d9d79c added new parameters in safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 348
diff changeset
40 params.nPredictedTrajectories,
7e9ad2d9d79c added new parameters in safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 348
diff changeset
41 params.minAcceleration,
7e9ad2d9d79c added new parameters in safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 348
diff changeset
42 params.maxAcceleration,
7e9ad2d9d79c added new parameters in safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 348
diff changeset
43 params.maxSteering,
351
891858351bcb added new parameter (use features) for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 350
diff changeset
44 params.useFeaturesForPrediction)
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
45
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
46 objects = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'object')
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
47 if params.useFeaturesForPrediction:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
48 features = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'feature') # needed if normal adaptation
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
49 for obj in objects:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
50 obj.setFeatures(features)
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
51
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
52 interactions = events.createInteractions(objects)
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
53 for inter in interactions[:1]:
343
74e437ab5f11 first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 338
diff changeset
54 inter.computeIndicators()
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
55 inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones)
343
74e437ab5f11 first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 338
diff changeset
56
74e437ab5f11 first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 338
diff changeset
57 storage.saveIndicators(params.databaseFilename, interactions)
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
58
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
59 if False:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
60 plt.figure()
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
61 plt.axis('equal')
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
62 for inter in interactions:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
63 for collisionPoints in inter.collisionPoints.values():
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
64 for cp in collisionPoints:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
65 plt.plot([cp.x], [cp.y], 'x')
328
5e43b7389c25 script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
66