code: def _do_conversion(input):
      velodyne_path, calib_path, pcd_path = input
  
      size_float = 4
      list_points = []
      list_colors = []
      with open(velodyne_path, "rb") as f:
          byte = f.read(size_float * 4)
          while byte:
              x, y, z, intensity = struct.unpack("ffff", byte)
              r = intensity
              g = intensity
              b = intensity
              list_points.append([x, y, z])
              list_colors.append([r, g, b])
              byte = f.read(size_float * 4)
  
      points = np.array(list_points)
      colors = np.array(list_colors)
  
      # Transform to camera coordinates
      calib = _load_calibration_matrices(calib_path)
      P = calib["R0_rect"] @ calib["Tr_velo_to_cam"]
      points = np.hstack((points, np.ones((len(points), 1)))) @ P.T
  
      # Switch to z-up coordinates
      points = np.stack(
          (points[:, 0], points[:, 2], -points[:, 1]), axis=1
      )
  
      pcd = o3d.geometry.PointCloud()
      pcd.points = o3d.utility.Vector3dVector(points)
      pcd.colors = o3d.utility.Vector3dVector(colors)
  
      o3d.io.write_point_cloud(pcd_path, pcd)
  
imports: import csv
  import logging
  import struct
  import os
  import numpy
  import eta.core.utils
  import eta.core.web
  import fiftyone
  import fiftyone.core.labels
  import fiftyone.core.metadata
  import fiftyone.core.storage
  import fiftyone.core.utils
  import fiftyone.utils.data
label_desc: Use image node_id 15 for calling a global function with example usage: _do_conversion(input) without return types