diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs index 09c9ba2e97e72ff144db6df86516f33db8169173..61fd208ca14200350d2a569ad11bbc88193b5e64 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs @@ -593,7 +593,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl protected override IResponse DoHandleRequest(Second absTime, Meter ds, MeterPerSecond targetVelocity, Radian gradient, bool prohibitOverspeed = false) { - if (DataBus.VehicleSpeed <= DriverStrategy.BrakeTrigger.NextTargetSpeed) { + if (DataBus.VehicleSpeed <= DriverStrategy.BrakeTrigger.NextTargetSpeed && !DataBus.VehicleStopped) { var retVal = HandleTargetspeedReached(absTime, ds, targetVelocity, gradient); for (var i = 0; i < 3 && retVal == null; i++) { retVal = HandleTargetspeedReached(absTime, ds, targetVelocity, gradient); @@ -642,8 +642,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl targetDistance = DriverStrategy.BrakeTrigger.TriggerDistance - DefaultDriverStrategy.BrakingSafetyMargin; } Driver.DriverBehavior = DrivingBehavior.Braking; - response = Driver.DrivingActionBrake(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, - gradient, targetDistance: targetDistance); + + if (DataBus.VehicleSpeed.IsEqual(0) && DriverStrategy.BrakeTrigger.NextTargetSpeed.IsEqual(0)) { + if (ds.IsEqual(targetDistance - currentDistance)) { + return new ResponseDrivingCycleDistanceExceeded() { + Source = this, + MaxDistance = ds / 2 + }; + } + + response = Driver.DrivingActionAccelerate(absTime, ds, 1.KMPHtoMeterPerSecond(), gradient); + } else { + response = Driver.DrivingActionBrake( + absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, + gradient, targetDistance: targetDistance); + } if (DataBus.GearboxType.AutomaticTransmission() && response == null) { for (var i = 0; i < 3 && response == null; i++) {