Eclipse SUMO - Simulation of Urban MObility
RealisticEngineModel.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
15 // A detailed engine model
16 /****************************************************************************/
17 
18 #ifndef ENGINEMODEL_H_
19 #define ENGINEMODEL_H_
20 
21 #include "GenericEngineModel.h"
22 
23 #include <stdint.h>
24 
25 #include "VehicleEngineHandler.h"
26 #include "EngineParameters.h"
27 
28 
45 
46 protected:
47 
49  //current gear
51  //minimum speed to be considered for horsepower computation
52  double minSpeed_mps;
53  //simulation sampling time
54  double dt_s;
55  //xml file with engine parameters
56  std::string xmlFile;
57  //id of the vehicle parameters to load
58  std::string vehicleType;
59 
70  double rpmToSpeed_mps(double rpm, double wheelDiameter_m,
71  double differentialRatio, double gearRatio);
78  double rpmToSpeed_mps(double rpm);
79 
90  double speed_mpsToRpm(double speed_mps, double wheelDiameter_m,
91  double differentialRatio, double gearRatio);
92 
99  double speed_mpsToRpm(double speed_mps);
100 
109  double speed_mpsToRpm(double speed_mps, double gearRatio);
110 
119  double rpmToPower_hp(double rpm, const struct EngineParameters::PolynomialEngineModelRpmToHp* engineMapping);
120 
127  double rpmToPower_hp(double rpm);
128 
140  double speed_mpsToPower_hp(double speed_mps,
141  const struct EngineParameters::PolynomialEngineModelRpmToHp* engineMapping,
142  double wheelDiameter_m, double differentialRatio,
143  double gearRatio);
144 
151  double speed_mpsToPower_hp(double speed_mps);
152 
165  double speed_mpsToThrust_N(double speed_mps,
166  const struct EngineParameters::PolynomialEngineModelRpmToHp* engineMapping,
167  double wheelDiameter_m, double differentialRatio,
168  double gearRatio, double engineEfficiency);
169 
177  double speed_mpsToThrust_N(double speed_mps);
178 
188  double airDrag_N(double speed_mps, double cAir, double a_m2, double rho_kgpm3);
189 
196  double airDrag_N(double speed_mps);
197 
207  double rollingResistance_N(double speed_mps, double mass_kg, double cr1, double cr2);
214  double rollingResistance_N(double speed_mps);
215 
223  double gravityForce_N(double mass_kg, double slope);
229  double gravityForce_N();
230 
245  double opposingForce_N(double speed_mps, double mass_kg, double slope,
246  double cAir, double a_m2, double rho_kgpm3,
247  double cr1, double cr2);
248 
255  double opposingForce_N(double speed_mps);
256 
264  double maxNoSlipAcceleration_mps2(double slope, double frictionCoefficient);
265 
272 
279  double thrust_NToAcceleration_mps2(double thrust_N);
280 
288  int performGearShifting(double speed_mps, double acceleration_mps2);
289 
296  double getEngineTimeConstant_s(double rpm);
297 
307  double maxEngineAcceleration_mps2(double speed_mps);
308 
319  double getRealBrakingAcceleration(double speed_mps, double accel_mps2, double reqAccel_mps2, SUMOTime t);
320 
321 public:
323  virtual ~RealisticEngineModel();
324 
336  virtual double getRealAcceleration(double speed_mps, double accel_mps2, double reqAccel_mps2, SUMOTime timeStep = 0);
337 
345  virtual void loadParameters(const ParMap& parameters);
346 
350  void loadParameters();
351 
358  virtual void setParameter(const std::string parameter, const std::string& value);
359  virtual void setParameter(const std::string parameter, double value);
360  virtual void setParameter(const std::string parameter, int value);
361 
369  void getEngineData(double speed_mps, int& gear, double& rpm);
370 
371 #ifdef EE
372 private:
373  //some things for the easter egg :)
374  bool initee;
375  int lastTimeStep;
376  struct sockaddr_in serv_addr;
377  int socketfd;
378 #endif
379 };
380 
381 #endif /* ENGINEMODEL_H_ */
double speed_mpsToThrust_N(double speed_mps, const struct EngineParameters::PolynomialEngineModelRpmToHp *engineMapping, double wheelDiameter_m, double differentialRatio, double gearRatio, double engineEfficiency)
long long int SUMOTime
Definition: SUMOTime.h:35
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)
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)
double rpmToPower_hp(double rpm, const struct EngineParameters::PolynomialEngineModelRpmToHp *engineMapping)
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 maxEngineAcceleration_mps2(double speed_mps)
double speed_mpsToPower_hp(double speed_mps, const struct EngineParameters::PolynomialEngineModelRpmToHp *engineMapping, double wheelDiameter_m, double differentialRatio, double gearRatio)
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 airDrag_N(double speed_mps, double cAir, double a_m2, double rho_kgpm3)
double speed_mpsToRpm(double speed_mps, double wheelDiameter_m, double differentialRatio, double gearRatio)