Interface Synchronization

All Superinterfaces:
LmrsParameters

public interface Synchronization extends LmrsParameters
Different forms of synchronization.

Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
BSD-style license. See OpenTrafficSim License.

Author:
Alexander Verbraeck, Peter Knoppers, Wouter Schakel
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final Synchronization
    Synchronization where a suitable leader is actively targeted, in relation to infrastructure.
    static final Synchronization
    Synchronization by following the adjacent leader or aligning with the middle of the gap, whichever allows the largest acceleration.
    static final Synchronization
    Synchronization that only includes stopping for a dead-end.
    static final Synchronization
    Synchronization where current leaders are taken.
    static final Synchronization
    Synchronization where current leaders are taken.

    Fields inherited from interface org.opentrafficsim.road.gtu.lane.tactical.util.lmrs.LmrsParameters

    DCOOP, DFREE, DLC, DLEFT, DRIGHT, DSYNC, SOCIO, VGAIN
  • Method Summary

    Modifier and Type
    Method
    Description
    static boolean
    canBeAhead(HeadwayGtu adjacentVehicle, org.djunits.value.vdouble.scalar.Length xCur, int nCur, org.djunits.value.vdouble.scalar.Speed ownSpeed, org.djunits.value.vdouble.scalar.Length ownLength, org.djunits.value.vdouble.scalar.Speed tagSpeed, double dCoop, org.djunits.value.vdouble.scalar.Acceleration b, org.djunits.value.vdouble.scalar.Duration tMin, org.djunits.value.vdouble.scalar.Duration tMax, org.djunits.value.vdouble.scalar.Length x0, org.djunits.value.vdouble.scalar.Duration t0, org.djunits.value.vdouble.scalar.Duration lc, double desire)
    Returns whether a driver estimates it can be ahead of an adjacent vehicle for merging.
    static org.djunits.value.vdouble.scalar.Acceleration
    gentleUrgency(org.djunits.value.vdouble.scalar.Acceleration a, double desire, org.opentrafficsim.base.parameters.Parameters params)
    Return limited deceleration.
    static HeadwayGtu
    getFollower(HeadwayGtu gtu, PerceptionCollectable<HeadwayGtu,LaneBasedGtu> leaders, HeadwayGtu follower, org.djunits.value.vdouble.scalar.Length ownLength)
    Returns the upstream gtu of the given gtu.
    static org.djunits.value.vdouble.scalar.Length
    Returns the distance to the next merge, stopping within this distance is futile for a lane change.
    static HeadwayGtu
    Returns the leader of one gtu from a set.
    static org.djunits.value.vdouble.scalar.Length
    headwayWithLcSpace(Headway headway, org.opentrafficsim.base.parameters.Parameters parameters, LaneChange laneChange)
    Returns a headway (length) to allow space to perform a lane change at low speeds.
    static org.djunits.value.vdouble.scalar.Length
    requiredBufferSpace(org.djunits.value.vdouble.scalar.Speed speed, int nCur, org.djunits.value.vdouble.scalar.Length x0, org.djunits.value.vdouble.scalar.Duration t0, org.djunits.value.vdouble.scalar.Duration lc, double dCoop)
    Returns the required buffer space to perform a lane change and further lane changes.
    static org.djunits.value.vdouble.scalar.Acceleration
    stopForEnd(org.djunits.value.vdouble.scalar.Length xCur, org.djunits.value.vdouble.scalar.Length xMerge, org.opentrafficsim.base.parameters.Parameters params, org.djunits.value.vdouble.scalar.Speed ownSpeed, CarFollowingModel cfm, SpeedLimitInfo sli)
    Calculates acceleration to stop for a split or dead-end, accounting for infrastructure.
    org.djunits.value.vdouble.scalar.Acceleration
    synchronize(LanePerception perception, org.opentrafficsim.base.parameters.Parameters params, SpeedLimitInfo sli, CarFollowingModel cfm, double desire, LateralDirectionality lat, LmrsData lmrsData, LaneChange laneChange, LateralDirectionality initiatedLaneChange)
    Determine acceleration for synchronization.
    static org.djunits.value.vdouble.scalar.Acceleration
    tagAlongAcceleration(HeadwayGtu leader, org.djunits.value.vdouble.scalar.Speed followerSpeed, org.djunits.value.vdouble.scalar.Length followerLength, org.djunits.value.vdouble.scalar.Speed tagSpeed, double desire, org.opentrafficsim.base.parameters.Parameters params, SpeedLimitInfo sli, CarFollowingModel cfm)
    Calculates acceleration by following an adjacent vehicle, with tagging along if desire is not very high and speed is low.
  • Field Details

    • DEADEND

      static final Synchronization DEADEND
      Synchronization that only includes stopping for a dead-end.
    • PASSIVE

      static final Synchronization PASSIVE
      Synchronization where current leaders are taken.
    • ALIGN_GAP

      static final Synchronization ALIGN_GAP
      Synchronization by following the adjacent leader or aligning with the middle of the gap, whichever allows the largest acceleration. Note that aligning with the middle of the gap then means the gap is too small, as following would cause lower acceleration. Aligning with the middle of the gap will however provide a better starting point for the rest of the process. Mainly, the adjacent follower can decelerate less, allowing more smooth merging.
    • PASSIVE_MOVING

      static final Synchronization PASSIVE_MOVING
      Synchronization where current leaders are taken. Synchronization is disabled for d_sync<d<d_coop at low speeds.
    • ACTIVE

      static final Synchronization ACTIVE
      Synchronization where a suitable leader is actively targeted, in relation to infrastructure.
  • Method Details

    • getMergeDistance

      static org.djunits.value.vdouble.scalar.Length getMergeDistance(LanePerception perception, LateralDirectionality lat) throws OperationalPlanException
      Returns the distance to the next merge, stopping within this distance is futile for a lane change.
      Parameters:
      perception - LanePerception; perception
      lat - LateralDirectionality; lateral direction
      Returns:
      Length; distance to the next merge
      Throws:
      OperationalPlanException - if there is no infrastructure perception
    • synchronize

      org.djunits.value.vdouble.scalar.Acceleration synchronize(LanePerception perception, org.opentrafficsim.base.parameters.Parameters params, SpeedLimitInfo sli, CarFollowingModel cfm, double desire, LateralDirectionality lat, LmrsData lmrsData, LaneChange laneChange, LateralDirectionality initiatedLaneChange) throws org.opentrafficsim.base.parameters.ParameterException, OperationalPlanException
      Determine acceleration for synchronization.
      Parameters:
      perception - LanePerception; perception
      params - Parameters; parameters
      sli - SpeedLimitInfo; speed limit info
      cfm - CarFollowingModel; car-following model
      desire - double; level of lane change desire
      lat - LateralDirectionality; lateral direction for synchronization
      lmrsData - LmrsData; LMRS data
      laneChange - LaneChange; lane change
      initiatedLaneChange - LateralDirectionality; lateral direction of initiated lane change
      Returns:
      acceleration for synchronization
      Throws:
      org.opentrafficsim.base.parameters.ParameterException - if a parameter is not defined
      OperationalPlanException - perception exception
    • headwayWithLcSpace

      static org.djunits.value.vdouble.scalar.Length headwayWithLcSpace(Headway headway, org.opentrafficsim.base.parameters.Parameters parameters, LaneChange laneChange) throws org.opentrafficsim.base.parameters.ParameterException
      Returns a headway (length) to allow space to perform a lane change at low speeds.
      Parameters:
      headway - Headway; headway
      parameters - Parameters; parameters
      laneChange - LaneChange; lane change
      Returns:
      Length; distance to allow space to perform a lane change at low speeds
      Throws:
      org.opentrafficsim.base.parameters.ParameterException - if parameter VCONG is not available
    • gentleUrgency

      static org.djunits.value.vdouble.scalar.Acceleration gentleUrgency(org.djunits.value.vdouble.scalar.Acceleration a, double desire, org.opentrafficsim.base.parameters.Parameters params) throws org.opentrafficsim.base.parameters.ParameterException
      Return limited deceleration. Deceleration is limited to b for d < dCoop. Beyond dCoop the limit is a linear interpolation between b and bCrit.
      Parameters:
      a - Acceleration; acceleration to limit
      desire - double; lane change desire
      params - Parameters; parameters
      Returns:
      limited deceleration
      Throws:
      org.opentrafficsim.base.parameters.ParameterException - when parameter is no available or value out of range
    • getFollower

      static HeadwayGtu getFollower(HeadwayGtu gtu, PerceptionCollectable<HeadwayGtu,LaneBasedGtu> leaders, HeadwayGtu follower, org.djunits.value.vdouble.scalar.Length ownLength)
      Returns the upstream gtu of the given gtu.
      Parameters:
      gtu - HeadwayGtu; gtu
      leaders - PerceptionCollectable<HeadwayGtu,LaneBasedGtu>; leaders of own vehicle
      follower - HeadwayGtu; following vehicle of own vehicle
      ownLength - Length; own vehicle length
      Returns:
      upstream gtu of the given gtu
    • tagAlongAcceleration

      static org.djunits.value.vdouble.scalar.Acceleration tagAlongAcceleration(HeadwayGtu leader, org.djunits.value.vdouble.scalar.Speed followerSpeed, org.djunits.value.vdouble.scalar.Length followerLength, org.djunits.value.vdouble.scalar.Speed tagSpeed, double desire, org.opentrafficsim.base.parameters.Parameters params, SpeedLimitInfo sli, CarFollowingModel cfm) throws org.opentrafficsim.base.parameters.ParameterException
      Calculates acceleration by following an adjacent vehicle, with tagging along if desire is not very high and speed is low.
      Parameters:
      leader - HeadwayGtu; leader
      followerSpeed - Speed; follower speed
      followerLength - Length; follower length
      tagSpeed - Speed; maximum tag along speed
      desire - double; lane change desire
      params - Parameters; parameters
      sli - SpeedLimitInfo; speed limit info
      cfm - CarFollowingModel; car-following model
      Returns:
      acceleration by following an adjacent vehicle including tagging along
      Throws:
      org.opentrafficsim.base.parameters.ParameterException - if a parameter is not present
    • canBeAhead

      static boolean canBeAhead(HeadwayGtu adjacentVehicle, org.djunits.value.vdouble.scalar.Length xCur, int nCur, org.djunits.value.vdouble.scalar.Speed ownSpeed, org.djunits.value.vdouble.scalar.Length ownLength, org.djunits.value.vdouble.scalar.Speed tagSpeed, double dCoop, org.djunits.value.vdouble.scalar.Acceleration b, org.djunits.value.vdouble.scalar.Duration tMin, org.djunits.value.vdouble.scalar.Duration tMax, org.djunits.value.vdouble.scalar.Length x0, org.djunits.value.vdouble.scalar.Duration t0, org.djunits.value.vdouble.scalar.Duration lc, double desire) throws org.opentrafficsim.base.parameters.ParameterException
      Returns whether a driver estimates it can be ahead of an adjacent vehicle for merging.
      Parameters:
      adjacentVehicle - HeadwayGtu; adjacent vehicle
      xCur - Length; remaining distance
      nCur - int; number of lane changes to perform
      ownSpeed - Speed; own speed
      ownLength - Length; own length
      tagSpeed - Speed; maximum tag along speed
      dCoop - double; cooperation threshold
      b - Acceleration; critical deceleration
      tMin - Duration; minimum headway
      tMax - Duration; normal headway
      x0 - Length; anticipation distance
      t0 - Duration; anticipation time
      lc - Duration; lane change duration
      desire - double; lane change desire
      Returns:
      whether a driver estimates it can be ahead of an adjacent vehicle for merging
      Throws:
      org.opentrafficsim.base.parameters.ParameterException - if parameter is not defined
    • requiredBufferSpace

      static org.djunits.value.vdouble.scalar.Length requiredBufferSpace(org.djunits.value.vdouble.scalar.Speed speed, int nCur, org.djunits.value.vdouble.scalar.Length x0, org.djunits.value.vdouble.scalar.Duration t0, org.djunits.value.vdouble.scalar.Duration lc, double dCoop)
      Returns the required buffer space to perform a lane change and further lane changes.
      Parameters:
      speed - Speed; representative speed
      nCur - int; number of required lane changes
      x0 - Length; anticipation distance
      t0 - Duration; anticipation time
      lc - Duration; lane change duration
      dCoop - double; cooperation threshold
      Returns:
      required buffer space to perform a lane change and further lane changes
    • stopForEnd

      static org.djunits.value.vdouble.scalar.Acceleration stopForEnd(org.djunits.value.vdouble.scalar.Length xCur, org.djunits.value.vdouble.scalar.Length xMerge, org.opentrafficsim.base.parameters.Parameters params, org.djunits.value.vdouble.scalar.Speed ownSpeed, CarFollowingModel cfm, SpeedLimitInfo sli) throws org.opentrafficsim.base.parameters.ParameterException
      Calculates acceleration to stop for a split or dead-end, accounting for infrastructure.
      Parameters:
      xCur - Length; remaining distance to end
      xMerge - Length; distance until merge point
      params - Parameters; parameters
      ownSpeed - Speed; own speed
      cfm - CarFollowingModel; car-following model
      sli - SpeedLimitInfo; speed limit info
      Returns:
      acceleration to stop for a split or dead-end, accounting for infrastructure
      Throws:
      org.opentrafficsim.base.parameters.ParameterException - if parameter is not defined
    • getTargetLeader

      static HeadwayGtu getTargetLeader(HeadwayGtu gtu, SortedSet<HeadwayGtu> leaders)
      Returns the leader of one gtu from a set.
      Parameters:
      gtu - HeadwayGtu; gtu
      leaders - SortedSet<HeadwayGtu>; leaders
      Returns:
      leader of one gtu from a set