I have been trying to place approximately 200 people at varying locations at the start of the simulation and then I just want them to wait there until another vehicle arrives to picck them up.
Once that vehicle gets close and stops then the initialization person/vehicle can disappear and essentially take 1 of the capacity of the arriving vehicle like a bus picking someone up. I have read all the Long, Lats into a data frame, and converted it to
X,Y cartesian with no issues. I then move using moveToXY( ....., with keepRoute=2) as this is the only method that seems to not get the 100-meter road nearby error.
I initially created a simple route as launching pad where I then moved to the other more important initialization point read into the data frame, but what happens is although vehicle WIP count on gui is correct they are not available to the simulation, as they
seem to be teleporting.
I then decided to load 194 random trips just to get them going into the model moving, and then move them to the initialization point. I am using vehicles to do this as it was the only object that had movetoXY function, but I do see persons or pedestrians'
object. I was wondering if someone could give some guidance of how best to move appropriate objects to allocation waiting for later bus to come pick them up. I am still working through trial and error and will look back here to see if any code example exits
to do this rudimentary item at initialization.
tsp_file = "..\qa194.tsp"
problem = somTsp.read_tsp_oat(tsp_file)
ids = problem['id'].values
problem['Lng'] = problem['x'].apply( lambda x: (x*.001) )
problem['Lat'] = problem['y'].apply( lambda x: (x*.001) )
problem['x'] = problem['x'].apply( lambda x: (x*.001)*11000 )
problem['y'] = problem['y'].apply( lambda x: (x*.001)*11000 )
problemXYvals = problem[['x', 'y']].values
problemLatLngvals = problem[['Lat', 'Lng']].values
stid = traci.route.add("startRoute", startRoute )
for inx, pt in enumerate(problemXYvals):
x = pt[0]
y = pt[1]
iLng = problemLatLngvals[inx][0]
iLat = problemLatLngvals[inx][1]
XYconv = traci.simulation.convertGeo( iLng, iLat, fromGeo=True )
Xcnv = round(XYconv[0], 10)
Ycnv = round(XYconv[1], 10)
veh_ids = ids[inx]
#traci.vehicle.add(veh_ids, "startRoute" )
#speed = traci.vehicle.getSpeed(veh_ids)
vehicleState, chgDfni = GetVehcileState(saveVehicleState, veh_ids)
saveVehicleState.update( { veh_ids: vehicleState } )
vehicleState[23] = Xcnv
vehicleState[24] = Ycnv
print ( "veh_id:", veh_ids, " Store Vehilce starting location Xcnv:", Xcnv," Ycnv:", Ycnv )
# if inx == 2:
# break
StartSimulationEndSeconds = 3600*10
cstsecs = 0
step = 0
targMPH = 35 # 22.352 m/s = 50 MPH
targMPS = targMPH * 0.44704
# parse the net - temporary comment out
#net = sumolib.net.readNet('./Qatar.net.xml')
# trafficLightRoutes, nonTrafficLightRoutes = InitSumoTrafficLightArrays()
while traci.simulation.getMinExpectedNumber() > 0 or cstsecs < StartSimulationEndSeconds:
amtCount = traci.vehicle.getIDCount()
print(" amt_count:", amtCount )
if amtCount == 194:
print(" WIP TARGET MADE:", amt_count)
for veh_ids in traci.vehicle.getIDList():
veh_id = int(veh_ids)
position = traci.vehicle.getPosition(veh_ids)
xv = tuple(position)[0]
yv = tuple(position)[1]
geo = traci.simulation.convertGeo(xv, yv, fromGeo=False)
lngv = round(geo[0], 10)
latv = round(geo[1], 10)
vehicleState, chgDfni = GetVehcileState( saveVehicleState, veh_ids )
Xcnv = vehicleState[23]
Ycnv = vehicleState[24]
route_id = traci.vehicle.getRouteID( veh_ids )
edge_id = traci.vehicle.getRoadID( veh_ids )
lane_index = traci.vehicle.getLaneIndex( veh_ids )
angle = traci.vehicle.getAngle( veh_ids )
speed = traci.vehicle.getSpeed( veh_ids )
if speed > 0.0:
traci.vehicle.slowDown( veh_ids, 0.0, 1.0 )
if not (Xcnv == xv and Ycnv == yv):
edge_id = ""
lane_index = -1
traci.vehicle.moveToXY( veh_ids, edge_id, lane_index, Xcnv, Ycnv, angle, keepRoute=2 )
traci.vehicle.moveToXY( veh_ids, edge_id, lane_index, Xcnv, Ycnv, angle, keepRoute=2 )
print( "veh_id:", veh_ids, " Moved Vehilce to Xcnv:", Xcnv, " Ycnv:", Ycnv, " speed:", speed, edge_id, lane_index, angle )
else:
print( "veh_id:", veh_ids, " Arrived at stop! speed:", speed, edge_id, lane_index, angle )
for veh_ids in traci.simulation.getArrivedIDList():
print("veh_id:", veh_ids, " Restarting Route Why?" )
traci.vehicle.add(veh_ids, "startRoute")
vehicleState, chgDfni = GetVehcileState(saveVehicleState, veh_ids)
XcnvOld = vehicleState[23]
YcnvOld = vehicleState[24]
rndvX = 1.0 + ((random.random() - .5) * 2.0) * .05
rndvY = 1.0 + ((random.random() - .5) * 2.0) * .05
Xcnv = XcnvOld * rndvX
Ycnv = YcnvOld * rndvY
vehicleState[23] = Xcnv
vehicleState[24] = Ycnv
print ( "veh_id:", veh_ids, " ADJUSTING Vehilce starting location Xcnv:", Xcnv," Ycnv:", Ycnv )
saveVehicleState.update( { veh_ids: vehicleState } )
traci.simulationStep()
step += 1