code: def test_vehicle_zero_friction(self):
      print("TestVehicleFriction.test_vehicle_zero_friction")
  
      self.client.load_world("Town05_Opt", False)
      # workaround: give time to UE4 to clean memory after loading (old assets)
      time.sleep(5)
  
      bp_vehicles = self.world.get_blueprint_library().filter(
          "vehicle.*"
      )
      bp_vehicles = self.filter_vehicles_for_old_towns(bp_vehicles)
      for bp_veh in bp_vehicles:
          veh_transf_00 = carla.Transform(
              carla.Location(33, -200, 0.2), carla.Rotation(yaw=90)
          )
          veh_transf_01 = carla.Transform(
              carla.Location(29, -200, 0.7), carla.Rotation(yaw=90)
          )
  
          batch = [
              SpawnActor(bp_veh, veh_transf_00)
              .then(
                  ApplyTargetVelocity(
                      FutureActor, carla.Vector3D(0, 0, 0)
                  )
              )
              .then(SetEnableGravity(FutureActor, True)),
              SpawnActor(bp_veh, veh_transf_01)
              .then(
                  ApplyTargetVelocity(
                      FutureActor, carla.Vector3D(0, 0, 0)
                  )
              )
              .then(SetEnableGravity(FutureActor, False)),
          ]
  
          responses = self.client.apply_batch_sync(batch)
  
          veh_ids = [x.actor_id for x in responses]
          veh_refs = [self.world.get_actor(x) for x in veh_ids]
  
          if (0 in veh_ids) or (None in veh_refs):
              self.fail(
                  "%s: The test cars could not be correctly spawned"
                  % (bp_veh.id)
              )
  
          self.wait(10)
  
          self.client.apply_batch_sync(
              [
                  ApplyVehiclePhysicsControl(
                      veh_refs[0],
                      change_physics_control(
                          veh_refs[0], tire_friction=0.0, drag=0.0
                      ),
                  ),
                  ApplyVehiclePhysicsControl(
                      veh_refs[1],
                      change_physics_control(veh_refs[1], drag=0.0),
                  ),
              ]
          )
  
          self.wait(1)
          vel_ref = 100.0 / 3.6
  
          self.client.apply_batch_sync(
              [
                  ApplyTargetVelocity(
                      veh_refs[0], carla.Vector3D(0, vel_ref, 0)
                  ),
                  ApplyTargetVelocity(
                      veh_refs[1], carla.Vector3D(0, vel_ref, 0)
                  ),
              ]
          )
  
          self.wait(1)
  
          vel_veh_00 = veh_refs[0].get_velocity().y
          vel_veh_01 = veh_refs[1].get_velocity().y
  
          if not list_equal_tol(
              [vel_ref, vel_veh_00, vel_veh_01], 1e-3
          ):
              self.client.apply_batch_sync(
                  [carla.command.DestroyActor(x) for x in veh_ids]
              )
  
              self.fail(
                  "%s: Velocities are not equal after initialization. Ref: %.3f -> [%.3f, %.3f]"
                  % (bp_veh.id, vel_ref, vel_veh_00, vel_veh_01)
              )
  
          self.wait(100)
  
          vel_veh_00 = veh_refs[0].get_velocity().y
          vel_veh_01 = veh_refs[1].get_velocity().y
  
          if not list_equal_tol(
              [vel_ref, vel_veh_00, vel_veh_01], 1e-1
          ):
              self.client.apply_batch_sync(
                  [carla.command.DestroyActor(x) for x in veh_ids]
              )
  
              self.fail(
                  "%s: Velocities are not equal after simulation. Ref: %.3f -> [%.3f, %.3f]"
                  % (bp_veh.id, vel_ref, vel_veh_00, vel_veh_01)
              )
  
          self.client.apply_batch_sync(
              [carla.command.DestroyActor(x) for x in veh_ids]
          )
  
imports: from .None import SyncSmokeTest
  from .None import SmokeTest
  import carla
  import time
  import math
  import numpy
  from enum import Enum
label_desc: Use image node_id 2 for calling the TestVehicleFriction obj's underlying member method code with example usage: obj.test_vehicle_zero_friction() without return types