Mercurial Hosting > traffic-intelligence
diff trafficintelligence/moving.py @ 1112:956a66096e91
removed code now available in simulation project, and issue with deprecated find function in matplotlib
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 05 Jun 2019 13:12:10 -0400 |
parents | 345cd9cd62d8 |
children | 7135b5eaa6b4 |
line wrap: on
line diff
--- a/trafficintelligence/moving.py Mon May 06 17:13:13 2019 -0400 +++ b/trafficintelligence/moving.py Wed Jun 05 13:12:10 2019 -0400 @@ -1293,71 +1293,6 @@ def updatePositions(self): inter, self.positions, self.velocities = MovingObject.aggregateTrajectories(self.features, self.getTimeInterval()) - def addNewellAttributes(self, desiredSpeed, tau, d, initialCumulatedHeadway, initialAlignmentIdx): - '''adds attributes necessary for Newell car following model - using curvilinear trajectories''' - # Newell model parameters - self.desiredSpeed = desiredSpeed - self.tau = tau - self.d = d - self.leader = None - # other attributes necessary for computation - self.initialCumulatedHeadway = initialCumulatedHeadway - self.initialAlignmentIdx = initialAlignmentIdx - self.timeAtS0 = None # time at which the vehicle's position is s=0 on the alignment - - def updateCurvilinearPositions(self, method, instant, timeStep, _nextAlignmentIdx = None, maxSpeed = None, acceleration = None): - '''Update curvilinear position of user at new instant''' - # TODO changer nextAlignmentIdx pour l'alignment en cours, reflechir pour des control devices - - if method == 'newell': - if self.curvilinearPositions is None: # vehicle without positions - if self.timeAtS0 is None: - if self.leader is None: - self.timeAtS0 = self.initialCumulatedHeadway - elif self.leader.curvilinearPositions is not None and self.leader.curvilinearPositions.getSCoordAt(-1) > self.d and len(self.leader.curvilinearPositions) >=2: - firstInstantAfterD = self.leader.getLastInstant() - while self.leader.existsAtInstant(firstInstantAfterD) and self.leader.getCurvilinearPositionAtInstant(firstInstantAfterD-1)[0] > self.d:# find first instant after d - firstInstantAfterD -= 1 # if not recorded position before self.d, we extrapolate linearly from first known position - leaderSpeed = self.leader.getCurvilinearVelocityAtInstant(firstInstantAfterD-1)[0] - self.timeAtS0 = self.tau + firstInstantAfterD*timeStep - (self.leader.getCurvilinearPositionAtInstant(firstInstantAfterD)[0]-self.d)*timeStep/leaderSpeed # second part is the time at which leader is at self.d - if self.timeAtS0 < self.initialCumulatedHeadway: #obj appears at instant initialCumulatedHeadway at x=0 with desiredSpeed - self.timeAtS0 = self.initialCumulatedHeadway - elif instant*timeStep > self.timeAtS0: - #firstInstant = int(ceil(self.timeAtS0/timeStep))# this first instant is instant by definition - leaderInstant = instant-self.tau/timeStep - if self.leader is None: - s = (timeStep*instant-self.timeAtS0)*self.desiredSpeed - self.timeInterval = TimeInterval(instant, instant) - self.curvilinearPositions = CurvilinearTrajectory([s], [0.], [self.initialAlignmentIdx]) - self.curvilinearVelocities = CurvilinearTrajectory() - elif self.leader.existsAtInstant(leaderInstant): - self.timeInterval = TimeInterval(instant, instant) - freeFlowCoord = (instant*timeStep - self.timeAtS0)*self.desiredSpeed - # constrainedCoord at instant = xn-1(t = instant*timeStep-self.tau)-self.d - constrainedCoord = self.leader.interpolateCurvilinearPositions(leaderInstant)[0]-self.d - self.curvilinearPositions = CurvilinearTrajectory([min(freeFlowCoord, constrainedCoord)], [0.], [self.initialAlignmentIdx]) - self.curvilinearVelocities = CurvilinearTrajectory() - else: - if _nextAlignmentIdx is not None: - laneChange = (self.curvilinearPositions.getLaneAt(-1), _nextAlignmentIdx) - nextAlignmentIdx = _nextAlignmentIdx - else: - laneChange = None - nextAlignmentIdx = self.curvilinearPositions.getLaneAt(-1) - s1 = self.curvilinearPositions.getSCoordAt(-1) - freeFlowCoord = s1 + self.desiredSpeed*timeStep - if self.leader is None: - if self.getLastInstant() < instant: - s2 = freeFlowCoord - self.curvilinearPositions.addPositionSYL(freeFlowCoord, 0., nextAlignmentIdx) - else: - constrainedCoord = self.leader.interpolateCurvilinearPositions(instant-self.tau/timeStep)[0]-self.d - s2 = min(freeFlowCoord, constrainedCoord) - self.curvilinearPositions.addPositionSYL(s2, 0., nextAlignmentIdx) - self.setLastInstant(instant) - self.curvilinearVelocities.addPositionSYL(s2-s1, 0., laneChange) - @staticmethod def concatenate(obj1, obj2, num = None, newFeatureNum = None, computePositions = False): '''Concatenates two objects, whether overlapping temporally or not