本例介紹了如何利用傳感器融合實現(xiàn)基于傳感器融合的汽車自適應巡航控制器,并且可用于在彎道上行駛的車輛。1:結合了傳感器融合和自適應巡航控制器(ACC)的控制系統(tǒng)。提供了兩個ACC的變體:一個經(jīng)典控制器和一個來自模型預測控制工具箱的自適應巡航控制系統(tǒng)塊。2:使用自動駕駛工具箱生成的合成數(shù)據(jù),在閉環(huán)Simulink模型中測試控制系統(tǒng)。3:配置軟件在環(huán)仿真的代碼生成設置,并自動生成控制算法的代碼。
43.1 緒論自適應巡航控制系統(tǒng)是一種根據(jù)前方路面交通狀況修改被控車輛速度的控制系統(tǒng)。與普通巡航控制一樣,駕駛員為汽車設定一個理想的速度;此外,如果前方車道上有其他車輛行駛速度較慢,自適應巡航控制系統(tǒng)可以使被控車輛減速,控制車輛實現(xiàn)穩(wěn)定跟隨前車車輛行駛。要想讓ACC正常工作,被控車輛必須確定前方車道是彎道還是直道,以及哪輛車是 "領頭車",也就是在車道上排在被控車輛前面的車輛。從被控車輛的角度看,一個典型的場景如下圖所示。被控車輛(藍色)沿著一條彎曲的道路行駛。一開始,領頭車是粉色車。然后,紫色車切入被控車輛的車道,成為領頭車。過了一會兒,紫色車換到另一條車道,粉色車又成為領頭車。之后,粉色車依然是領頭車。ACC設計必須對路面上領頭車的變化做出反應。目前的ACC設計主要依靠從毫米波雷達上獲得的測距和測速,其設計在直線道路上工作效果最好。在 "使用模型預測控制的自適應巡航控制系統(tǒng)"(模型預測控制工具箱)中給出了這樣一個系統(tǒng)的例子。從先進的駕駛輔助系統(tǒng)(ADAS)設計轉向更加自動級別更高的系統(tǒng),ACC必須解決以下挑戰(zhàn):1 估算靠近被控車輛且相對被控車輛有較著橫向運動的車輛的相對位置和速度。2 估算被控車輛前面的車道,找出被控車輛前面的哪輛車是同一車道中最近的一輛車。3 反應環(huán)境中其他車輛的侵略性舉動,特別是當其他車輛切入被控車輛車道時。這個例子展示了在現(xiàn)有ACC設計中主要增加兩個功能來應對這些挑戰(zhàn):增加一個傳感器融合系統(tǒng)和更新基于模型預測控制(MPC)的控制器設計。同時使用視覺和毫米波雷達傳感器的傳感器融合和跟蹤系統(tǒng)具有以下優(yōu)點:1 它將視覺傳感器獲得的較好的位置和速度橫向測量與毫米波雷達傳感器的測距和測距率測量相結合。2 視覺傳感器可以探測車道,提供車道相對于被控車輛的橫向位置估計,并定位場景中其他車輛相對于被控車輛車道的位置。這個例子假設了理想的車道探測。先進的MPC控制器增加了對環(huán)境中其他車輛更激進的操縱做出反應的能力。與使用具有恒定增益的PID設計的經(jīng)典控制器相比,MPC控制器在保持嚴格的安全距離約束的同時調(diào)節(jié)被控車輛的速度,控制體驗上更平順,(小編注MPC目前還沒有聽說哪家用在了量產(chǎn)車上)。因此,當環(huán)境快速變化時,控制器可以采用類似于人類駕駛員的方式來實施更積極的機動。43.2 測試臺模型和仿真結果概述open_system('ACCTestBenchExample') 1 ACC with Sensor Fusion,它對傳感器融合進行建模,控制車輛的縱向加速度。該組件允許選擇經(jīng)典或模型預測控制版本的設計。2 車輛與環(huán)境子系統(tǒng),它對被控車輛的運動進行建模,并對環(huán)境進行建模。毫米波雷達和視覺傳感器的仿真為控制子系統(tǒng)提供融合數(shù)據(jù)。要在運行模型之前運行相關的初始化腳本,在Simulink模型中,單擊 "運行設置腳本",或者在命令提示符下,鍵入以下內(nèi)容:腳本加載Simulink模型所需的某些常量,如車輛和ACC設計參數(shù)。默認的ACC是經(jīng)典控制器。腳本還創(chuàng)建了定義控制系統(tǒng)參考模型的輸入和輸出所需的總線。這些總線必須在模型編譯前在工作區(qū)中定義。當模型編譯時,額外的Simulink總線會由各自的塊自動生成。要繪制仿真結果并描繪被控車輛的周圍環(huán)境,包括被跟蹤的對象,可以利用Bird's-Eye
Scope觀測。Bird's-Eye Scope是一個模型級的可視化工具,它可以用來從Simulink工具條中打開。在 "仿真 "選項卡上,在"回顧結果 "下,單擊鳥眼范圍。打開范圍后,點擊查找信號,設置信號。下面的命令運行仿真到15秒,得到中間的仿真畫面,再一直運行下去。sim('ACCTestBenchExample','StopTime','15') %Simulate 15seconds sim('ACCTestBenchExample') %Simulate to end of scenarioans= Simulink.SimulationOutput:logsout: [1x1Simulink.SimulationData.Dataset] tout: [151x1 double]SimulationMetadata: [1x1Simulink.SimulationMetadata] ErrorMessage: [0x0 char] 鳥眼范圍顯示了傳感器融合的結果。它顯示了毫米波雷達和視覺傳感器如何探測其傳感器覆蓋區(qū)域內(nèi)的車輛。它還顯示了由多對象跟蹤器塊保持的目標跟蹤信息。黃色的跟蹤顯示的是最重要的物體(MIO):被控車輛前方最近的跟蹤,在其車道上。我們看到,在場景開始時,最重要的對象是被控車輛前方的快速行駛的汽車。當過往的汽車離慢速行駛的汽車越來越近時,它越過了左側車道,傳感器融合體系識別出它是MIO。這輛車離被控車輛更近,速度比它慢很多。ACC必須控制被控車輛減速。在下面的經(jīng)典ACC系統(tǒng)的成果中:- 中間圖顯示了被控車輛與領先車輛之間的相對距離。在這個例子中,來自跟蹤和傳感器融合系統(tǒng)的原始數(shù)據(jù)被用于ACC設計,沒有進行后處理??梢灶A期看到一些 "尖峰"(中間圖),這是由于傳感器模型的不確定性,特別是當另一輛車切入或離開被控車輛車道時。helperPlotACCResults(logsout,default_spacing,time_gap) - 在前11秒,領先車遠遠領先于被控車輛(中圖)。被控車輛加速并達到駕駛員設定的速度V_set(上圖)。- 11秒至20秒,另一輛車成為領先車,當該車切入被控車輛車道時(中圖)。當領頭車與被控車輛之間的距離較大時(11-15秒),被控車輛仍以駕駛員設定的速度行駛。當距離變小時(15-20秒),被控車輛會減速以保持與領先車的安全距離(上圖)。- 20~34秒,前車移動到另一條車道,新的領頭車出現(xiàn)(中圖)。由于領先車和被控車輛之間的距離很大,被控車輛在27秒時加速,直到達到駕駛員設定的速度。然后,被控車輛繼續(xù)以駕駛員設定的速度行駛(上圖)。- 底部圖顯示,加速度在[-3,2]m/s^2范圍內(nèi)。平穩(wěn)的瞬態(tài)行為表明,駕駛員的舒適度是令人滿意的。在基于MPC的ACC設計中,基本的優(yōu)化問題是通過跟蹤駕駛員設定的速度來制定的,但必須強制執(zhí)行與領先車的安全距離。MPC控制器設計在自適應巡航控制器一節(jié)中進行了描述。要運行帶有MPC設計的模型,首先激活MPC變體,然后運行以下命令。這一步需要使用Model Predictive Control Toolbox軟件??梢允褂靡韵麓a檢查該許可證的存在。如果不存在代碼,則描繪了類似結果的樣本。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 measure 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 measure 在基于MPC的ACC的仿真結果中,與經(jīng)典ACC設計類似,實現(xiàn)了速度和間距控制的目標。與經(jīng)典ACC設計相比,基于MPC的ACC采用全油門或制動進行加速或減速,因此更加激進。這種行為是由于對相對距離的明確約束。當?shù)缆飞习l(fā)生突然變化時,例如當領先車變?yōu)槁嚂r,這種激進行為可能是首選。為了使控制器的控制效果更加平順,打開自適應巡航控制系統(tǒng)塊的掩碼,并降低控制器行為參數(shù)的值。如前所述,中間圖中的尖峰是由于傳感器模型的不確定性造成的。要查看基于MPC的ACC的仿真結果,請使用以下命令。helperPlotACCResults(logsout,default_spacing,time_gap) 下面將詳細介紹試驗臺模型中各子系統(tǒng)的功能。帶傳感器融合的自適應巡航控制器子系統(tǒng)包含兩個主要組成部分:open_system('ACCTestBenchExample/ACC with Sensor Fusion') 43.3 跟蹤和傳感器融合跟蹤和傳感器融合子系統(tǒng)處理來自車輛和環(huán)境子系統(tǒng)的視覺和雷達探測,并生成被控車輛周圍環(huán)境的綜合情況圖。同時,它還能向ACC提供被控車輛前方車道上最近的車的估計。 open_system('ACCWithSensorFusionMdlRef/Tracking and Sensor Fusion')
跟蹤和傳感器融合子系統(tǒng)的主要塊是多對象跟蹤器塊,其輸入是所有傳感器探測的組合列表和預測時間。多對象跟蹤器塊的輸出是確認的跟蹤列表。 探測融合模塊將視覺和毫米波雷達探測信息融合起來。預測時間由車輛與環(huán)境子系統(tǒng)中的時鐘來驅動。 探測聚類塊對多個毫米波雷達探測進行聚類,因為跟蹤器希望每個物體每個傳感器最多探測一個目標。 findLeadCar MATLAB函數(shù)塊利用確認的跟蹤列表和道路的曲率,在同一車道上找到離被控車輛最近并在其前方的哪輛車。這輛車稱為領先車,當車輛駛入和駛出被控車輛前方的車道時,可能會發(fā)生變化。該功能提供了領先車相對于被控車輛的位置和速度,以及最重要物體(MIO)跟蹤的索引。 43.4 自適應巡航控制器自適應巡航控制器有兩種變體:一種是經(jīng)典設計(默認),一種是基于MPC的設計。對于這兩種設計,均采用以下設計原則:配備ACC的車輛(被控車輛)使用傳感器融合來估計與前車的相對距離和相對速度。ACC使被控車輛以駕駛員設定的速度行駛,或與領先車保持安全距離。領先車與被控車輛之間的安全距離定義為: 其中默認間距,和時隙為設計參數(shù),為被控車輛的縱向速度。ACC根據(jù)以下輸入生成被控車輛的縱向加速度: - 被控車車的縱向速度。 - 領頭車與被控車輛之間的相對距離(來自跟蹤與傳感器融合系統(tǒng))。 - 領頭車和被控車之間的相對速度(來自跟蹤和傳感器融合系統(tǒng))。 考慮到被控車輛的物理限制,縱向加速度被約束在[-3,2]范圍內(nèi)。 在經(jīng)典的ACC設計中,如果相對距離小于安全距離,那么首要目標是減速并保持安全距離。如果相對距離大于安全距離,那么主要目標是在保持安全距離的同時達到駕駛員設定的速度。 這些設計原則是通過Min和Switch塊來實現(xiàn)的。 open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Classical') 在基于MPC的ACC設計中,基本的優(yōu)化問題是在約束條件下,通過跟蹤駕駛員設定的速度來制定的。該約束條件強制要求相對距離總是大于安全距離。 要配置自適應巡航控制系統(tǒng)塊,請使用幫助者ACCSetUp文件中定義的參數(shù)。例如,ACC設計的線性模型 ,并從車輛動力學中獲得。兩個Switch塊實現(xiàn)了簡單的邏輯,以處理來自傳感器的大數(shù)(例如,當傳感器沒有探測到MIO時,它可能會返回Inf)。 open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Model PredictiveControl') 43.5 車輛與環(huán)境車輛與環(huán)境子系統(tǒng)由兩部分組成: 1 車輛動力學和全球坐標 2 執(zhí)行器和傳感器仿真 open_system('ACCTestBenchExample/Vehicle and Environment') 車輛動力學子系統(tǒng)使用自動駕駛工具箱中的自行車模型-力輸入塊對車輛動力學進行建模。車輛動力學,輸入(縱向加速度)和前轉向角,用以下方法。 在狀態(tài)向量中,表示橫向速度,表示縱向速度,表示偏航角。車輛的參數(shù)在幫助程序ACCSetUp文件中提供。 車輛動力學的輸出(如縱向速度和橫向速度)是基于車身固定坐標的。為了得到車輛在運動過程中的跟蹤,車身固定坐標通過以下關系轉換成全局坐標。 偏航角和偏航角率也換算成度的單位。 駕駛員轉向模型的目標是通過控制前部轉向角,使車輛保持在自己的車道上,并沿著彎曲的道路行駛。這個目標是通過駕駛偏航角誤差和側向位移誤差為零來實現(xiàn)的(見下圖),其中 所需的偏航角率由Vx/R給出。 執(zhí)行器和傳感器仿真子系統(tǒng)生成跟蹤和傳感器融合所需的合成傳感器數(shù)據(jù)。在運行此示例之前,使用駕駛場景設計器應用程序創(chuàng)建一個具有彎曲道路和多個執(zhí)行器在道路上移動的場景。然后將該場景中的道路和執(zhí)行器保存到場景文件ACCTestBenchScenario.mat中。要了解如何定義場景,請點贊、轉發(fā)此文,小編后續(xù)不斷更新。 open_system('ACCTestBenchExample/Vehicle and Environment/Actors and Sensor Simulation')
被控車輛的運動是由控制系統(tǒng)控制的,并不是從場景文件中讀取的。取而代之的是,被控車輛的姿態(tài)、速度、偏航角和偏航率被接收為來自車輛動力學塊的輸入,并使用packEgo MATLAB函數(shù)塊打包成一個單一的執(zhí)行器姿態(tài)結構。 Scenario Reader 塊從場景文件 ACCTestBenchScenario.mat 讀取交通參與者姿勢數(shù)據(jù)。該塊將場景的世界坐標中的執(zhí)行器姿勢轉換為被控車輛坐標。被上傳到由塊生成的總線上。 在這個例子中,使用了視覺探測生成塊和毫米波雷達探測生成塊。 這兩個傳感器都是遠距離和前向的,并提供了對被控車輛前部的良好覆蓋范圍,這是ACC的需要。傳感器使用被控車輛坐標中的交通參與者姿勢來生成被控車輛前方的車輛探測列表。最后,以一個時鐘塊為例,說明車輛將有一個集中的時間源。時間由多對象跟蹤器塊使用。 43.6 場景創(chuàng)建駕駛場景設計器應用允許定義道路和在道路上移動的車輛。在本例中, 定義了兩條曲率不變的平行道路。要定義道路, 需要定義:道路中心、道路寬度和傾斜角度(如果需要)。道路中心是通過沿圓弧取樣點選擇的,跨度為60度的恒定曲率半徑的轉彎。 定義了場景中的所有車輛。為了定義車輛的運動,通過一組航點和速度來定義它們的跟蹤。定義航點的快速方法是選擇前面定義的道路中心的一個子集,并在道路中心的左邊或右邊偏移,以控制車輛行駛的車道。 這個例子顯示了四輛汽車:一輛快速行駛的汽車在左側車道上,一輛緩慢行駛的汽車在右側車道上,一輛汽車在馬路對面駛來,一輛汽車從右側車道上開始行駛,但隨后移動到左側車道上以超越緩慢行駛的汽車。 場景可以使用駕駛場景設計器應用程序進行修改,并重新保存到同一個場景文件ACCTestBenchScenario.mat中。當仿真重新運行時,場景閱讀器塊會自動拾取更改。如果要以編程方式構建場景,可以使用助記場景授權功能(helperScenarioAuthoring)。
43.7 控制邏輯代碼生成雖然整個模型不支持代碼生成,但 ACCWithSensorFusionMdlRef 模型被配置為支持使用 Embedded Coder 軟件生成 C 代碼。要檢查是否有訪問Embedded Coder的權限,請運行。 hasEmbeddedCoderLicense = license('checkout','RTW_Embedded_Coder') 可以為模型生成一個C函數(shù),并通過運行探索代碼生成報告。 if hasEmbeddedCoderLicense rtwbuild('ACCWithSensorFusionMdlRef')end 可以使用軟件在環(huán)(SIL)仿真來驗證編譯后的C代碼的行為是否符合預期。要在SIL模式下仿真ACCWithSensorFusionMdlRef引用的模型,請使用。 if hasEmbeddedCoderLicenseset_param('ACCTestBenchExample/ACC with Sensor Fusion',... 'SimulationMode','Software-in-the-loop (SIL)')end 當 運行ACCTestBenchExample模型時,將為ACCWithSensorFusionMdlRef模型生成、編譯和執(zhí)行代碼。這使能夠通過仿真來測試編譯代碼的行為。 43.8 結論本例展示了如何在彎道上用傳感器融合實現(xiàn)一個集成的自適應巡航控制器(ACC),在Simulink中使用自動駕駛工具箱生成的合成數(shù)據(jù)進行測試,對其進行組件化,并自動生成代碼。
|