diff --git a/srunner/scenariomanager/actorcontrols/npc_vehicle_control.py b/srunner/scenariomanager/actorcontrols/npc_vehicle_control.py index a08f9d7d3..c90d02b2f 100644 --- a/srunner/scenariomanager/actorcontrols/npc_vehicle_control.py +++ b/srunner/scenariomanager/actorcontrols/npc_vehicle_control.py @@ -43,6 +43,8 @@ def __init__(self, actor, args=None): if self._waypoints: self._update_plan() + self._brake_lights_active = False + def _update_plan(self): """ Update the plan (waypoint list) of the LocalPlanner @@ -123,10 +125,15 @@ def run_step(self): vy = math.sin(yaw) * target_speed self._actor.set_target_velocity(carla.Vector3D(vx, vy, 0)) - light_state = self._actor.get_light_state() - if current_speed >= target_speed: + # Change Brake light state + if (current_speed > target_speed or target_speed < 0.2) and not self._brake_lights_active: + light_state = self._actor.get_light_state() light_state |= carla.VehicleLightState.Brake - else: - light_state &= ~carla.VehicleLightState.Brake + self._actor.set_light_state(carla.VehicleLightState(light_state)) + self._brake_lights_active = True - self._actor.set_light_state(carla.VehicleLightState(light_state)) + if self._brake_lights_active and current_speed < target_speed: + self._brake_lights_active = False + light_state = self._actor.get_light_state() + light_state &= ~carla.VehicleLightState.Brake + self._actor.set_light_state(carla.VehicleLightState(light_state)) diff --git a/srunner/scenariomanager/actorcontrols/simple_vehicle_control.py b/srunner/scenariomanager/actorcontrols/simple_vehicle_control.py index 1208e8c98..272adf818 100644 --- a/srunner/scenariomanager/actorcontrols/simple_vehicle_control.py +++ b/srunner/scenariomanager/actorcontrols/simple_vehicle_control.py @@ -98,6 +98,8 @@ def __init__(self, actor, args=None): self._visualizer = None + self._brake_lights_active = False + if args and 'consider_obstacles' in args and strtobool(args['consider_obstacles']): self._consider_obstacles = strtobool(args['consider_obstacles']) bp = CarlaDataProvider.get_world().get_blueprint_library().find('sensor.other.obstacle') @@ -283,16 +285,20 @@ def _set_new_velocity(self, next_location): target_speed = 0 if target_speed < current_speed: - light_state = self._actor.get_light_state() - light_state |= carla.VehicleLightState.Brake - self._actor.set_light_state(carla.VehicleLightState(light_state)) + if not self._brake_lights_active: + self._brake_lights_active = True + light_state = self._actor.get_light_state() + light_state |= carla.VehicleLightState.Brake + self._actor.set_light_state(carla.VehicleLightState(light_state)) if self._max_deceleration is not None: target_speed = max(target_speed, current_speed - (current_time - self._last_update) * self._max_deceleration) else: - light_state = self._actor.get_light_state() - light_state &= ~carla.VehicleLightState.Brake - self._actor.set_light_state(carla.VehicleLightState(light_state)) + if self._brake_lights_active: + self._brake_lights_active = False + light_state = self._actor.get_light_state() + light_state &= ~carla.VehicleLightState.Brake + self._actor.set_light_state(carla.VehicleLightState(light_state)) if self._max_acceleration is not None: tmp_speed = min(target_speed, current_speed + (current_time - self._last_update) * self._max_acceleration)