[sumo-user] Initialization of Pre-set GPS long lats

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[sumo-user] Initialization of Pre-set GPS long lats

Paul Fierro
Hello,

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






_______________________________________________
sumo-user mailing list
[hidden email]
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/sumo-user
Reply | Threaded
Open this post in threaded view
|

Re: [sumo-user] Initialization of Pre-set GPS long lats

Jakob Erdmann
The 1.7.0 release supports 'traci.person.moveToXY'.
Through you could also use position conversion to initialize them on edges directly: https://sumo.dlr.de/docs/Tools/Sumolib.html#locate_nearby_edges_based_on_the_geo-coordinate

regards,
Jakob

Am Mo., 7. Sept. 2020 um 17:58 Uhr schrieb Paul Fierro <[hidden email]>:
Hello,

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





_______________________________________________
sumo-user mailing list
[hidden email]
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/sumo-user

_______________________________________________
sumo-user mailing list
[hidden email]
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/sumo-user