carla-recorder錄像機(jī)

錄像機(jī)

crala的這個(gè)特性使得可以使用它來記錄或者復(fù)現(xiàn)之前的仿真場景,所有發(fā)生的事件都被記錄在recoder file之中。

recording 記錄

所有的數(shù)據(jù)都寫在服務(wù)器端的二進(jìn)制文件里,但recoder是通過carla.client來管理的。
重要 直至回訪截止,車輛都會(huì)被設(shè)置成自動(dòng)駕駛模式,但是行人會(huì)停止。
recoder file 包括了與“角色”相關(guān)的信息:

  • “角色”的創(chuàng)建和毀滅
  • 交通燈的狀態(tài)變換
  • 車輛和行人的位置和角度
    要開始recorder的話,你只需要指定路徑和文件名就可以了,如果不指定的話,文件會(huì)默認(rèn)存放在CarlaUE4/Saved
client.start_recorder("/home/carla/recording01.log")

停止recorder也很簡單粗暴:

client.stop_recorder()

注意 估計(jì)來說,50個(gè)交通燈和100輛車記錄一個(gè)小時(shí)大概需要200M的磁盤空間。

仿真回放

回放可以在仿真過程中的任何時(shí)間開啟,除了需要log file的路徑外,這種方法也需要一些其他參數(shù)。

client.replay_file("recording01.log", start, duration, camera)
參數(shù) 描述 注意
start 記錄開始仿真的時(shí)間,單位為秒 如果為正值,從記錄的開始算起,如果單位為負(fù)值,則從記錄的結(jié)束往前算
duration 回放的時(shí)長,0則是代表整個(gè)全部 直至回訪截止,車輛都會(huì)被設(shè)置成自動(dòng)駕駛模式,但是行人會(huì)停止。
camera 攝像頭會(huì)聚焦的“角色”ID 設(shè)置為0可以讓監(jiān)視器自由移動(dòng)
設(shè)置時(shí)間元素 time factor

time factor會(huì)決定回訪的速度,它可以在不停止回復(fù)的情況下隨時(shí)進(jìn)行更改。

client.set_replayer_time_factor(2.0)
參數(shù) 默認(rèn) 最快 最慢
time_factor 1.0 >1.0 <1.0

重要 如果time_factor>2.0,“角色”的位置插值是不可用的,并只能更新。行人的的動(dòng)畫則不受time factor的影響。

錄像文件

記錄的細(xì)節(jié)可以通過使用簡單的API調(diào)用來檢索,默認(rèn)的話,只檢索注冊(cè)了事件的幀,將參數(shù)設(shè)定為show_all會(huì)返回所有幀的所有信息。關(guān)于存儲(chǔ)數(shù)據(jù)的細(xì)節(jié)請(qǐng)參閱這里.

# Show info for relevant frames
print(client.show_recorder_file_info("recording01.log"))
  • **Opening information ** 地圖、數(shù)據(jù)和仿真被記錄的時(shí)間
  • Frame information 任何可能發(fā)生的事件,例如“角色”的產(chǎn)生或碰撞。它包含了“角色”的ID和附加信息。
  • Closing information 幀數(shù)和記錄的所有時(shí)間。
Version: 1
Map: Town05
Date: 02/21/19 10:46:20

Frame 1 at 0 seconds
 Create 2190: spectator (0) at (-260, -200, 382.001)
 Create 2191: traffic.traffic_light (3) at (4255, 10020, 0)
 Create 2192: traffic.traffic_light (3) at (4025, 7860, 0)
 ...
 Create 2258: traffic.speed_limit.90 (0) at (21651.7, -1347.59, 15)
 Create 2259: traffic.speed_limit.90 (0) at (5357, 21457.1, 15)

Frame 2 at 0.0254253 seconds
 Create 2276: vehicle.mini.cooperst (1) at (4347.63, -8409.51, 120)
  number_of_wheels = 4
  object_type =
  color = 255,241,0
  role_name = autopilot
... 
Frame 2350 at 60.2805 seconds
 Destroy 2276

Frame 2351 at 60.3057 seconds
 Destroy 2277
...

Frames: 2354
Duration: 60.3753 seconds

Queries 查詢

碰撞

車輛必須有與之綁定的collision dectector來記錄碰撞。這是可以被查詢的,使用參數(shù)可以過濾碰撞相關(guān)“角色”的類型,例如:h確定role_name = hero的“角色”,通常與用戶管理的車輛是相關(guān)的。下面是一些查詢可用的具體的“角色”類型設(shè)置。

  • h = Hero
  • v = Vehicle
  • w = Walker
  • t = Traffic light
  • o = Other
  • a = Any
    注意 manual_sontrol.py腳本為ego車輛指定了role_name = hero.
    碰撞查詢需要2個(gè)參數(shù)來過濾碰撞,寫面的示例將展示車輛之間和其他任何物體的碰撞。
print(client.show_recorder_collisions("recording01.log", "v", "a"))

輸出總結(jié)了碰撞的時(shí)間、類型、ID以及相關(guān)“角色”的描述。

Version: 1
Map: Town05
Date: 02/19/19 15:36:08

    Time  Types     Id Actor 1                                 Id Actor 2
      16   v v     122 vehicle.yamaha.yzf                     118 vehicle.dodge_charger.police
      27   v o     122 vehicle.yamaha.yzf                       0

Frames: 790
Duration: 46 seconds

重要 由于是heroego來注冊(cè)碰撞,所以它通常會(huì)是Actor 1。
碰撞可以通過使用recorder并設(shè)定時(shí)間發(fā)生前的時(shí)間來復(fù)現(xiàn)。

client.replay_file("col2.log", 13, 0, 122)

在本案例中,回放如下。


image

Blocked actor 被堵“角色”

檢測記錄中車輛的擁堵,“角色”的擁堵是用過在一定時(shí)間下沒有移動(dòng)超過一定距離來定義的。這種定義使用者可以在查詢時(shí)來決定。

print(client.show_recorder_actors_blocked("recording01.log", min_time, min_distance))
Parameter 描述 默認(rèn)
min_time 移動(dòng)最小距離的最小時(shí)間 30s
min_distance 不被認(rèn)為是擁堵所需移動(dòng)的最小距離 10cm

注意 有些時(shí)候車倆在紅綠等前的等待時(shí)間可能比預(yù)期要久,也可能會(huì)被認(rèn)為是擁堵。
下面的例子假設(shè)車輛在60s內(nèi)移動(dòng)不超過1m即為擁堵。

client.show_recorder_actors_blocked("col3.log", 60, 100)

輸出是按持續(xù)時(shí)間來分類的,即是車輛在擁堵狀態(tài)下移動(dòng)最小距離耗費(fèi)的時(shí)間。

Version: 1
Map: Town05
Date: 02/19/19 15:45:01

    Time     Id Actor                                 Duration
      36    173 vehicle.nissan.patrol                      336
      75    214 vehicle.chevrolet.impala                   295
     302    143 vehicle.bmw.grandtourer                     67

Frames: 6985
Duration: 374 seconds

173車輛在36秒時(shí)停止了336秒,可以通過復(fù)現(xiàn)36秒之前的一些時(shí)間來進(jìn)行回放。

client.replay_file("col3.log", 34, 0, 173)
image

python腳本示例

官方在PythonAPI/examples路徑下提供了一些腳本,可以幫助recorder的使用。

  • start_recording.py 可以啟動(dòng)recorder,記錄的持續(xù)時(shí)間可以被設(shè)置,并且可以在開始的時(shí)候產(chǎn)生“角色”。
參數(shù) 描述
-f 文件名稱
-n(可選) 產(chǎn)生車輛,默認(rèn)是10
-t(可選) 記錄持續(xù)的時(shí)間
  • start_replaying.py 啟動(dòng)記錄的回放,開始時(shí)間、持續(xù)時(shí)間、追蹤的“角色”都可以設(shè)定。
參數(shù) 描述
-f 文件名稱
-s(可選) 開始時(shí)間,默認(rèn)是10
-d(可選) 持續(xù)時(shí)間,默認(rèn)是全部
-c(可選) 追逐“角色”的ID
  • show_recorder_file_info.py 展示記錄文件的所有信息,默認(rèn)情況下只顯示有記錄事件的幀,但是也可以顯示所有幀。
參數(shù) 描述
-f 文件名稱
-s(可選) 顯示所有細(xì)節(jié)的標(biāo)志
  • show_recorder_collisions.py 展示A和B類型“角色”的標(biāo)記的碰撞,-t = vv會(huì)顯示車輛間的所有碰撞。
參數(shù) 描述
-f 文件名稱
-t 涉及的“角色”的標(biāo)記h = hero
v = vehiclew = walkert = traffic lighto = othera = any
  • show_recorder_actors_blocked.py 展示被認(rèn)為是擁堵的車輛,車輛在一定時(shí)間內(nèi)沒有移動(dòng)超過一定距離就被認(rèn)定為擁堵。
參數(shù) 描述
-f 文件名稱
-t(可選) 在被認(rèn)為是擁堵前的時(shí)間
-d(可選) 不被認(rèn)為是擁堵所需移動(dòng)的距離

后話

現(xiàn)在是時(shí)候進(jìn)行一下實(shí)驗(yàn)了,使用recorder去回放一個(gè)仿真過程,追蹤發(fā)生的時(shí)間,并試著修改一下源碼看下效果,有神馬問題都可以去carla的論壇提問。

https://carla.readthedocs.io/en/latest/adv_recorder/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容