CollisionDetector.java

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

  2. import java.util.Iterator;

  3. import org.opentrafficsim.core.gtu.GTUException;
  4. import org.opentrafficsim.core.gtu.plan.operational.OperationalPlanException;
  5. import org.opentrafficsim.core.network.OTSNetwork;
  6. import org.opentrafficsim.road.gtu.lane.perception.PerceptionCollectable;
  7. import org.opentrafficsim.road.gtu.lane.perception.PerceptionCollectable.UnderlyingDistance;
  8. import org.opentrafficsim.road.gtu.lane.perception.RelativeLane;
  9. import org.opentrafficsim.road.gtu.lane.perception.categories.neighbors.NeighborsPerception;
  10. import org.opentrafficsim.road.gtu.lane.perception.headway.HeadwayGTU;

  11. /**
  12.  * Checks for collisions.
  13.  * <p>
  14.  * Copyright (c) 2013-2020 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
  15.  * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
  16.  * <p>
  17.  * @version $Revision$, $LastChangedDate$, by $Author$, initial version Aug 6, 2019 <br>
  18.  * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
  19.  * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
  20.  * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
  21.  */
  22. public class CollisionDetector extends AbstractLaneBasedMoveChecker
  23. {

  24.     /**
  25.      * Constructor.
  26.      * @param network OTSNetwork; network
  27.      */
  28.     public CollisionDetector(final OTSNetwork network)
  29.     {
  30.         super(network);
  31.     }

  32.     /** {@inheritDoc} */
  33.     @Override
  34.     public void checkMove(final LaneBasedGTU gtu) throws Exception
  35.     {
  36.         try
  37.         {
  38.             NeighborsPerception neighbors =
  39.                     gtu.getTacticalPlanner().getPerception().getPerceptionCategory(NeighborsPerception.class);
  40.             PerceptionCollectable<HeadwayGTU, LaneBasedGTU> leaders = neighbors.getLeaders(RelativeLane.CURRENT);
  41.             Iterator<UnderlyingDistance<LaneBasedGTU>> gtus = leaders.underlyingWithDistance();
  42.             if (!gtus.hasNext())
  43.             {
  44.                 return;
  45.             }
  46.             UnderlyingDistance<LaneBasedGTU> leader = gtus.next();
  47.             if (leader.getDistance().lt0())
  48.             {
  49.                 throw new CollisionException("GTU " + gtu.getId() + " collided with GTU " + leader.getObject().getId());
  50.             }
  51.         }
  52.         catch (OperationalPlanException exception)
  53.         {
  54.             throw new GTUException(exception);
  55.         }
  56.     }

  57. }