標(biāo)注:本文來自本實驗室胡宗盛的研究成果。
GPS系統(tǒng)數(shù)字孿生建模的仿真模型實時同步數(shù)據(jù)中,實時與仿真時間之間存在差異,模擬世界擁有自己的時鐘和時間,由服務(wù)器來執(zhí)行, 計算兩個模擬步驟需要一些實時的時間,但是在這兩個模擬時刻之間也存在時間跨度, 即時間步長,服務(wù)器只有在等待一個客戶端發(fā)送的 world_tick() 后才會計算下一個 step, 為了搜集同步的數(shù)據(jù),要同時設(shè)置同步模式和固定時間步。
可變的時間步長
下面是 carla 中的默認(rèn)模式,步驟之間經(jīng)過的仿真時間將是服務(wù)器計算這些步驟所花費的時間:
settings=world.get_settings()
settings.fixed_delta_seconds=None
world.apply_settings(settings)
設(shè)置時間步長為 0:python3 config.py –delta-seconds 0
固定時間步
步驟之間經(jīng)過的時間保持不變,如果將其設(shè)置為 0.05 秒,則每秒鐘模擬 20 幀,在每個步驟上都使用相同的時間增量是模擬手機(jī)數(shù)據(jù)的最佳方法,物理和傳感器數(shù)據(jù)將對應(yīng)于易于理解的仿真時刻。同樣,如果服務(wù)器足夠快,則可以在較短的時間內(nèi)模擬更長的時間段。
settings=world.get_settings()
settings.fixed_delta_seconds=0.05
world.apply_settings(settings)
或者使用提供的腳本進(jìn)行設(shè)置時間步長為 0.05:python3 config.py –delta-seconds 0.05。
記錄模擬的提示
carla 具有記錄器功能,可以記錄模擬然后重新執(zhí)行。但是在尋找精度時候,需要考慮一些因素。使用固定時間步的話,重新制定將會很容易,可以將服務(wù)器設(shè)置為原始模擬中使用的相同時間步;有了可變的時間步,事情就變得更加復(fù)雜了。
如果服務(wù)器以可變的時間步長運行,則該時間步長將不同于原始時間步長,因為邏輯周期有時候會不同,然后將使用記錄的數(shù)據(jù)對信息進(jìn)行插值;如果服務(wù)器被迫重現(xiàn)完全的時間步長,則模擬的步長將相同,但是它們之間的實時時間會改變。時間步應(yīng)該要一一隨之改變,這些原始時間步是原始模擬盡可能快的運行的結(jié)果,由于表示這些事件所花費的時間將大部分不同,因此模擬必然會隨著怪異的時間波動而重現(xiàn);可變時間步長會引入浮點算術(shù)錯誤,仿真運行的時間步長等實際時間步長,實時是一個連續(xù)變量,在模擬中用一個 float 值表示,該值具有十進(jìn)制限制,累計在每個步驟上的時間會累積,從而使得模擬無法精確重復(fù)發(fā)生的事情。
客戶端-服務(wù)器同步
carla 建立在客戶端-服務(wù)器體系結(jié)構(gòu)之上,服務(wù)器運行模擬,客戶端獲取信息,并要求對世界進(jìn)行改變。默認(rèn)情況下,carla 在異步模式下運行,服務(wù)器盡可能快的模擬運行,無需等待客戶端;在同步模式下,服務(wù)器在更新到下一步模擬步驟之前要先等待客戶端的準(zhǔn)備就緒的消息。
設(shè)定同步模式在同步模式和異步模式之間切換僅僅是布爾狀態(tài)的問題。
settings=world.get_settings()
settings.synchronous_mode=True
world.apply_settings(settings)
如果要禁用同步模式,只需要將變量設(shè)置為 false,或者使用腳本 python3 config.py–np。需要注意的是不能夠使用腳本來啟用同步模式,只能夠禁用。啟用同步模式會使服務(wù)器等待客戶端應(yīng)答。使用此腳本,用戶無法在需要時發(fā)送報價。
使用同步模式同步模式與慢速客戶端應(yīng)用程序相關(guān),并且當(dāng)需要不同元素之間的同步時,如果客戶端太慢而服務(wù)器不等待,會出現(xiàn)信息溢出,客戶端無法管理所有內(nèi)容,并且將丟失或混淆所有內(nèi)容。以下代碼段擴(kuò)展了上一個代碼段??蛻舳藙?chuàng)建一個攝像頭傳感器,將當(dāng)前步驟的圖像數(shù)據(jù)存儲在隊列中,并且在隊列中檢索服務(wù)器后對服務(wù)器進(jìn)行打勾。
可能的配置如果是同步模式和可變時間步長,基本上可以確定這是沒有什么希望的,因為當(dāng)時間步長大于 0.1s 時,物理學(xué)將會無法正常運行,如果服務(wù)器必須等待客戶端計算步驟,則很可能會發(fā)生這種情況,仿真時間和物理原理不會同步, 模擬將會變得不可靠。
如果是同步模式和固定時間步長,客戶將負(fù)責(zé)模擬,時間步長固定,在客戶端發(fā)送報價之前,服務(wù)器將不計算下一步,當(dāng)同步性和精度相關(guān)時,這是最佳的模式了,尤其是在于慢速客戶或者其他元素檢索信息時。 如果是異步模式和可變時間步長,這個是 carla 的默認(rèn)狀態(tài),客戶端和服務(wù)器端是異步的,模擬時間根據(jù)實時時間流逝,當(dāng)我們重新執(zhí)行仿真時,需要考慮浮點運算錯誤以及服務(wù)器之間時間步長的可能差異。 如果是異步模式和固定時間步長,服務(wù)器將盡可能快速的運行,檢索到的信息將很容易與模擬中的準(zhǔn)確時刻相關(guān)聯(lián),如果服務(wù)器足夠快,則此配置可以以短得多的實時時間來模擬長時間。 |
結(jié)果顯示用 pygame 將收集到的數(shù)據(jù)顯示出來,打印出服務(wù)器端的fps 和客戶端的 fps:
可以看到服務(wù)器的 fps 是 30,客戶端的 fps 是 20 左右。同步模式下客戶端不會自動計算下一個 step,它只有在接收一個 world.tick() 之后才會計算下一個 step,然后暫停仿真,繼續(xù)等待下一個 world.tick()。
本文結(jié)合數(shù)字孿生仿真建模工具carla,對自動駕駛GPS 傳感器進(jìn)行建模,主要指獲取自動駕駛汽車的GPS 數(shù)據(jù),位置信息,星歷數(shù)據(jù)等,在此基礎(chǔ)上嘗試獲取同步的傳感器數(shù)據(jù),要求服務(wù)器端與客戶端同步,固定時間步長,設(shè)置同步模式,借助pygame,在carla 自動駕駛仿真模擬器中實現(xiàn)GPS 傳感器和定位信息的實時可視化建模,實現(xiàn)數(shù)據(jù)的實時交互和呈現(xiàn)。
fqj
-
自動駕駛
+關(guān)注
關(guān)注
782文章
13633瀏覽量
165992 -
數(shù)字孿生
+關(guān)注
關(guān)注
4文章
1268瀏覽量
12180
發(fā)布評論請先 登錄
相關(guān)推薦
評論