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-2020 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
18 // A detailed engine model
19 /****************************************************************************/
20 
21 #pragma once
22 
23 #include "GenericEngineModel.h"
24 
25 #include <stdint.h>
26 
27 #include "VehicleEngineHandler.h"
28 #include "EngineParameters.h"
29 
30 
47 
48 protected:
49 
51  //current gear
53  //minimum speed to be considered for horsepower computation
54  double minSpeed_mps;
55  //simulation sampling time
56  double dt_s;
57  //xml file with engine parameters
58  std::string xmlFile;
59  //id of the vehicle parameters to load
60  std::string vehicleType;
61 
72  double rpmToSpeed_mps(double rpm, double wheelDiameter_m,
73  double differentialRatio, double gearRatio);
80  double rpmToSpeed_mps(double rpm);
81 
92  double speed_mpsToRpm(double speed_mps, double wheelDiameter_m,
93  double differentialRatio, double gearRatio);
94 
101  double speed_mpsToRpm(double speed_mps);
102 
111  double speed_mpsToRpm(double speed_mps, double gearRatio);
112 
121  double rpmToPower_hp(double rpm, const struct EngineParameters::PolynomialEngineModelRpmToHp* engineMapping);
122 
129  double rpmToPower_hp(double rpm);
130 
142  double speed_mpsToPower_hp(double speed_mps,
143  const struct EngineParameters::PolynomialEngineModelRpmToHp* engineMapping,
144  double wheelDiameter_m, double differentialRatio,
145  double gearRatio);
146 
153  double speed_mpsToPower_hp(double speed_mps);
154 
167  double speed_mpsToThrust_N(double speed_mps,
168  const struct EngineParameters::PolynomialEngineModelRpmToHp* engineMapping,
169  double wheelDiameter_m, double differentialRatio,
170  double gearRatio, double engineEfficiency);
171 
179  double speed_mpsToThrust_N(double speed_mps);
180 
190  double airDrag_N(double speed_mps, double cAir, double a_m2, double rho_kgpm3);
191 
198  double airDrag_N(double speed_mps);
199 
209  double rollingResistance_N(double speed_mps, double mass_kg, double cr1, double cr2);
216  double rollingResistance_N(double speed_mps);
217 
225  double gravityForce_N(double mass_kg, double slope);
231  double gravityForce_N();
232 
247  double opposingForce_N(double speed_mps, double mass_kg, double slope,
248  double cAir, double a_m2, double rho_kgpm3,
249  double cr1, double cr2);
250 
257  double opposingForce_N(double speed_mps);
258 
266  double maxNoSlipAcceleration_mps2(double slope, double frictionCoefficient);
267 
274 
281  double thrust_NToAcceleration_mps2(double thrust_N);
282 
290  int performGearShifting(double speed_mps, double acceleration_mps2);
291 
298  double getEngineTimeConstant_s(double rpm);
299 
309  double maxEngineAcceleration_mps2(double speed_mps);
310 
321  double getRealBrakingAcceleration(double speed_mps, double accel_mps2, double reqAccel_mps2, SUMOTime t);
322 
323 public:
325  virtual ~RealisticEngineModel();
326 
338  virtual double getRealAcceleration(double speed_mps, double accel_mps2, double reqAccel_mps2, SUMOTime timeStep = 0);
339 
347  virtual void loadParameters(const ParMap& parameters);
348 
352  void loadParameters();
353 
360  virtual void setParameter(const std::string parameter, const std::string& value);
361  virtual void setParameter(const std::string parameter, double value);
362  virtual void setParameter(const std::string parameter, int value);
363 
371  void getEngineData(double speed_mps, int& gear, double& rpm);
372 
373 #ifdef EE
374 private:
375  //some things for the easter egg :)
376  bool initee;
377  int lastTimeStep;
378  struct sockaddr_in serv_addr;
379  int socketfd;
380 #endif
381 };
382 
long long int SUMOTime
Definition: SUMOTime.h:31
std::map< std::string, std::string > ParMap
double maxEngineAcceleration_mps2(double speed_mps)
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)
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)