comparison trafficintelligence/prediction.py @ 1214:01c24c1cdb70

implemented direct method
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 04 May 2023 22:30:32 -0400
parents af329f3330ba
children 1b472cddf9b1
comparison
equal deleted inserted replaced
1213:3f2214125164 1214:01c24c1cdb70
603 collisionPoints = [SafetyPoint((p1+(v1*ttc)+p2+(v2*ttc))*0.5, 1., ttc)] 603 collisionPoints = [SafetyPoint((p1+(v1*ttc)+p2+(v2*ttc))*0.5, 1., ttc)]
604 else: 604 else:
605 pass # compute pPET 605 pass # compute pPET
606 return collisionPoints, crossingZones 606 return collisionPoints, crossingZones
607 607
608 class CVRectPredictionParameters(PredictionParameters): 608 class CVExactPolyPredictionParameters(PredictionParameters):
609 '''Prediction parameters of prediction at constant velocity 609 '''Prediction parameters of prediction at constant velocity
610 for objects represented by boxes (bird eye view boxes) 610 for objects represented by boxes (bird eye view boxes)
611 Warning: the computed time to collision may be higher than timeHorizon (not used)''' 611 Warning: the computed time to collision may be higher than timeHorizon (not used)'''
612 612
613 def __init__(self): 613 def __init__(self):
614 PredictionParameters.__init__(self, 'constant velocity for rectangles', None) 614 PredictionParameters.__init__(self, 'constant velocity for polygon representation (direct exact)', None)
615 615
616 def computeCrossingsCollisionsAtInstant(self, currentInstant, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, *kwargs): 616 def computeCrossingsCollisionsAtInstant(self, currentInstant, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, *kwargs):
617 'TODO compute pPET' 617 'TODO compute pPET'
618 collisionPoints = [] 618 collisionPoints = []
619 crossingZones = [] 619 crossingZones = []
620 620
621 # first test if there is a collision (test if movement is parallel to sides of vehicle) 621 if self.useCurvilinear:
622 # test if vehicle aligned with y axis, otherwise, compute slope 622 pass # Lionel
623 623 else:
624 624 poly1 = obj1.getBoundingPolygon(currentInstant)
625 # compute approximate time of arrival 625 poly2 = obj2.getBoundingPolygon(currentInstant)
626 v1 = obj1.getVelocityAtInstant(currentInstant)
627 v2 = obj2.getVelocityAtInstant(currentInstant)
628
629 if not moving.Point.parallel(v1, v2):
630 ttc = moving.Point.timeToCollisionPoly(poly1, v1, poly2, v2)
631 if ttc is not None:
632 collisionPoints = [SafetyPoint((obj1.getPositionAtInstant(currentInstant)+(v1*ttc)+obj2.getPositionAtInstant(currentInstant)+(v2*ttc))*0.5, 1., ttc)]
633 else:
634 pass # compute pPET
635 return collisionPoints, crossingZones
636
626 637
627 class PrototypePredictionParameters(PredictionParameters): 638 class PrototypePredictionParameters(PredictionParameters):
628 def __init__(self, prototypes, nPredictedTrajectories, pointSimilarityDistance, minSimilarity, lcssMetric = 'cityblock', minFeatureTime = 10, constantSpeed = False, useFeatures = True): 639 def __init__(self, prototypes, nPredictedTrajectories, pointSimilarityDistance, minSimilarity, lcssMetric = 'cityblock', minFeatureTime = 10, constantSpeed = False, useFeatures = True):
629 PredictionParameters.__init__(self, 'prototypes', None) 640 PredictionParameters.__init__(self, 'prototypes', None)
630 self.prototypes = prototypes 641 self.prototypes = prototypes