日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Carla 对象和蓝图

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Carla 对象和蓝图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 介紹

本文介紹的內容為Carla中的actorblueprints,實在不知道怎么翻譯actor,感覺翻譯成演員有些奇奇怪怪,因此將actor代指成對象

2. actor組成

車輛,行人,傳感器,交通標志,交通信號燈,觀察者都屬于actor,從面向對象的角度,actor是上述對象的父類

It is crucial to have full understanding on how to operate on actors

3. 藍圖

獲取Carla世界中的藍圖與藍圖對應的屬性信息

blueprints = [bp for bp in world.get_blueprint_library().filter('*')] for blueprint in blueprints:print(blueprint.id)for attr in blueprint:print(' - {}'.format(attr))

藍圖中包含的內容有

各個對象(actor)的屬性可以在官方文檔中查詢

4. 使用藍圖

獲取藍圖庫

blueprint_library = world.get_blueprint_library()

藍圖的獲取可以通過id,隨機或者正則表達式的方式實現

# 通過id collision_sensor_bp = blueprint_library.find('sensor.other.collision') # 隨機獲取 random_bp = random.choice(blueprint_library) # 通過正則表達式獲取 vehicle_bp = blueprint_library.filter('vehicle.*.*')

藍圖中包含了一系列的對象屬性,可以通過修改藍圖中的對象屬性創建個性化的對象。

each carla.ActorBlueprint has a series of carla.ActorAttribute that can be get and set.

# 設置行人屬性 walker_bp = world.get_blueprint_library().filter('walker.pedestrian.0002') walker_bp.set_attribute('is_invincible', True)# 設置車輛屬性 vehicle_bp = wolrd.get_blueprint_library().filter('vehicle.bmw.*') color = random.choice(vehicle_bp.get_attribute('color').recommended_values) vehicle_bp.set_attribute('color', color)# 設置傳感器屬性 camera_bp = world.get_blueprint_library().filter('sensor.camera.rgb') camera_bp.set_attribute('image_size_x', 600) camera_bp.set_attribute('image_size_y', 600)

使用is_modifiable判斷當前屬性是否可以修改

for attr in blueprint:if attr.is_modifiable:blueprint.set_attribute(attr.id, random.choice(attr.recommended_values))

5. 對象(Actor)生命周期

對象的生命周期包括創建(Spawning),仿真(Handling)和回收(Destruction)三個過程。

1. 創建對象

transform = Transform(Location(x=230, y=195, z=40), Rotation(yaw=180)) # 創建對象spawn_actor,創建失敗則會報錯 actor = world.spawn_actor(blueprint, transform) # 創建對象try_spawn_actor(),創建失敗返回None actor = world.try_spawn_actor(blueprint, transform)

獲取地圖上的生成點

# 獲取車輛的生成點 spawn_points = world.get_map().get_spawn_points() # 獲取行人的生成點 spawn_point = carla.Transform() spawn_point.location = world.get_random_location_from_navigation()

創建成功后,將對象添加到對象列表中,便于查找和管理

actor_list = [] actor_list.append(actor)

獲取Carla世界中的對象列表

actor_list = world.get_actors() # 使用id查找對象 actor = actor_list.find(id) # 打印輸出Carla世界中所有限速標志的位置 for speed_sign in actor_list.filter('traffic.speed_limit.*'):print(speed_sign.get_location())

2. 仿真對象

Carla對象中大多數類提供get()和set()方法用于設置讀取和設置仿真對象的屬性。例如獲取車輛的加速度與速度,設置車輛的位置等。

print(actor.get_acceleration()) print(actor.get_velocity())location = actor.get_location() location.z += 10.0 actor.set_location(location)

3. 回收對象

當.py文件執行結束后,創建的對象并不會自動消失,必須顯示調用destroy()函數,才能在Carla世界中回收創建的對象。

# Returns True if successful destroyed_sucessfully = actor.destroy()# 在一個仿真步長中批量回收創建的對象 client.apply_batch([carla.command.DestroyActor(x) for x in vehicles_list])

6. 示例代碼

1. 創建車輛

創建車輛并開啟自動駕駛

ego_vehicle_bp = blueprint_library.find('vehicle.mercedes-benz.coupe') ego_vehicle_bp.set_attribute('color', '0, 0, 0') transform = random.choice(world.get_map().get_spawn_points()) ego_vehicle = world.spawn_actor(ego_vehicle_bp, transform) ego_vehicle.set_autopilot(True)

2. 創建行人

創建行人并使用Ai控制

import glob import os import sys import random import ostry: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 carladef main():try:client = carla.Client('localhost', 2000)client.set_timeout(10.0)world = client.get_world()blueprintsWalkers = world.get_blueprint_library().filter("walker.pedestrian.*")# 創建行人walker_bp = random.choice(blueprintsWalkers)spawn_point = carla.Transform()spawn_point.location = world.get_random_location_from_navigation()walker = world.spawn_actor(walker_bp, spawn_point)# 創建用于控制行人的Aiwalker_controller_bp = world.get_blueprint_library().find('controller.ai.walker')walker_controller = world.spawn_actor(walker_controller_bp, carla.Transform(), walker)# 開啟控制walker_controller.start()walker_controller.go_to_location(world.get_random_location_from_navigation())walker_controller.set_max_speed(1 + random.random()) # Between 1 and 2 m/s (default is 1.4 m/s).# 放置觀察者while(True):spectator = world.get_spectator()transform = walker.get_transform()spectator.set_transform(carla.Transform(transform.location + carla.Location(x=5),carla.Rotation(roll=0, yaw = 180, pitch = 0)))finally:# 停止控制walker_controller.stop()# 回收行人walker.destroy()if __name__ == '__main__':try:main()except KeyboardInterrupt:print(' - Exited by user.')

3. 創建傳感器

創建相機傳感器,將其安裝到車輛上,并將圖片數據保存在電腦中

camera_bp = blueprint_library.find('sensor.camera.rgb') camera = world.spawn_actor(camera_bp, relative_transform, attach_to=my_vehicle) camera.listen(lambda image: image.save_to_disk('output/%06d.png' % image.frame))

4. 放置觀察者

將觀察者放置在車輛上方50m處,視角垂直向下。

spectator = world.get_spectator() transform = vehicle.get_transform() spectator.set_transform(carla.Transform(transform.location + carla.Location(z=50), carla.Rotation(pitch=-90)))

5. 交通標志與信號燈

在Carla中,只有停車,讓路(yield)和紅綠燈被視為對象,其余的交通標志不被視為對象,在Carla中定義為carla.Landmark。在仿真開始時,停車,讓路與紅綠燈自動生成,無法使用藍圖生成這些交通標志,因為藍圖庫中不存在這些交通標志的定義。

Only stops, yields and traffic lights are considered actors in CARLA so far.

When the simulation starts, stop, yields and traffic light are automatically generated using the information in the OpenDRIVE file. None of these can be found in the blueprint library and thus, cannot be spawned.

CARLA maps do not have traffic signs nor lights in the OpenDRIVE file. These are manually placed by developers.


修改紅綠燈狀態。

# 獲取路口處紅綠燈的狀態 if vehicle_actor.is_at_traffic_light():traffic_light = vehicle_actor.get_traffic_light()# 將紅燈改為綠燈if traffic_light.get_state() == carla.TrafficLightState.Red:traffic_light.set_state(carla.TrafficLightState.Green)traffic_light.set_set_green_time(4.0)

總結

以上是生活随笔為你收集整理的Carla 对象和蓝图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。