Mercurial Hosting > traffic-intelligence
annotate scripts/safety-analysis.py @ 347:7b865f4174aa
updated script to display trajectories with argparse module
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 26 Jun 2013 17:28:45 -0400 |
parents | 14a2405f54f8 |
children | c64a4f889b97 |
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') |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
11 parser.add_argument('configFilename', help = 'name of the configuration file') |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
12 # parser.add_argument('-c', help = 'name of the configuration file') # |
337
dc2e68e936c7
work in progress
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
335
diff
changeset
|
13 args = parser.parse_args() |
dc2e68e936c7
work in progress
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
335
diff
changeset
|
14 print(args) |
328
5e43b7389c25
script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
15 # TODO work on the way to indicate an interaction definition |
5e43b7389c25
script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
16 |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
17 # if False: # test if there is a configuration file? |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
18 params = utils.TrackingParameters() |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
19 params.loadConfigFile(args.configFilename) |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
20 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
21 # configuration parameters # TODO from command line |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
22 frameRate = 15 # frame per second |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
23 maxSpeed = 90/3.6/frameRate # speed limit 50 km/h for urban envt, 90km/hr = 25 m/sec for highways |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
24 timeHorizon= frameRate*5 # prediction time Horizon = 1.5 s (reaction time) (5 second) |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
25 collisionDistanceThreshold= 1.8 # m |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
26 computeCZ = True |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
27 |
343
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
28 display = False |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
29 |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
30 # parameters for prediction methods |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
31 constantVelocityPredictionParameters = prediction.ConstantPredictionParameters(maxSpeed) |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
32 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
33 normalAdaptationPredictionParameters = prediction.NormalAdaptationPredictionParameters(maxSpeed, 100, 2./frameRate**2, # m/s2 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
34 0.2/frameRate) # rad/s |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
35 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
36 featurePredictionParameters = prediction.PointSetPredictionParameters(maxSpeed) |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
37 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
38 evasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(maxSpeed, 100, -9.1/frameRate**2, # m/s2 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
39 4.3/frameRate**2, # m/s2 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
40 0.5/frameRate, # rad/s |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
41 False) |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
42 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
43 featureEvasiveActionPredictionParameters = prediction.EvasiveActionPredictionParameters(maxSpeed, 10, -9.1/frameRate**2, # m/s2 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
44 4.3/frameRate**2, # m/s2 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
45 0.5/frameRate, # rad/s |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
46 True) |
333
c9201f6b143a
moved the config parser to utils
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
328
diff
changeset
|
47 |
328
5e43b7389c25
script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
48 |
335
3950bfe22768
added functions to export trajectories to csv
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
334
diff
changeset
|
49 |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
50 objects = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'object') |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
51 # features = storage.loadTrajectoriesFromSqlite('amherst-10.sqlite','feature') # needed if normal adaptation |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
52 |
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
53 interactions = events.createInteractions(objects) |
344
14a2405f54f8
slight modification to safety analysis and generalized script to delete computed data (objects and interactions)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
343
diff
changeset
|
54 for inter in interactions: |
343
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
55 inter.computeIndicators() |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
56 # inter.computeCrossingsCollisions(constantVelocityPredictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ) |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
57 |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
58 storage.saveIndicators(params.databaseFilename, interactions) |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
59 |
343
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
60 if display: |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
61 plt.figure() |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
62 plt.axis('equal') |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
63 for inter in interactions[:2]: |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
64 for collisionPoints in inter.collisionPoints.values(): |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
65 for cp in collisionPoints: |
74e437ab5f11
first version of indicator loading code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
338
diff
changeset
|
66 plot([cp.x], [cp.y], 'x') |
335
3950bfe22768
added functions to export trajectories to csv
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
334
diff
changeset
|
67 |
3950bfe22768
added functions to export trajectories to csv
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
334
diff
changeset
|
68 # for the demo, output automatically a map |
338
f3aceea2afbb
first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
337
diff
changeset
|
69 # possibility to process longitudinal coords only |
328
5e43b7389c25
script for safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
70 |