LCOV - code coverage report
Current view: top level - src/microsim/cfmodels - MSCFModel_Wiedemann.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 3 5 60.0 %
Date: 2024-05-05 15:31:14 Functions: 1 2 50.0 %

          Line data    Source code
       1             : /****************************************************************************/
       2             : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3             : // Copyright (C) 2001-2024 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             : /****************************************************************************/
      14             : /// @file    MSCFModel_Wiedemann.h
      15             : /// @author  Jakob Erdmann
      16             : /// @author  Michael Behrisch
      17             : /// @date    June 2011
      18             : ///
      19             : // The psycho-physical model of Wiedemann
      20             : /****************************************************************************/
      21             : #pragma once
      22             : #include <config.h>
      23             : 
      24             : #include "MSCFModel.h"
      25             : #include <microsim/MSLane.h>
      26             : #include <microsim/MSVehicle.h>
      27             : #include <microsim/MSVehicleType.h>
      28             : #include <utils/xml/SUMOXMLDefinitions.h>
      29             : 
      30             : 
      31             : // ===========================================================================
      32             : // class definitions
      33             : // ===========================================================================
      34             : /** @class MSCFModel_Wiedemann
      35             :  * @brief The Wiedemann Model car-following model
      36             :  * @see MSCFModel
      37             :  */
      38             : // XXX: which Wiedemann is this? There are several versions... Below it is stated that it is modified it with Krauss vsafe... (Leo)
      39             : class MSCFModel_Wiedemann : public MSCFModel {
      40             : public:
      41             : 
      42             :     /** @brief Constructor
      43             :      *  @param[in] vtype the type for which this model is built and also the parameter object to configure this model
      44             :      */
      45             :     MSCFModel_Wiedemann(const MSVehicleType* vtype);
      46             : 
      47             : 
      48             :     /// @brief Destructor
      49             :     ~MSCFModel_Wiedemann();
      50             : 
      51             : 
      52             :     /// @name Implementations of the MSCFModel interface
      53             :     /// @{
      54             : 
      55             :     /** @brief Applies interaction with stops and lane changing model influences
      56             :      * @param[in] veh The ego vehicle
      57             :      * @param[in] vPos The possible velocity
      58             :      * @return The velocity after applying interactions with stops and lane change model influences
      59             :      */
      60             :     double finalizeSpeed(MSVehicle* const veh, double vPos) const;
      61             : 
      62             : 
      63             :     /** @brief Computes the vehicle's safe speed (no dawdling)
      64             :      * @param[in] veh The vehicle (EGO)
      65             :      * @param[in] speed The vehicle's speed
      66             :      * @param[in] gap2pred The (netto) distance to the LEADER
      67             :      * @param[in] predSpeed The speed of LEADER
      68             :      * @return EGO's safe speed
      69             :      * @see MSCFModel::ffeV
      70             :      */
      71             :     double followSpeed(const MSVehicle* const veh, double speed, double gap2pred,
      72             :                        double predSpeed, double predMaxDecel, const MSVehicle* const pred = 0, const CalcReason usage = CalcReason::CURRENT) const;
      73             : 
      74             : 
      75             :     /** @brief Computes the vehicle's safe speed for approaching a non-moving obstacle (no dawdling)
      76             :      * @param[in] veh The vehicle (EGO)
      77             :      * @param[in] gap The (netto) distance to the the obstacle
      78             :      * @return EGO's safe speed for approaching a non-moving obstacle
      79             :      * @see MSCFModel::ffeS
      80             :      * @todo generic Interface, models can call for the values they need
      81             :      */
      82             :     double stopSpeed(const MSVehicle* const veh, const double speed, double gap, double decel, const CalcReason usage = CalcReason::CURRENT) const;
      83             : 
      84             : 
      85             :     /** @brief Returns the maximum gap at which an interaction between both vehicles occurs
      86             :      *
      87             :      * "interaction" means that the LEADER influences EGO's speed.
      88             :      * @param[in] veh The EGO vehicle
      89             :      * @param[in] vL LEADER's speed
      90             :      * @return The interaction gap
      91             :      * @todo evaluate signature
      92             :      * @see MSCFModel::interactionGap
      93             :      */
      94             :     double interactionGap(const MSVehicle* const, double vL) const;
      95             : 
      96             :     /** @brief Returns the minimum gap to reserve if the leader is braking at maximum (>=0)
      97             :      * @param[in] veh The vehicle itself, for obtaining other values
      98             :      * @param[in] pred The leader vehicle, for obtaining other values
      99             :      * @param[in] speed EGO's speed
     100             :      * @param[in] leaderSpeed LEADER's speed
     101             :      * @param[in] leaderMaxDecel LEADER's max. deceleration rate
     102             :      */
     103             :     double getSecureGap(const MSVehicle* const veh, const MSVehicle* const pred, const double speed, const double leaderSpeed, const double leaderMaxDecel) const;
     104             : 
     105             :     /** @brief Returns the model's name
     106             :      * @return The model's name
     107             :      * @see MSCFModel::getModelName
     108             :      */
     109           0 :     int getModelID() const {
     110           0 :         return SUMO_TAG_CF_WIEDEMANN;
     111             :     }
     112             : 
     113             : 
     114             :     /** @brief Duplicates the car-following model
     115             :      * @param[in] vtype The vehicle type this model belongs to (1:1)
     116             :      * @return A duplicate of this car-following model
     117             :      */
     118             :     MSCFModel* duplicate(const MSVehicleType* vtype) const;
     119             : 
     120             : 
     121        8091 :     VehicleVariables* createVehicleVariables() const {
     122        8091 :         return new VehicleVariables();
     123             :     }
     124             :     /// @}
     125             : 
     126             : 
     127             : private:
     128             :     class VehicleVariables : public MSCFModel::VehicleVariables {
     129             :     public:
     130        8091 :         VehicleVariables() : accelSign(1) {}
     131             :         /// @brief state variable for remembering the drift direction
     132             :         double accelSign;
     133             :     };
     134             : 
     135             : 
     136             : private:
     137             :     /* @brief the main enty point for the speed computation
     138             :      * @param[in] gap The netto gap (front bumper of ego to back bumper of leader)
     139             :      */
     140             :     double _v(const MSVehicle* veh, double predSpeed, double gap, double predAccel) const;
     141             : 
     142             :     /// @name acceleration based on the 'driving regime'
     143             :     /// @{
     144             :     double fullspeed(double v, double vpref, double dx, double bx) const; // also 'WUNSCH'
     145             :     double following(double sign) const; // also 'FOLGEN'
     146             :     double approaching(double dv, double dx, double abx, double predAccel) const;  // also 'BREMSBX'
     147             :     double emergency(double dv, double dx, double predAccel, double v, double gap, double abx, double bx) const; // also 'BREMSAX'
     148             :     /// @}
     149             : 
     150             : private:
     151             :     /// @name model parameter
     152             :     /// @{
     153             : 
     154             :     /// @brief The driver's security parameter // also 'ZF1'
     155             :     const double mySecurity;
     156             : 
     157             :     /// @brief The driver's estimation parameter // also 'ZF2'
     158             :     const double myEstimation;
     159             : 
     160             :     /// @brief the minimum front-bumper to front-bumper distance when standing
     161             :     const double myAX;
     162             : 
     163             :     /// @brief perception threshold modifier
     164             :     const double myCX;
     165             : 
     166             :     /// @brief The vehicle's minimum acceleration [m/s^2] // also b_null
     167             :     const double myMinAccel;
     168             : 
     169             :     /// @brief The maximum deceleration when approaching
     170             :     const double myMaxApproachingDecel;
     171             : 
     172             :     /// @brief free-flow distance in m
     173             :     static const double D_MAX;
     174             :     /// @}
     175             : 
     176             : private:
     177             :     /// @brief Invalidated assignment operator
     178             :     MSCFModel_Wiedemann& operator=(const MSCFModel_Wiedemann& s);
     179             : };

Generated by: LCOV version 1.14