Eclipse SUMO - Simulation of Urban MObility
MSCFModel_CC.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 series of automatic Cruise Controllers (CC, ACC, CACC)
16 /****************************************************************************/
17 #ifndef MSCFMODEL_CC_H
18 #define MSCFMODEL_CC_H
19 
20 // ===========================================================================
21 // included modules
22 // ===========================================================================
23 #include <config.h>
24 
25 #include "CC_Const.h"
27 #include <microsim/MSLane.h>
28 #include <microsim/MSVehicle.h>
29 #include <microsim/MSVehicleType.h>
32 #include <string.h>
33 
37 
38 #include "CC_VehicleVariables.h"
39 
40 
41 // ===========================================================================
42 // class definitions
43 // ===========================================================================
58 class MSCFModel_CC : public MSCFModel {
59 public:
60 
76  MSCFModel_CC(const MSVehicleType* vtype);
77 
79  ~MSCFModel_CC();
80 
81 
84 
90  virtual double finalizeSpeed(MSVehicle* const veh, double vPos) const;
91 
92 
101  double followSpeed(const MSVehicle* const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel, const MSVehicle* const pred = 0) const;
102 
108  virtual double insertionFollowSpeed(const MSVehicle* const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel, const MSVehicle* const pred = 0) const;
109 
110 
118  double stopSpeed(const MSVehicle* const veh, const double speed, double gap2pred) const;
119 
132  virtual double freeSpeed(const MSVehicle* const veh, double speed, double seen,
133  double maxSpeed, const bool onInsertion = false) const;
134 
135  virtual double maxNextSpeed(double speed, const MSVehicle* const veh) const;
136 
137  virtual double minNextSpeed(double speed, const MSVehicle* const veh = 0) const;
138 
139 
149  double interactionGap(const MSVehicle* const, double vL) const;
150 
151 
156  int getModelID() const {
157  return SUMO_TAG_CF_CC;
158  }
160 
161 
162 
167  MSCFModel* duplicate(const MSVehicleType* vtype) const;
168 
169  VehicleVariables* createVehicleVariables() const;
170 
177  double getCACCConstantSpacing(const MSVehicle* veh) const;
178 
190 // void setVehicleInformation(const MSVehicle* veh, double speed, double acceleration, Position position, double time) const;
191 
199  virtual std::string getParameter(const MSVehicle* veh, const std::string& key) const;
200 
208  virtual void setParameter(MSVehicle* veh, const std::string& key, const std::string& value) const;
209 
222  void getVehicleInformation(const MSVehicle* veh, double& speed, double& acceleration, double& controllerAcceleration, Position& position, double& time) const;
223 
230  void switchOnACC(const MSVehicle* veh, double ccDesiredSpeed) const;
231 
239 
243  void getRadarMeasurements(const MSVehicle* veh, double& distance, double& relativeSpeed) const;
244 
250  double getACCAcceleration(const MSVehicle* veh) const;
251 
255  int getMyLanesCount() const;
256 
257 private:
258 
262  void recomputeParameters(const MSVehicle* veh) const;
263 
269  void resetConsensus(const MSVehicle* veh) const;
270 
271 private:
272  void performAutoLaneChange(MSVehicle* const veh) const;
273 
274  double _v(const MSVehicle* const veh, double gap2pred, double egoSpeed, double predSpeed) const;
275 
282  double _cc(const MSVehicle* veh, double egoSpeed, double desSpeed) const;
283 
292  double _acc(const MSVehicle* veh, double egoSpeed, double predSpeed, double gap2pred, double headwayTime) const;
293 
305  double _cacc(const MSVehicle* veh, double egoSpeed, double predSpeed, double predAcceleration, double gap2pred, double leaderSpeed, double leaderAcceleration, double spacing) const;
306 
317  double _ploeg(const MSVehicle* veh, double egoSpeed, double predSpeed, double predAcceleration, double gap2pred) const;
318 
326  double _consensus(const MSVehicle* veh, double egoSpeed, Position egoPosition, double time) const;
327 
337  double d_i_j(const struct Plexe::VEHICLE_DATA* vehicles, const double h[MAX_N_CARS], int i, int j) const;
338 
347  double _flatbed(const MSVehicle* veh, double egoAcceleration, double egoSpeed, double predSpeed,
348  double gap2pred, double leaderSpeed) const;
349 
350 
351 private:
352 
355 
357  const double myCcDecel;
358 
360  const double myCcAccel;
361 
363  const double myConstantSpacing;
364 
366  const double myKp;
367 
369  const double myLambda;
370 
372  const double myC1;
373 
375  const double myXi;
376 
378  const double myOmegaN;
379 
381  const double myTau;
382 
385  const int myLanesCount;
386 
388  const double myPloegH;
389  const double myPloegKp;
390  const double myPloegKd;
391 
393  const double myFlatbedKa;
394  const double myFlatbedKv;
395  const double myFlatbedKp;
396  const double myFlatbedH;
397  const double myFlatbedD;
398 
399 private:
401  MSCFModel_CC& operator=(const MSCFModel_CC&) = delete;
402 };
403 
404 #endif /* MSCFMODEL_CC_H */
MSVehicleType
The car-following model and parameter.
Definition: MSVehicleType.h:66
MSCFModel_CC::myFlatbedKv
const double myFlatbedKv
Definition: MSCFModel_CC.h:394
MSCFModel_CC::getParameter
virtual std::string getParameter(const MSVehicle *veh, const std::string &key) const
set the information about a generic car. This method should be invoked by TraCI when a wireless messa...
Definition: MSCFModel_CC.cpp:887
MSCFModel_CC::minNextSpeed
virtual double minNextSpeed(double speed, const MSVehicle *const veh=0) const
Returns the minimum speed given the current speed (depends on the numerical update scheme and its ste...
Definition: MSCFModel_CC.cpp:287
MSCFModel_CC::getActiveController
enum Plexe::ACTIVE_CONTROLLER getActiveController(const MSVehicle *veh) const
return the currently active controller
Definition: MSCFModel_CC.cpp:1032
MSCFModel_CC::freeSpeed
virtual double freeSpeed(const MSVehicle *const veh, double speed, double seen, double maxSpeed, const bool onInsertion=false) const
Computes the vehicle's safe speed without a leader.
Definition: MSCFModel_CC.cpp:249
RealisticEngineModel.h
MSCFModel_CC::_flatbed
double _flatbed(const MSVehicle *veh, double egoAcceleration, double egoSpeed, double predSpeed, double gap2pred, double leaderSpeed) const
flatbed platoon towing model
Definition: MSCFModel_CC.cpp:601
MSCFModel_CC::getRadarMeasurements
void getRadarMeasurements(const MSVehicle *veh, double &distance, double &relativeSpeed) const
return the data that is currently being measured by the radar
Definition: MSCFModel_CC.cpp:1037
MSCFModel_CC::getVehicleInformation
void getVehicleInformation(const MSVehicle *veh, double &speed, double &acceleration, double &controllerAcceleration, Position &position, double &time) const
get the information about a vehicle. This can be used by TraCI in order to get speed and acceleration...
Definition: MSCFModel_CC.cpp:618
MSCFModel_CC::resetConsensus
void resetConsensus(const MSVehicle *veh) const
Resets the consensus controller. In particular, sets the "initialized" vector all to false....
Definition: MSCFModel_CC.cpp:1018
MSCFModel_CC::d_i_j
double d_i_j(const struct Plexe::VEHICLE_DATA *vehicles, const double h[MAX_N_CARS], int i, int j) const
computes the desired distance between vehicle i and vehicle j
Definition: MSCFModel_CC.cpp:501
MSCFModel_CC::myPloegH
const double myPloegH
Ploeg's CACC parameters.
Definition: MSCFModel_CC.h:388
MSCFModel_CC::myOmegaN
const double myOmegaN
design constant for CACC
Definition: MSCFModel_CC.h:378
MSCFModel_CC::recomputeParameters
void recomputeParameters(const MSVehicle *veh) const
Recomputes controller related parameters after setting them.
Definition: MSCFModel_CC.cpp:1009
MSCFModel_CC::myLanesCount
const int myLanesCount
number of lanes in the highway, in the absence of on-/off-ramps. This is used to move to the correct ...
Definition: MSCFModel_CC.h:385
MSCFModel_CC::myC1
const double myC1
design constant for CACC
Definition: MSCFModel_CC.h:372
MSCFModel_CC::myKp
const double myKp
design constant for CC
Definition: MSCFModel_CC.h:366
MSCFModel_CC::_v
double _v(const MSVehicle *const veh, double gap2pred, double egoSpeed, double predSpeed) const
Definition: MSCFModel_CC.cpp:297
MSVehicle.h
MSVehicleType.h
MSCFModel_CC::myConstantSpacing
const double myConstantSpacing
the constant gap for CACC
Definition: MSCFModel_CC.h:363
SUMO_TAG_CF_CC
Definition: SUMOXMLDefinitions.h:291
MSCFModel_CC::myLambda
const double myLambda
design constant for ACC
Definition: MSCFModel_CC.h:369
MSCFModel_CC::insertionFollowSpeed
virtual double insertionFollowSpeed(const MSVehicle *const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel, const MSVehicle *const pred=0) const
Overload base MSCFModel::insertionFollowSpeed method to inject automated vehicles as soon as they are...
Definition: MSCFModel_CC.cpp:224
MSCFModel_CC::myFlatbedKa
const double myFlatbedKa
flatbed CACC parameters
Definition: MSCFModel_CC.h:393
MSCFModel_CC::myFlatbedKp
const double myFlatbedKp
Definition: MSCFModel_CC.h:395
MSCFModel_CC::maxNextSpeed
virtual double maxNextSpeed(double speed, const MSVehicle *const veh) const
Returns the maximum speed given the current speed.
Definition: MSCFModel_CC.cpp:277
MSCFModel_CC::_cc
double _cc(const MSVehicle *veh, double egoSpeed, double desSpeed) const
controller for the CC which computes the acceleration to be applied. the value needs to be passed to ...
Definition: MSCFModel_CC.cpp:459
MSCFModel_CC::followSpeed
double followSpeed(const MSVehicle *const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel, const MSVehicle *const pred=0) const
Computes the vehicle's safe speed (no dawdling)
Definition: MSCFModel_CC.cpp:211
MSCFModel_CC::myFlatbedD
const double myFlatbedD
Definition: MSCFModel_CC.h:397
MAX_N_CARS
#define MAX_N_CARS
Definition: CC_Const.h:74
MSCFModel_CC::myPloegKp
const double myPloegKp
Definition: MSCFModel_CC.h:389
Plexe::VEHICLE_DATA
Definition: CC_Const.h:60
MSCFModel_CC::_consensus
double _consensus(const MSVehicle *veh, double egoSpeed, Position egoPosition, double time) const
controller based on consensus strategy
Definition: MSCFModel_CC.cpp:527
MSCFModel_CC::myCcAccel
const double myCcAccel
The maximum acceleration that the CC can output.
Definition: MSCFModel_CC.h:360
MSCFModel_CC::~MSCFModel_CC
~MSCFModel_CC()
Destructor.
Definition: MSCFModel_CC.cpp:74
MSCFModel_CC::myTau
const double myTau
engine time constant used for actuation lag
Definition: MSCFModel_CC.h:381
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:39
MSCFModel_CC::switchOnACC
void switchOnACC(const MSVehicle *veh, double ccDesiredSpeed) const
switch on the ACC, so disabling the human driver car control
Definition: MSCFModel_CC.cpp:1026
MSCFModel_CC::myPloegKd
const double myPloegKd
Definition: MSCFModel_CC.h:390
MSCFModel_CC
A set of automatic Cruise Controllers, including classic Cruise Control (CC), Adaptive Cruise Control...
Definition: MSCFModel_CC.h:58
MSCFModel_CC::duplicate
MSCFModel * duplicate(const MSVehicleType *vtype) const
Duplicates the car-following model.
Definition: MSCFModel_CC.cpp:1065
MSCFModel_Krauss.h
MSCFModel_CC::createVehicleVariables
VehicleVariables * createVehicleVariables() const
Returns model specific values which are stored inside a vehicle and must be used with casting.
Definition: MSCFModel_CC.cpp:77
MSCFModel_CC::_ploeg
double _ploeg(const MSVehicle *veh, double egoSpeed, double predSpeed, double predAcceleration, double gap2pred) const
controller for the Ploeg's CACC which computes the control input variation. Opposed to other controll...
Definition: MSCFModel_CC.cpp:490
MSCFModel_CC::myCcDecel
const double myCcDecel
The maximum deceleration that the CC can output.
Definition: MSCFModel_CC.h:357
MSCFModel_CC::getCACCConstantSpacing
double getCACCConstantSpacing(const MSVehicle *veh) const
returns CACC desired constant spacing
Definition: MSCFModel_CC.cpp:612
MSCFModel_CC::getModelID
int getModelID() const
Returns the model's name.
Definition: MSCFModel_CC.h:156
MSCFModel.h
CC_VehicleVariables.h
MSCFModel_CC::finalizeSpeed
virtual double finalizeSpeed(MSVehicle *const veh, double vPos) const
Applies interaction with stops and lane changing model influences.
Definition: MSCFModel_CC.cpp:166
MSCFModel_CC::_cacc
double _cacc(const MSVehicle *veh, double egoSpeed, double predSpeed, double predAcceleration, double gap2pred, double leaderSpeed, double leaderAcceleration, double spacing) const
controller for the CACC which computes the acceleration to be applied. the value needs to be passed t...
Definition: MSCFModel_CC.cpp:477
MSCFModel_CC::myXi
const double myXi
design constant for CACC
Definition: MSCFModel_CC.h:375
MSCFModel
The car-following model abstraction.
Definition: MSCFModel.h:57
config.h
MSCFModel_CC::operator=
MSCFModel_CC & operator=(const MSCFModel_CC &)=delete
Invalidated assignment operator.
Plexe::ACTIVE_CONTROLLER
ACTIVE_CONTROLLER
Determines the currently active controller, i.e., ACC, CACC, or the driver. In future we might need t...
Definition: CC_Const.h:45
MSCFModel_CC::_acc
double _acc(const MSVehicle *veh, double egoSpeed, double predSpeed, double gap2pred, double headwayTime) const
controller for the ACC which computes the acceleration to be applied. the value needs to be passed to...
Definition: MSCFModel_CC.cpp:468
MSCFModel_CC::interactionGap
double interactionGap(const MSVehicle *const, double vL) const
Returns the maximum gap at which an interaction between both vehicles occurs.
Definition: MSCFModel_CC.cpp:264
MSCFModel_CC::getACCAcceleration
double getACCAcceleration(const MSVehicle *veh) const
returns the ACC computed acceleration when the faked CACC is controlling the car. This can be used to...
Definition: MSCFModel_CC.cpp:1049
MSLane.h
MSCFModel_CC::MSCFModel_CC
MSCFModel_CC(const MSVehicleType *vtype)
Constructor.
Definition: MSCFModel_CC.cpp:42
MSCFModel_CC::myHumanDriver
MSCFModel * myHumanDriver
the car following model which drives the car when automated cruising is disabled, i....
Definition: MSCFModel_CC.h:354
MSCFModel_CC::myFlatbedH
const double myFlatbedH
Definition: MSCFModel_CC.h:396
GenericEngineModel.h
FirstOrderLagModel.h
CC_Const.h
SUMOXMLDefinitions.h
MSCFModel_CC::performAutoLaneChange
void performAutoLaneChange(MSVehicle *const veh) const
Definition: MSCFModel_CC.cpp:112
MSCFModel_CC::setParameter
virtual void setParameter(MSVehicle *veh, const std::string &key, const std::string &value) const
try to set the given parameter for this carFollowingModel
Definition: MSCFModel_CC.cpp:627
MSCFModel_CC::getMyLanesCount
int getMyLanesCount() const
returns the number of lanes set in the configuration file
Definition: MSCFModel_CC.cpp:1060
MSCFModel_CC::stopSpeed
double stopSpeed(const MSVehicle *const veh, const double speed, double gap2pred) const
Computes the vehicle's safe speed for approaching a non-moving obstacle (no dawdling)
Definition: MSCFModel_CC.cpp:234
MSVehicle
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:80