客戶端和世界是CARLA的兩個基礎概念,是控制仿真及其中執行器(actor)所必需的抽象。
本教程介紹了它們的基本定義以及如何創建它們。
原文鏈接:https://carla.readthedocs.io/en/latest/core_world/
文章目錄
1. 客戶端
客戶端是CARLA體系結構中的主要元素之一。 它們能連接到服務器、檢索信息和更改命令,這些操作可以通過腳本完成。 客戶端明確自己的身份,並連接到世界,然後進行仿真操作。
此外,客戶端還可以訪問 CARLA 高級模塊、高級特性,並能應用命令批處理。 這裏面我們在本節只討論命令批處理。 如果大量的執行器(Actor),這些都是有用,並且是基本的。 客戶端其餘的特性則更爲複雜,它們將在各自的頁面中以及高級特性中進行講解。
請查看Python API參考中的carla.Client,以瞭解該類的特定方法和變量。
1.1 客戶端的創建
需要兩個參數:標識它的IP
地址,以及與服務器通信的兩個TCP端口
。 可選的第三個參數爲工作線程的數量。 默認情況下,該值設置爲全部(0
)。Code recipe 顯示了在運行腳本時如何將這些解析爲參數。
默認情況下,Carla使用本地主機IP和端口2000進行連接,但這些可以隨意更改。我們只需要設置第一個TCP端口的端口號,第二個端口爲N+1
,如在下面的代碼中第二個TCP端口爲2001。
client = carla.Client('localhost', 2000)
創建客戶端後,設置其超時(time-out)
。 這會限制所有網絡操作, 使它們不能一直阻塞客戶端。 如果連接失敗,將返回錯誤。
client.set_timeout(10.0) # seconds
可以連接多個客戶端,同時運行多個腳本是很常見的。 在具有高級CARLA功能(如流量管理器)的多客戶端方案中工作,通信會變得更加複雜。
注意:客戶端和服務器具有不同的
libcarla
模塊。 它們的版本不同會出現問題。 這裏可以使用GET_CLIENT_VERSION()
和GET_SERVER_VERSION()
的方法來檢查。
1.2 與“世界”的連接
客戶端可以相當容易地連接和檢索當前“世界”:
world = client.get_world()
客戶端還可以獲取可用地圖列表以更改當前地圖。 這將刪除當前的“世界”,並創造一個新的“世界”。
print(client.get_available_maps())
...
world = client.load_world('Town01')
# client.reload_world() 使用相同的地圖創建世界的新實例
每個世界對象都有一個ID
或 episode。 每次客戶端調用load_world()
或reload_world()
時,前一個都會被刪除。 新的一個是從頭開始構建的。 虛幻引擎在此過程中不會重新啓動。
1.3 批處理命令
下面的命令是一些最常用的 CARLA 方法的改編,可以批量應用。 例如,command.SetAutopilot
等效於Vehicle.set_autopilot()
,用於啓用車輛的自動駕駛。 但是,使用方法Client.Apply_Batch
或Client.Apply_Batch_sync()
,可以在單步仿真中應用命令列表。 對於應用於數百個元素的方法來說,這非常有用。
在下面的示例我們使用批處理刪除所有車輛列表:
client.apply_batch([carla.command.DestroyActor(x) for x in vehicles_list])
Python API 參考列出了所有可用的命令。
1.4 客戶端其他功能
客戶端的主要用途是獲取或更改世界的參數,併發布命令。 同時它還提供對一些附加功能的訪問。
2. “世界”
個人感覺
world
理解爲“場景”可能更合適一點。
仿真的主要規則。其實例可以由客戶端檢索。它不包含世界本身的模型(這是Map類的一部分), 但是大多數信息和常規設置都可以通過這個類中訪問:
- 模擬中的對象(actors)和觀察者(spectator)
- 藍圖庫
- 地圖
- 仿真設置
- 快照
- 天氣和燈光管理器
它的一些最重要的方法是getters
,可以準確地檢索這些元素的信息或實例。 查看carla.World
,瞭解更多關於它的信息。
2.2 執行器(Actors)
“世界”有不同的與執行器相關的方法,它們有不同的功能。
- 產生演員(但不能刪除他們)
- 讓每個執行器到仿真場景中,或者找到一個特別的執行器
- 訪問藍圖庫
- 訪問觀察者,即仿真的視點
- 檢索適合產生執行器的隨機位置
生成將在下一個筆記解釋。 這需要對藍圖庫、屬性等有所瞭解。
2.3 天氣
天氣本身不是一個類,而是一組可以從“世界”訪問的參數。 參數包括太陽方向、雲量、風、霧等。 幫助類carla.WeatherParameters
用於定義自定義天氣。
weather = carla.WeatherParameters(
cloudiness=80.0,
precipitation=30.0,
sun_altitude_angle=70.0)
world.set_weather(weather)
print(world.get_weather())
有一些天氣預設可以直接應用於世界。 這些參數列在carla.WeatherParameters
中,可以作爲枚舉進行訪問。
world.set_weather(carla.WeatherParameters.WetCloudySunset)
注意: 天氣的變化不會影響物理學性能。 它們只是攝像機可以捕捉到的視覺效果。
2.4 燈光
當sun_alight_angle
< 0時進入夜間模式(這被認爲是日落)。 這就是路燈和車燈變得特別重要的時候。
-
路燈會在夜間模式開始時自動亮起。 路燈由地圖開發人員放置,並可作爲
carla.Light
對象進行訪問。 它們的屬性可以改變。 可以檢索carla.LightManager
的實例來處理燈光組。 -
車燈必須由用戶打開/關閉。 每輛車都在
carla.VehicleLightState
中列出了一組燈。 到目前爲止,並不是所有的車輛都集成了燈。 以下是在撰寫本文時可用的列表。- 自行車, 庫裏的自行車都有前後燈
- 摩托車,庫裏有雅馬哈和哈雷·戴維森模特
- 汽車,CARLA庫裏有 奧迪TT,雪佛蘭,道奇(警車),埃特龍,林肯,野馬,特斯拉3S,大衆T2和新來賓。
可以使用方法carla.Vehicle.get_light_state
和carla.Vehicle.set_light_state
隨時檢索和更新車輛的燈光。 它們使用二進制操作來自定義燈光設置。
# Turn on position lights
current_lights = carla.VehicleLightState.NONE
current_lights |= carla.VehicleLightState.Position
vehicle.set_light_state(current_lights)
2.5 調試
World對象將carla.DebugHelper
對象作爲公共屬性。 它允許在仿真期間繪製不同的形狀。 這些可以用於跟蹤發生的事件。 下面的示例將在執行器的位置和旋轉處繪製一個紅色方框:
debug = world.debug
debug.draw_box(carla.BoundingBox(actor_snapshot.get_transform().location,carla.Vector3D(0.5,0.5,2)),actor_snapshot.get_transform().rotation, 0.05, carla.Color(255,0,0,0),0)
此示例在 code recipe 中進行了擴展,以便爲世界快照中的每個執行器繪製方框。
2.6 世界快照
包含仿真中每個執行器在某一幀的狀態,是一種帶有時間參考的靜止的世界圖像。 信息來自相同的仿真步驟,即使在異步模式下也是如此。
# Retrieve a snapshot of the world at current frame.
world_snapshot = world.get_snapshot()
一個carla.WorldSnapshot
包含一個carla.Timestamp
和一個carla.ActorSnapshot
列表。 可以使用執行元的ID
搜索執行器快照。 快照列出了出現在其中的執行器的ID
。
timestamp = world_snapshot.timestamp # Get the time reference
for actor_snapshot in world_snapshot: # Get the actor and the snapshot information
actual_actor = world.get_actor(actor_snapshot.id)
actor_snapshot.get_transform()
actor_snapshot.get_velocity()
actor_snapshot.get_angular_velocity()
actor_snapshot.get_acceleration()
actor_snapshot = world_snapshot.find(actual_actor.id) # Get an actor's snapshot
2.7 世界的設置
世界可以訪問一些用於設置的高級配置。 這些參數確定渲染條件、仿真時間步長以及客戶端和服務器之間的同步。 可以從幫助類carla.WorldSettings
訪問它們。
目前,Carla 默認以最佳的圖形質量、可變的時間步長和異步方式運行。 要進一步深入瞭解這一問題,請查看高級部分。 頁面上的同步和時間步長以及渲染選項可能是一個很好的起點。
這是對世界和客戶端對象的概括。 下一步將更仔細地研究執行器和藍圖,以賦予仿真生命。