自動駕駛仿真平臺(二)

如何構建自動駕駛仿真系統?

仿真最主要的目的是:通過模擬真實環境和構建汽車模型,找出自動駕駛過程中可能出現的問題。那麼如何構建自動駕駛仿真系統呢?目前主流的實現方式是通過遊戲引擎來模擬真實環境,通過CarSim等軟件構建汽車的動力學模型來實現自動駕駛仿真。下面我們先看下自動駕駛仿真系統的整體結構。

自動駕駛仿真平臺(二)

我們需要自動駕駛仿真系統滿足:

  1. 場景豐富
  2. 接口靈活
  3. 恢復快速
  4. 部署方便

場景

首先我們關注仿真器本身,仿真器無非是模擬支持各種場景,其中場景分為:可以定義的場景和隨機場景。可以定義的場景又分為:單元場景和真實場景。下面我們分別介紹下這幾種場景:

  • 可定義的場景: 主要是針對駕駛過程中遇到的不同情況,比如會車,超車,紅綠燈,變道等,這些場景一般都比較簡單,類似於單元測試,主要是測試單個場景是否能夠滿足要求,這一部分業界已經有規範,可以參考openscenario 。拿超車的場景舉例子,可以創建一輛NPC車輛在本車的前面,在不同的速度和距離條件下,測試本車超車是否成功。
  • 真實場景: 復現真實場景中遇到的問題,比如真實路測過程中遇到問題,需要復現當時的情況,並且驗證問題是否已經解決,可以回放真實場景的數據來進行測試。
  • 隨機場景: 這種場景類似於路測,模擬真實環境中的地圖,並且隨機生成NPC,天氣,交通情況等,模擬汽車在虛擬的環境中進行路測,由於可以大規模部署,可以快速的發現問題。

我們可以看到不管是哪個場景,都是"地圖+車+行為"的模式,場景的需求複雜多變,因此能夠靈活的加載地圖,車和行為就成為仿真器易用性的關鍵。

自動駕駛仿真平臺(二)

我們的需求是能夠根據不同的要求創建不同的場景,動態的添加地圖,車和行為。場景生成器是一個框架,支持通過不同的配置,動態創建不同的場景,來滿足我們的要求。除了場景生成器,我們還需要仿真器具備以下幾個基本功能:

  • 復位 - 在故障發生之後,我們能夠復位環境和車輛到初始狀態,同時也要求我們能夠復位對應的自動駕駛系統。這樣再每次故障後,可以不用人工操作,而自動恢復測試。
  • 快照 - 能夠生成對應幀的信息,保存快照的好處是能夠恢復事故現場,同時也可以用於自動駕駛數據集的建設。保存的點雲和圖片有groundtruth,可以作為機器學習的輸入來訓練模型。
  • 回放 - 回放功能主要是用於故障定位,在發生碰撞之後,回放信息用於定位問題。
  • 統計 - 統計主要是用於作為benchmark,來衡量系統的穩定性。

有了這些基礎功能還不夠,我們還需要關心具體的場景,下面我們分別對地圖、車以及行為來詳細描述需要實現的具體功能:

1. 地圖

地圖是場景中第一個需要考慮的,地圖包括2部分,其中一部分是遊戲中的模型,另外一部分是這些模型的高精度地圖。換一種說法就是,首先我們需要在遊戲中構建一個1:1的虛擬世界,然後再繪製出這個世界的高精度地圖。其實遊戲中的模型是遊戲引擎的需求,遊戲引擎是根據模型來渲染遊戲畫面的,沒有模型也就渲染不出地圖。而高精度地圖是自動駕駛系統所需要的,高精度地圖可以採用根據現場繪製的地圖,也可以先得到遊戲模型,然後在模型中繪製。下面是遊戲中的地圖和高精度地圖的對應關係。

自動駕駛仿真平臺(二)

真實場景地圖生成

地圖模型製作

遊戲中地圖模型的製作相對來說是工作量比較大的工作,涉及到以下2點:

  • 單個模型製作 - 單個模型包括地圖中的建築物、道路、樹木、信號燈、交通牌、以及其他的信息。這些信息如果是要完全模擬真實環境,需要大量的材質和貼圖,一般是在maya和3d-max等軟件中建模,然後再導入模型到遊戲引擎中使用。
  • 地圖佈局 - 有了單個模型,當需要把單個模型組合成地圖的時候,首先需要解決的是道路的位置信息,比如這個道路有多長,道路的曲率是多少?比較簡單點的方法是直接導入2維地圖(百度,高德,OSM),然後對照著2維地圖放模型,最後生成整個地圖的佈局。而實際的問題是2維地圖的精度往往達不到要求,國內的地圖還加入了GPS偏置,所以生成的地圖佈局必定會不太準確。

高精度地圖製作

  • 根據模型生成地圖 - 接著上面的地圖佈局來講,雖然得到的地圖佈局不準確,但是我們再根據遊戲中的模型佈局,繪製出高精度地圖,然後把這個高精度地圖給自動駕駛系統使用,基本上也能滿足我們的要求。
  • 根據地圖生成模型 - 上述的問題就是遊戲中的真實位置和實際道路的位置有輕微的誤差。要解決上面的問題,我們可以反其道而行之,先生成高精度地圖,即根據真實環境先繪製出高精度地圖,然後再把高精度地圖導入遊戲引擎,動態的生成模型,這個方案的好處是地圖100%是真實場景,而且不需要在遊戲引擎中重新繪製高精度地圖,壞處是建築的模型無法生成。

關於真實場景的地圖生成,目前還沒有一個比較完美的解決方案,都需要大量的工作。下面我們再看下虛擬場景的地圖生成。

虛擬場景地圖生成

虛擬場景的道路生成就比較簡單,主要的應用場景是一些園區,或者一些測試場景。這一部分完全可以製作一個地圖編輯器,類似遊戲中的地圖編輯器,玩家可以根據自己的需求創建遊戲中的地圖,然後再由腳本動態的生成高精度地圖。

這部分的功能主要是對標Carsim等仿真軟件的地圖編輯功能

自動駕駛仿真平臺(二)

說完了地圖,接下來看下車。

2. 車

車主要分為2部分:車的動力學模型,以及傳感器。接下來我們詳細分析下這2部分:

  • 車的動力學模型
    - 這一部分是傳統仿真軟件的強項,由於應用已經非常成熟,遊戲中的汽車動力學模型都比較簡單,由於CarSim等軟件沒有開源,所以目前短期內一個比較好的解決方案是,仿真器提供API接口,調用CarSim和Simulink等軟件的動力學模型,實現對汽車的模擬。
  • 傳感器 - 傳感器主要是GPS、IMU、LIDAR、RADAR、CAMERA等,涉及到傳感器的位置,校準參數等。當然這一部分也可以仿真傳感器視野範圍(FOV),也可以仿真傳感器的校準算法。

3. 行為

現在我們加載了地圖,車輛,接著我們需要定義一些行為來模擬真實世界。

NPC

npc包括行人和車輛。

  • 行人 - 目前主要是模擬行人過馬路,以及在路邊行走,以及更加複雜的場景,例如下雨天打傘的行人,對於這些異常場景,感知模塊不一定能夠正常識別。
  • 車輛 - 車輛的行為可以由一些簡單的行為來模擬複雜的行為,例如停車,變道,加速,減速,來組合出超車,會車等複雜行為。也可以通過模擬真實情況的交通流數據,來模擬整個行為。前一種測試的行為比較成熟,後一種需要根據實際的情況提取出行為,再加入補全信息,才能夠正常工作。

天氣

天氣主要是影響傳感器的感知,最主要的就是攝像頭。對LIDAR的影響由於目前沒有閱讀相關平臺是否有加入噪聲,這裡就先不展開了。

  • 天氣 - 雨、雪、霧、雲層 調整不同的比率來模擬不同的天氣情況對傳感器的影響,雲層主要是會影響光照變化,多雲投射的陰影對車道線識別等會有影響。
  • 時間 - 白天和夜晚不同光照場景下對傳感器的影響。

紅綠燈

這一部分可以歸納為交通信號的行為,其中分為:

  • 有保護的紅綠燈 - 各大城市是最普遍的,即有箭頭的紅綠燈,根據對應車道的紅綠燈直行或者拐彎。
  • 無保護的紅綠燈 - 即圓形的紅綠燈,對面可以直線的同時,你可以拐彎,需要注意對面直行的車輛,選擇讓車之後再拐彎。
  • 無紅綠燈 - 這種常見於郊區路口,需要判斷有沒有車輛經過而讓行或者停止,然後再通過路口。

關於仿真器就介紹完畢了,那麼我們如何控制仿真器來實現這些呢?

API

目前主要是通過python API的方式來控制仿真器加載模型,控制仿真器的行為。好處是不用圖形界面手工操作,可以實現自動化部署。API的主要是根據上述所說仿真器的功能實現統一的接口,實現交互。

部署

為了提高測試效率,我們還需要大規模部署,一個比較好的方式是通過容器化的方式部署。針對於多臺機器,一個顯而易見的需求就是創建一個管理平臺來實現對仿真器的管理。容器部署平臺可以監控對應仿真器的狀態,並且提供可視化的配置界面,生成和部署不同的場景。

  • 監控 - 可以監控仿真器的監控狀態,顯示正常和有問題的集群,保存日誌,維護集群的穩定。
  • 可視化 - 首先是配置可視化,可以方便的選擇不同的配置(不同的地圖,車,行為)來生成不同的場景,其次是通過可視化反饋仿真結果,屏蔽仿真集群的細節,使用起來更加直觀方便。
自動駕駛仿真平臺(二)

總結

最後根據功能劃分,我們可以單獨仿真自動駕駛系統的規劃控制模塊,也可以單獨仿真感知模塊,可以仿真傳感器校準,也可以端到端的仿真所有模塊。可以仿真單個受限的場景,也可以仿真整個地圖。總之,仿真系統需要提供靈活的場景生成框架,統一的API接口,以及大規模部署的能力。

自動駕駛仿真平臺(二)


分享到:


相關文章: