diff --git a/srunner/scenariomanager/actorcontrols/npc_vehicle_control.py b/srunner/scenariomanager/actorcontrols/npc_vehicle_control.py index 73481aad0..a08f9d7d3 100644 --- a/srunner/scenariomanager/actorcontrols/npc_vehicle_control.py +++ b/srunner/scenariomanager/actorcontrols/npc_vehicle_control.py @@ -111,8 +111,9 @@ def run_step(self): self._actor.apply_control(control) + current_speed = math.sqrt(self._actor.get_velocity().x**2 + self._actor.get_velocity().y**2) + if self._init_speed: - current_speed = math.sqrt(self._actor.get_velocity().x**2 + self._actor.get_velocity().y**2) # If _init_speed is set, and the PID controller is not yet up to the point to take over, # we manually set the vehicle to drive with the correct velocity @@ -121,3 +122,11 @@ def run_step(self): vx = math.cos(yaw) * target_speed 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: + light_state |= carla.VehicleLightState.Brake + else: + 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 473e78cd1..1208e8c98 100644 --- a/srunner/scenariomanager/actorcontrols/simple_vehicle_control.py +++ b/srunner/scenariomanager/actorcontrols/simple_vehicle_control.py @@ -283,12 +283,16 @@ def _set_new_velocity(self, next_location): target_speed = 0 if target_speed < current_speed: - self._actor.set_light_state(carla.VehicleLightState.Brake) + 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: - self._actor.set_light_state(carla.VehicleLightState.NONE) + 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) diff --git a/srunner/scenariomanager/carla_data_provider.py b/srunner/scenariomanager/carla_data_provider.py index e8fdc71a9..517f92981 100644 --- a/srunner/scenariomanager/carla_data_provider.py +++ b/srunner/scenariomanager/carla_data_provider.py @@ -571,11 +571,12 @@ def request_new_actors(actor_list, safe_blueprint=False, tick=True): - actor_list: list of ActorConfigurationData """ - SpawnActor = carla.command.SpawnActor # pylint: disable=invalid-name - PhysicsCommand = carla.command.SetSimulatePhysics # pylint: disable=invalid-name - FutureActor = carla.command.FutureActor # pylint: disable=invalid-name - ApplyTransform = carla.command.ApplyTransform # pylint: disable=invalid-name - SetAutopilot = carla.command.SetAutopilot # pylint: disable=invalid-name + SpawnActor = carla.command.SpawnActor # pylint: disable=invalid-name + PhysicsCommand = carla.command.SetSimulatePhysics # pylint: disable=invalid-name + FutureActor = carla.command.FutureActor # pylint: disable=invalid-name + ApplyTransform = carla.command.ApplyTransform # pylint: disable=invalid-name + SetAutopilot = carla.command.SetAutopilot # pylint: disable=invalid-name + SetVehicleLightState = carla.command.SetVehicleLightState # pylint: disable=invalid-name batch = [] @@ -616,10 +617,12 @@ def request_new_actors(actor_list, safe_blueprint=False, tick=True): command = SpawnActor(blueprint, _spawn_point) command.then(SetAutopilot(FutureActor, actor.autopilot, CarlaDataProvider._traffic_manager_port)) - if actor.category == 'misc': - command.then(PhysicsCommand(FutureActor, True)) - elif actor.args is not None and 'physics' in actor.args and actor.args['physics'] == "off": + if actor.args is not None and 'physics' in actor.args and actor.args['physics'] == "off": command.then(ApplyTransform(FutureActor, _spawn_point)).then(PhysicsCommand(FutureActor, False)) + elif actor.category == 'misc': + command.then(PhysicsCommand(FutureActor, True)) + if actor.args is not None and 'lights' in actor.args and actor.args['lights'] == "on": + command.then(SetVehicleLightState(FutureActor, carla.VehicleLightState.All)) batch.append(command)