Hi there,
I am using the Flow toolbox and SUMO for the purposes of reinforcement learning driving
policies. Previous users have published the same error message of a vehicle not being known but I am unsure if we have the same root cause.
Context:
I am navigating an RL vehicle through intersections created with Neteditor. I have
set --colision.action to "warn" and --collision.check-junctions to
"true." I am using Flow created inflows() to randomly inject vehicles from on certain road edges that approach the intersection. After a collision occurs, the environment resets and this seems to be where the errors are published by SUMO but at this point
it's not clear to me if there's some lag in outputting or printing the error in the terminal.
I detect collisions by checking if len(self.k.kernel_api.simulation.getSubscriptionResults()[129])
> 0 within the env.step() function.
The output here: {116: (), 122: (), 118: (), 112: 15700, 123: 0.1, 113: 0, 115: 0, 121:
0, 120: (), 119: 0, 129: ('flow_0.1', 'rl_0'), 128: 2} where 129 indicates vehicles that collided together.
This sends the code to env.reset(). I can confirm that the following IDs are in the
kernel at the time of collision using self.k.kernel_api.vehicle.getIDList():
output: ('flow_0.1', 'flow_0.2', 'flow_1.1', 'rl_0')
In env.reset(), I remove the vehicles in the kernel using self.k.vehicle.remove(veh_id)
for every actor ID seen in the above list.
I can confirm
self.k.kernel_api.vehicle.getIDList() returns
an empty list. I also checked the following traci.vehicle internal fields which are empty:
__ids: []
__vehicles: OrderedDict()
__sumo_obs: {}
__human_ds: []
__controlled_ids: []
__controlled_lc_ids: []
__rl_ids: []
I can confirm that 'flow_0.1' and 'rl_0' are not in the kernel again by catching exceptions
to self.k.vehicle.get_position(veh_id) as well. Next, I reset traci and re-add vehicles in my initial configuration. Now, I confirm the vehicles are loaded.
I then run self.k.simulation.simulation_step() and confirm that the vehicles are introduced
into the kernel via self.k.kernel_api.vehicle.getIDList()
(they are also in the GUI). However, it seems that inside this simulation_step() command or before, the
following is printed out:
Error: Answered with error to command 0xa4: Vehicle 'flow_0.1' is not known.
Error: Answered with error to command 0xa4: Vehicle 'rl_0' is not known.
Error: Answered with error to command 0xa4: Vehicle 'flow_0.1' is not known.
This is strange because I can confirm that the 'rl_0' vehicle is in the kernel and that
'flow_0.1' is not by using getPosition() or other getter functions. It appears that this error message is not problematic because the end result of my reset() function is correct, it has the vehicles at the designated states, but I am confused as to why this
is happening.
Also, if I use a different collision checking function routine that "catches" collisions
before SUMO does, this never happens. Is this expected behavior? I am wondering if there's some SUMO collision behavior that may be responsible for this or perhaps I am using something incorrectly. Any help would be greatly appreciated!
Best,
Daniel
Nothing in this message is intended to constitute an electronic signature unless a specific statement to the contrary is included in this message.
Confidentiality Note: This message is intended only for the person or entity to which it is addressed. It may contain confidential and/or privileged material. Any review, transmission, dissemination or other use, or taking of any action in reliance upon this
message by persons or entities other than the intended recipient is prohibited and may be unlawful. If you received this message in error, please contact the sender and delete it from your computer.
Nothing in this message is intended to constitute an electronic signature unless a specific statement to the contrary is included in this message.
Confidentiality Note: This message is intended only for the person or entity to which it is addressed. It may contain confidential and/or privileged material. Any review, transmission, dissemination or other use, or taking of any action in reliance upon this
message by persons or entities other than the intended recipient is prohibited and may be unlawful. If you received this message in error, please contact the sender and delete it from your computer.
|