diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs index cadb4fbe6c4068884148e1a9dd0480ed5a8a044a..a421474c4bfcd9ab09c729875092f7f25f2cbef4 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs @@ -553,6 +553,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var targetDistance = DataBus.VehicleSpeed < Constants.SimulationSettings.MinVelocityForCoast ? DriverStrategy.BrakeTrigger.TriggerDistance : null; + if (targetDistance == null && DriverStrategy.BrakeTrigger.NextTargetSpeed.IsEqual(0.SI<MeterPerSecond>())) { + targetDistance = DriverStrategy.BrakeTrigger.TriggerDistance - DefaultDriverStrategy.BrakingSafetyMargin; + } DriverStrategy.DriverBehavior = DrivingBehavior.Braking; response = Driver.DrivingActionBrake(absTime, ds, DriverStrategy.BrakeTrigger.NextTargetSpeed, gradient, targetDistance: targetDistance); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs index ec93e2653ca6fb5904d238cd23d38c631ee99a4b..280b0d333e4cb60616834bd259807823abf075a0 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs @@ -367,13 +367,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } if (targetDistance != null && targetDistance > DataBus.Distance) { var tmp = ComputeAcceleration(targetDistance - DataBus.Distance, nextTargetSpeed); - operatingPoint = ComputeTimeInterval(tmp.Acceleration, ds); - if (!ds.IsEqual(operatingPoint.SimulationDistance)) { - Log.Error( - "Unexpected Condition: Distance has been adjusted from {0} to {1}, currentVelocity: {2} acceleration: {3}, targetVelocity: {4}", - operatingPoint.SimulationDistance, ds, DataBus.VehicleSpeed, operatingPoint.Acceleration, nextTargetSpeed); - throw new VectoSimulationException("Simulation distance unexpectedly adjusted! {0} -> {1}", ds, - operatingPoint.SimulationDistance); + if (tmp.Acceleration.IsGreater(operatingPoint.Acceleration)) { + operatingPoint = ComputeTimeInterval(tmp.Acceleration, ds); + if (!ds.IsEqual(operatingPoint.SimulationDistance)) { + Log.Error( + "Unexpected Condition: Distance has been adjusted from {0} to {1}, currentVelocity: {2} acceleration: {3}, targetVelocity: {4}", + operatingPoint.SimulationDistance, ds, DataBus.VehicleSpeed, operatingPoint.Acceleration, nextTargetSpeed); + throw new VectoSimulationException("Simulation distance unexpectedly adjusted! {0} -> {1}", ds, + operatingPoint.SimulationDistance); + } } }