from __future__ import print_function
from __future__ import absolute_import
import os
import sys
if "SUMO_HOME" in os.environ:
sys.path.append(os.path.join(os.environ['SUMO_HOME'], 'tools'))
import traci
import sumolib
import simpla
from simpla import SimplaException
traci.start([sumolib.checkBinary('sumo'), '-c', 'sumo.sumocfg'])
simpla._utils.DEBUG_GAP_CONTROL = True
def step():
s = traci.simulation.getTime()
traci.simulationStep()
return s
def check(vehID):
print("examining", vehID)
print("speed", traci.vehicle.getSpeed(vehID))
print("speed w/o traci", traci.vehicle.getSpeedWithoutTraCI(vehID))
print("acceleration", traci.vehicle.getAcceleration(vehID))
print("lane", traci.vehicle.getLaneID(vehID))
print("lanePos", traci.vehicle.getLanePosition(vehID))
followerID = "follower"
leaderID = "leader"
def runSteps(nSteps):
for i in range(nSteps):
print("\n# step", step())
print("# Follower:")
check(followerID)
print("# Leader:")
check(leaderID)
leaderInfo = traci.vehicle.getLeader(followerID, 1000)
if leaderInfo is not None:
print("\n# gap = %s" % leaderInfo[1])
speedDiff = traci.vehicle.getSpeed(leaderID) - traci.vehicle.getSpeed(followerID)
print("# speedDiff = %s\n" % speedDiff)
else:
print("\n# No follow-lead relation!\n")
runSteps(100)
gap = 50
speedDiff = 1.0
maxDecel = 0.1
duration = 100
print("\n# Calling simpla.openGap(%s, %s, %s, %s)\n" % (gap, speedDiff, maxDecel, duration))
simpla.openGap(followerID, gap, speedDiff, maxDecel, duration)
print("\n")
runSteps(200)
speedDiff = 10
maxDecel = 10.
duration = 50
print("\n# Calling simpla.openGap(%s, %s, %s, %s)\n" % (gap, speedDiff, maxDecel, duration))
simpla.openGap(followerID, gap, speedDiff, maxDecel, duration)
print("\n")
runSteps(100)
gap = 75
speedDiff = 4.0
maxDecel = 2.
print("\n# Calling simpla.openGap(%s, %s, %s, %s)\n" % (gap, speedDiff, maxDecel, duration))
simpla.openGap(followerID, gap, speedDiff, maxDecel, duration)
print("\n")
gap = -75
print("\n# Calling simpla.openGap(%s, %s, %s, %s)\n" % (gap, speedDiff, maxDecel, duration))
try:
simpla.openGap(followerID, gap, speedDiff, maxDecel, duration)
except SimplaException as e:
print(e)
print("\n")
gap = 75
speedDiff = -4
print("\n# Calling simpla.openGap(%s, %s, %s, %s)\n" % (gap, speedDiff, maxDecel, duration))
try:
simpla.openGap(followerID, gap, speedDiff, maxDecel, duration)
except SimplaException as e:
print(e)
print("\n")
speedDiff = 4
maxDecel = -2
print("\n# Calling simpla.openGap(%s, %s, %s, %s)\n" % (gap, speedDiff, maxDecel, duration))
try:
simpla.openGap(followerID, gap, speedDiff, maxDecel, duration)
except SimplaException as e:
print(e)
print("\n")
maxDecel = 2
duration = -100
print("\n# Calling simpla.openGap(%s, %s, %s, %s)\n" % (gap, speedDiff, maxDecel, duration))
try:
simpla.openGap(followerID, gap, speedDiff, maxDecel, duration)
except SimplaException as e:
print(e)
print("\n")
duration = 51
gap = 10000
print("\n# Calling simpla.openGap() various times\n")
simpla.openGap(followerID, gap, speedDiff, maxDecel, duration)
simpla.openGap(followerID, gap * 3, speedDiff, maxDecel / 2., duration)
simpla.openGap(followerID, gap, speedDiff, maxDecel, duration / 2.)
print("\n")
runSteps(100)
traci.close()