code: def frames(self):
          
          # wait for a new image
          while self._cur_depth_im is None:
              time.sleep(0.01)
              
          # read next image
          depth_im = self._cur_depth_im
          color_im = ColorImage(np.zeros([depth_im.height,
                                          depth_im.width,
                                          3]).astype(np.uint8), frame=self._frame)
          self._cur_depth_im = None
          return color_im, depth_im, None
docs: Retrieve a new frame from the Ensenso and convert it to a ColorImage,
          a DepthImage, and an IrImage.
  
          Returns
          -------
          :obj:`tuple` of :obj:`ColorImage`, :obj:`DepthImage`, :obj:`IrImage`, :obj:`numpy.ndarray`
              The ColorImage, DepthImage, and IrImage of the current frame.
  
          Raises
          ------
          RuntimeError
              If the Ensenso stream is not running.