做自動駕駛的工具有不少,我只取一瓢——MATLAB/Simulink。今天主要來聊兩部分,

1、如何精準獲取MATLAB/Simulink關於自動駕駛方面的學習資料;2、從MATLAB/Simulink可以學習到哪些自動駕駛知識

本文整理自我的一個回答,如果您之前看過那個回答,可以略過。

特別宣告,以下有部分圖片引自MATLAB/Simulink的幫助文件以及MathWorks公開課或演講(尤其感謝MathWorks中國公司員工的線上公開課影片),如果MathWorks公司認為不妥,可聯絡我刪除。另外,以下內容主要是基於MATLAB R2020a和R2019b,低版本可能略有出入。

1、如何精準獲取MATLAB/Simulink關於自動駕駛方面的學習資料

MathWorks官網是個寶,有事沒事上去逛逛興許就能學到東西。MATLAB使用者很多很多,但我相信會去逛MathWorks官網的人並不多。官網有很多好東西,只是上面的內容實在太多了,在不熟悉官網架構的情況下要找到自己想要的東西有時候挺費勁的,所以我會把有用的欄目都用瀏覽器收藏了,下回再翻就很方便了。

①強烈推薦MathWorks官網的Videos and Webinars影片。

Videos and Webinars連結如下。開啟這個連結可能是要登入自己的MathWorks賬號的,我記得即便沒有買過MathWorks產品也能註冊賬號。

MATLAB/Simulink工具箱太多了,導致相關的影片也太多太多了,有中文的、英文的、日語的、漢語的還有俄語的……有影象處理的、有自動駕駛的、有新能源的、還有功能安全的……

咱們只要在搜尋欄中搜索自己感興趣的關鍵詞,就能找到相關的學習影片。比如對於自動駕駛,我

牆裂推薦的“小邁步”系列

如何從MATLABSimulink入手,系統地學習自動駕駛?

小邁步系列公開課

比如小邁步的第一課和第二課,就有介紹怎麼用MATLAB去設計、訓練神經網路,並將網路模型用MATLAB Coder和GPU Coder生成程式碼,並部署到CPU/GPU中。

還有,如果你搜索“自動駕駛”或者將Videos and Webinars的範圍縮小至Automate Driving Toolbox(在搜尋頁面左側選中這個工具箱),就可以找到直接跟自動駕駛相關的影片。

如何從MATLABSimulink入手,系統地學習自動駕駛?

比如上圖框起來的影片,也是牆裂推薦的,是MathWorks中國工程師在MATLAB EXPO CHINA 2019大會上介紹MATLAB R2019a的自動駕駛工具箱(Automated Driving Toolbox)的新特性,看過影片之後能對自動駕駛工具箱有個大概的瞭解。

以上僅僅是部分內容,大家可以按興趣去搜索查詢。

②直接檢視相關工具箱的幫助文件和參考示例。

與自動駕駛相關的工具箱

如下,點選即可跳轉到官網說明:

**學習類

Statistics and Machine Learning Toolbox

Deep Learning Toolbox

Reinforcement Learning Toolbox

感知類

Image Acquisition Toolbox

Image Processing Toolbox

Computer Vision Toolbox

Vision HDL Toolbox

Automated Driving Toolbox

Sensor Fusion and Tracking Toolbox

規劃控制類

Automated Driving Toolbox

Navigation Toolbox

Stateflow

Fuzzy Logic Toolbox

Robust Control Toolbox

Model Predictive Control Toolbox

車輛類

Powertrain Blockset

Vehicle Dynamics Blockset

Simscap

其他

ROS Toolbox

Vehicle Network Toolbox

MATLAB Coder

Simulink Coder

Embedded Coder

HDL Coder

GPU Coder

Simulink Real-Time

不僅有各種工具箱,還有各種app,與自動駕駛相關的主要有

Classification Learner

Deep Network Designer

Ground Truth Labeler

Camera Calibrator

Driving Scenario Designer

這些app還是挺有用和有趣的,MathWorks的工具幾乎已經覆蓋了自動駕駛開發測試的各個環節,有做資料標註的Ground Truth Labeler我忍了,居然還有專門做相機標定的app——Camera Calibrator,只能道一句:是我在又下輸了……

工具箱和app都有詳盡的幫助文件,幫助文件中也會有參考示例。

比如不同版本自動駕駛工具箱的這些demo:

如何從MATLABSimulink入手,系統地學習自動駕駛?

放幾個連結:

③藉助MATLAB Answers解決問題

MATLAB/Simulink使用過程中遇到了解決不了的問題,可以上官網的MATLAB Answers去搜索問題關鍵詞,很可能就能找到答案。MATLAB Answers是使用者提問以及解決問題的版塊。

有一回我在做Simulink和Unreal Engine的自動駕駛模擬時,遇到了一個bug,怎麼都解決不了。後來上MATLAB Answers找到了原因,竟然是Windows更新導致的,這誰能想得到……

2、從MATLAB/Simulink可以學習到哪些自動駕駛知識

簡化而言,自動駕駛開發測試涉及以下環節。

如何從MATLABSimulink入手,系統地學習自動駕駛?

涉及感知、規劃、控制等演算法,以及對演算法的測試。

如果按V型開發流程,又涉及以下。

如何從MATLABSimulink入手,系統地學習自動駕駛?

我這邊先按感知、規劃、控制、模擬測試以及對應的MATLAB工具箱/app來說明,同時部分糅合V型開發流程。

2.1、感知

自動駕駛涉及的感測器主要有攝像頭、鐳射雷達、毫米波雷達、超聲波雷達、IMU等等,這邊主要介紹前兩者相關內容,當然後三者的應用MATLAB也能覆蓋。

2.1.1 攝像頭與MATLAB/Simulink

涉及工具箱:

Statistics and Machine Learning Toolbox

Deep Learning Toolbox

Reinforcement Learning Toolbox

Image Acquisition Toolbox

Image Processing Toolbox

Computer Vision Toolbox

Vision HDL Toolbox

Automated Driving Toolbox

Sensor Fusion and Tracking Toolbox

MATLAB Coder

HDL Coder

GPU Coder

涉及app:

Classification Learner

Deep Network Designer

Ground Truth Labeler

Camera Calibrator

整個鏈條大致如下。

如何從MATLABSimulink入手,系統地學習自動駕駛?

1、採集影象

採集影象的同時,有一個很重要的工作就是做相機標定。何謂相機標定:

在影象測量過程以及機器視覺應用中,為確定空間物體表面某點的三維幾何位置與其在影象中對應點之間的相互關係,必須建立相機成像的幾何模型,這些幾何模型引數就是相機引數。在大多數條件下這些引數必須透過實驗與計算才能得到,這個求解引數的過程就稱之為相機標定(或攝像機標定)。無論是在影象測量或者機器視覺應用中,相機引數的標定都是非常關鍵的環節,其標定結果的精度及演算法的穩定性直接影響相機工作產生結果的準確性。

MathWorks提供了相機標定的工具——Camera Calibrator。

如何從MATLABSimulink入手,系統地學習自動駕駛?

Camera Calibrator

2、標註影象

MathWorks提供了資料標註工具——Ground Truth Labeler。

如何從MATLABSimulink入手,系統地學習自動駕駛?

Ground Truth Labeler

之前的版本中,Ground Truth Labeler只能標註影象資料,

從2020a開始支援同時標註代表同一場景的多個訊號,比如對影象和鐳射雷達點雲同時標註

。可以載入來自單個來源(例如rosbag)的訊號集合。也支援將標記的鐳射雷達資料用作深度學習模型的訓練資料。

Ground Truth Labeler可以手動標註,也可以根據內建的自動標註演算法或者自定義的標註演算法來進行自動標註。

這一塊可以看下這篇文章。

3、設計和訓練網路

Classification Learner

Deep Network Designer

小邁步的第一課第二課有介紹如何用Deep Network Designer來設計網路。

如何從MATLABSimulink入手,系統地學習自動駕駛?

Deep Network Designer

如何從MATLABSimulink入手,系統地學習自動駕駛?

MATLAB提供了直接匯入Caffe和Tensorflow-Keras模型的介面。同時支援透過ONNX匯入其他框架的模型。

如何從MATLABSimulink入手,系統地學習自動駕駛?

MathWorks公眾號上有一些相關內容,比如

關於用MATLAB來做深度學習, @崔星星 兄臺頗有研究,回答多有涉及,可以點選此處移步去拜讀。

如果你想用Simulink去做影象處理,可以關注下這兩個工具箱。

Image Processing Toolbox

Computer Vision Toolbox

Image Processing Toolbox可以執行影象分割,影象增強,降噪,幾何變換,影象配準和3D影象處理等。 Computer Vision Toolbox™提供了用於設計和測試計算機視覺,3D視覺和影片處理系統的演算法,功能和應用。您可以執行物件檢測和跟蹤以及特徵檢測,提取和匹配。對於3D視覺,該工具箱支援單,立體和魚眼鏡頭相機校準;立體視覺 3D重建;以及鐳射雷達和3D點雲處理。計算機視覺應用程式可自動執行地面真相標記和攝像機校準工作流程。您可以使用深度學習和機器學習演算法(例如YOLO v2,Faster R-CNN和ACF)訓練自定義物件檢測器。對於語義分割,您可以使用深度學習演算法,例如SegNet,U-Net和DeepLab。預先訓練的模型可讓您檢測人臉,行人和其他常見物體。

如何從MATLABSimulink入手,系統地學習自動駕駛?

Computer Vision Toolbox

4、自動生成程式碼及部署到硬體

MATLAB的厲害之處不僅在於提供了覆蓋各個領域的工具箱,你可以快速方便地實現模型在環測試Model-in-lop(MIL),而且

有各種程式碼生成工具,幫助實現快速控制原型Rapid Control Prototype(RCP)、軟體在環測試Software-in-lop(SIL)、硬體在環測試Hardware-in-lop(HIL),還可以部署到硬體(CPU、GPU、FPGA)

這些程式碼生成工具有:

MATLAB Coder

Simulink Coder

Embedded Coder

HDL Coder

GPU Coder

對於前三個Coder,做傳統汽車控制器的同仁們應該都有所瞭解,基於模型設計(Model Based Design,MBD)會涉及。另外兩個Coder,HDL Coder和GPU Coder分別用以將MATLAB/Simulink的程式碼、模型生成FPGA的程式碼(VHDL或Verilog)和CUDA程式碼。

小邁步第二課主要涉及了MATLAB Coder和GPU Coder的應用。

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

小邁步第四課主要涉及了HDL Coder的應用。

如何從MATLABSimulink入手,系統地學習自動駕駛?

我平常用HDL Coder比較多,因為只會Simulink,不會寫VHDL或Verilog……HDL Coder最大的優勢就是——

用簡便的Simulink建模方式代替了晦澀的硬體描述語言程式設計方式,使得FPGA演算法開發迴歸到了汽車工程師熟悉的Simulink建模

使用者按照傳統的Simulink建模方式搭建影象處理和計算機視覺演算法,呼叫MATLAB的HDL Coder將Simuink模型生成VHDL或Verilog程式碼,然後部署到FPGA板卡上,整個流程可以無需編寫程式碼。

使用HDL Coder進行FPGA影象處理演算法開發,可以使用Vision HDL Toolbox。

如何從MATLABSimulink入手,系統地學習自動駕駛?

Vision HDL Toolbox

對於這塊內容,牆裂推薦一個影片——MathWorks HDL Coder產品負責人趙志宏經理的演講《從MATLAB到FPGA: 影片和影象處理》。喜歡他那種如數家珍、遊刃有餘的狀態,職業生涯中能打造出這麼出色的產品,真是值了。

不僅做基於FPGA的影象處理可以用HDL Coder,做電機電網電力電子以及其他高頻應用的控制或模擬都可以用到HDL Coder。

2.1.2 鐳射雷達與MATLAB/Simulink

Computer Vision Toolbox > Lidar and Point Cloud Processing

Automated Driving Toolbox > Perception with Computer Vision and Lidar

Navigation Toolbox > SLAM

MATLAB目前支援匯入PCAP、PLY和PCD等格式的點雲檔案,提供了鐳射雷達點雲分簇、配準、融合等函式,可用於目標檢測、構建高精地圖等。

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

R2020a的Ground Truth Labeler支援和鐳射雷達點雲標註,也支援將標記的鐳射雷達資料用作深度學習模型的訓練資料。

提供了一些exmples。

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

這邊放個用鐳射雷達做車輛檢測的exmple影片:

如何從MATLABSimulink入手,系統地學習自動駕駛?

Track Vehicles Using Lidar

https://www。zhihu。com/video/1234581802674642944

2.1.3 感測器融合

Automated Driving Toolbox

Sensor Fusion and Tracking Toolbox

Automated Driving Toolbox和Sensor Fusion and Tracking Toolbox提供了相關的模組和函式。

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

來看看基於攝像頭和毫米波雷達感測器融合的ACC:

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

Adaptive Cruise Control

https://www。zhihu。com/video/1234582313720979456

關於這部分的內容,MathWorks EXPO關於自動駕駛的演講影片中涉及較多。

2。2、規劃控制

Automated Driving Toolbox

Navigation Toolbox

Stateflow

Fuzzy Logic Toolbox

Robust Control Toolbox

Model Predictive Control Toolbox

Automated Driving Toolbox>Planning and Control

如何從MATLABSimulink入手,系統地學習自動駕駛?

Simulink從MATLAB R2017a開始推出了Automated Driving Toolbox,提供了Longitudinal Controller Stanley、Lateral Controller Stanley等模組,還提供了RRT*等路徑規劃演算法。

如何從MATLABSimulink入手,系統地學習自動駕駛?

來看一個Automated Parking Valet的demo。

如何從MATLABSimulink入手,系統地學習自動駕駛?

Automated Parking Valet

https://www。zhihu。com/video/1234582589831958528

控制方面可以瞭解一下MPC工具箱。

2。3、模擬測試

演算法或者ECU開發完畢後,需要形成閉環來測試。為了構成閉環,還需要車輛模型、駕駛場景和感測器模型。

如何從MATLABSimulink入手,系統地學習自動駕駛?

2.3.1 車輛模型

Powertrain Blockset

Vehicle Dynamics Blockset

Simscap

2。3。1。1車輛動力總成

參考Powertrain Blockset。

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

工具箱還提供了動力總成參考模型,如下圖,有燃油車、純電車、混動車(P0/ P1/ P2/ P3/ P4 )。

如何從MATLABSimulink入手,系統地學習自動駕駛?

參考模型是類似這樣的:

如何從MATLABSimulink入手,系統地學習自動駕駛?

如何從MATLABSimulink入手,系統地學習自動駕駛?

另外,也可以用Simscape來搭建動力總成模型。

官網Videos and Webinars以後不少關於PT工具箱的。

2。3。1。2車輛動力學模型

參考Vehicle Dynamics Blockset。提供了3自由度、7自由度和14自由度車輛動力學參考模型。

如何從MATLABSimulink入手,系統地學習自動駕駛?

MathWorks將車輛動力學模型和動力總成模型結合,又提供了幾個完整車輛的參考應用模型如下圖,包括:雙移線模型、正弦掃頻轉向模型、慢增量轉向模型等。

如何從MATLABSimulink入手,系統地學習自動駕駛?

官網Videos and Webinar有不少關於VD工具箱的影片。

如何從MATLABSimulink入手,系統地學習自動駕駛?

除此之外,如果你習慣用程式碼寫車輛動力學模型,也可以直接把程式碼封裝在s-function中。

2.3.2 駕駛場景和感測器模型

市面上大多數的場景軟體都提供了MATLAB/Simulink的介面,這些軟體在這咱們就不著重提了。這裡介紹下MathWorks自己開發的場景構建工具Driving Scenario Designer以及與它合作緊密的另一個軟體Unreal Engine。這兩個軟體各有特點,針對不同的需求。

如何從MATLABSimulink入手,系統地學習自動駕駛?

總的來說,Driving Scenario Designer使用拖放操作建立道路和交通參與者,可快速構建場景,用作Control-in-loop應用的測試和驗證,但無法提供逼真的場景和感測器資料。

Unreal Engine能提供高保真度的場景和感測器模型,能夠合成逼真的影象和鐳射雷達點雲資料等等,適用於Perception-in-loop的應用。

2。3。2。1 Driving Scenario Designer

如何從MATLABSimulink入手,系統地學習自動駕駛?

Driving Scenario Designer有這些特點:

1、使用拖放操作建立道路和交通參與者,快速構建場景

2、使用低保真度的視覺和雷達感測器模型,直接輸出檢測到的目標列表

3、支援將場景匯出成MATLAB Function,再透過修改MATLAB Function實現批次化生成場景

4、支援將場景和感測器匯出成Simulink模組

5、支援匯入OpenDrive路網檔案,支援基於記錄的實車資料構建場景

放一個Driving Scenario Designer操作影片

如何從MATLABSimulink入手,系統地學習自動駕駛?

https://www。zhihu。com/video/1234585691021172736

再放一個用Driving Scenario Designer構建的場景來做車道跟隨的demo。

如何從MATLABSimulink入手,系統地學習自動駕駛?

https://www。zhihu。com/video/1234585775150235648

想要了解更多的話,可以看下這篇文章:

更詳細的細節可看幫助文件

2。3。2。2 Unreal Engine

MathWorks結合遊戲引擎Unreal Engine構建駕駛場景,並提供了與Unreal Engine場景互動的攝像頭、鐳射雷達、毫米波雷達等感測器模型,去覆蓋Perception-in-loop的應用。

如何從MATLABSimulink入手,系統地學習自動駕駛?

Unreal Engine(虛幻引擎,簡稱Unreal),由Epic開發,是世界知名的遊戲引擎之一,佔有全球商用遊戲引擎很高的市場份額。Unreal開發的遊戲,代表作有《戰爭機器》系列,《質量效應》系列,《絕地求生》

……

使用者在Unreal中構建場景,MathWorks提供了場景中的感測器模型。

如何從MATLABSimulink入手,系統地學習自動駕駛?

這些感測器能輸出影象RGB資料、鐳射雷達點雲資料等等。

如何從MATLABSimulink入手,系統地學習自動駕駛?

每個感測器都提供了相關的參考示例,放一個用Unreal構建的場景來做高速公路車道跟隨的參考示例。

如何從MATLABSimulink入手,系統地學習自動駕駛?

https://www。zhihu。com/video/1234586191455682560

如果想了解更多,可以參考:

如果想學習Unreal怎麼搭建場景,基礎操作可以參考如下,很棒的教學影片。

如果要學習怎麼將自己搭建的Unreal場景與MATLAB/Simulink聯合模擬,可以參考:

以上!

如果對自動駕駛、無人駕駛感興趣,還可以看看

公眾號——【自動駕駛模擬】

如何從MATLABSimulink入手,系統地學習自動駕駛?