Carla控制指定Actor(四)
生活随笔
收集整理的這篇文章主要介紹了
Carla控制指定Actor(四)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一種方法
通過carla.World的get_actor或者get_actors函數查找Actor的id,此種方法簡單方便,但是局限性大,因為Actor的id都是由Carla的Server端生成,無法事先知道
第二種方法
spawn_vehicle.py 放在PythonAPI\examples目錄下
import glob import os import sys from turtle import Vec2Dtry:sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % (sys.version_info.major,sys.version_info.minor,'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0]) except IndexError:passimport carla import randomdef main():client = carla.Client('localhost', 2000)client.set_timeout(20.0)world = client.get_world()spectator = world.get_spectator()vehicle_blueprints = world.get_blueprint_library().filter('vehicle')blueprint = random.choice(vehicle_blueprints)blueprint.set_attribute('role_name', '9527') # 設置role_name的值location = random.choice(world.get_map().get_spawn_points()).locationtransform = carla.Transform(location)vehicle = world.spawn_actor(blueprint, transform)try:while True:transform = vehicle.get_transform()location = transform.location + carla.Location(0, 0, 15)rotation = transform.rotation# 避免萬向鎖rotation.pitch += -89if rotation.pitch >= 90: rotation.pitch = 89elif rotation.pitch <= -90:rotation.pitch = -89spectator.set_transform(carla.Transform(location, rotation)) # 將視角設置在車輛上方world.wait_for_tick()finally:print('end')if __name__ == '__main__':main()將PythonAPI\examples目錄下的manual_control.py文件復制一份,改名為manual_control_actor.py
修改restart函數,同時新增find_player函數
def find_player(self):actor_list = self.world.get_actors()for actor in actor_list:if 'role_name' in actor.attributes and actor.attributes['role_name'] == '9527':return actorreturn Nonedef restart(self):self.player_max_speed = 1.589self.player_max_speed_fast = 3.713# Keep same camera config if the camera manager exists.cam_index = self.camera_manager.index if self.camera_manager is not None else 0cam_pos_index = self.camera_manager.transform_index if self.camera_manager is not None else 0# Spawn the player.if self.player is not None:spawn_point = self.player.get_transform()spawn_point.location.z += 2.0spawn_point.rotation.roll = 0.0spawn_point.rotation.pitch = 0.0self.destroy()self.player = self.find_player()self.show_vehicle_telemetry = Falseself.modify_vehicle_physics(self.player)while self.player is None:if not self.map.get_spawn_points():print('There are no spawn points available in your map/town.')print('Please add some Vehicle Spawn Point to your UE4 scene.')sys.exit(1)spawn_points = self.map.get_spawn_points()spawn_point = random.choice(spawn_points) if spawn_points else carla.Transform()self.player = self.find_player()if self.player is None:print("Can't find id %d" % (self.vehicle_id))sys.exit(1)# self.player.set_transform(spawn_point)self.show_vehicle_telemetry = Falseself.modify_vehicle_physics(self.player)# Set up the sensors.self.collision_sensor = CollisionSensor(self.player, self.hud)self.lane_invasion_sensor = LaneInvasionSensor(self.player, self.hud)self.gnss_sensor = GnssSensor(self.player)self.imu_sensor = IMUSensor(self.player)self.camera_manager = CameraManager(self.player, self.hud, self._gamma)self.camera_manager.transform_index = cam_pos_indexself.camera_manager.set_sensor(cam_index, notify=False)actor_type = get_actor_display_name(self.player)self.hud.notification(actor_type)if self.sync:self.world.tick()else:self.world.wait_for_tick()運行方式:
總結
以上是生活随笔為你收集整理的Carla控制指定Actor(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flume+Kafka+Spark小案例
- 下一篇: textrank提取文档关键词