code: def add_semlidar_snapshot(self, lidar_data, name="SemLiDAR"):
      if not self.active:
          return
  
      data = np.frombuffer(
          lidar_data.raw_data,
          dtype=np.dtype(
              [
                  ("x", np.float32),
                  ("y", np.float32),
                  ("z", np.float32),
                  ("CosAngle", np.float32),
                  ("ObjIdx", np.uint32),
                  ("ObjTag", np.uint32),
              ]
          ),
      )
      points = np.array(
          [
              data["x"],
              data["y"],
              data["z"],
              data["CosAngle"],
              data["ObjTag"],
          ]
      ).T
  
      frame = lidar_data.frame - self.init_timestamp["frame0"]
      np.savetxt(self.get_filename(name, frame), points)
      self.sensor_queue.put((lidar_data.frame, name))
  
imports: from .None import SmokeTest
  import carla
  import time
  import numpy
  import filecmp
  import shutil
  import os
label_desc: Use image node_id 16 for calling the Scenario obj's underlying member method code with example usage: obj.add_semlidar_snapshot(lidar_data, name) without return types