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