View Javadoc
1   package org.opentrafficsim.road;
2   
3   import org.djunits.value.vdouble.scalar.Acceleration;
4   import org.djunits.value.vdouble.scalar.Length;
5   import org.djunits.value.vdouble.scalar.Speed;
6   import org.opentrafficsim.base.parameters.ParameterException;
7   import org.opentrafficsim.base.parameters.ParameterSet;
8   import org.opentrafficsim.base.parameters.Parameters;
9   import org.opentrafficsim.core.gtu.GtuType;
10  import org.opentrafficsim.road.FixedCarFollowing.FixedCarFollowingModel;
11  import org.opentrafficsim.road.gtu.lane.perception.PerceptionIterable;
12  import org.opentrafficsim.road.gtu.lane.perception.object.PerceivedObject;
13  import org.opentrafficsim.road.gtu.lane.tactical.following.CarFollowingModel;
14  import org.opentrafficsim.road.gtu.lane.tactical.following.CarFollowingModelFactory;
15  import org.opentrafficsim.road.network.speed.SpeedLimitInfo;
16  
17  /**
18   * Very simple car-following model factory only for testing.
19   * <p>
20   * Copyright (c) 2024-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
21   * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
22   * </p>
23   * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
24   */
25  public class FixedCarFollowing implements CarFollowingModelFactory<FixedCarFollowingModel>
26  {
27      /** Fixed acceleration. */
28      private final Acceleration acceleration;
29  
30      /** Fixed desired speed. */
31      private final Speed desiredSpeed;
32  
33      /** Fixed desired headway. */
34      private final Length desiredHeadway;
35  
36      /**
37       * Constructor.
38       */
39      public FixedCarFollowing()
40      {
41          this(Acceleration.ZERO, Speed.ONE, Length.ONE);
42      }
43  
44      /**
45       * Constructor.
46       * @param acceleration fixed acceleration
47       */
48      public FixedCarFollowing(final Acceleration acceleration)
49      {
50          this(acceleration, Speed.ONE, Length.ONE);
51      }
52  
53      /**
54       * Constructor.
55       * @param acceleration fixed acceleration
56       * @param desiredSpeed fixed desired speed
57       * @param desiredHeadway fixed desired headway
58       */
59      public FixedCarFollowing(final Acceleration acceleration, final Speed desiredSpeed, final Length desiredHeadway)
60      {
61          this.acceleration = acceleration;
62          this.desiredHeadway = desiredHeadway;
63          this.desiredSpeed = desiredSpeed;
64      }
65  
66      @Override
67      public Parameters getParameters(final GtuType gtuType) throws ParameterException
68      {
69          return new ParameterSet();
70      }
71  
72      @Override
73      public FixedCarFollowingModel get()
74      {
75          return new FixedCarFollowingModel();
76      }
77  
78      /**
79       * Fixed car-following model.
80       */
81      public class FixedCarFollowingModel implements CarFollowingModel
82      {
83  
84          /**
85           * Constructor.
86           */
87          public FixedCarFollowingModel()
88          {
89              //
90          }
91  
92          @Override
93          public Length desiredHeadway(final Parameters parameters, final Speed speed) throws ParameterException
94          {
95              return FixedCarFollowing.this.desiredHeadway;
96          }
97  
98          @Override
99          public Speed desiredSpeed(final Parameters parameters, final SpeedLimitInfo speedInfo) throws ParameterException
100         {
101             return FixedCarFollowing.this.desiredSpeed;
102         }
103 
104         @Override
105         public Acceleration followingAcceleration(final Parameters parameters, final Speed speed,
106                 final SpeedLimitInfo speedLimitInfo, final PerceptionIterable<? extends PerceivedObject> leaders)
107                 throws ParameterException
108         {
109             return FixedCarFollowing.this.acceleration;
110         }
111 
112         @Override
113         public String getName()
114         {
115             return "FixedAcceleration";
116         }
117 
118         @Override
119         public String getLongName()
120         {
121             return "FixedAcceleration";
122         }
123 
124     }
125 }