Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[sumo-user] Ego-blocking vehicles do not include ego vehicle in their "blocking" list ever

Hello,

As discussed previously, I am trying to find out if ego vehicle X is considered a blocking vehicle by any of its neighbouring vehicles. So using a combination of convenience functions built on getNeighbors(self, vehID, mode) from https://sumo.dlr.de/pydoc/traci._vehicle.html#VehicleDomain-getNeighbors - namely, getRightFollowers(), getRightLeaders(), getLeftFollowers() and getLeftLeaders() with the flag blockingOnly=True, I am:

1. Gathering any blocking vehicles on the left / right and following / leading of ego vehicle into a list L.
2. For each vehicle i in that list L, I am checking the left /right and following / leading blocking vehicles for vehicle i, and I find that there is never a case when the ego vehicle X is blocking vehicle i.

I tested this out by visually observing the output as follows (example):

### STEP 1 ###
Blocking vehicles around ego vehicle f.0 : ['f.1']
Blocking vehicles for ego-blocking vehicle f.1 : []

Blocking vehicles around ego vehicle f.1 : ['f.0']
Blocking vehicles for ego-blocking vehicle f.0 : []

### STEP 2 ###
Blocking vehicles around ego vehicle f.0 : ['f.4', 'f.1']
Blocking vehicles for ego-blocking vehicle f.4 : ['f.1']
.
.
.

Python TraCI code:

blocking_flag_ego = True
blocking_flag_neighbors = True

step = 1
while len(traci.vehicle.getIDList()) <= 0:
traci.simulationStep()

LC_MODE = 513 # collision avoidance, safety-gap enforcement AND strategic changes ONLY if not conflicting with TraCI (to get on the correct route)

while len(traci.vehicle.getIDList()) > 0:
veh_list = traci.vehicle.getIDList()
for vh in veh_list:
traci.vehicle.setLaneChangeMode(vh, LC_MODE)

relevant_vehicles = []
speed = traci.vehicle.getSpeed(vh)

right_followers = [x[0] for x in traci.vehicle.getRightFollowers(vehID=vh, blockingOnly=blocking_flag_ego)]
right_leaders = [x[0] for x in traci.vehicle.getRightLeaders(vehID=vh, blockingOnly=blocking_flag_ego)]
left_followers = [x[0] for x in traci.vehicle.getLeftFollowers(vehID=vh, blockingOnly=blocking_flag_ego)]
left_leaders = [x[0] for x in traci.vehicle.getLeftLeaders(vehID=vh, blockingOnly=blocking_flag_ego)]

relevant_vehicles.extend(right_followers)
relevant_vehicles.extend(right_leaders)
relevant_vehicles.extend(left_followers)
relevant_vehicles.extend(left_leaders)

print('Blocking vehicles around ego vehicle {} : {}'.format(vh, relevant_vehicles))

for rel_veh in relevant_vehicles:
blocking_vehicles = []
right_followers_blocking = [x[0] for x in traci.vehicle.getRightFollowers(vehID=vh, blockingOnly=blocking_flag_neighbors) if x[0] not in [rel_veh]]
right_leaders_blocking = [x[0] for x in traci.vehicle.getRightLeaders(vehID=vh, blockingOnly=blocking_flag_neighbors) if x[0] not in [rel_veh]]
left_followers_blocking = [x[0] for x in traci.vehicle.getLeftFollowers(vehID=vh, blockingOnly=blocking_flag_neighbors) if x[0] not in [rel_veh]]
left_leaders_blocking = [x[0] for x in traci.vehicle.getLeftLeaders(vehID=vh, blockingOnly=blocking_flag_neighbors) if x[0] not in [rel_veh]]

blocking_vehicles.extend(right_followers_blocking)
blocking_vehicles.extend(right_leaders_blocking)
blocking_vehicles.extend(left_followers_blocking)
blocking_vehicles.extend(left_leaders_blocking)
print('Blocking vehicles for ego-blocking vehicle {} : {}'.format(rel_veh, blocking_vehicles))

if vh in blocking_vehicles: # IF ego is one of the vehicles blocking it
print('Ego vehicle {} will cooperate'.format(vh))
input()

traci.simulationStep()
print('### STEP {} ###'.format(step))
step += 1
traci.close()

edges.xml:

<?xml version='1.0' encoding='UTF-8'?>
<edges>
<edge from="1" id="1f2" numLanes="3" to="2" />
</edges>

nodes.xml:

<nodes>
<node id="1" x="0.0" y="0.0" type="priority"/>
<node id="2" x="2000.0" y="0.0" type="priority"/>
</nodes>

routes.xml:

<?xml version='1.0' encoding='UTF-8'?>
<routes>
<vType carFollowModel="Krauss" color="0,1,0" id="veh" length="5" sigma="0" speedDev="0" speedFactor="1.0" />
<route color="1,1,0" edges="1f2" id="r0" />
<flow arrivalLane="random" begin="0" departLane="random" departSpeed="random" id="f" number="100" route="r0" type="veh" vehsPerHour="10000" />
</routes>

If this is working as intended, how then would I go about finding out the list of vehicles that are being blocked by ego vehicle X? Please advise.

Thank you.

Sincerely,
Hriday.

Back to the top