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-2022 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 series of automatic Cruise Controllers (CC, ACC, CACC)
19 /****************************************************************************/
20 #pragma once
21 #include <config.h>
22 
23 #include "CC_Const.h"
25 #include <microsim/MSLane.h>
26 #include <microsim/MSVehicle.h>
27 #include <microsim/MSVehicleType.h>
30 #include <string.h>
31 
35 
36 #include "CC_VehicleVariables.h"
37 
38 
39 // ===========================================================================
40 // class definitions
41 // ===========================================================================
56 class MSCFModel_CC : public MSCFModel {
57 public:
58 
74  MSCFModel_CC(const MSVehicleType* vtype);
75 
77  ~MSCFModel_CC();
78 
79 
82 
88  virtual double finalizeSpeed(MSVehicle* const veh, double vPos) const;
89 
90 
99  double followSpeed(const MSVehicle* const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel, const MSVehicle* const pred = 0) const;
100 
106  virtual double insertionFollowSpeed(const MSVehicle* const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel, const MSVehicle* const pred = 0) const;
107 
108 
116  double stopSpeed(const MSVehicle* const veh, const double speed, double gap2pred, double decel) const;
117 
130  virtual double freeSpeed(const MSVehicle* const veh, double speed, double seen,
131  double maxSpeed, const bool onInsertion = false) const;
132 
133  virtual double maxNextSpeed(double speed, const MSVehicle* const veh) const;
134 
135  virtual double minNextSpeed(double speed, const MSVehicle* const veh = 0) const;
136 
137 
147  double interactionGap(const MSVehicle* const, double vL) const;
148 
149 
154  int getModelID() const {
155  return SUMO_TAG_CF_CC;
156  }
158 
159 
160 
165  MSCFModel* duplicate(const MSVehicleType* vtype) const;
166 
167  VehicleVariables* createVehicleVariables() const;
168 
175  double getCACCConstantSpacing(const MSVehicle* veh) const;
176 
188 // void setVehicleInformation(const MSVehicle* veh, double speed, double acceleration, Position position, double time) const;
189 
197  virtual std::string getParameter(const MSVehicle* veh, const std::string& key) const;
198 
206  virtual void setParameter(MSVehicle* veh, const std::string& key, const std::string& value) const;
207 
220  void getVehicleInformation(const MSVehicle* veh, double& speed, double& acceleration, double& controllerAcceleration, Position& position, double& time) const;
221 
228  void switchOnACC(const MSVehicle* veh, double ccDesiredSpeed) const;
229 
237 
241  void getRadarMeasurements(const MSVehicle* veh, double& distance, double& relativeSpeed) const;
242 
248  double getACCAcceleration(const MSVehicle* veh) const;
249 
253  int getMyLanesCount() const;
254 
255 private:
256 
260  void recomputeParameters(const MSVehicle* veh) const;
261 
267  void resetConsensus(const MSVehicle* veh) const;
268 
269 private:
270  void performAutoLaneChange(MSVehicle* const veh) const;
271 
272  double _v(const MSVehicle* const veh, double gap2pred, double egoSpeed, double predSpeed) const;
273 
280  double _cc(const MSVehicle* veh, double egoSpeed, double desSpeed) const;
281 
290  double _acc(const MSVehicle* veh, double egoSpeed, double predSpeed, double gap2pred, double headwayTime) const;
291 
303  double _cacc(const MSVehicle* veh, double egoSpeed, double predSpeed, double predAcceleration, double gap2pred, double leaderSpeed, double leaderAcceleration, double spacing) const;
304 
315  double _ploeg(const MSVehicle* veh, double egoSpeed, double predSpeed, double predAcceleration, double gap2pred) const;
316 
324  double _consensus(const MSVehicle* veh, double egoSpeed, Position egoPosition, double time) const;
325 
335  double d_i_j(const struct Plexe::VEHICLE_DATA* vehicles, const double h[MAX_N_CARS], int i, int j) const;
336 
345  double _flatbed(const MSVehicle* veh, double egoAcceleration, double egoSpeed, double predSpeed,
346  double gap2pred, double leaderSpeed) const;
347 
348 
349 private:
350 
353 
355  const double myCcDecel;
356 
358  const double myCcAccel;
359 
361  const double myConstantSpacing;
362 
364  const double myKp;
365 
367  const double myLambda;
368 
370  const double myC1;
371 
373  const double myXi;
374 
376  const double myOmegaN;
377 
379  const double myTau;
380 
383  const int myLanesCount;
384 
386  const double myPloegH;
387  const double myPloegKp;
388  const double myPloegKd;
389 
391  const double myFlatbedKa;
392  const double myFlatbedKv;
393  const double myFlatbedKp;
394  const double myFlatbedH;
395  const double myFlatbedD;
396 
397 private:
400 };
401 
#define MAX_N_CARS
Definition: CC_Const.h:77
@ SUMO_TAG_CF_CC
A set of automatic Cruise Controllers, including classic Cruise Control (CC), Adaptive Cruise Control...
Definition: MSCFModel_CC.h:56
double _v(const MSVehicle *const veh, double gap2pred, double egoSpeed, double predSpeed) const
MSCFModel_CC(const MSVehicleType *vtype)
Constructor.
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...
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...
const double myPloegKd
Definition: MSCFModel_CC.h:388
const double myFlatbedH
Definition: MSCFModel_CC.h:394
const double myFlatbedKp
Definition: MSCFModel_CC.h:393
const double myPloegH
Ploeg's CACC parameters.
Definition: MSCFModel_CC.h:386
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)
double getACCAcceleration(const MSVehicle *veh) const
returns the ACC computed acceleration when the faked CACC is controlling the car. This can be used to...
int getModelID() const
Returns the model's name.
Definition: MSCFModel_CC.h:154
int getMyLanesCount() const
returns the number of lanes set in the configuration file
double _flatbed(const MSVehicle *veh, double egoAcceleration, double egoSpeed, double predSpeed, double gap2pred, double leaderSpeed) const
flatbed platoon towing model
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...
MSCFModel * duplicate(const MSVehicleType *vtype) const
Duplicates the car-following model.
VehicleVariables * createVehicleVariables() const
Returns model specific values which are stored inside a vehicle and must be used with casting.
void getRadarMeasurements(const MSVehicle *veh, double &distance, double &relativeSpeed) const
return the data that is currently being measured by the radar
double _consensus(const MSVehicle *veh, double egoSpeed, Position egoPosition, double time) const
controller based on consensus strategy
const double myPloegKp
Definition: MSCFModel_CC.h:387
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...
const double myTau
engine time constant used for actuation lag
Definition: MSCFModel_CC.h:379
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
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.
const double myOmegaN
design constant for CACC
Definition: MSCFModel_CC.h:376
const double myC1
design constant for CACC
Definition: MSCFModel_CC.h:370
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:383
virtual double finalizeSpeed(MSVehicle *const veh, double vPos) const
Applies interaction with stops and lane changing model influences.
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...
double stopSpeed(const MSVehicle *const veh, const double speed, double gap2pred, double decel) const
Computes the vehicle's safe speed for approaching a non-moving obstacle (no dawdling)
virtual void setParameter(MSVehicle *veh, const std::string &key, const std::string &value) const
try to set the given parameter for this carFollowingModel
const double myConstantSpacing
the constant gap for CACC
Definition: MSCFModel_CC.h:361
double getCACCConstantSpacing(const MSVehicle *veh) const
returns CACC desired constant spacing
~MSCFModel_CC()
Destructor.
const double myFlatbedKv
Definition: MSCFModel_CC.h:392
void recomputeParameters(const MSVehicle *veh) const
Recomputes controller related parameters after setting them.
const double myXi
design constant for CACC
Definition: MSCFModel_CC.h:373
const double myFlatbedKa
flatbed CACC parameters
Definition: MSCFModel_CC.h:391
void switchOnACC(const MSVehicle *veh, double ccDesiredSpeed) const
switch on the ACC, so disabling the human driver car control
MSCFModel_CC & operator=(const MSCFModel_CC &)=delete
Invalidated assignment operator.
MSCFModel * myHumanDriver
the car following model which drives the car when automated cruising is disabled, i....
Definition: MSCFModel_CC.h:352
const double myLambda
design constant for ACC
Definition: MSCFModel_CC.h:367
void performAutoLaneChange(MSVehicle *const veh) const
const double myKp
design constant for CC
Definition: MSCFModel_CC.h:364
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...
const double myCcAccel
The maximum acceleration that the CC can output.
Definition: MSCFModel_CC.h:358
const double myCcDecel
The maximum deceleration that the CC can output.
Definition: MSCFModel_CC.h:355
virtual double maxNextSpeed(double speed, const MSVehicle *const veh) const
Returns the maximum speed given the current speed.
const double myFlatbedD
Definition: MSCFModel_CC.h:395
void resetConsensus(const MSVehicle *veh) const
Resets the consensus controller. In particular, sets the "initialized" vector all to false....
double interactionGap(const MSVehicle *const, double vL) const
Returns the maximum gap at which an interaction between both vehicles occurs.
enum Plexe::ACTIVE_CONTROLLER getActiveController(const MSVehicle *veh) const
return the currently active controller
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 ...
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...
The car-following model abstraction.
Definition: MSCFModel.h:55
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:75
The car-following model and parameter.
Definition: MSVehicleType.h:62
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37
ACTIVE_CONTROLLER
Determines the currently active controller, i.e., ACC, CACC, or the driver. In future we might need t...
Definition: CC_Const.h:49