package org.opentrafficsim.road.gtu.lane.control; import org.djunits.value.vdouble.scalar.Acceleration; import org.opentrafficsim.base.parameters.ParameterException; import org.opentrafficsim.base.parameters.ParameterTypeDouble; import org.opentrafficsim.base.parameters.Parameters; import org.opentrafficsim.base.parameters.constraint.NumericConstraint; import org.opentrafficsim.road.gtu.lane.LaneBasedGTU; import org.opentrafficsim.road.gtu.lane.perception.PerceptionCollectable; import org.opentrafficsim.road.gtu.lane.perception.headway.HeadwayGTU; /** *

* Copyright (c) 2013-2022 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
* BSD-style license. See OpenTrafficSim License. *

* @version $Revision$, $LastChangedDate$, by $Author$, initial version Apr 11, 2019
* @author Alexander Verbraeck * @author Peter Knoppers * @author Wouter Schakel */ public class PloegACC extends LinearACC { /** Gap error derivative gain parameter. */ public static final ParameterTypeDouble KD = new ParameterTypeDouble("kd", "Gap error derivative gain", 0.7, NumericConstraint.POSITIVE); /** * Constructor using default sensors with no delay. * @param delayedActuation DelayedActuation; delayed actuation */ public PloegACC(final DelayedActuation delayedActuation) { super(delayedActuation); } /** {@inheritDoc} */ @Override public Acceleration getFollowingAcceleration(final LaneBasedGTU gtu, final PerceptionCollectable leaders, final Parameters settings) throws ParameterException { HeadwayGTU leader = leaders.first(); double es = leader.getDistance().si - gtu.getSpeed().si * settings.getParameter(TDACC).si - settings.getParameter(X0).si; double esd = leader.getSpeed().si - gtu.getSpeed().si - gtu.getAcceleration().si * settings.getParameter(TDACC).si; return Acceleration.instantiateSI(settings.getParameter(KS) * es + settings.getParameter(KD) * esd); } }