1 package org.opentrafficsim.road.gtu.lane.control;
2
3 import org.djunits.value.vdouble.scalar.Acceleration;
4 import org.djunits.value.vdouble.scalar.Duration;
5 import org.djunits.value.vdouble.scalar.Length;
6 import org.opentrafficsim.base.parameters.ParameterException;
7 import org.opentrafficsim.base.parameters.ParameterTypeDuration;
8 import org.opentrafficsim.base.parameters.ParameterTypeLength;
9 import org.opentrafficsim.base.parameters.Parameters;
10 import org.opentrafficsim.base.parameters.constraint.NumericConstraint;
11 import org.opentrafficsim.core.gtu.plan.operational.OperationalPlanException;
12 import org.opentrafficsim.road.gtu.lane.LaneBasedGTU;
13 import org.opentrafficsim.road.gtu.lane.perception.PerceptionCollectable;
14 import org.opentrafficsim.road.gtu.lane.perception.categories.neighbors.LongitudinalControllerPerception;
15 import org.opentrafficsim.road.gtu.lane.perception.headway.HeadwayGTU;
16
17
18
19
20
21
22
23
24
25
26
27
28 public abstract class AbstractActuatedControl implements LongitudinalControl
29 {
30
31
32 public static final ParameterTypeDuration TDACC = new ParameterTypeDuration("td ACC",
33 "User defined time headway in ACC mode", Duration.instantiateSI(1.2), NumericConstraint.POSITIVE);
34
35
36 public static final ParameterTypeDuration TDCACC = new ParameterTypeDuration("td CACC",
37 "User defined time headway in CACC mode", Duration.instantiateSI(0.5), NumericConstraint.POSITIVE);
38
39
40 public static final ParameterTypeLength X0 =
41 new ParameterTypeLength("x0 (C)ACC", "Stopping distance (C)ACC", Length.instantiateSI(3.0), NumericConstraint.POSITIVE);
42
43
44 private final DelayedActuation delayedActuation;
45
46
47
48
49
50 public AbstractActuatedControl(final DelayedActuation delayedActuation)
51 {
52 this.delayedActuation = delayedActuation;
53 }
54
55
56
57
58
59
60
61 public Acceleration delayActuation(final Acceleration desiredAcceleration, final LaneBasedGTU gtu)
62 {
63 return this.delayedActuation.delayActuation(desiredAcceleration, gtu);
64 }
65
66
67 @Override
68 public Acceleration getAcceleration(final LaneBasedGTU gtu, final Parameters settings)
69 {
70 try
71 {
72 PerceptionCollectable<HeadwayGTU, LaneBasedGTU> leaders = gtu.getTacticalPlanner().getPerception()
73 .getPerceptionCategory(LongitudinalControllerPerception.class).getLeaders();
74 return delayActuation(getDesiredAcceleration(gtu, leaders, settings), gtu);
75 }
76 catch (OperationalPlanException exception)
77 {
78 throw new RuntimeException("Missing perception category LongitudinalControllerPerception", exception);
79 }
80 catch (ParameterException exception)
81 {
82 throw new RuntimeException("Missing parameter", exception);
83 }
84 }
85
86
87
88
89
90
91
92
93
94 public abstract Acceleration getDesiredAcceleration(LaneBasedGTU gtu,
95 PerceptionCollectable<HeadwayGTU, LaneBasedGTU> leaders, Parameters settings) throws ParameterException;
96
97 }