code: def frames(self):
          
          # wait for a new image
          while self._cur_depth_im is None or self._cur_color_im is None:
              time.sleep(0.01)
              
          # read next image
          depth_im = self._cur_depth_im
          color_im = self._cur_color_im
  
          self._cur_color_im = None
          self._cur_depth_im = None
  
          #TODO add ir image
          return color_im, depth_im, None
docs: Retrieve a new frame from the Ensenso and convert it to a ColorImage,
          a DepthImage, IrImage is always none for this type
  
          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 Kinect stream is not running.