AccelerationChecker.java
package org.opentrafficsim.road.gtu.lane;
import org.djunits.value.vdouble.scalar.Acceleration;
import org.djunits.value.vdouble.scalar.Duration;
import org.djunits.value.vdouble.scalar.Speed;
import org.opentrafficsim.core.network.OTSNetwork;
/**
* Checks acceleration bounds.
* <p>
* Copyright (c) 2013-2020 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
* BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
* <p>
* @version $Revision$, $LastChangedDate$, by $Author$, initial version Aug 6, 2019 <br>
* @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
* @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
* @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
*/
public class AccelerationChecker extends AbstractLaneBasedMoveChecker
{
/** Minimum allowable acceleration. */
private final Acceleration min;
/** Maximum allowable acceleration. */
private final Acceleration max;
/** Speed above which acceleration should be checked. */
private final Speed minSpeed;
/**
* Constructor.
* @param network OTSNetwork; network
*/
public AccelerationChecker(final OTSNetwork network)
{
this(network, Acceleration.instantiateSI(-10.0), Acceleration.instantiateSI(5), Speed.instantiateSI(2.5));
}
/**
* Constructor.
* @param network OTSNetwork; network
* @param min Acceleration; minimum allowable acceleration
* @param max Acceleration; maximum allowable acceleration
* @param minSpeed Speed; speed above which acceleration should be checked
*/
public AccelerationChecker(final OTSNetwork network, final Acceleration min, final Acceleration max, final Speed minSpeed)
{
super(network);
this.min = min;
this.max = max;
this.minSpeed = minSpeed;
}
/** {@inheritDoc} */
@Override
public void checkMove(final LaneBasedGTU gtu) throws Exception
{
Acceleration a = gtu.getOperationalPlan().getAcceleration(Duration.ZERO);
if (gtu.getOperationalPlan().getSpeed(Duration.ZERO).si > this.minSpeed.si
&& (a.si < this.min.si || a.si > this.max.si))
{
gtu.getSimulator().getLogger().always().error("GTU: {} acceleration out of bounds ({}, {})", this.min, this.max);
}
}
}