Wolfram 語言構建 3D 自動駕駛汽車仿真

介紹

在本文中,我們將創建一個簡單的駕駛模擬以訓練分類器來自動駕駛虛擬汽車。我們的模擬將由用戶或計算機組成的 3D 場景組成,該場景由多風的道路和單個汽車控制器組成。汽車將在其前方放置一個攝像頭,以提供其視角 (POV) 的圖像。這個視角圖像將用作我們分類器的輸入來決定如何控制汽車。在模擬的每個步驟中,汽車將被允許向前移動或向左或向右轉彎。

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖1

建立模擬

仿真圖形

我們將首先創建圖形函數來組裝和顯示模擬。首先讓我們為地面創建一個紋理。為簡單起見,我們將柵格化一條包含道路左轉和右轉的內置曲線。

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖2
Wolfram 語言構建 3D 自動駕駛汽車仿真的圖3

接下來,我們將定義一個函數來組裝包含地面和汽車的 3D 場景。我們將使用兩個不同的相機渲染這個場景,以提供道路上汽車的概覽以及汽車的視角圖像。

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖4

最后,我們需要一個函數將 3D 場景中的相機定位在汽車的位置,以記錄視點圖像。此圖像僅在分類時使用,因此我們以相對較低的分辨率進行光柵化。經過一些實驗,我選擇使用 ImageResolution 而不是 RasterSize,因為它生成最終圖像的速度快了 2 倍以上。ViewVector 坐標是通過實驗確定的,以匹配汽車內部的典型視圖。

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖5

我們現在可以將所有圖形函數放在一個單一的總體函數中,該函數顯示整個汽車模擬,包括 3D 場景和汽車視角的插圖。

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖6

模擬內部

隨著我們的模擬圖形完成,我們將繼續構建推進模擬的功能。我們的模擬狀態將包含在單個關聯中,該關聯包含汽車的位置、旋轉和當前 POV 圖像的屬性,以及所有先前 POV 圖像及其相關動作的歷史記錄。

NewCarSim 為新的模擬初始化我們的數據模型。我們允許一個參數來定義汽車從軌道上的哪個方向開始。我們將在“前進”方向生成訓練數據,然后在相反方向測試訓練好的自動駕駛汽車。

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖7

推進模擬很容易,StepCarSim 采用模擬狀態和動作,“向上”、“向左”或“向右”之一,并相應地移動汽車。每次模擬向前推進時,當前汽車 POV 圖像都會與歷史列表中提供的操作一起保存。在模擬步驟結束時,生成新的汽車 POV 圖像。

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖8

我們的模擬幾乎完成,現在是時候構建交互式界面,讓一個人駕駛汽車并生成訓練數據。

生成示例訓練數據

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖9
Wolfram 語言構建 3D 自動駕駛汽車仿真的圖10

當我手動駕駛汽車沿著整條賽道行駛時,模擬生成了近 600 個訓練示例。如果您不想創建自己的數據,可以在下面的補充材料部分找到這些數據。讓我們來看看一些訓練示例:

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖11
Wolfram 語言構建 3D 自動駕駛汽車仿真的圖12

訓練自動駕駛汽車

生成示例數據后,我們現在準備訓練分類器來駕駛汽車!

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖13
Wolfram 語言構建 3D 自動駕駛汽車仿真的圖14

我選擇指定邏輯回歸是因為它在相對較短的計算時間內提供了最好的準確性。我們可以顯示關于我們的分類器的信息并看到超過 70% 的準確率。通過檢查學習曲線和準確率曲線,看起來我們的學習接近極限,但可能仍然可以從更多的訓練示例中受益。盡管如此,憑借我們少量的示例數據,自動駕駛汽車表現良好。

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖15
Wolfram 語言構建 3D 自動駕駛汽車仿真的圖16

為了預覽我們的自動駕駛汽車,我們將使用我們的新分類器來駕駛汽車進行一百次模擬。這只會讓我們繞軌道走一點路,但表明分類器正在工作。

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖17
Wolfram 語言構建 3D 自動駕駛汽車仿真的圖18

我們可以增加看到汽車行駛到最后的步驟數,但由于渲染性能相對較慢,我更喜歡每 5 或 10 幀進行預渲染,然后將它們組裝在 Manipulate 中,以便輕松地來回平移:

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖19
Wolfram 語言構建 3D 自動駕駛汽車仿真的圖20

那么,我們的自動駕駛汽車的工作情況如何?事實上很好。它可以輕松地沿著整個軌道行駛,并且也可以保持在道路的右側行駛!但是如果我們在錯誤的道路一側啟動汽車會發生什么?它會混淆嗎?讓我們來看看:

Wolfram 語言構建 3D 自動駕駛汽車仿真的圖21
Wolfram 語言構建 3D 自動駕駛汽車仿真的圖22

當自動駕駛汽車從道路的錯誤一側起步時,它會立即糾正并轉向右側! 我們的汽車運行良好,特別是考慮到適度的訓練集和有限的 Classify 手動優化。

結論

總之,我們可以使用 Mathematica 來創建和渲染 3D 模擬,同時還可以與其機器學習工具連接以構建完整的端到端實驗系統。我希望這個例子可以讓您深入了解 Mathematica 的機器學習和圖形功能的強大功能。

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

6
3
2