Mercurial > hg > nsaunier > traffic-intelligence
comparison python/extrapolation.py @ 257:9281878ff19e
untested collision/crossing computation
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Tue, 24 Jul 2012 03:27:29 -0400 |
| parents | dc1faa7287bd |
| children | d90be3c02267 |
comparison
equal
deleted
inserted
replaced
| 256:dc1faa7287bd | 257:9281878ff19e |
|---|---|
| 53 self.predictedPositions = {0: initialPosition} | 53 self.predictedPositions = {0: initialPosition} |
| 54 self.predictedSpeedOrientations = {0: moving.NormAngle.fromPoint(initialVelocity)} | 54 self.predictedSpeedOrientations = {0: moving.NormAngle.fromPoint(initialVelocity)} |
| 55 | 55 |
| 56 def getControl(self): | 56 def getControl(self): |
| 57 return moving.NormAngle(self.accelerationDistribution(),self.steeringDistribution()) | 57 return moving.NormAngle(self.accelerationDistribution(),self.steeringDistribution()) |
| 58 | |
| 59 | |
| 60 class ExtrapolationParameters: | |
| 61 def __init__(self, name): | |
| 62 self.name = name | |
| 63 | |
| 64 def createExtrapolatedTrajectories(extrapolationParameters, initialPosition, initialVelocity, maxSpeed): | |
| 65 '''extrapolationParameters specific to each method (in name field) ''' | |
| 66 if extrapolationHypothesis.name == 'constant velocity': | |
| 67 return [ExtrapolatedTrajectoryConstant(initialPosition, initialVelocity, maxSpeed = maxSpeed)] | |
| 68 else: | |
| 69 print('Unknown extrapolation hypothesis') | |
| 70 return [] | |
| 71 | |
| 72 def computeCrossingsCollisions(extrapolatedTrajectories1, extrapolatedTrajectories2, collisionDistanceThreshold, timeHorizon): | |
| 73 '''returns the lists of collision points and crossing zones ''' | |
| 74 collisionPoints = [] | |
| 75 TTCs = [] | |
| 76 crossingZones = [] | |
| 77 pPETs = [] | |
| 78 for et1 in extrapolatedTrajectories1: | |
| 79 for et2 in extrapolatedTrajectories2: | |
| 80 | |
| 81 t = 1 | |
| 82 p1 = et1.predictPosition(t) | |
| 83 p2 = et2.predictPosition(t) | |
| 84 while t <= timeHorizon and (p1-p2).norm() > collisionDistanceThreshold: | |
| 85 p1 = et1.predictPosition(t) | |
| 86 p2 = et2.predictPosition(t) | |
| 87 t += 1 | |
| 88 | |
| 89 if t <= timeHorizon: | |
| 90 TTCs.append(t) # todo store probability | |
| 91 collisionPoints.append((p1+p2).multiply(0.5)) | |
| 92 else: # check if there is a crossing zone | |
| 93 for t1 in xrange(timeHorizon-1): | |
| 94 for t2 in xrange(timeHorizon-1): | |
| 95 cz = moving.segmentIntersection (et1.predictPosition(t1), et1.predictPosition(t1+1), et2.predictPosition(t2), et2.predictPosition(t2+1)) | |
| 96 if cz: | |
| 97 crossingZones.append(cz) | |
| 98 pPETs.append(abs(t1-t2)) | |
| 99 break | |
| 100 return collisionPoints, crossingZones, TTCs, pPETs | |
| 101 | |
| 58 | 102 |
| 59 | 103 |
| 60 # Default values: to remove because we cannot tweak that from a script where the value may be different | 104 # Default values: to remove because we cannot tweak that from a script where the value may be different |
| 61 FPS= 25 # No. of frame per second (FPS) | 105 FPS= 25 # No. of frame per second (FPS) |
| 62 vLimit= 25/FPS #assume limit speed is 90km/hr = 25 m/sec | 106 vLimit= 25/FPS #assume limit speed is 90km/hr = 25 m/sec |
