[自動駕駛]帶傳感器融合的自適應巡航控制

本文鏈接: https ://blog.csdn.net/KYJL888/article/details/102895481

帶傳感器融合的自適應巡航控制

本示例使用:

開放式

此示例顯示瞭如何使用傳感器融合爲在彎路上行駛的車輛實現基於傳感器融合的汽車自適應巡航控制器。

在此示例中,您:

  1. 回顧結合了傳感器融合和自適應巡航控制器(ACC)的控制系統。 提供了兩種ACC變體:模型預測控制工具箱中的經典控制器和自適應巡航控制系統模塊。

  2. 使用自動駕駛工具箱生成的綜合數據,在閉環Simulink模型中測試控制系統。

  3. 配置用於軟件在環仿真的代碼生成設置,並自動生成用於控制算法的代碼。

介紹

自適應巡航控制系統是一種控制系統,其可以響應於道路狀況來改變自我車輛的速度。 與常規巡航控制一樣,駕駛員可以爲汽車設置所需的速度。 此外,如果在前面的車道中還有另一輛行駛速度較慢的車輛,則自適應巡航控制系統可以降低自我車輛的速度。

爲了使ACC正常工作,自我車輛必須確定其前方車道如何彎曲,以及哪輛車是“領頭車”,即車道中的自我車輛前方。 下圖顯示了從自我車輛的角度來看的典型場景。 自我車輛(藍色)沿着彎曲的道路行駛。 最初,領頭車是粉紅色車。 然後,紫色汽車切入自我車輛的車道,成爲主導車輛。 過了一會兒,紫色的汽車改變到另一個車道,而粉色的汽車再次成爲領頭車。 之後,粉紅色的汽車仍然是領先的汽車。 ACC設計必須對道路上有頭車的變化做出反應。

 

 

當前的ACC設計主要依賴於從雷達獲得的距離和測距率測量,並且設計爲在直路上最佳工作。 在使用模型預測控制的自適應巡航控制系統 (模型預測控制工具箱)和使用FMCW技術的汽車自適應巡航控制系統(相控陣系統工具箱)中給出了這樣一個系統的示例。 從先進的駕駛員輔助系統(ADAS)設計過渡到更多的自治系統,ACC必須應對以下挑戰:

  1. 估算靠近自我車輛且相對於自我車輛有明顯橫向運動的汽車的相對位置和速度。

  2. 估算自我車輛前方的車道,以找出自我車輛前方的哪輛車是同一車道中最接近的車。

  3. 對環境中其他車輛的侵略性動作做出反應,尤其是當另一輛車輛駛入自我車輛車道時。

本示例演示了現有ACC設計中兩個主要的補充,它們可以應對這些挑戰:添加傳感器融合系統和基於模型預測控制(MPC)更新控制器設計。 同時使用視覺和雷達傳感器的傳感器融合和跟蹤系統具有以下優點:

  1. 它結合了從視覺傳感器獲得的更好的橫向位置測量和速度測量結果,以及從雷達傳感器獲得的距離和測距率測量結果。

  2. 視覺傳感器可以檢測車道,提供車道相對於自我車輛的橫向位置的估計,以及相對於自我車道將其他車輛定位在場景中。 本示例假設理想的車道檢測。

先進的MPC控制器增加了對環境中其他車輛做出的更猛烈反應做出反應的能力。 與使用具有恆定增益的PID設計的經典控制器相比,MPC控制器在保持嚴格的安全距離約束的同時調節自我車輛的速度。 因此,當環境以與人類駕駛員將執行的操作類似的方式快速變化時,控制器可以採取更具侵略性的操縱。

將示例的文件夾添加到MATLAB®路徑。

addpath(fullfile(matlabroot,'examples','mpc','main')); 

試驗檯模型和仿真結果概述

要打開主要的Simulink模型,請使用以下命令:

open_system('ACCTestBenchExample') 

該模型包含兩個主要子系統:

  1. 具有傳感器融合功能的ACC,可對傳感器融合進行建模並控制車輛的縱向加速度。 該組件允許您選擇設計的經典或模型預測控制版本。

  2. 在車輛和環境子系統,自主車輛和模型環境的哪個模型運動。 雷達和視覺傳感器的仿真將合成數據提供給控制子系統。

要在運行模型之前運行關聯的初始化腳本,請在Simulink模型中,單擊“運行安裝程序腳本”,或者在命令提示符下鍵入以下內容:

helperACCSetUp 

該腳本加載Simulink模型所需的某些常數,例如車輛和ACC設計參數。 默認的ACC是經典控制器。 該腳本還創建定義控制系統參考模型的輸入和輸出所需的總線。 在編譯模型之前,必須在工作空間中定義這些總線。 編譯模型時,其他Simulink總線將由其各自的模塊自動生成。

要繪製仿真結果並描繪自我車輛的周圍環境(包括被跟蹤的物體),請使用Bird-Eye Scope 。 Bird's-Eye Scope是一個模型級別的可視化工具,可以從Simulink工具欄中打開。 在“ 模擬”選項卡上的“ 查看結果”下 ,單擊“ 鳥瞰範圍” 。 打開示波器後,單擊“ 查找信號”以設置信號。 以下命令將模擬運行15秒鐘,以獲取模擬中間的圖片,然後再次運行直至模擬結束,以收集結果。

sim('ACCTestBenchExample','StopTime','15') %Simulate 15 seconds sim('ACCTestBenchExample') %Simulate to end of scenario 
ans = Simulink.SimulationOutput: logsout: [1x1 Simulink.SimulationData.Dataset] tout: [151x1 double] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char] 

 

 

 

鳥瞰範圍顯示了傳感器融合的結果。 它顯示了雷達和視覺傳感器如何在其傳感器覆蓋區域內檢測到車輛。 它還示出了由多目標跟蹤塊保持的曲目。 黃色的軌道顯示了最重要的對象(MIO):在其車道中,自我車輛前面最近的軌道。 我們看到,在場景開始時,最重要的對象是快速移動的汽車,其位置超過了自我車輛。 當經過的汽車靠近慢速行駛的汽車時,它會越過左車道,並且傳感器融合系統將其識別爲MIO。 這輛車離自我車近得多,但比它慢得多。 因此,ACC必須減慢自我車輛的速度。

在對經典的ACC系統下面的結果,在:

  • 上圖顯示了自我車輛的速度。

  • 中間圖顯示了自我車輛與領頭車之間的相對距離。

  • 下圖顯示了自我車輛的加速度。

在這個例子中,從跟蹤和傳感器融合系統的原始數據被用於ACC設計無後處理。 由於傳感器模型的不確定性,您可能會期望看到一些“尖峯”(中間圖),尤其是當另一輛汽車駛入或駛出自我車輛車道時。

要查看仿真結果,請使用以下命令。

helperPlotACCResults(logsout,default_spacing,time_gap) 

  • 在第11秒時,領頭的車是遠遠領先於自身車輛(中圖)的。 自主車輛加速並達到駕駛員設定的速度V_set(上圖)。

  • 當另一輛車駛入自我車輛車道(中間地段)時,它將在11到20秒內成爲領頭車。 當領頭車與自我車輛之間的距離較大時(11-15秒),自我車輛仍會以駕駛員設定的速度行駛。 當距離變短(15-20秒)時,自我車輛減速以保持與有頭車的安全距離(頂部圖)。

  • 從20到34秒,前面的汽車移到另一個車道,並出現了一輛新的領先汽車(中間圖)。 因爲有頭車與自我車輛之間的距離較大,所以自我車輛會加速直到達到駕駛員設定的速度(27秒)。 然後,自主車輛繼續以駕駛員設定的速度行駛(上圖)。

  • 該底部曲線表明加速度距離範圍[-3,2]米/秒^ 2。 在平滑的過渡行爲表明駕駛舒適性是令人滿意的。

在基於MPC的ACC設計中,潛在的優化問題是通過跟蹤駕駛員設定的速度來制定的,該速度取決於與領先汽車的安全距離。 MPC控制器設計在“自適應巡航控制器”部分中進行了介紹。 要使用MPC設計運行模型,請首先激活MPC變體,然後運行以下命令。 此步驟需要Model Predictive Control Toolbox軟件。 您可以使用下面的代碼檢查該許可證的存在。 如果不存在代碼,將描述類似結果的樣本。

hasMPCLicense = license('checkout','MPC_Toolbox'); if hasMPCLicense controller_type = 2; sim('ACCTestBenchExample','StopTime','15') %Simulate 15 seconds sim('ACCTestBenchExample') %Simulate to end of scenario else load data_mpc end 
-->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #2 is integrated white noise. Assuming no disturbance added to measured output channel #1. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel. ans = Simulink.SimulationOutput: logsout: [1x1 Simulink.SimulationData.Dataset] tout: [151x1 double] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char] -->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #2 is integrated white noise. Assuming no disturbance added to measured output channel #1. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel. 

 

 

在基於MPC的ACC的仿真結果中,類似於經典ACC設計,可以實現速度和間距控制的目標。 與傳統的ACC設計相比,基於MPC的ACC更具侵略性,因爲它使用全油門或制動來加速或減速。 這種現象是由於在相對距離的明確約束。 當道路上突然發生變化時,例如當領先的汽車變成慢速汽車時,可能會傾向於具有侵略性。 要降低控制器的攻擊性,請打開“自適應巡航控制系統”塊的掩碼,並減小“ 控制器行爲”參數的值。 如前所述,中間圖中的峯值是由於傳感器模型中的不確定性所致。

要查看模擬與基於MPC-ACC的結果,使用以下命令。

helperPlotACCResults(logsout,default_spacing,time_gap) 

在下文中,在試驗檯模型各子系統的功能更詳細地描述。 具有傳感器融合子系統的自適應巡航控制器包含兩個主要組件:

  1. 跟蹤和傳感器融合子系統

  2. 自適應巡航控制器子系統

open_system('ACCTestBenchExample/ACC with Sensor Fusion') 

跟蹤和傳感器融合

跟蹤和傳感器融合子系統處理來自“車輛和環境”子系統的視覺和雷達檢測,並生成有關自我車輛周圍環境的全面情況圖片。 另外,它提供了最接近的汽車在車道自身車輛前面的估計ACC。

open_system('ACCWithSensorFusionMdlRef/Tracking and Sensor Fusion') 

跟蹤和傳感器融合子系統的主要塊是多對象跟蹤器塊,其輸入是所有傳感器檢測和預測時間的組合列表。 多對象跟蹤器塊的輸出是已確認軌道的列表。

檢測級聯”模塊將視覺和雷達檢測級聯。 預測時間由“車輛和環境”子系統中的時鐘驅動。

“檢測聚類”模塊將多個雷達檢測聚類,因爲跟蹤器希望每個傳感器每個物體最多檢測一次。

MATLAB的findLeadCar功能塊使用已確認的軌道和道路的曲率列表,在同一車道中找到最接近自我車輛並在其前方的汽車。 這輛車稱爲領頭車,當汽車駛入和駛出自我車輛前方的車道時可能會發生變化。 該功能提供了領頭車相對於自我車輛的位置和速度,以及最重要物體(MIO)軌跡的索引。

自適應巡航控制器

自適應巡航控制器有兩個變體:經典設計(默認)和基於MPC的設計。 對於這兩種設計,都應用以下設計原理。 配備ACC的車輛(自我車輛)使用傳感器融合來估計與領頭車的相對距離和相對速度。 在ACC使得在駕駛員設定的速度自車輛行駛,同時保持從引導車的安全距離。 引導汽車和自我車輛之間的安全距離被定義爲

默認間距 和時間間隔 是設計參數和 是自我車輛的縱向速度。 ACC根據以下輸入生成自我車輛的縱向加速度:

  • 自主車輛的縱向速度

  • 鉛車與自我車輛之間的相對距離(來自“跟蹤和傳感器融合”系統)

  • 領先車與自我車之間的相對速度(來自跟蹤和傳感器融合系統)

考慮到自身車輛的物理限制,縱向加速度被限制在範圍[-3,2]

在經典ACC設計中,如果相對距離小於安全距離,則主要目標是放慢速度並保持安全距離。 如果相對距離大於安全距離,則主要目標是在保持安全距離的同時達到駕駛員設定的速度。 這些設計原則通過Min和交換機模塊來實現的。

open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Classical') 

在基於MPC的ACC設計中,通過跟蹤受約束的駕駛員設定速度來表達潛在的優化問題。 約束要求相對距離始終大於安全距離。

 

 

要配置自適應巡航控制系統模塊,請使用helperACCSetUp文件中定義的參數。 例如,用於ACC設計的線性模型 從車輛動力學獲得。 兩個Switch塊實現了簡單的邏輯,以處理來自傳感器的大量數字(例如,傳感器在未檢測到MIO時可能返回Inf )。

open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Model Predictive Control') 

有關ACC的MPC設計的更多信息,請參閱使用模型預測控制的自適應巡航控制系統 (模型預測控制工具箱)。

車輛與環境

車輛和環境子系統由兩部分組成:

  1. 車輛動力學和全局座標

  2. 演員和傳感器仿真

open_system('ACCTestBenchExample/Vehicle and Environment') 

車輛動力學子系統使用“自動駕駛工具箱”中的“自行車模型-力輸入”模塊對車輛動力學進行建模。 車輛動態,具有輸入 (縱向加速度)和前轉向角 ,近似爲:

 

 

在狀態向量, 表示橫向速度, 表示縱向速度, 表示偏航角。 車輛參數在helperACCSetUp文件中提供。

車輛動力學的輸出(例如縱向速度) 和橫向速度 )基於身體固定的座標。 爲了獲得車輛所經過的軌跡,通過以下關係將車身固定座標轉換爲整體座標:

偏航角 和偏航角率 也轉換爲度單位。

駕駛員轉向模型的目標是通過控制前轉向角使車輛保持在車道內並遵循彎道 。 通過驅動偏航角誤差可以實現該目標 和橫向位移誤差 爲零(請參見下圖),其中

所需的偏航角速率由下式給出 表示道路曲率的半徑)。

Actor和Sensor Simulation子系統生成跟蹤和傳感器融合所需的合成傳感器數據。 在運行此示例之前,使用了Driving Scenario Designer應用程序來創建具有彎曲道路和多個參與者在道路上移動的場景。 然後,此場景中的道路和參與者被保存到場景文件ACCTestBenchScenario.mat 。 若要查看如何定義方案,請參閱“方案創建”部分。

open_system('ACCTestBenchExample/Vehicle and Environment/Actors and Sensor Simulation') 

自主車輛的運動由控制系統控制,並且不從腳本文件中讀取。 取而代之的是,自車輛位置,速度,偏航角和偏航率作爲輸入從“車輛動力學”模塊接收,並使用packEgo MATLAB功能模塊打包爲單個演員姿勢結構。

場景讀取器塊從場景文件ACCTestBenchScenario.mat讀取角色姿勢數據。 該塊將演員的姿勢從場景的世界座標轉換爲自我車輛座標。 演員姿勢在由塊生成的總線上流式傳輸。 在這個例子中,您使用的是視覺檢測發生器模塊和雷達探測發生器塊。 兩種傳感器都具有遠距離和前瞻性,並且可以根據ACC的需要很好地覆蓋自我車輛的前部。 傳感器使用自我車輛座標中的角色姿勢生成自我車輛前方的車輛檢測列表。 最後,以時鐘塊爲例,說明車輛如何具有集中的時間源。 該時間由“多對象跟蹤器”塊使用。

場景創建

Driving Scenario Designer應用程序可讓您定義道路和在道路上行駛的車輛。 在這個例子中,可以定義常曲率的兩條平行的道路。 要定義的路上,你定義的道路中心,道路寬度和傾斜角(如果需要)。 通過沿圓弧採樣點(跨度爲60度的恆定曲率半徑)來選擇道路中心。

您定義方案中的所有載具。 要定義車輛的運動,您可以通過一組的航點和速度的定義他們的軌跡。 定義路點的一種快速方法是選擇前面定義的道路中心的一個子集,並在道路中心的左側或右側偏移以控制車輛行駛的車道。

此示例顯示了四輛車:左車道上的快速行駛的汽車,右車道上的緩慢行駛的汽車,靠近道路另一側的汽車以及從右車道開始但隨後移動的汽車到左車道通過緩慢移動的車。

可以使用Driving Scenario Designer應用程序修改該方案,並將其重新保存到同一方案文件ACCTestBenchScenario.mat 。 重新運行模擬後,“場景讀取器”塊將自動獲取更改。 要以編程方式構建方案,可以使用helperScenarioAuthoring函數。

plotACCScenario 

生成控制算法的代碼

ACCWithSensorFusionMdlRef模型被配置成使用嵌入式編碼軟件,以支持生成C代碼。 要檢查是否有機會獲得嵌入式編碼器,運行:

hasEmbeddedCoderLicense = license('checkout','RTW_Embedded_Coder') 

您可以爲模型生成一個C函數,並通過運行以下代碼來探索代碼生成報告:

if hasEmbeddedCoderLicense rtwbuild('ACCWithSensorFusionMdlRef') end 

您可以使用軟件在環(SIL)仿真來驗證編譯的C代碼是否按預期運行。 要在SIL模式下模擬ACCWithSensorFusionMdlRef引用的模型,請使用:

if hasEmbeddedCoderLicense set_param('ACCTestBenchExample/ACC with Sensor Fusion',... 'SimulationMode','Software-in-the-loop (SIL)') end 

當您運行ACCTestBenchExample模型時, ACCTestBenchExample模型生成,編譯和執行代碼。 這使您可以通過仿真來測試已編譯代碼的行爲。

結論

此示例顯示瞭如何在帶有傳感器融合功能的彎道上實施集成自適應巡航控制器(ACC),如何使用自動駕駛工具箱生成的合成數據在Simulink中對其進行測試,對其進行組件化併爲其自動生成代碼。

從MATLAB路徑中刪除示例文件夾。

rmpath(fullfile(matlabroot,'examples','mpc','main')); bdclose all 

也可以看看

職能

積木

對象

相關話題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章