annotate scripts/safety-analysis.py @ 558:a80ef6931fd8

updated safety-analysis to test multiprocessing
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 14 Jul 2014 17:44:09 -0400
parents 95276d310972
children 806df5f61c03
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
533
e37f38274d4f fixed compiling issue with size()
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 489
diff changeset
3 import storage, prediction, events, moving
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
4
483
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
5 import sys, argparse, random
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
357
e5fe0e6d48a1 corrected bug computing TTC (resp. pPET) if there is no collision point (resp. crossing zone)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 352
diff changeset
10 # todo: very slow if too many predicted trajectories
e5fe0e6d48a1 corrected bug computing TTC (resp. pPET) if there is no collision point (resp. crossing zone)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 352
diff changeset
11 # add computation of probality of unsucessful evasive action
e5fe0e6d48a1 corrected bug computing TTC (resp. pPET) if there is no collision point (resp. crossing zone)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 352
diff changeset
12
337
dc2e68e936c7 work in progress
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 335
diff changeset
13 parser = argparse.ArgumentParser(description='The program processes indicators for all pairs of road users in the scene')
483
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
14 parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file', required = True)
359
619ae9a9a788 implemented prediction method at constant velocity with direct intersection computation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 357
diff changeset
15 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'])
482
f6415f012640 adding functionalities (save images directly to display trajectories to create movies
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
16 parser.add_argument('--display-cp', dest = 'displayCollisionPoints', help = 'display collision points', action = 'store_true')
558
a80ef6931fd8 updated safety-analysis to test multiprocessing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 536
diff changeset
17 parser.add_argument('-n', dest = 'nProcesses', help = 'number of processes to run in parallel', type = int)
337
dc2e68e936c7 work in progress
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 335
diff changeset
18 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
19
536
95276d310972 renamed TrackingParameters to ProcessParameters
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 533
diff changeset
20 params = storage.ProcessParameters(args.configFilename)
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
21
350
7e9ad2d9d79c added new parameters in safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 348
diff changeset
22 # parameters for prediction methods
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
23 if args.predictionMethod:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
24 predictionMethod = args.predictionMethod
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
25 else:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
26 predictionMethod = params.predictionMethod
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
27
483
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
28 accelerationDistribution = lambda: random.triangular(-params.maxNormalAcceleration, params.maxNormalAcceleration, 0.)
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
29 steeringDistribution = lambda: random.triangular(-params.maxNormalSteering, params.maxNormalSteering, 0.)
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
30
533
e37f38274d4f fixed compiling issue with size()
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 489
diff changeset
31 if predictionMethod == 'cvd': # TODO add cve: constant velocity exact (Sohail's)
387
91679eb2ff2c cleaning up safety analysis and the new traditional constant velocity method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 359
diff changeset
32 predictionParameters = prediction.CVDirectPredictionParameters()
359
619ae9a9a788 implemented prediction method at constant velocity with direct intersection computation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 357
diff changeset
33 elif predictionMethod == 'cv':
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
34 predictionParameters = prediction.ConstantPredictionParameters(params.maxPredictedSpeed)
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
35 elif predictionMethod == 'na':
483
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
36 predictionParameters = prediction.NormalAdaptationPredictionParameters(params.maxPredictedSpeed,
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
37 params.nPredictedTrajectories,
483
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
38 accelerationDistribution,
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
39 steeringDistribution,
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
40 params.useFeaturesForPrediction)
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
41 elif predictionMethod == 'ps':
489
000bddf84ad0 corrected bugs in safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 485
diff changeset
42 predictionParameters = prediction.PointSetPredictionParameters(params.maxPredictedSpeed)
483
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
43 # no else required, since parameters is required as argument
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
44
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 387
diff changeset
45 # evasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed,
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 387
diff changeset
46 # params.nPredictedTrajectories,
483
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
47 # params.minExtremeAcceleration,
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
48 # params.maxExtremeAcceleration,
30b3455978d9 Corrected issues with safety-analysis script, variable names are changed and tracking.cfg accordingly
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 482
diff changeset
49 # params.maxExtremeSteering,
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 387
diff changeset
50 # params.useFeaturesForPrediction)
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 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
53 if params.useFeaturesForPrediction:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
54 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
55 for obj in objects:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
56 obj.setFeatures(features)
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
57
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
58 interactions = events.createInteractions(objects)
357
e5fe0e6d48a1 corrected bug computing TTC (resp. pPET) if there is no collision point (resp. crossing zone)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 352
diff changeset
59 for inter in interactions:
343
74e437ab5f11 first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 338
diff changeset
60 inter.computeIndicators()
558
a80ef6931fd8 updated safety-analysis to test multiprocessing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 536
diff changeset
61 inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones, params.nProcesses)
343
74e437ab5f11 first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 338
diff changeset
62
74e437ab5f11 first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 338
diff changeset
63 storage.saveIndicators(params.databaseFilename, interactions)
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 337
diff changeset
64
357
e5fe0e6d48a1 corrected bug computing TTC (resp. pPET) if there is no collision point (resp. crossing zone)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 352
diff changeset
65 if args.displayCollisionPoints:
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
66 plt.figure()
357
e5fe0e6d48a1 corrected bug computing TTC (resp. pPET) if there is no collision point (resp. crossing zone)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 352
diff changeset
67 allCollisionPoints = []
352
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
68 for inter in interactions:
72aa44072093 safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 351
diff changeset
69 for collisionPoints in inter.collisionPoints.values():
357
e5fe0e6d48a1 corrected bug computing TTC (resp. pPET) if there is no collision point (resp. crossing zone)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 352
diff changeset
70 allCollisionPoints += collisionPoints
e5fe0e6d48a1 corrected bug computing TTC (resp. pPET) if there is no collision point (resp. crossing zone)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 352
diff changeset
71 moving.Point.plotAll(allCollisionPoints)
e5fe0e6d48a1 corrected bug computing TTC (resp. pPET) if there is no collision point (resp. crossing zone)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 352
diff changeset
72 plt.axis('equal')
328
5e43b7389c25 script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
73