Mercurial Hosting > traffic-intelligence
annotate scripts/safety-analysis.py @ 863:a8ca72dc1564
work on user detectors
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 08 Nov 2016 17:59:40 -0500 |
parents | 6d89520e269f |
children | 8ba82b371eea |
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) |
857
6d89520e269f
minor modifications to safety-analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
559
diff
changeset
|
15 parser.add_argument('-n', dest = 'nObjects', help = 'number of objects to analyse', type = int) |
6d89520e269f
minor modifications to safety-analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
559
diff
changeset
|
16 # TODO analyze only |
359
619ae9a9a788
implemented prediction method at constant velocity with direct intersection computation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
357
diff
changeset
|
17 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
|
18 parser.add_argument('--display-cp', dest = 'displayCollisionPoints', help = 'display collision points', action = 'store_true') |
857
6d89520e269f
minor modifications to safety-analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
559
diff
changeset
|
19 parser.add_argument('--nthreads', dest = 'nProcesses', help = 'number of processes to run in parallel', type = int, default = 1) |
337
dc2e68e936c7
work in progress
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
335
diff
changeset
|
20 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
|
21 |
536
95276d310972
renamed TrackingParameters to ProcessParameters
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
533
diff
changeset
|
22 params = storage.ProcessParameters(args.configFilename) |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
23 |
350
7e9ad2d9d79c
added new parameters in safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
348
diff
changeset
|
24 # parameters for prediction methods |
857
6d89520e269f
minor modifications to safety-analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
559
diff
changeset
|
25 if args.predictionMethod is not None: |
352
72aa44072093
safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
351
diff
changeset
|
26 predictionMethod = args.predictionMethod |
72aa44072093
safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
351
diff
changeset
|
27 else: |
72aa44072093
safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
351
diff
changeset
|
28 predictionMethod = params.predictionMethod |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
29 |
559
806df5f61c03
adapted safety-analysis script to use multi-threading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
558
diff
changeset
|
30 def accelerationDistribution(): |
806df5f61c03
adapted safety-analysis script to use multi-threading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
558
diff
changeset
|
31 return random.triangular(-params.maxNormalAcceleration, params.maxNormalAcceleration, 0.) |
806df5f61c03
adapted safety-analysis script to use multi-threading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
558
diff
changeset
|
32 def steeringDistribution(): |
806df5f61c03
adapted safety-analysis script to use multi-threading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
558
diff
changeset
|
33 return random.triangular(-params.maxNormalSteering, params.maxNormalSteering, 0.) |
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
|
34 |
533
e37f38274d4f
fixed compiling issue with size()
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
489
diff
changeset
|
35 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
|
36 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
|
37 elif predictionMethod == 'cv': |
352
72aa44072093
safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
351
diff
changeset
|
38 predictionParameters = prediction.ConstantPredictionParameters(params.maxPredictedSpeed) |
72aa44072093
safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
351
diff
changeset
|
39 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
|
40 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
|
41 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
|
42 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
|
43 steeringDistribution, |
352
72aa44072093
safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
351
diff
changeset
|
44 params.useFeaturesForPrediction) |
72aa44072093
safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
351
diff
changeset
|
45 elif predictionMethod == 'ps': |
489
000bddf84ad0
corrected bugs in safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
485
diff
changeset
|
46 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
|
47 # 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
|
48 |
476
6551a3cf1750
modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
387
diff
changeset
|
49 # evasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(params.maxPredictedSpeed, |
6551a3cf1750
modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
387
diff
changeset
|
50 # 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
|
51 # 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
|
52 # 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
|
53 # params.maxExtremeSteering, |
476
6551a3cf1750
modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
387
diff
changeset
|
54 # params.useFeaturesForPrediction) |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
55 |
857
6d89520e269f
minor modifications to safety-analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
559
diff
changeset
|
56 objects = storage.loadTrajectoriesFromSqlite(params.databaseFilename, 'object', args.nObjects, withFeatures = params.useFeaturesForPrediction) |
6d89520e269f
minor modifications to safety-analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
559
diff
changeset
|
57 # if params.useFeaturesForPrediction: |
6d89520e269f
minor modifications to safety-analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
559
diff
changeset
|
58 # features = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'feature') # needed if normal adaptation |
6d89520e269f
minor modifications to safety-analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
559
diff
changeset
|
59 # for obj in objects: |
6d89520e269f
minor modifications to safety-analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
559
diff
changeset
|
60 # obj.setFeatures(features) |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
61 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
62 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
|
63 for inter in interactions: |
343
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
64 inter.computeIndicators() |
559
806df5f61c03
adapted safety-analysis script to use multi-threading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
558
diff
changeset
|
65 inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones, nProcesses = args.nProcesses) |
343
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
66 |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
67 storage.saveIndicators(params.databaseFilename, interactions) |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
68 |
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
|
69 if args.displayCollisionPoints: |
352
72aa44072093
safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
351
diff
changeset
|
70 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
|
71 allCollisionPoints = [] |
352
72aa44072093
safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
351
diff
changeset
|
72 for inter in interactions: |
72aa44072093
safety analysis script with option for prediction method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
351
diff
changeset
|
73 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
|
74 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
|
75 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
|
76 plt.axis('equal') |
328
5e43b7389c25
script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
77 |