diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Brakes.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Brakes.cs index b2d3f197f1582c8f5307f3435a0f96e1c17bf807..f9a828660d4f1aa14a99bfdc2e78d1913c316b3e 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Brakes.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Brakes.cs @@ -57,14 +57,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl : NextComponent.Initialize(torque, angularVelocity); } - public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, bool dryRun = false) + public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, + bool dryRun = false) { var brakeTorque = 0.SI<NewtonMeter>(); var avgAngularSpeed = (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0; if (!BrakePower.IsEqual(0)) { if (avgAngularSpeed.IsEqual(0)) { - brakeTorque = outTorque; + brakeTorque = -outTorque; } else { brakeTorque = BrakePower / avgAngularSpeed; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs index 3d0403ba66261eec5d6a1e90d4bc53dddb25710c..de57b3d14cb3635257ad097b0da384c2c7ef0acd 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs @@ -137,7 +137,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } // calc acceleration from speed diff vehicle to cycle - var deltaV = CycleIterator.RightSample.VehicleTargetSpeed - DataBus.VehicleSpeed; + var targetSpeed = CycleIterator.RightSample == null + ? 0.KMPHtoMeterPerSecond() + : CycleIterator.RightSample.VehicleTargetSpeed; + if (targetSpeed.IsEqual(0.KMPHtoMeterPerSecond(), 0.5.KMPHtoMeterPerSecond())) { + targetSpeed = 0.KMPHtoMeterPerSecond(); + } + var deltaV = targetSpeed - DataBus.VehicleSpeed; var deltaT = CycleIterator.RightSample.Time - CycleIterator.LeftSample.Time; if (DataBus.VehicleSpeed.IsSmaller(0)) { diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs index 8eed14968fa2e294a2cdcf29d84bda9758a9c466..16d7a6cc8324fcd1b24b5052a32a0103f04a652c 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs @@ -102,22 +102,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl CurrentState.Distance = PreviousState.Distance + PreviousState.Velocity * dt + acceleration * dt * dt / 2; CurrentState.DriverAcceleration = DriverAcceleration(acceleration); - CurrentState.RollingResistance = DataBus.DriverBehavior == DrivingBehavior.Halted - ? 0.SI<Newton>() - : RollingResistance(gradient); + CurrentState.RollingResistance = RollingResistance(gradient); try { - CurrentState.AirDragResistance = DataBus.DriverBehavior == DrivingBehavior.Halted - ? 0.SI<Newton>() - : AirDragResistance(PreviousState.Velocity, CurrentState.Velocity); + CurrentState.AirDragResistance = AirDragResistance(PreviousState.Velocity, CurrentState.Velocity); } catch (VectoException ex) { Log.Warn("Exception during calculation of AirDragResistance: absTime: {0}, dist: {1}, v: {2}. {3}", absTime, CurrentState.Distance, CurrentState.Velocity, ex); CurrentState.AirDragResistance = AirDragResistance(VectoMath.Max(0, PreviousState.Velocity), VectoMath.Max(0, CurrentState.Velocity)); } - CurrentState.SlopeResistance = DataBus.DriverBehavior == DrivingBehavior.Halted - ? 0.SI<Newton>() - : SlopeResistance(gradient); + CurrentState.SlopeResistance = SlopeResistance(gradient); // DriverAcceleration = vehicleTractionForce - RollingResistance - AirDragResistance - SlopeResistance CurrentState.VehicleTractionForce = CurrentState.DriverAcceleration