1 package org.opentrafficsim.road.gtu.lane.perception.headway; 2 3 import org.djunits.value.vdouble.scalar.Acceleration; 4 import org.djunits.value.vdouble.scalar.Length; 5 import org.djunits.value.vdouble.scalar.Speed; 6 import org.opentrafficsim.core.gtu.GTUType; 7 import org.opentrafficsim.core.gtu.behavioralcharacteristics.BehavioralCharacteristics; 8 import org.opentrafficsim.core.network.route.Route; 9 import org.opentrafficsim.road.gtu.lane.tactical.following.CarFollowingModel; 10 import org.opentrafficsim.road.network.speed.SpeedLimitInfo; 11 12 /** 13 * Interface for perceived surrounding GTU's. 14 * <p> 15 * Copyright (c) 2013-2017 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br> 16 * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>. 17 * <p> 18 * @version $Revision$, $LastChangedDate$, by $Author$, initial version 24 mrt. 2017 <br> 19 * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a> 20 * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a> 21 * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a> 22 */ 23 public interface HeadwayGTU extends Headway 24 { 25 26 /** 27 * @return gtuType 28 */ 29 GTUType getGtuType(); 30 31 /** 32 * @return facingSameDirection 33 */ 34 boolean isFacingSameDirection(); 35 36 /** 37 * @return were the braking lights on? 38 */ 39 boolean isBrakingLightsOn(); 40 41 /** 42 * @return was the left turn indicator on? 43 */ 44 boolean isLeftTurnIndicatorOn(); 45 46 /** 47 * @return was the right turn indicator on? 48 */ 49 boolean isRightTurnIndicatorOn(); 50 51 /** 52 * @return were the emergency lights on? 53 */ 54 boolean isEmergencyLightsOn(); 55 56 /** 57 * @return was the vehicle honking or ringing its bell when being observed for the headway? 58 */ 59 boolean isHonking(); 60 61 /** 62 * Creates a copy with different headway, speed and possibly acceleration. It may not be alongside. This method is used to 63 * anticipate movement of a neighboring GTU. 64 * @param headway headway 65 * @param speed speed 66 * @param acceleration acceleration 67 * @return copy with different headway, speed and possibly acceleration 68 */ 69 HeadwayGTU moved(Length headway, Speed speed, Acceleration acceleration); 70 71 /** 72 * Many models that observe a GTU need to predict the imminent behavior of that GTU. Having a car following model of the 73 * observed GTU can help with that. The car following model that is returned can be on a continuum between the actual car 74 * following model of the observed GTU and the own car following model of the observing GTU, not making any assumptions 75 * about the observed GTU. When successive observations of the GTU take place, parameters about its behavior can be 76 * estimated more accurately. Another interesting easy-to-implement solution is to return a car following model per GTU 77 * type, where the following model of a truck can differ from that of a car. 78 * @return a car following model that represents the expected behavior of the observed GTU 79 */ 80 CarFollowingModel getCarFollowingModel(); 81 82 /** 83 * Many models that observe a GTU need to predict the imminent behavior of that GTU. Having an estimate of the behavioral 84 * characteristics of the observed GTU can help with that. The behavioral characteristics that are returned can be on a 85 * continuum between the actual behavioral characteristics of the observed GTU and the own behavioral characteristics of the 86 * observing GTU, not making any assumptions about the observed GTU. When successive observations of the GTU take place, 87 * parameters about its behavior can be estimated more accurately. Another interesting easy-to-implement solution is to 88 * return a set of behavioral characteristics per GTU type, where the behavioral characteristics of a truck can differ from 89 * that of a car. 90 * @return the behavioral characteristics that represent the expected behavior of the observed GTU 91 */ 92 BehavioralCharacteristics getBehavioralCharacteristics(); 93 94 /** 95 * Many models that observe a GTU need to predict the imminent behavior of that GTU. Having a model of the speed info 96 * profile for the observed GTU can help with predicting its future behavior. The speed limit info that is returned can be 97 * on a continuum between the actual speed limit model of the observed GTU and the own speed limit model of the observing 98 * GTU, not making any assumptions about the observed GTU. When successive observations of the GTU take place, parameters 99 * about its behavior, such as the maximum speed it accepts, can be estimated more accurately. Another interesting 100 * easy-to-implement solution is to return a speed limit info object per GTU type, where the returned information of a truck 101 * -- with a maximum allowed speed on 80 km/h -- can differ from that of a car -- which can have a maximum allowed speed of 102 * 100 km/h on the same road. 103 * @return a speed limit model that helps in determining the expected behavior of the observed GTU 104 */ 105 SpeedLimitInfo getSpeedLimitInfo(); 106 107 /** 108 * Models responding to other GTU may assume a route of the vehicle, for instance at intersections. The route may be short, 109 * i.e. only over the next intersection. Implementations may return anything from the actual route, a route based on 110 * indicators and other assumptions, or {@code null} if simply not known/estimated. 111 * @return route of gtu 112 */ 113 Route getRoute(); 114 115 }