Class HeadwayGTUReal
- java.lang.Object
-
- org.opentrafficsim.road.gtu.lane.perception.headway.AbstractHeadway
-
- org.opentrafficsim.road.gtu.lane.perception.headway.HeadwayGTUReal
-
- All Implemented Interfaces:
Serializable
,Comparable<Headway>
,Identifiable
,PerceivedObject
,Headway
,HeadwayGTU
public class HeadwayGTUReal extends AbstractHeadway implements HeadwayGTU
Container for a reference to information about a (lane based) GTU and a headway. The Headway can store information about GTUs or objects ahead of the reference GTU, behind the reference GTU, or (partially) parallel to the reference GTU. In addition to the (perceived) headway, several other pieces of information can be stored, such as (perceived) speed, (perceived) acceleration, (perceived) turn indicators, and (perceived) braking lights.
This particular version returns behavioral information about the observed GTU objects based on their real state.
Special care must be taken in curves when perceiving headway of a GTU or object on an adjacent lane.The question is whether we perceive the parallel or ahead/behind based on a line perpendicular to the front/back of the GTU (rectangular), or perpendicular to the center line of the lane (wedge-shaped in case of a curve). The difficulty of a wedge-shaped situation is that reciprocity might be violated: in case of a clothoid, for instance, it is not sure that the point on the center line when projected from lane 1 to lane 2 is the same as the projection from lane 2 to lane 1. The same holds for shapes with sharp bends. Therefore, algorithms implementing headway should only project the reference point of the reference GTU on the center line of the adjacent lane, and then calculate the forward position and backward position on the adjacent lane based on the reference point. Still, our human perception of what is parallel and what not, is not reflected by fractional positions. See examples in http://simulation.tudelft.nl:8085/browse/OTS-113.Copyright (c) 2013-2020 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
$LastChangedDate: 2015-07-24 02:58:59 +0200 (Fri, 24 Jul 2015) $, @version $Revision: 1147 $, by $Author: averbraeck $, initial version May 27, 2016
BSD-style license. See OpenTrafficSim License.- Author:
- Alexander Verbraeck, Peter Knoppers, Wouter Schakel
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.opentrafficsim.road.gtu.lane.perception.headway.Headway
Headway.ObjectType
-
-
Constructor Summary
Constructors Constructor Description HeadwayGTUReal(LaneBasedGTU gtu, Length distance, boolean facingSameDirection)
Construct a new Headway information object, for a GTU ahead of us or behind us.HeadwayGTUReal(LaneBasedGTU gtu, Length overlapFront, Length overlap, Length overlapRear, boolean facingSameDirection)
Construct a new Headway information object, for a GTU parallel with us.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Acceleration
getAcceleration()
CarFollowingModel
getCarFollowingModel()
Many models that observe a GTU need to predict the imminent behavior of that GTU.Speed
getDesiredSpeed()
Returns the perceived desired speed of the neighbor.GTUType
getGtuType()
String
getId()
Length
getLength()
Headway.ObjectType
getObjectType()
Parameters
getParameters()
Many models that observe a GTU need to predict the imminent behavior of that GTU.Route
getRoute()
Models responding to other GTU may assume a route of the vehicle, for instance at intersections.Speed
getSpeed()
SpeedLimitInfo
getSpeedLimitInfo()
Many models that observe a GTU need to predict the imminent behavior of that GTU.Length
getWidth()
Returns the width of the GTU.boolean
isBrakingLightsOn()
boolean
isEmergencyLightsOn()
boolean
isFacingSameDirection()
boolean
isHonking()
boolean
isLeftTurnIndicatorOn()
boolean
isRightTurnIndicatorOn()
HeadwayGTU
moved(Length headway, Speed speed, Acceleration acceleration)
Creates a copy with different headway, speed and possibly acceleration.String
toString()
-
Methods inherited from class org.opentrafficsim.road.gtu.lane.perception.headway.AbstractHeadway
equals, getDistance, getOverlap, getOverlapFront, getOverlapRear, hashCode, isAhead, isBehind, isParallel
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.opentrafficsim.road.gtu.lane.perception.headway.Headway
compareTo, getDistance, getOverlap, getOverlapFront, getOverlapRear, isAhead, isBehind, isParallel
-
-
-
-
Constructor Detail
-
HeadwayGTUReal
public HeadwayGTUReal(LaneBasedGTU gtu, Length distance, boolean facingSameDirection) throws GTUException
Construct a new Headway information object, for a GTU ahead of us or behind us.- Parameters:
gtu
- LaneBasedGTU; the observed GTU, can not be null.distance
- the distance to the other object; if this constructor is used, distance cannot be null.facingSameDirection
- boolean; whether the GTU is facing the same direction.- Throws:
GTUException
- when id is null, objectType is null, or parameters are inconsistent
-
HeadwayGTUReal
public HeadwayGTUReal(LaneBasedGTU gtu, Length overlapFront, Length overlap, Length overlapRear, boolean facingSameDirection) throws GTUException
Construct a new Headway information object, for a GTU parallel with us.- Parameters:
gtu
- LaneBasedGTU; the observed GTU, can not be null.overlapFront
- the front-front distance to the other GTU; if this constructor is used, this value cannot be null.overlap
- the 'center' overlap with the other GTU; if this constructor is used, this value cannot be null.overlapRear
- the rear-rear distance to the other GTU; if this constructor is used, this value cannot be null.facingSameDirection
- boolean; whether the GTU is facing the same direction.- Throws:
GTUException
- when id is null, or parameters are inconsistent
-
-
Method Detail
-
getCarFollowingModel
public final CarFollowingModel getCarFollowingModel()
Many models that observe a GTU need to predict the imminent behavior of that GTU. Having a car following model of the observed GTU can help with that. The car following model that is returned can be on a continuum between the actual car following model of the observed GTU and the own car following model of the observing GTU, not making any assumptions about the observed GTU. When successive observations of the GTU take place, parameters about its behavior can be estimated more accurately. Another interesting easy-to-implement solution is to return a car following model per GTU type, where the following model of a truck can differ from that of a car.- Specified by:
getCarFollowingModel
in interfaceHeadwayGTU
- Returns:
- a car following model that represents the expected behavior of the observed GTU
-
getParameters
public final Parameters getParameters()
Many models that observe a GTU need to predict the imminent behavior of that GTU. Having an estimate of the behavioral characteristics of the observed GTU can help with that. The parameters that are returned can be on a continuum between the actual parameters of the observed GTU and the own parameters of the observing GTU, not making any assumptions about the observed GTU. When successive observations of the GTU take place, parameters about its behavior can be estimated more accurately. Another interesting easy-to-implement solution is to return a set of parameters per GTU type, where the parameters of a truck can differ from that of a car.- Specified by:
getParameters
in interfaceHeadwayGTU
- Returns:
- the parameters that represent the expected behavior of the observed GTU
-
getSpeedLimitInfo
public final SpeedLimitInfo getSpeedLimitInfo()
Many models that observe a GTU need to predict the imminent behavior of that GTU. Having a model of the speed info profile for the observed GTU can help with predicting its future behavior. The speed limit info that is returned can be on a continuum between the actual speed limit model of the observed GTU and the own speed limit model of the observing GTU, not making any assumptions about the observed GTU. When successive observations of the GTU take place, parameters about its behavior, such as the maximum speed it accepts, can be estimated more accurately. Another interesting easy-to-implement solution is to return a speed limit info object per GTU type, where the returned information of a truck -- with a maximum allowed speed on 80 km/h -- can differ from that of a car -- which can have a maximum allowed speed of 100 km/h on the same road.- Specified by:
getSpeedLimitInfo
in interfaceHeadwayGTU
- Returns:
- a speed limit model that helps in determining the expected behavior of the observed GTU
-
getRoute
public final Route getRoute()
Models responding to other GTU may assume a route of the vehicle, for instance at intersections. The route may be short, i.e. only over the next intersection. Implementations may return anything from the actual route, a route based on indicators and other assumptions, ornull
if simply not known/estimated.- Specified by:
getRoute
in interfaceHeadwayGTU
- Returns:
- route of gtu
-
moved
public final HeadwayGTU moved(Length headway, Speed speed, Acceleration acceleration)
Creates a copy with different headway, speed and possibly acceleration. It may not be alongside. This method is used to anticipate movement of a neighboring GTU.
Note: when moving aHeadwayGTURealDirect
, only headway, speed and acceleration may be considered to be delayed and anticipated. Other information is taken from the actual GTU at the timemoved()
is called.- Specified by:
moved
in interfaceHeadwayGTU
- Parameters:
headway
- Length; headwayspeed
- Speed; speedacceleration
- Acceleration; acceleration- Returns:
- copy with different headway, speed and possibly acceleration
-
getId
public final String getId()
- Specified by:
getId
in interfaceHeadway
- Specified by:
getId
in interfaceIdentifiable
- Returns:
- String; the id of the other object for comparison purposes, cannot be null.
-
getLength
public final Length getLength()
-
getWidth
public Length getWidth()
Returns the width of the GTU.- Specified by:
getWidth
in interfaceHeadwayGTU
- Returns:
- Length; width of the GTU
-
getSpeed
public final Speed getSpeed()
-
getDesiredSpeed
public Speed getDesiredSpeed()
Returns the perceived desired speed of the neighbor.- Specified by:
getDesiredSpeed
in interfaceHeadwayGTU
- Returns:
- Speed; perceived desired speed of the neighbor
-
getObjectType
public final Headway.ObjectType getObjectType()
- Specified by:
getObjectType
in interfaceHeadway
- Returns:
- Length; the (perceived) object Type, can be null if no object type unknown.
-
getAcceleration
public final Acceleration getAcceleration()
- Specified by:
getAcceleration
in interfaceHeadway
- Returns:
- Acceleration; acceleration the (perceived) acceleration of the other object; can be null if unknown.
-
getGtuType
public final GTUType getGtuType()
- Specified by:
getGtuType
in interfaceHeadwayGTU
- Returns:
- gtuType
-
isFacingSameDirection
public final boolean isFacingSameDirection()
- Specified by:
isFacingSameDirection
in interfaceHeadwayGTU
- Returns:
- facingSameDirection
-
isBrakingLightsOn
public final boolean isBrakingLightsOn()
- Specified by:
isBrakingLightsOn
in interfaceHeadwayGTU
- Returns:
- were the braking lights on?
-
isLeftTurnIndicatorOn
public final boolean isLeftTurnIndicatorOn()
- Specified by:
isLeftTurnIndicatorOn
in interfaceHeadwayGTU
- Returns:
- was the left turn indicator on?
-
isRightTurnIndicatorOn
public final boolean isRightTurnIndicatorOn()
- Specified by:
isRightTurnIndicatorOn
in interfaceHeadwayGTU
- Returns:
- was the right turn indicator on?
-
isEmergencyLightsOn
public final boolean isEmergencyLightsOn()
- Specified by:
isEmergencyLightsOn
in interfaceHeadwayGTU
- Returns:
- were the emergency lights on?
-
isHonking
public final boolean isHonking()
- Specified by:
isHonking
in interfaceHeadwayGTU
- Returns:
- was the vehicle honking or ringing its bell when being observed for the headway?
-
toString
public final String toString()
- Overrides:
toString
in classAbstractHeadway
-
-