1 package org.opentrafficsim.road.gtu.lane.tactical.cacc;
2
3 import org.djunits.value.vdouble.scalar.Acceleration;
4 import org.djunits.value.vdouble.scalar.Duration;
5 import org.djutils.exceptions.Throw;
6 import org.opentrafficsim.base.parameters.ParameterException;
7 import org.opentrafficsim.base.parameters.ParameterSet;
8 import org.opentrafficsim.base.parameters.ParameterTypes;
9 import org.opentrafficsim.base.parameters.Parameters;
10 import org.opentrafficsim.core.dsol.OTSSimulatorInterface;
11 import org.opentrafficsim.core.gtu.GTUException;
12 import org.opentrafficsim.core.gtu.GTUType;
13 import org.opentrafficsim.core.gtu.perception.DirectEgoPerception;
14 import org.opentrafficsim.road.gtu.lane.LaneBasedGTU;
15 import org.opentrafficsim.road.gtu.lane.perception.CategoricalLanePerception;
16 import org.opentrafficsim.road.gtu.lane.perception.LanePerception;
17 import org.opentrafficsim.road.gtu.lane.perception.PerceptionFactory;
18 import org.opentrafficsim.road.gtu.lane.perception.categories.DirectInfrastructurePerception;
19 import org.opentrafficsim.road.gtu.lane.tactical.AbstractLaneBasedTacticalPlannerFactory;
20 import org.opentrafficsim.road.gtu.lane.tactical.following.CarFollowingModel;
21 import org.opentrafficsim.road.gtu.lane.tactical.following.CarFollowingModelFactory;
22 import org.opentrafficsim.road.gtu.lane.tactical.util.lmrs.LmrsParameters;
23
24 import nl.tudelft.simulation.jstats.streams.StreamInterface;
25
26
27
28
29
30
31
32
33
34
35
36
37 public class CaccTacticalPlannerFactory extends AbstractLaneBasedTacticalPlannerFactory<CaccTacticalPlanner>
38 {
39
40
41 private CarFollowingModelFactory<? extends CarFollowingModel> carFollowingModelFactory;
42
43
44 private final LongitudinalControllerFactory<? extends CaccController> longitudinalControllerFactory;
45
46
47 private final StreamInterface randomStream;
48
49
50 private final GTUType caccGTUType;
51
52
53
54
55
56
57
58
59 public CaccTacticalPlannerFactory(final CarFollowingModelFactory<? extends CarFollowingModel> carFollowingModelFactory,
60 final LongitudinalControllerFactory<? extends CaccController> longitudinalControllerFactory,
61 final OTSSimulatorInterface simulator, final GTUType caccGTUType)
62 {
63 super(carFollowingModelFactory, new PerceptionFactory()
64 {
65
66 @Override
67 public Parameters getParameters() throws ParameterException
68 {
69 return null;
70 }
71
72
73 @Override
74 public LanePerception generatePerception(final LaneBasedGTU gtu)
75 {
76 CategoricalLanePerceptionn/CategoricalLanePerception.html#CategoricalLanePerception">CategoricalLanePerception perception = new CategoricalLanePerception(gtu);
77 perception.addPerceptionCategory(
78 new CaccPerceptionCategory(perception, simulator.getReplication().getStream("default"), simulator));
79 perception.addPerceptionCategory(new DirectInfrastructurePerception(perception));
80 perception.addPerceptionCategory(new DirectEgoPerception<>(perception));
81 return perception;
82 }
83
84 });
85 this.carFollowingModelFactory = carFollowingModelFactory;
86 this.longitudinalControllerFactory = longitudinalControllerFactory;
87 this.randomStream = simulator.getReplication().getStream("default");
88 Throw.whenNull(caccGTUType, "caccGTUType may not be null");
89 this.caccGTUType = caccGTUType;
90 }
91
92
93 @Override
94 public CaccTacticalPlanner create(final LaneBasedGTU gtu) throws GTUException
95 {
96 CaccController lcf = this.longitudinalControllerFactory.create();
97 lcf.setCACCGTUType(this.caccGTUType);
98 return new CaccTacticalPlanner(this.carFollowingModelFactory.generateCarFollowingModel(), gtu,
99 getPerceptionFactory().generatePerception(gtu), lcf);
100 }
101
102
103 @Override
104 public Parameters getParameters() throws ParameterException
105 {
106 ParameterSet parameters = new ParameterSet();
107 this.carFollowingModelFactory.getParameters().setAllIn(parameters);
108 parameters.setDefaultParameter(LongitudinalController.SENSOR_RANGE);
109 parameters.setDefaultParameter(ParameterTypes.PERCEPTION);
110 parameters.setDefaultParameter(ParameterTypes.LOOKBACK);
111 parameters.setDefaultParameter(ParameterTypes.LOOKAHEAD);
112
113 parameters.setParameter(ParameterTypes.DT, Duration.instantiateSI(0.5));
114 parameters.setDefaultParameter(ParameterTypes.T0);
115 parameters.setParameter(ParameterTypes.BCRIT, Acceleration.instantiateSI(2.5));
116
117
118
119 parameters.setDefaultParameters(CaccController.class);
120
121
122 parameters.setParameter(LmrsParameters.DLEFT, 0.0);
123 parameters.setParameter(LmrsParameters.DRIGHT, 0.0);
124
125 parameters.setParameter(ParameterTypes.TMIN, Duration.instantiateSI(0.56));
126 parameters.setParameter(ParameterTypes.TMAX, Duration.instantiateSI(1.2));
127 parameters.setParameter(ParameterTypes.T, Duration.instantiateSI(1.2));
128 parameters.setDefaultParameter(CaccParameters.T_GAP);
129 parameters.setDefaultParameter(CaccParameters.A_REDUCED);
130
131
132 return parameters;
133 }
134
135 }