      self._threads.append(threading.Thread(target=can_function_runner, args=(vehicle_state, self._threads_exit_event,)))
      for t in self._threads:
        t.start()
  
      # can loop
      rk = Ratekeeper(100, print_delay_threshold=0.05)
  
      # init
      throttle_ease_out_counter = REPEAT_COUNTER
      brake_ease_out_counter = REPEAT_COUNTER
      steer_ease_out_counter = REPEAT_COUNTER
  
 
</s> remove     self._threads.append(threading.Thread(target=panda_state_function, args=(vehicle_state, self._threads_exit_event,)))
    self._threads.append(threading.Thread(target=peripheral_state_function, args=(self._threads_exit_event,)))
    self._threads.append(threading.Thread(target=fake_driver_monitoring, args=(self._threads_exit_event,)))
    self._threads.append(threading.Thread(target=can_function_runner, args=(vehicle_state, self._threads_exit_event,)))
 </s> add     self._threads.append(threading.Thread(target=panda_state_function, args=(vehicle_state, self._exit_event,)))
    self._threads.append(threading.Thread(target=peripheral_state_function, args=(self._exit_event,)))
    self._threads.append(threading.Thread(target=fake_driver_monitoring, args=(self._exit_event,)))
    self._threads.append(threading.Thread(target=can_function_runner, args=(vehicle_state, self._exit_event,))) </s> remove     while not self._shutdown:
 </s> add     # Simulation tends to be slow in the initial steps. This prevents lagging later
    for _ in range(20):
      world.tick()

    # loop
    rk = Ratekeeper(100, print_delay_threshold=0.05)

    while self._keep_alive: </s> remove     # Clean up resources in the opposite order they were created.
    self.close()

 </s> add  </s> remove     self._threads_exit_event.set()
    if self._camerad is not None:
      self._camerad.close()
 </s> add     self.started = False
    self._exit_event.set() </s> remove     self._kernel_file = open(kernel_fn)

    prg = cl.Program(self.ctx, self._kernel_file.read()).build(cl_arg)
    self.krnl = prg.rgb_to_yuv
 </s> add     with open(kernel_fn) as f:
      prg = cl.Program(self.ctx, f.read()).build(cl_arg)
      self.krnl = prg.rgb_to_yuv
      self._threads.append(threading.Thread(target=can_function_runner, args=(vehicle_state, self._threads_exit_event,)))
      for t in self._threads:
        t.start()
  



      # init
      throttle_ease_out_counter = REPEAT_COUNTER
      brake_ease_out_counter = REPEAT_COUNTER
      steer_ease_out_counter = REPEAT_COUNTER
  
keep keep keep keep replace replace replace keep keep keep keep keep
 Simulator: Fix CI and set low_quality default (#24354)

* Change low_quality argument and fix closing carla bridge

* Some fixes

* Change carla process in test

* Change fov to 120, higher doesn't look good

* Update readme and remove redundant test

* update

* Add folder description 
tools/sim/bridge.py