code: def test_vehicle_wheel_collision(self):
      print("TestVehicleTireConfig.test_vehicle_wheel_collision")
  
      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 = [
          x
          for x in bp_vehicles
          if int(x.get_attribute("number_of_wheels")) == 4
      ]
  
      for bp_veh in bp_vehicles:
          veh_transf_00 = carla.Transform(
              carla.Location(36, -200, 0.2), carla.Rotation(yaw=91)
          )
          veh_transf_01 = carla.Transform(
              carla.Location(31, -200, 0.7), carla.Rotation(yaw=91)
          )
  
          batch = [
              SpawnActor(bp_veh, veh_transf_00).then(
                  ApplyTargetVelocity(
                      FutureActor, carla.Vector3D(0, 0, 0)
                  )
              ),
              SpawnActor(bp_veh, veh_transf_01).then(
                  ApplyTargetVelocity(
                      FutureActor, carla.Vector3D(0, 0, 0)
                  )
              ),
          ]
  
          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)
  
          vel_ref = 100.0 / 3.6
          self.client.apply_batch_sync(
              [
                  ApplyVehiclePhysicsControl(
                      veh_refs[0],
                      change_physics_control(
                          veh_refs[0], wheel_sweep=False
                      ),
                  ),
                  ApplyVehiclePhysicsControl(
                      veh_refs[1],
                      change_physics_control(
                          veh_refs[1], wheel_sweep=True
                      ),
                  ),
              ]
          )
          self.wait(1)
  
          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(150)
  
          loc_veh_00 = veh_refs[0].get_location().y
          loc_veh_01 = veh_refs[1].get_location().y
          vel_veh_00 = veh_refs[0].get_velocity().y
          vel_veh_01 = veh_refs[1].get_velocity().y
  
          if not list_equal_tol([vel_veh_00, vel_veh_01], 0.5):
              self.client.apply_batch_sync(
                  [carla.command.DestroyActor(x) for x in veh_ids]
              )
              self.fail(
                  "%s: Velocities are not equal after simulation. [%.3f, %.3f]"
                  % (bp_veh.id, vel_veh_00, vel_veh_01)
              )
  
          if not list_equal_tol([loc_veh_00, loc_veh_01], 0.5):
              self.client.apply_batch_sync(
                  [carla.command.DestroyActor(x) for x in veh_ids]
              )
              self.fail(
                  "%s: Locations are not equal after simulation. [%.3f, %.3f]"
                  % (bp_veh.id, loc_veh_00, loc_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 TestVehicleTireConfig obj's underlying member method code with example usage: obj.test_vehicle_wheel_collision() without return types