Created
September 5, 2019 14:09
-
-
Save sjoelund/6a1e18c890c51aee8534733a584eea80 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class VehicleInterfaces.Drivers.MinimalDriver "Constant acceleration Driver" | |
VehicleInterfaces.Mechanics.NormalisedRotational.Interfaces.Flange driverInterface.steeringWheel "virtual variable in expandable connector"; | |
VehicleInterfaces.Mechanics.NormalisedTranslational.Interfaces.Flange driverInterface.acceleratorPedal "virtual variable in expandable connector"; | |
VehicleInterfaces.Mechanics.NormalisedTranslational.Interfaces.Flange driverInterface.brakePedal "virtual variable in expandable connector"; | |
Integer driverInterface.ignition "virtual variable in expandable connector"; | |
Integer driverInterface.requestedGear "virtual variable in expandable connector"; | |
Integer driverInterface.gearboxMode "virtual variable in expandable connector"; | |
parameter Real initialAccelRequest(min = 0.0, max = 1.0) = 1.0 "Initial accelerator pedal position"; | |
parameter Real initialBrakeRequest(min = 0.0, max = 1.0) = 0.0 "Initial brake pedal position"; | |
parameter Real finalAccelRequest(min = 0.0, max = 1.0) = 1.0 "Final accelerator pedal position"; | |
parameter Real finalBrakeRequest(min = 0.0, max = 1.0) = 0.0 "Final brake pedal position"; | |
parameter Real accelTime(quantity = "Time", unit = "s") = 10.0 "Time of accel apply"; | |
parameter Real brakeTime(quantity = "Time", unit = "s") = 10.0 "Time of brake apply"; | |
parameter Integer selectedGearboxMode(min = 1, max = 6) = 2 "Current gearbox mode"; | |
parameter Integer manualGearRequest(quantity = "gear") = 0 "Requested gear in manual mode"; | |
parameter Real brakeDemand.height = finalBrakeRequest "Height of step"; | |
Real brakeDemand.y "Connector of Real output signal"; | |
parameter Real brakeDemand.offset = initialBrakeRequest "Offset of output signal y"; | |
parameter Real brakeDemand.startTime(quantity = "Time", unit = "s") = brakeTime "Output y = offset for time < startTime"; | |
parameter Real acceleratorDemand.height = finalAccelRequest "Height of step"; | |
Real acceleratorDemand.y "Connector of Real output signal"; | |
parameter Real acceleratorDemand.offset = initialAccelRequest "Offset of output signal y"; | |
parameter Real acceleratorDemand.startTime(quantity = "Time", unit = "s") = accelTime "Output y = offset for time < startTime"; | |
parameter Real steeringAngle.k(start = 1.0) = 0.0 "Constant output value"; | |
Real steeringAngle.y "Connector of Real output signal"; | |
parameter Integer gearboxMode.k(start = 1) = selectedGearboxMode "Constant output value"; | |
Integer gearboxMode.y "Connector of Integer output signal"; | |
parameter Integer requestedGear.k(start = 1) = manualGearRequest "Constant output value"; | |
Integer requestedGear.y "Connector of Integer output signal"; | |
final parameter Boolean steeringWheelAngle.exact = true "True/false exact treatment/filtering the input signal"; | |
parameter Real steeringWheelAngle.f_crit(quantity = "Frequency", unit = "Hz") = 50.0 "If exact=false: critical frequency of filter to filter input signal"; | |
Real steeringWheelAngle.flange_b.phi(quantity = "", unit = "1", displayUnit = "1", min = 0.0, max = 1.0) "Normalized rotation of flange"; | |
Real steeringWheelAngle.flange_b.tau(quantity = "Torque", unit = "N.m") "Cut torque directed in the flange"; | |
Real steeringWheelAngle.phi_ref "position to be applied"; | |
Real steeringWheelAngle.phi(quantity = "", unit = "1", displayUnit = "1", min = 0.0, max = 1.0); | |
protected parameter Real steeringWheelAngle.w_crit = 6.283185307179586 * steeringWheelAngle.f_crit "critical frequency in [1/s]"; | |
protected constant Real steeringWheelAngle.af = 1.3617 "Coefficient s of Bessel filter"; | |
protected constant Real steeringWheelAngle.bf = 0.618 "Coefficient s*s of Bessel filter"; | |
protected Real steeringWheelAngle.w; | |
protected Real steeringWheelAngle.a; | |
final parameter Boolean brakePosition.exact = true "True/false exact treatment/filtering the input signal"; | |
parameter Real brakePosition.f_crit(quantity = "Frequency", unit = "Hz") = 50.0 "If exact=false: critical frequency of filter to filter input signal"; | |
Real brakePosition.flange_b.s(quantity = "", unit = "1", displayUnit = "1", min = 0.0, max = 1.0) "Normalized position of flange"; | |
Real brakePosition.flange_b.f(quantity = "Force", unit = "N") "Cut force directed into flange"; | |
Real brakePosition.position "position to be applied"; | |
Real brakePosition.s(quantity = "", unit = "1", displayUnit = "1", min = 0.0, max = 1.0) "Normalized position"; | |
protected parameter Real brakePosition.w_crit = 6.283185307179586 * brakePosition.f_crit "Critical frequency in [1/s]"; | |
protected constant Real brakePosition.af = 1.3617 "Coefficient s of Bessel filter"; | |
protected constant Real brakePosition.bf = 0.618 "Coefficient s*s of Bessel filter"; | |
protected Real brakePosition.v; | |
protected Real brakePosition.a; | |
final parameter Boolean acceleratorPosition.exact = true "True/false exact treatment/filtering the input signal"; | |
parameter Real acceleratorPosition.f_crit(quantity = "Frequency", unit = "Hz") = 50.0 "If exact=false: critical frequency of filter to filter input signal"; | |
Real acceleratorPosition.flange_b.s(quantity = "", unit = "1", displayUnit = "1", min = 0.0, max = 1.0) "Normalized position of flange"; | |
Real acceleratorPosition.flange_b.f(quantity = "Force", unit = "N") "Cut force directed into flange"; | |
Real acceleratorPosition.position "position to be applied"; | |
Real acceleratorPosition.s(quantity = "", unit = "1", displayUnit = "1", min = 0.0, max = 1.0) "Normalized position"; | |
protected parameter Real acceleratorPosition.w_crit = 6.283185307179586 * acceleratorPosition.f_crit "Critical frequency in [1/s]"; | |
protected constant Real acceleratorPosition.af = 1.3617 "Coefficient s of Bessel filter"; | |
protected constant Real acceleratorPosition.bf = 0.618 "Coefficient s*s of Bessel filter"; | |
protected Real acceleratorPosition.v; | |
protected Real acceleratorPosition.a; | |
parameter Integer ignition.height = -1 "Height of step"; | |
Integer ignition.y "Connector of Integer output signal"; | |
parameter Integer ignition.offset = 3 "Offset of output signal y"; | |
parameter Real ignition.startTime(quantity = "Time", unit = "s") = 0.5 "Output y = offset for time < startTime"; | |
equation | |
steeringAngle.y = steeringWheelAngle.phi_ref; | |
brakeDemand.y = brakePosition.position; | |
acceleratorDemand.y = acceleratorPosition.position; | |
gearboxMode.y = driverInterface.gearboxMode; | |
requestedGear.y = driverInterface.requestedGear; | |
ignition.y = driverInterface.ignition; | |
brakePosition.flange_b.s = driverInterface.brakePedal.s; | |
acceleratorPosition.flange_b.s = driverInterface.acceleratorPedal.s; | |
steeringWheelAngle.flange_b.phi = driverInterface.steeringWheel.phi; | |
steeringWheelAngle.flange_b.tau + (-driverInterface.steeringWheel.tau) = 0.0; | |
brakePosition.flange_b.f + (-driverInterface.brakePedal.f) = 0.0; | |
acceleratorPosition.flange_b.f + (-driverInterface.acceleratorPedal.f) = 0.0; | |
brakeDemand.y = brakeDemand.offset + (if time < brakeDemand.startTime then 0.0 else brakeDemand.height); | |
acceleratorDemand.y = acceleratorDemand.offset + (if time < acceleratorDemand.startTime then 0.0 else acceleratorDemand.height); | |
steeringAngle.y = steeringAngle.k; | |
gearboxMode.y = gearboxMode.k; | |
requestedGear.y = requestedGear.k; | |
steeringWheelAngle.phi = steeringWheelAngle.flange_b.phi; | |
steeringWheelAngle.w = der(steeringWheelAngle.phi); | |
steeringWheelAngle.a = der(steeringWheelAngle.w); | |
steeringWheelAngle.phi = steeringWheelAngle.phi_ref; | |
brakePosition.s = brakePosition.flange_b.s; | |
brakePosition.s = brakePosition.position; | |
brakePosition.v = 0.0; | |
brakePosition.a = 0.0; | |
acceleratorPosition.s = acceleratorPosition.flange_b.s; | |
acceleratorPosition.s = acceleratorPosition.position; | |
acceleratorPosition.v = 0.0; | |
acceleratorPosition.a = 0.0; | |
ignition.y = ignition.offset + (if time < ignition.startTime then 0 else ignition.height); | |
end VehicleInterfaces.Drivers.MinimalDriver; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment