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
23 public class LinearCACC extends AbstractLinearFreeControl
24 {
25
26
27
28
29
30 public LinearCACC(final DelayedActuation delayedActuation)
31 {
32 super(delayedActuation);
33 }
34
35
36 public static final ParameterTypeDouble KS =
37 new ParameterTypeDouble("ks", "Gap error gain", 0.2, NumericConstraint.POSITIVE);
38
39
40 public static final ParameterTypeDouble KV =
41 new ParameterTypeDouble("kv", "Speed error gain", 0.4, NumericConstraint.POSITIVE);
42
43
44 public static final ParameterTypeDouble KA =
45 new ParameterTypeDouble("ka", "Acceleration error gain", 1.0, NumericConstraint.POSITIVE);
46
47
48 @Override
49 public Acceleration getFollowingAcceleration(final LaneBasedGTU gtu,
50 final PerceptionCollectable<HeadwayGTU, LaneBasedGTU> leaders) throws ParameterException
51 {
52 Parameters params = gtu.getParameters();
53 HeadwayGTU leader = leaders.first();
54 double es;
55 double kaui;
56 if (leader.getAcceleration() == null)
57 {
58
59 es = leader.getDistance().si - gtu.getSpeed().si * params.getParameter(TDACC).si - params.getParameter(X0).si;
60 kaui = 0.0;
61 }
62 else
63 {
64
65 es = leader.getDistance().si - gtu.getSpeed().si * params.getParameter(TDCACC).si - params.getParameter(X0).si;
66 kaui = params.getParameter(KA) * leader.getAcceleration().si;
67 }
68 double ev = leader.getSpeed().si - gtu.getSpeed().si;
69 return Acceleration.createSI(params.getParameter(KS) * es + params.getParameter(KV) * ev + kaui);
70 }
71
72 }