22 #define M_PI 3.14159265358979323846 27 #include <xercesc/sax2/SAX2XMLReader.hpp> 28 #include <xercesc/sax/EntityResolver.hpp> 29 #include <xercesc/sax/InputSource.hpp> 30 #include <xercesc/sax2/XMLReaderFactory.hpp> 46 double differentialRatio = 4.6,
double gearRatio = 4.5) {
47 return rpm * wheelDiameter_m *
M_PI / (differentialRatio * gearRatio * 60);
55 double differentialRatio,
double gearRatio) {
56 return speed_mps * differentialRatio * gearRatio * 60 / (wheelDiameter_m *
M_PI);
68 double sum = engineMapping->
x[0];
69 for (
int i = 1; i < engineMapping->
degree; i++) {
70 sum += engineMapping->
x[i] + pow(rpm, i);
88 double wheelDiameter_m,
double differentialRatio,
90 double rpm =
speed_mpsToRpm(speed_mps, wheelDiameter_m, differentialRatio, gearRatio);
100 double wheelDiameter_m,
double differentialRatio,
101 double gearRatio,
double engineEfficiency) {
102 double power_hp =
speed_mpsToPower_hp(speed_mps, engineMapping, wheelDiameter_m, differentialRatio, gearRatio);
103 return engineEfficiency * power_hp *
HP_TO_W / speed_mps;
112 return 0.5 * cAir * a_m2 * rho_kgpm3 * speed_mps * speed_mps;
119 return mass_kg *
GRAVITY_MPS2 * (cr1 + cr2 * speed_mps * speed_mps);
134 double cAir,
double a_m2,
double rho_kgpm3,
135 double cr1,
double cr2) {
136 return airDrag_N(speed_mps, cAir, a_m2, rho_kgpm3) +
159 for (newGear = 0; newGear <
ep.
nGears - 1; newGear++) {
194 double realAccel_mps2;
200 double correctedSpeed = std::max(speed_mps,
minSpeed_mps);
201 if (reqAccel_mps2 >= 0) {
208 double alpha =
ep.
dt / (tau +
ep.
dt);
218 return realAccel_mps2;
232 double brakesAccel_mps2 = accel_mps2 + frictionDeceleration;
238 return newBrakesAccel_mps2 - frictionDeceleration;
255 XERCES_CPP_NAMESPACE::XMLPlatformUtils::Initialize();
257 XERCES_CPP_NAMESPACE::SAX2XMLReader* reader = XERCES_CPP_NAMESPACE::XMLReaderFactory::createXMLReader();
259 std::cout <<
"The XML-parser could not be build." << std::endl;
261 reader->setFeature(XERCES_CPP_NAMESPACE::XMLUni::fgXercesSchema,
true);
262 reader->setFeature(XERCES_CPP_NAMESPACE::XMLUni::fgSAX2CoreValidation,
true);
266 reader->setContentHandler(engineHandler);
267 reader->setErrorHandler(engineHandler);
270 reader->parse(
xmlFile.c_str());
277 }
catch (XERCES_CPP_NAMESPACE::SAXException&) {
278 std::cerr <<
"Error while parsing " <<
xmlFile <<
": Does the file exist?" << std::endl;
283 delete engineHandler;
void computeCoefficients()
#define ENGINE_PAR_VEHICLE
void parseParameter(const ParMap ¶meters, std::string parameter, double &value)
double __speedToRpmCoefficient
double speed_mpsToThrust_N(double speed_mps, const struct EngineParameters::PolynomialEngineModelRpmToHp *engineMapping, double wheelDiameter_m, double differentialRatio, double gearRatio, double engineEfficiency)
double thrust_NToAcceleration_mps2(double thrust_N)
double __maxNoSlipAcceleration
struct GearShiftingRules shiftingRule
double __rpmToSpeedCoefficient
double opposingForce_N(double speed_mps, double mass_kg, double slope, double cAir, double a_m2, double rho_kgpm3, double cr1, double cr2)
double maxNoSlipAcceleration_mps2()
double __brakesOneMinusAlpha
#define UNUSED_PARAMETER(x)
int performGearShifting(double speed_mps, double acceleration_mps2)
virtual double getRealAcceleration(double speed_mps, double accel_mps2, double reqAccel_mps2, SUMOTime timeStep=0)
double rollingResistance_N(double speed_mps, double mass_kg, double cr1, double cr2)
virtual ~RealisticEngineModel()
double rpmToPower_hp(double rpm, const struct EngineParameters::PolynomialEngineModelRpmToHp *engineMapping)
#define ENGINE_PAR_XMLFILE
double rpmToSpeed_mps(double rpm, double wheelDiameter_m, double differentialRatio, double gearRatio)
double getRealBrakingAcceleration(double speed_mps, double accel_mps2, double reqAccel_mps2, SUMOTime t)
double __maxAccelerationCoefficient
const EngineParameters & getEngineParameters()
double maxEngineAcceleration_mps2(double speed_mps)
struct PolynomialEngineModelRpmToHp engineMapping
double speed_mpsToPower_hp(double speed_mps, const struct EngineParameters::PolynomialEngineModelRpmToHp *engineMapping, double wheelDiameter_m, double differentialRatio, double gearRatio)
double x[MAX_POLY_DEGREE]
std::map< std::string, std::string > ParMap
double getEngineTimeConstant_s(double rpm)
virtual void setParameter(const std::string parameter, const std::string &value)
void getEngineData(double speed_mps, int &gear, double &rpm)
double __airFrictionCoefficient
double airDrag_N(double speed_mps, double cAir, double a_m2, double rho_kgpm3)
double __speedToThrustCoefficient
double speed_mpsToRpm(double speed_mps, double wheelDiameter_m, double differentialRatio, double gearRatio)