#9869·carla

Traffic-manager autopilot destroys the vehicle mid-drive on a non-CARLA map

Author: M-ColleyCreated Sep 4, 2026Updated Sep 4, 2026

Describe the bug

On a map that is not one of CARLA's own towns, a vehicle put on autopilot drives normally for a few seconds and is then destroyed by the server. There is no collision, nothing in the log, and the destruction is not requested by any client.

It is reproducible to the tick: spawned at get_spawn_points()[0] and given set_autopilot(True), the same vehicle dies at tick 156 of a 20 Hz synchronous run, every run, having travelled about 38 m at a normal 29 km/h.

What it is not

Each of these was measured and ruled out:

  • Not a collision. A sensor.other.collision attached to the vehicle records zero events up to and including the tick it dies.
  • Not dormancy. actor.actor_state reads Active on every tick until the actor is gone; it never passes through Dormant. The actor also disappears from world.get_actors() rather than remaining listed as a dormant actor would.
  • Not a client-side episode invalidation. world.id is unchanged throughout, and the server logs exactly one New episode for the whole run.
  • Not World Partition streaming. The vehicle is spawned with role_name=hero and the server confirms it as a streaming source (WP streaming source on ... (role hero, radius 300000 cm)), and the spectator is moved onto it every tick.
  • Not movement or geometry. The decisive test: the same vehicle over the same stretch of road under manual control — apply_control(VehicleControl( throttle=0.45)), no traffic manager at all — survives 400 ticks and 54 m, further than the distance at which autopilot dies.

So the difference is the traffic manager itself.

Steps to reproduce

python
world = client.get_world()
s = world.get_settings(); s.synchronous_mode = True; s.fixed_delta_seconds = 0.05
world.apply_settings(s)
tm = client.get_trafficmanager(); tm.set_synchronous_mode(True)

bp = world.get_blueprint_library().filter("vehicle.*")[0]
bp.set_attribute("role_name", "hero")
v = world.try_spawn_actor(bp, world.get_map().get_spawn_points()[0])
v.set_autopilot(True, tm.get_port())

for i in range(1, 400):
    world.tick()
    if not v.is_alive:
        print("destroyed at tick", i)   # 156, reproducibly
        break

Replace set_autopilot with a constant apply_control and the loop runs to completion.

Expected

A vehicle on autopilot is not destroyed. If the traffic manager cannot route it — off the end of the network, no successor lane, a failed waypoint query — it should say so, not silently remove the actor.

Actual

Silently destroyed mid-drive. From the client this is indistinguishable from a crash, and any script holding the actor then raises trying to operate on a destroyed actor.

Notes

The map here is Epic's City Sample driven from an OpenDRIVE file exported from its lane graph: one road per lane, no <speed> elements, no sidewalk lanes. Something about that network is likely the trigger, which is why this is reported as "on a non-CARLA map" — but a network the traffic manager cannot handle should degrade, not delete.

Environment

  • CARLA ue58-dev-carla @ de3f38e64, running Epic's City Sample