- in the quoted formula, the terms '*egoBrakeGap*' and 'l*eaderBrakeGap*' denote the instant brake-gap (headway=0). The term '*egoSpeed * tau + egoBrakeGap' *is what the function brakeGapEuler returns when given headway=tau - the safety condition is actually an inequality: *egoSpeed * tau + egoBrakeGap < secureGap + leaderBrakeGap*. Phrased differently: If the brakeGap of the leader is much larger than the brakeGap of the follower, the *secureGap* does not turn negative - the safety condition is only safe as long as the follower cannot brake stronger than the leader (https://arxiv.org/abs/1902.04927 applies to Krauss as well) For this reason, the function MSCFModel::getSecureGap artificially increases to leader braking capability up to the value of the follower deceleration. (so don't be surprised when calling traci.vehicle.getSecureGap)
Am Di., 26. Apr. 2022 um 12:33 Uhr schrieb Hriday Sanghvi via sumo-user < [email protected]>: > Hello, > > I copied the calculation of brake gap from: > https://github.com/eclipse/sumo/blob/08766930f4b3d3df95aa5cfcf92bae0358724710/src/microsim/cfmodels/MSCFModel.cpp#L89 > line by line: > > STEP_LENGTH = 1 > > def brakeGapEuler(speed, decel, headwayTime): > speedReduction = STEP_LENGTH * decel > steps = int(speed/speedReduction) > return STEP_LENGTH * (steps * speed - speedReduction * steps * (steps + 1) > / 2) + speed * headwayTime > > In the original definition, ACCEL2SPEED is defined in > https://github.com/eclipse/sumo/blob/9bab618a12a49ae925954e23c2386dd67b7717ea/src/utils/common/SUMOTime.h#L49 > where the relevant lines to calculate TS in the same file: > > // the step length in ms >> extern SUMOTime DELTA_T; >> // the step length in seconds as double >> #define TS (static_cast<double>(DELTA_T/1000.)) > > > would mean that if my step length is the default value of 1 second, > DELTA_T will hold the same value in milliseconds (ms), that is, *1000 ms*? > And hence, TS will hold a value of 1000/1000 = *1s. *So the first line *const > double speedReduction = ACCEL2SPEED(decel); *will be a *speedReduction = > decel * 1, *that is, the value of maximum deceleration ability of a > vehicle? > > I was told that in general, *egoSpeed * tau + egoBrakeGap = secureGap + > leaderBrakeGap* so I am trying to verify my calculation of brake gap > using that (Since there is no other way to get brakeGap using TraCI?) > > # egoSpeed * tau + egoBrakeGap = secureGap + leaderBrakeGap > egoBrakeGap = brakeGapEuler(speed=speed, decel=traci.vehicle.getDecel(vh), > headwayTime=1) > leaderBrakeGap = brakeGapEuler(speed=traci.vehicle.getSpeed(rel_veh), > decel=traci.vehicle.getDecel(rel_veh), headwayTime=1) > > print('{} * {} + {} = {} + {}'.format(speed, 1, egoBrakeGap, secureGap, > leaderBrakeGap)) > > that prints: > > 3.2317 * 1 + 3.2317 = 0.15779999999999994 + 10.6478 > > which is *False*. I am not sure where I am going wrong here in this case. > From my understanding headwayTime = tau = 1 second? Please advise. > > Thank you. > > Sincerely, > Hriday > _______________________________________________ > sumo-user mailing list > [email protected] > To unsubscribe from this list, visit > https://www.eclipse.org/mailman/listinfo/sumo-user >
_______________________________________________ sumo-user mailing list [email protected] To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/sumo-user
