docs: def project_to_image(self, point_cloud, round_px=True):
          """Projects a point cloud onto the camera image plane and creates
          a depth image. Zero depth means no point projected into the camera
          at that pixel location (i.e. infinite depth).
  
          Parameters
          ----------
          point_cloud : :obj:`autolab_core.PointCloud` or :obj:`autolab_core.Point`
              A PointCloud or Point to project onto the camera image plane.
  
          round_px : bool
              If True, projections are rounded to the nearest pixel.
  
          Returns
          -------
          :obj:`DepthImage`
              A DepthImage generated from projecting the point cloud into the
              camera.
  
          Raises
          ------
          ValueError
              If the input is not a PointCloud or Point in the same reference
              frame as the camera.
          """
          if not isinstance(point_cloud, PointCloud) and not (isinstance(point_cloud, Point) and point_cloud.dim == 3):
              raise ValueError('Must provide PointCloud or 3D Point object for projection')
          if point_cloud.frame != self._frame:
              raise ValueError('Cannot project points in frame %s into camera with frame %s' %(point_cloud.frame, self._frame))
  
          points_proj = self.S.dot(point_cloud.data) + self.t
          if len(points_proj.shape) == 1:
              points_proj = points_proj[:, np.newaxis]
          point_depths = points_proj[2,:]
          point_z = np.tile(point_depths, [3, 1])
          points_proj = np.divide(points_proj, point_z)
          if round_px:
              points_proj = np.round(points_proj)
          points_proj = points_proj[:2,:].astype(np.int16)
  
          valid_ind = np.where((points_proj[0,:] >= 0) & \
                               (points_proj[1,:] >= 0) & \
                               (points_proj[0,:] < self.width) & \
                               (points_proj[1,:] < self.height))[0]
  
          depth_data = np.zeros([self.height, self.width])
          depth_data[points_proj[1,valid_ind], points_proj[0,valid_ind]] = point_depths[valid_ind]
          return DepthImage(depth_data, frame=self.frame)