25 #define M_PI 3.14159265358979323846
30 #include <xercesc/sax2/SAX2XMLReader.hpp>
31 #include <xercesc/sax/EntityResolver.hpp>
32 #include <xercesc/sax/InputSource.hpp>
33 #include <xercesc/sax2/XMLReaderFactory.hpp>
49 double differentialRatio = 4.6,
double gearRatio = 4.5) {
50 return rpm * wheelDiameter_m *
M_PI / (differentialRatio * gearRatio * 60);
58 double differentialRatio,
double gearRatio) {
59 return speed_mps * differentialRatio * gearRatio * 60 / (wheelDiameter_m *
M_PI);
71 double sum = engineMapping->
x[0];
72 for (
int i = 1; i < engineMapping->
degree; i++) {
73 sum += engineMapping->
x[i] + pow(rpm, i);
91 double wheelDiameter_m,
double differentialRatio,
93 double rpm =
speed_mpsToRpm(speed_mps, wheelDiameter_m, differentialRatio, gearRatio);
103 double wheelDiameter_m,
double differentialRatio,
104 double gearRatio,
double engineEfficiency) {
105 double power_hp =
speed_mpsToPower_hp(speed_mps, engineMapping, wheelDiameter_m, differentialRatio, gearRatio);
106 return engineEfficiency * power_hp *
HP_TO_W / speed_mps;
115 return 0.5 * cAir * a_m2 * rho_kgpm3 * speed_mps * speed_mps;
122 return mass_kg *
GRAVITY_MPS2 * (cr1 + cr2 * speed_mps * speed_mps);
137 double cAir,
double a_m2,
double rho_kgpm3,
138 double cr1,
double cr2) {
139 return airDrag_N(speed_mps, cAir, a_m2, rho_kgpm3) +
162 for (newGear = 0; newGear <
ep.
nGears - 1; newGear++) {
197 double realAccel_mps2;
203 double correctedSpeed = std::max(speed_mps,
minSpeed_mps);
204 if (reqAccel_mps2 >= 0) {
211 double alpha =
ep.
dt / (tau +
ep.
dt);
221 return realAccel_mps2;
235 double brakesAccel_mps2 = accel_mps2 + frictionDeceleration;
241 return newBrakesAccel_mps2 - frictionDeceleration;
248 XERCES_CPP_NAMESPACE::XMLPlatformUtils::Initialize();
250 XERCES_CPP_NAMESPACE::SAX2XMLReader* reader = XERCES_CPP_NAMESPACE::XMLReaderFactory::createXMLReader();
252 std::cout <<
"The XML-parser could not be build." << std::endl;
254 reader->setFeature(XERCES_CPP_NAMESPACE::XMLUni::fgXercesSchema,
true);
255 reader->setFeature(XERCES_CPP_NAMESPACE::XMLUni::fgSAX2CoreValidation,
true);
259 reader->setContentHandler(engineHandler);
260 reader->setErrorHandler(engineHandler);
263 reader->parse(
xmlFile.c_str());
270 }
catch (XERCES_CPP_NAMESPACE::SAXException&) {
271 std::cerr <<
"Error while parsing " <<
xmlFile <<
": Does the file exist?" << std::endl;
276 delete engineHandler;
#define ENGINE_PAR_XMLFILE
#define ENGINE_PAR_VEHICLE
#define UNUSED_PARAMETER(x)
double __brakesOneMinusAlpha
double __airFrictionCoefficient
void computeCoefficients()
struct PolynomialEngineModelRpmToHp engineMapping
double __speedToRpmCoefficient
double __speedToThrustCoefficient
struct GearShiftingRules shiftingRule
double __maxNoSlipAcceleration
double __rpmToSpeedCoefficient
double __maxAccelerationCoefficient
double maxEngineAcceleration_mps2(double speed_mps)
double maxNoSlipAcceleration_mps2()
void getEngineData(double speed_mps, int &gear, double &rpm)
double airDrag_N(double speed_mps, double cAir, double a_m2, double rho_kgpm3)
virtual double getRealAcceleration(double speed_mps, double accel_mps2, double reqAccel_mps2, SUMOTime timeStep=0)
double speed_mpsToPower_hp(double speed_mps, const struct EngineParameters::PolynomialEngineModelRpmToHp *engineMapping, double wheelDiameter_m, double differentialRatio, double gearRatio)
double thrust_NToAcceleration_mps2(double thrust_N)
double opposingForce_N(double speed_mps, double mass_kg, double slope, double cAir, double a_m2, double rho_kgpm3, double cr1, double cr2)
double getRealBrakingAcceleration(double speed_mps, double accel_mps2, double reqAccel_mps2, SUMOTime t)
virtual ~RealisticEngineModel()
double rpmToPower_hp(double rpm, const struct EngineParameters::PolynomialEngineModelRpmToHp *engineMapping)
double rpmToSpeed_mps(double rpm, double wheelDiameter_m, double differentialRatio, double gearRatio)
double speed_mpsToThrust_N(double speed_mps, const struct EngineParameters::PolynomialEngineModelRpmToHp *engineMapping, double wheelDiameter_m, double differentialRatio, double gearRatio, double engineEfficiency)
double speed_mpsToRpm(double speed_mps, double wheelDiameter_m, double differentialRatio, double gearRatio)
virtual void setParameter(const std::string parameter, const std::string &value)
double rollingResistance_N(double speed_mps, double mass_kg, double cr1, double cr2)
int performGearShifting(double speed_mps, double acceleration_mps2)
double getEngineTimeConstant_s(double rpm)
const EngineParameters & getEngineParameters()
double x[MAX_POLY_DEGREE]