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 /****************************************************************************/
14 // A series of automatic Cruise Controllers (CC, ACC, CACC)
15 /****************************************************************************/
16 #ifndef MSCFMODEL_CC_H
17 #define MSCFMODEL_CC_H
18 
19 // ===========================================================================
20 // included modules
21 // ===========================================================================
22 #include <config.h>
23 
24 #include "CC_Const.h"
26 #include <microsim/MSLane.h>
27 #include <microsim/MSVehicle.h>
28 #include <microsim/MSVehicleType.h>
31 #include <string.h>
32 
36 
37 #include "CC_VehicleVariables.h"
38 
39 
40 // ===========================================================================
41 // class definitions
42 // ===========================================================================
57 class MSCFModel_CC : public MSCFModel {
58 public:
59 
75  MSCFModel_CC(const MSVehicleType* vtype);
76 
78  ~MSCFModel_CC();
79 
80 
83 
89  virtual double finalizeSpeed(MSVehicle* const veh, double vPos) const;
90 
91 
100  double followSpeed(const MSVehicle* const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel, const MSVehicle* const pred = 0) const;
101 
107  virtual double insertionFollowSpeed(const MSVehicle* const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel, const MSVehicle* const pred = 0) const;
108 
109 
117  double stopSpeed(const MSVehicle* const veh, const double speed, double gap2pred) const;
118 
131  virtual double freeSpeed(const MSVehicle* const veh, double speed, double seen,
132  double maxSpeed, const bool onInsertion = false) const;
133 
134  virtual double maxNextSpeed(double speed, const MSVehicle* const veh) const;
135 
136  virtual double minNextSpeed(double speed, const MSVehicle* const veh = 0) const;
137 
138 
148  double interactionGap(const MSVehicle* const, double vL) const;
149 
150 
155  int getModelID() const {
156  return SUMO_TAG_CF_CC;
157  }
159 
160 
161 
166  MSCFModel* duplicate(const MSVehicleType* vtype) const;
167 
168  VehicleVariables* createVehicleVariables() const;
169 
176  double getCACCConstantSpacing(const MSVehicle* veh) const;
177 
189 // void setVehicleInformation(const MSVehicle* veh, double speed, double acceleration, Position position, double time) const;
190 
198  virtual std::string getParameter(const MSVehicle* veh, const std::string& key) const;
199 
207  virtual void setParameter(MSVehicle* veh, const std::string& key, const std::string& value) const;
208 
221  void getVehicleInformation(const MSVehicle* veh, double& speed, double& acceleration, double& controllerAcceleration, Position& position, double& time) const;
222 
229  void switchOnACC(const MSVehicle* veh, double ccDesiredSpeed) const;
230 
238 
242  void getRadarMeasurements(const MSVehicle* veh, double& distance, double& relativeSpeed) const;
243 
249  double getACCAcceleration(const MSVehicle* veh) const;
250 
254  int getMyLanesCount() const;
255 
256 private:
257 
261  void recomputeParameters(const MSVehicle* veh) const;
262 
268  void resetConsensus(const MSVehicle* veh) const;
269 
270 private:
271  void performAutoLaneChange(MSVehicle* const veh) const;
272 
273  double _v(const MSVehicle* const veh, double gap2pred, double egoSpeed, double predSpeed) const;
274 
281  double _cc(const MSVehicle* veh, double egoSpeed, double desSpeed) const;
282 
291  double _acc(const MSVehicle* veh, double egoSpeed, double predSpeed, double gap2pred, double headwayTime) const;
292 
304  double _cacc(const MSVehicle* veh, double egoSpeed, double predSpeed, double predAcceleration, double gap2pred, double leaderSpeed, double leaderAcceleration, double spacing) const;
305 
316  double _ploeg(const MSVehicle* veh, double egoSpeed, double predSpeed, double predAcceleration, double gap2pred) const;
317 
325  double _consensus(const MSVehicle* veh, double egoSpeed, Position egoPosition, double time) const;
326 
336  double d_i_j(const struct Plexe::VEHICLE_DATA* vehicles, const double h[MAX_N_CARS], int i, int j) const;
337 
346  double _flatbed(const MSVehicle* veh, double egoAcceleration, double egoSpeed, double predSpeed,
347  double gap2pred, double leaderSpeed) const;
348 
349 
350 private:
351 
354 
356  const double myCcDecel;
357 
359  const double myCcAccel;
360 
362  const double myConstantSpacing;
363 
365  const double myKp;
366 
368  const double myLambda;
369 
371  const double myC1;
372 
374  const double myXi;
375 
377  const double myOmegaN;
378 
380  const double myTau;
381 
384  const int myLanesCount;
385 
387  const double myPloegH;
388  const double myPloegKp;
389  const double myPloegKd;
390 
392  const double myFlatbedKa;
393  const double myFlatbedKv;
394  const double myFlatbedKp;
395  const double myFlatbedH;
396  const double myFlatbedD;
397 
398 private:
401 };
402 
403 #endif /* MSCFMODEL_CC_H */
MSVehicleType
The car-following model and parameter.
Definition: MSVehicleType.h:65
MSCFModel_CC::myFlatbedKv
const double myFlatbedKv
Definition: MSCFModel_CC.h:393
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:886
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:286
MSCFModel_CC::getActiveController
enum Plexe::ACTIVE_CONTROLLER getActiveController(const MSVehicle *veh) const
return the currently active controller
Definition: MSCFModel_CC.cpp:1031
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:248
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:600
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:1036
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:617
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:1017
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:500
MSCFModel_CC::myPloegH
const double myPloegH
Ploeg's CACC parameters.
Definition: MSCFModel_CC.h:387
MSCFModel_CC::myOmegaN
const double myOmegaN
design constant for CACC
Definition: MSCFModel_CC.h:377
MSCFModel_CC::recomputeParameters
void recomputeParameters(const MSVehicle *veh) const
Recomputes controller related parameters after setting them.
Definition: MSCFModel_CC.cpp:1008
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:384
MSCFModel_CC::myC1
const double myC1
design constant for CACC
Definition: MSCFModel_CC.h:371
MSCFModel_CC::myKp
const double myKp
design constant for CC
Definition: MSCFModel_CC.h:365
MSCFModel_CC::_v
double _v(const MSVehicle *const veh, double gap2pred, double egoSpeed, double predSpeed) const
Definition: MSCFModel_CC.cpp:296
MSVehicle.h
MSVehicleType.h
MSCFModel_CC::myConstantSpacing
const double myConstantSpacing
the constant gap for CACC
Definition: MSCFModel_CC.h:362
SUMO_TAG_CF_CC
@ SUMO_TAG_CF_CC
Definition: SUMOXMLDefinitions.h:290
MSCFModel_CC::myLambda
const double myLambda
design constant for ACC
Definition: MSCFModel_CC.h:368
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:223
MSCFModel_CC::myFlatbedKa
const double myFlatbedKa
flatbed CACC parameters
Definition: MSCFModel_CC.h:392
MSCFModel_CC::myFlatbedKp
const double myFlatbedKp
Definition: MSCFModel_CC.h:394
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:276
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:458
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:210
MSCFModel_CC::myFlatbedD
const double myFlatbedD
Definition: MSCFModel_CC.h:396
MAX_N_CARS
#define MAX_N_CARS
Definition: CC_Const.h:73
MSCFModel_CC::myPloegKp
const double myPloegKp
Definition: MSCFModel_CC.h:388
Plexe::VEHICLE_DATA
Definition: CC_Const.h:59
MSCFModel_CC::_consensus
double _consensus(const MSVehicle *veh, double egoSpeed, Position egoPosition, double time) const
controller based on consensus strategy
Definition: MSCFModel_CC.cpp:526
MSCFModel_CC::myCcAccel
const double myCcAccel
The maximum acceleration that the CC can output.
Definition: MSCFModel_CC.h:359
MSCFModel_CC::~MSCFModel_CC
~MSCFModel_CC()
Destructor.
Definition: MSCFModel_CC.cpp:73
MSCFModel_CC::myTau
const double myTau
engine time constant used for actuation lag
Definition: MSCFModel_CC.h:380
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
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:1025
MSCFModel_CC::myPloegKd
const double myPloegKd
Definition: MSCFModel_CC.h:389
MSCFModel_CC
A set of automatic Cruise Controllers, including classic Cruise Control (CC), Adaptive Cruise Control...
Definition: MSCFModel_CC.h:57
MSCFModel_CC::duplicate
MSCFModel * duplicate(const MSVehicleType *vtype) const
Duplicates the car-following model.
Definition: MSCFModel_CC.cpp:1064
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:76
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:489
MSCFModel_CC::myCcDecel
const double myCcDecel
The maximum deceleration that the CC can output.
Definition: MSCFModel_CC.h:356
MSCFModel_CC::getCACCConstantSpacing
double getCACCConstantSpacing(const MSVehicle *veh) const
returns CACC desired constant spacing
Definition: MSCFModel_CC.cpp:611
MSCFModel_CC::getModelID
int getModelID() const
Returns the model's name.
Definition: MSCFModel_CC.h:155
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:165
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:476
MSCFModel_CC::myXi
const double myXi
design constant for CACC
Definition: MSCFModel_CC.h:374
MSCFModel
The car-following model abstraction.
Definition: MSCFModel.h:56
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:467
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:263
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:1048
MSLane.h
MSCFModel_CC::MSCFModel_CC
MSCFModel_CC(const MSVehicleType *vtype)
Constructor.
Definition: MSCFModel_CC.cpp:41
MSCFModel_CC::myHumanDriver
MSCFModel * myHumanDriver
the car following model which drives the car when automated cruising is disabled, i....
Definition: MSCFModel_CC.h:353
MSCFModel_CC::myFlatbedH
const double myFlatbedH
Definition: MSCFModel_CC.h:395
GenericEngineModel.h
FirstOrderLagModel.h
CC_Const.h
SUMOXMLDefinitions.h
MSCFModel_CC::performAutoLaneChange
void performAutoLaneChange(MSVehicle *const veh) const
Definition: MSCFModel_CC.cpp:111
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:626
MSCFModel_CC::getMyLanesCount
int getMyLanesCount() const
returns the number of lanes set in the configuration file
Definition: MSCFModel_CC.cpp:1059
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:233
MSVehicle
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:79