      cl_arg = f" -DHEIGHT={H} -DWIDTH={W} -DRGB_STRIDE={W * 3} -DUV_WIDTH={W // 2} -DUV_HEIGHT={H // 2} -DRGB_SIZE={W * H} -DCL_DEBUG "
  
      # TODO: move rgb_to_yuv.cl to local dir once the frame stream camera is removed
      kernel_fn = os.path.join(BASEDIR, "selfdrive", "camerad", "transforms", "rgb_to_yuv.cl")
      self._kernel_file = open(kernel_fn)
  
      prg = cl.Program(self.ctx, self._kernel_file.read()).build(cl_arg)
      self.krnl = prg.rgb_to_yuv
      self.Wdiv4 = W // 4 if (W % 4 == 0) else (W + (4 - W % 4)) // 4
      self.Hdiv4 = H // 4 if (H % 4 == 0) else (H + (4 - H % 4)) // 4
  
    def cam_callback_road(self, image):
      self._cam_callback(image, self.frame_road_id, 'roadCameraState',
 
</s> remove     # print("got %s" % c)
 </s> add     print("got %s" % c) </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     # can loop
    rk = Ratekeeper(100, print_delay_threshold=0.05)

 </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     # Clean up resources in the opposite order they were created.
    self.close()

 </s> add 
    with open(kernel_fn) as f:
      prg = cl.Program(self.ctx, f.read()).build(cl_arg)
      self.krnl = prg.rgb_to_yuv
      cl_arg = f" -DHEIGHT={H} -DWIDTH={W} -DRGB_STRIDE={W * 3} -DUV_WIDTH={W // 2} -DUV_HEIGHT={H // 2} -DRGB_SIZE={W * H} -DCL_DEBUG "
  
      # TODO: move rgb_to_yuv.cl to local dir once the frame stream camera is removed
      kernel_fn = os.path.join(BASEDIR, "selfdrive", "camerad", "transforms", "rgb_to_yuv.cl")
    with open(kernel_fn) as f:
      prg = cl.Program(self.ctx, f.read()).build(cl_arg)
      self.krnl = prg.rgb_to_yuv
    with open(kernel_fn) as f:
      prg = cl.Program(self.ctx, f.read()).build(cl_arg)
      self.krnl = prg.rgb_to_yuv
    with open(kernel_fn) as f:
      prg = cl.Program(self.ctx, f.read()).build(cl_arg)
      self.krnl = prg.rgb_to_yuv
    with open(kernel_fn) as f:
      prg = cl.Program(self.ctx, f.read()).build(cl_arg)
      self.krnl = prg.rgb_to_yuv
      self.Wdiv4 = W // 4 if (W % 4 == 0) else (W + (4 - W % 4)) // 4
      self.Hdiv4 = H // 4 if (H % 4 == 0) else (H + (4 - H % 4)) // 4
  
    def cam_callback_road(self, image):
      self._cam_callback(image, self.frame_road_id, 'roadCameraState',
keep keep keep keep replace 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