Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [sumo-user] Blocking part of lane temporarily (due to roadworks)

1. when calling vehicle.moveTo, the vehicle may still perform normal movement in the same simulation step and thus the gui (which shows the end state) can show a different position
2. the to-close-to-brake error is likely due to the use of departSpeed="random" since vehicles need some distance for coming to a standstill.
3. with duration=10, until=20, the block will indeed last until step 20 (since your place the ghost vehicle at the start of your simulation). If you were to place it in step 50 instead, the stop would last for 10 steps since the 'until' time is already past. The ghost vehicle will continue to drive to the end of it's route "r0" after finishing the stop. To remove it instantly, ensure that it's route ends on this edge and set arrivalPos to the stop position.

Am Mi., 12. Jan. 2022 um 09:13 Uhr schrieb Hriday Sanghvi via sumo-user <sumo-user@xxxxxxxxxxx>:
Hello again,

Thank you for the response, and for confirming that the 'ghost' vehicle approach is the right way to proceed for the 'blocked part of the lane' solution. I am now using the moveTo() command since it is easier to define the position in terms of position in the lane. However, the problem lies in the accuracy of the position as determined by SUMO on lane:

traci.vehicle.moveTo(vehID='ghost', laneID='1f2_0', pos=50.0)

while in the GUI, the parameter of the 'ghost' vehicle is seen as 50.16 m instead. This leads to a TraCI exception as follows:

stop for vehicle 'ghost' on lane '1f2_0' is too close to brake


So I decided to modify the vehicle.add() statement in the beginning to set the position on the lane and that was more accurate in setting it at exactly 50m.

TraCI code:

step = 0

traci.vehicle.add(vehID='ghost', routeID='r0', typeID='veh', depart=0, departLane=0, departPos=50, departSpeed='random', arrivalLane='current')
traci.vehicle.setColor(vehID='ghost',color=(0,255,0))
traci.vehicle.setLength(vehID='ghost',length=20)

traci.vehicle.setStop(vehID='ghost', edgeID='1f2', pos=50, duration=10, until=20)

while step < 1000:
    traci.simulationStep()
    if step % 10 == 0:
        print('Adding vehicle agent_{}...'.format(step))
        traci.vehicle.add(vehID='agent_{}'.format(step), routeID='r0', typeID='veh', depart='now', departLane='random', departSpeed='random', arrivalLane='random')
   
    if step == 200:
        traci.vehicle.remove(vehID='ghost')
    step+=1

traci.close()

From what I understand, the duration is the "minimum duration" for stopping and until is what will control to what exact SUMO timestep the stop would last. This seems to simulate a temporary block in the lane for 20 SUMO steps. Is this the correct way to remove the 'ghost' vehicle acting as the block from the simulation at the end of the until parameter?

Thanks again.

Sincerely,
Hriday

On Mon, 10 Jan 2022 at 14:48, Jakob Erdmann <namdre.sumo@xxxxxxxxx> wrote:
1. The 'ghost'-vehicle approach is still the recommended way to block part of a lane
2. moveToXY when sent only once should not stop the vehicle indefinitely. Your code looks as if you re-issue the command every step, though.
4. setStop should only be called once. For the meaning of flags, see https://sumo.dlr.de/pydoc/traci._vehicle.html#VehicleDomain-getStops, for all other attributes, see https://sumo.dlr.de/docs/Definition_of_Vehicles%2C_Vehicle_Types%2C_and_Routes.html#stops (parameter 'pos' corresponds to 'endPos' in the xml input)
3. you can check whether the vehicle is in the 'stopped' state (from setStop) by right-clicking it in the gui and selecting 'show route'. Unless the gui annotates it as 'stopped' it will not trigger strategic lane changing (though it may still trigger tactical changing).

Am Mo., 10. Jan. 2022 um 12:51 Uhr schrieb Hriday Sanghvi via sumo-user <sumo-user@xxxxxxxxxxx>:
Hello,

I recently found out that the only way to simulate a blockage in a temporary part of the lane, (maybe due to construction activities) is by stopping a 'ghost' vehicle and setting its length to the intended area of effect. Source: https://gitanswer.com/has-sumo-a-method-to-block-part-of-the-lane-1007148310 . Please correct me if that is not the case.

How would I go about allowing the other vehicles to lane change around this 'ghost' vehicle to reach the end of a single edge with 3 lanes? Edge file:

<edges> 
<edge id="1f2" from="1" to="2" speed="30" numLanes="3" spreadType="center"/> 
</edges>

Route file:

<routes> 
<vType id="veh" length="5" maxSpeed="30" lcStrategic="0" lcCooperative="0" lcSpeedGain="0" lcKeepRight="0" lcOvertakeRight="0" lcOpposite="0" lcSpeedGainLookahead="0" lcCooperativeRoundabout="0" lcSublane="0" lcPushy="0" /><route id="r0" color="1,1,0" edges="1f2" /> 
</routes>

In TraCI (Python):

step = 0
traci.vehicle.add(vehID='ghost', routeID='', typeID='veh', depart=0, departLane=0, departSpeed='random')
traci.vehicle.setColor(vehID='ghost',color=(0,255,0))

while step < 1000:
    traci.simulationStep()
    if step % 10 == 0:
        traci.vehicle.add(vehID='agent_{}'.format(step), routeID='r0', typeID='veh', depart='now', departLane='random', departSpeed='random', arrivalLane='random')
    # traci.vehicle.moveToXY(vehID='ghost', edgeID='1f2', lane=0, x=68.0, y=-3.3, angle=90, keepRoute=1)
    traci.vehicle.setStop(vehID='ghost', edgeID='1f2', pos=1, laneIndex=0, duration=100, flags=0, startPos=0, until=120)
    step+=1
traci.close()

The moveToXY seems to stop the 'ghost' vehicle at the specified coordinates indefinitely (until simulation ends) but the setStop command doesn't seem to make any modifications. So I was wondering if a combination of these would make it ideal for my case.

Why does the vehicle completely stop after using the moveToXY command indefinitely? Could you clarify the parameters used for the setStop command, specifically pos, duration, flags, startPos and until? I'm assuming until is from the start time of the simulation (at 0). So if I set until to 300, the vehicle should stay in the stopped state till 300 simulation time. But then I am confused because duration would mean time in seconds for the stopped state?

Also, I have already tried using TraCI's lane.setDisallowed() method, but it blocks the entire lane and not just the specified part of it.

Thank you for any assistance in advance.

Sincerely,
Hriday.
_______________________________________________
sumo-user mailing list
sumo-user@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/sumo-user
_______________________________________________
sumo-user mailing list
sumo-user@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/sumo-user
_______________________________________________
sumo-user mailing list
sumo-user@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/sumo-user

Back to the top