Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit a1967a6e authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

driver strategy: limit target speed by vehice's max speed

parent f6df2d99
No related branches found
No related tags found
No related merge requests found
......@@ -29,49 +29,49 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System.ComponentModel.DataAnnotations;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Models.Declaration;
namespace TUGraz.VectoCore.Models.SimulationComponent.Data
{
public class DriverData
{
[Required, ValidateObject] public OverSpeedEcoRollData OverSpeedEcoRoll;
[Required, ValidateObject] public LACData LookAheadCoasting;
[Required, ValidateObject] public AccelerationCurveData AccelerationCurve;
public static DriverMode ParseDriverMode(string mode)
{
return mode.Replace("-", "").ParseEnum<DriverMode>();
}
public class OverSpeedEcoRollData
{
public DriverMode Mode;
[Required, SIRange(0, 120 / Constants.MeterPerSecondToKMH)] public MeterPerSecond MinSpeed;
[Required, SIRange(0, 50 / Constants.MeterPerSecondToKMH)] public MeterPerSecond OverSpeed;
[Required, SIRange(0, 50 / Constants.MeterPerSecondToKMH)] public MeterPerSecond UnderSpeed;
}
public class LACData
{
public bool Enabled;
//public MeterPerSquareSecond Deceleration;
[Required, SIRange(0, 120 / Constants.MeterPerSecondToKMH)] public MeterPerSecond MinSpeed;
[Required, Range(0, 20)] public double LookAheadDistanceFactor;
[Required, ValidateObject] public LACDecisionFactor LookAheadDecisionFactor;
}
}
using System.ComponentModel.DataAnnotations;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Models.Declaration;
namespace TUGraz.VectoCore.Models.SimulationComponent.Data
{
public class DriverData
{
[Required, ValidateObject] public OverSpeedEcoRollData OverSpeedEcoRoll;
[Required, ValidateObject] public LACData LookAheadCoasting;
[Required, ValidateObject] public AccelerationCurveData AccelerationCurve;
public static DriverMode ParseDriverMode(string mode)
{
return mode.Replace("-", "").ParseEnum<DriverMode>();
}
public class OverSpeedEcoRollData
{
public DriverMode Mode;
[Required, SIRange(0, 120 / Constants.MeterPerSecondToKMH)] public MeterPerSecond MinSpeed;
[Required, SIRange(0, 50 / Constants.MeterPerSecondToKMH)] public MeterPerSecond OverSpeed;
[Required, SIRange(0, 50 / Constants.MeterPerSecondToKMH)] public MeterPerSecond UnderSpeed;
}
public class LACData
{
public bool Enabled;
//public MeterPerSquareSecond Deceleration;
[Required, SIRange(0, 120 / Constants.MeterPerSecondToKMH)] public MeterPerSecond MinSpeed;
[Required, Range(0, 20)] public double LookAheadDistanceFactor;
[Required, ValidateObject] public LACDecisionFactor LookAheadDecisionFactor;
}
}
}
\ No newline at end of file
......@@ -109,7 +109,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
}
}
var retVal = DrivingModes[CurrentDrivingMode].Request(absTime, ds, targetVelocity, gradient);
var retVal = DrivingModes[CurrentDrivingMode].Request(absTime, ds, VectoMath.Min(Driver.DataBus.MaxVehicleSpeed, targetVelocity), gradient);
return retVal;
}
......@@ -118,7 +118,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
{
Driver.DriverBehavior = DrivingBehavior.Halted;
CurrentDrivingMode = DrivingMode.DrivingModeDrive;
return Driver.DrivingActionHalt(absTime, dt, targetVelocity, gradient);
return Driver.DrivingActionHalt(absTime, dt, VectoMath.Min(Driver.DataBus.MaxVehicleSpeed, targetVelocity), gradient);
}
private void UpdateDrivingAction(Meter currentDistance, Meter ds)
......@@ -289,8 +289,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
if (prohibitOverspeed) {
return false;
}
return Driver.DriverData.OverSpeedEcoRoll.Mode == DriverMode.Overspeed &&
velocity > Driver.DriverData.OverSpeedEcoRoll.MinSpeed;
return Driver.DriverData.OverSpeedEcoRoll.Mode == DriverMode.Overspeed
&& velocity > Driver.DriverData.OverSpeedEcoRoll.MinSpeed
&& (velocity + Driver.DriverData.OverSpeedEcoRoll.OverSpeed) < (Driver.DataBus.MaxVehicleSpeed ?? 500.KMPHtoMeterPerSecond());
}
}
......
......@@ -230,7 +230,8 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
fullLoad.Columns.Add("drag torque");
fullLoad.Columns.Add("PT1");
fullLoad.Rows.Add("0", "5000", "-5000", "0");
fullLoad.Rows.Add("3000", "5000", "-5000", "0");
fullLoad.Rows.Add("2000", "5000", "-5000", "0");
fullLoad.Rows.Add("3000", "0", "-5000", "0");
var fullLoadCurve = FullLoadCurveReader.Create(fullLoad);
var data = new VectoRunData {
......@@ -297,7 +298,8 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
fullLoad.Columns.Add("drag torque");
fullLoad.Columns.Add("PT1");
fullLoad.Rows.Add("0", "5000", "-5000", "0");
fullLoad.Rows.Add("3000", "5000", "-5000", "0");
fullLoad.Rows.Add("2000", "5000", "-5000", "0");
fullLoad.Rows.Add("3000", "0", "-5000", "0");
var fullLoadCurve = FullLoadCurveReader.Create(fullLoad);
var data = new VectoRunData {
......
......@@ -30,6 +30,7 @@
*/
using System.Collections.Generic;
using System.IO;
using System.Linq;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
......@@ -61,6 +62,13 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
public const string AccelerationFile = @"TestData\Components\Coach.vacc";
public const double Tolerance = 0.001;
[OneTimeSetUp]
public void RunBeforeAnyTests()
{
Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
}
[TestCase]
public void DriverCoastingTest()
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment