1 package org.opentrafficsim.road.gtu.lane.control;
2
3 import org.djunits.value.vdouble.scalar.Acceleration;
4 import org.opentrafficsim.base.parameters.ParameterException;
5 import org.opentrafficsim.base.parameters.ParameterTypeDouble;
6 import org.opentrafficsim.base.parameters.Parameters;
7 import org.opentrafficsim.base.parameters.constraint.NumericConstraint;
8 import org.opentrafficsim.road.gtu.lane.LaneBasedGTU;
9 import org.opentrafficsim.road.gtu.lane.perception.PerceptionCollectable;
10 import org.opentrafficsim.road.gtu.lane.perception.headway.HeadwayGTU;
11
12
13
14
15
16
17
18
19
20
21
22 public class LinearACC extends AbstractLinearFreeControl
23 {
24
25
26 public static final ParameterTypeDouble KS =
27 new ParameterTypeDouble("ks", "Gap error gain", 0.2, NumericConstraint.POSITIVE);
28
29
30 public static final ParameterTypeDouble KV =
31 new ParameterTypeDouble("kv", "Speed error gain", 0.4, NumericConstraint.POSITIVE);
32
33
34
35
36
37 public LinearACC(final DelayedActuation delayedActuation)
38 {
39 super(delayedActuation);
40 }
41
42
43 @Override
44 public Acceleration getFollowingAcceleration(final LaneBasedGTU gtu,
45 final PerceptionCollectable<HeadwayGTU, LaneBasedGTU> leaders, final Parameters settings) throws ParameterException
46 {
47 HeadwayGTU leader = leaders.first();
48 double es =
49 leader.getDistance().si - gtu.getSpeed().si * settings.getParameter(TDACC).si - settings.getParameter(X0).si;
50 double ev = leader.getSpeed().si - gtu.getSpeed().si;
51 return Acceleration.instantiateSI(settings.getParameter(KS) * es + settings.getParameter(KV) * ev);
52 }
53
54 }