LinearCacc.java

  1. package org.opentrafficsim.road.gtu.lane.control;

  2. import org.djunits.value.vdouble.scalar.Acceleration;
  3. import org.opentrafficsim.base.parameters.ParameterException;
  4. import org.opentrafficsim.base.parameters.ParameterTypeDouble;
  5. import org.opentrafficsim.base.parameters.Parameters;
  6. import org.opentrafficsim.base.parameters.constraint.NumericConstraint;
  7. import org.opentrafficsim.road.gtu.lane.LaneBasedGtu;
  8. import org.opentrafficsim.road.gtu.lane.perception.PerceptionCollectable;
  9. import org.opentrafficsim.road.gtu.lane.perception.headway.HeadwayGtu;

  10. /**
  11.  * Simple linear CACC implementation.
  12.  * <p>
  13.  * Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
  14.  * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
  15.  * </p>
  16.  * @author <a href="https://github.com/averbraeck">Alexander Verbraeck</a>
  17.  * @author <a href="https://tudelft.nl/staff/p.knoppers-1">Peter Knoppers</a>
  18.  * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
  19.  */
  20. public class LinearCacc extends LinearAcc
  21. {

  22.     /** Acceleration error gain parameter. */
  23.     public static final ParameterTypeDouble KA =
  24.             new ParameterTypeDouble("ka", "Acceleration error gain", 1.0, NumericConstraint.POSITIVE);

  25.     /**
  26.      * Constructor using default sensors with no delay.
  27.      * @param delayedActuation DelayedActuation; delayed actuation
  28.      */
  29.     public LinearCacc(final DelayedActuation delayedActuation)
  30.     {
  31.         super(delayedActuation);
  32.     }

  33.     /** {@inheritDoc} */
  34.     @Override
  35.     public Acceleration getFollowingAcceleration(final LaneBasedGtu gtu,
  36.             final PerceptionCollectable<HeadwayGtu, LaneBasedGtu> leaders, final Parameters settings) throws ParameterException
  37.     {
  38.         HeadwayGtu leader = leaders.first();
  39.         if (leader.getAcceleration() == null)
  40.         {
  41.             // ACC mode
  42.             return super.getFollowingAcceleration(gtu, leaders, settings);
  43.         }
  44.         double es =
  45.                 leader.getDistance().si - gtu.getSpeed().si * settings.getParameter(TDCACC).si - settings.getParameter(X0).si;
  46.         double ev = leader.getSpeed().si - gtu.getSpeed().si;
  47.         double kaui = settings.getParameter(KA) * leader.getAcceleration().si;
  48.         return Acceleration.instantiateSI(settings.getParameter(KS) * es + settings.getParameter(KV) * ev + kaui);
  49.     }

  50. }