![]() 43.1 緒論![]() 43.2 測試臺模型和仿真結果概述open_system('ACCTestBenchExample') ![]() helperACCSetUp 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] ![]() ![]() helperPlotACCResults(logsout,default_spacing,time_gap) ![]()
![]() ![]() helperPlotACCResults(logsout,default_spacing,time_gap) open_system('ACCTestBenchExample/ACC with Sensor Fusion') 43.3 跟蹤和傳感器融合跟蹤和傳感器融合子系統處理來自車輛和環境子系統的視覺和雷達探測,并生成被控車輛周圍環境的綜合情況圖。同時,它還能向ACC提供被控車輛前方車道上最近的車的估計。 open_system('ACCWithSensorFusionMdlRef/Tracking and Sensor Fusion') 跟蹤和傳感器融合子系統的主要塊是多對象跟蹤器塊,其輸入是所有傳感器探測的組合列表和預測時間。多對象跟蹤器塊的輸出是確認的跟蹤列表。 探測融合模塊將視覺和毫米波雷達探測信息融合起來。預測時間由車輛與環境子系統中的時鐘來驅動。 探測聚類塊對多個毫米波雷達探測進行聚類,因為跟蹤器希望每個物體每個傳感器最多探測一個目標。 findLeadCar MATLAB函數塊利用確認的跟蹤列表和道路的曲率,在同一車道上找到離被控車輛最近并在其前方的哪輛車。這輛車稱為領先車,當車輛駛入和駛出被控車輛前方的車道時,可能會發生變化。該功能提供了領先車相對于被控車輛的位置和速度,以及最重要物體(MIO)跟蹤的索引。 43.4 自適應巡航控制器自適應巡航控制器有兩種變體:一種是經典設計(默認),一種是基于MPC的設計。對于這兩種設計,均采用以下設計原則:配備ACC的車輛(被控車輛)使用傳感器融合來估計與前車的相對距離和相對速度。ACC使被控車輛以駕駛員設定的速度行駛,或與領先車保持安全距離。領先車與被控車輛之間的安全距離定義為: 其中默認間距,和時隙為設計參數,為被控車輛的縱向速度。ACC根據以下輸入生成被控車輛的縱向加速度: - 被控車車的縱向速度。 - 領頭車與被控車輛之間的相對距離(來自跟蹤與傳感器融合系統)。 - 領頭車和被控車之間的相對速度(來自跟蹤和傳感器融合系統)。 考慮到被控車輛的物理限制,縱向加速度被約束在[-3,2]范圍內。 在經典的ACC設計中,如果相對距離小于安全距離,那么首要目標是減速并保持安全距離。如果相對距離大于安全距離,那么主要目標是在保持安全距離的同時達到駕駛員設定的速度。 這些設計原則是通過Min和Switch塊來實現的。 open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Classical') 在基于MPC的ACC設計中,基本的優化問題是在約束條件下,通過跟蹤駕駛員設定的速度來制定的。該約束條件強制要求相對距離總是大于安全距離。 ![]() 要配置自適應巡航控制系統塊,請使用幫助者ACCSetUp文件中定義的參數。例如,ACC設計的線性模型 ,并從車輛動力學中獲得。兩個Switch塊實現了簡單的邏輯,以處理來自傳感器的大數(例如,當傳感器沒有探測到MIO時,它可能會返回Inf)。 open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Model PredictiveControl') 43.5 車輛與環境車輛與環境子系統由兩部分組成: 1 車輛動力學和全球坐標 2 執行器和傳感器仿真 open_system('ACCTestBenchExample/Vehicle and Environment') ![]() 車輛動力學子系統使用自動駕駛工具箱中的自行車模型-力輸入塊對車輛動力學進行建模。車輛動力學,輸入(縱向加速度)和前轉向角,用以下方法。 ![]() 在狀態向量中,表示橫向速度,表示縱向速度,表示偏航角。車輛的參數在幫助程序ACCSetUp文件中提供。 車輛動力學的輸出(如縱向速度和橫向速度)是基于車身固定坐標的。為了得到車輛在運動過程中的跟蹤,車身固定坐標通過以下關系轉換成全局坐標。 ![]() 偏航角和偏航角率也換算成度的單位。 駕駛員轉向模型的目標是通過控制前部轉向角,使車輛保持在自己的車道上,并沿著彎曲的道路行駛。這個目標是通過駕駛偏航角誤差和側向位移誤差為零來實現的(見下圖),其中 所需的偏航角率由Vx/R給出。 ![]() 執行器和傳感器仿真子系統生成跟蹤和傳感器融合所需的合成傳感器數據。在運行此示例之前,使用駕駛場景設計器應用程序創建一個具有彎曲道路和多個執行器在道路上移動的場景。然后將該場景中的道路和執行器保存到場景文件ACCTestBenchScenario.mat中。要了解如何定義場景,請點贊、轉發此文,小編后續不斷更新。 open_system('ACCTestBenchExample/Vehicle and Environment/Actors and Sensor Simulation') 被控車輛的運動是由控制系統控制的,并不是從場景文件中讀取的。取而代之的是,被控車輛的姿態、速度、偏航角和偏航率被接收為來自車輛動力學塊的輸入,并使用packEgo MATLAB函數塊打包成一個單一的執行器姿態結構。 Scenario Reader 塊從場景文件 ACCTestBenchScenario.mat 讀取交通參與者姿勢數據。該塊將場景的世界坐標中的執行器姿勢轉換為被控車輛坐標。被上傳到由塊生成的總線上。 在這個例子中,使用了視覺探測生成塊和毫米波雷達探測生成塊。 這兩個傳感器都是遠距離和前向的,并提供了對被控車輛前部的良好覆蓋范圍,這是ACC的需要。傳感器使用被控車輛坐標中的交通參與者姿勢來生成被控車輛前方的車輛探測列表。最后,以一個時鐘塊為例,說明車輛將有一個集中的時間源。時間由多對象跟蹤器塊使用。 43.6 場景創建駕駛場景設計器應用允許定義道路和在道路上移動的車輛。在本例中, 定義了兩條曲率不變的平行道路。要定義道路, 需要定義:道路中心、道路寬度和傾斜角度(如果需要)。道路中心是通過沿圓弧取樣點選擇的,跨度為60度的恒定曲率半徑的轉彎。 定義了場景中的所有車輛。為了定義車輛的運動,通過一組航點和速度來定義它們的跟蹤。定義航點的快速方法是選擇前面定義的道路中心的一個子集,并在道路中心的左邊或右邊偏移,以控制車輛行駛的車道。 這個例子顯示了四輛汽車:一輛快速行駛的汽車在左側車道上,一輛緩慢行駛的汽車在右側車道上,一輛汽車在馬路對面駛來,一輛汽車從右側車道上開始行駛,但隨后移動到左側車道上以超越緩慢行駛的汽車。 plotACCScenario ![]() 43.7 控制邏輯代碼生成雖然整個模型不支持代碼生成,但 ACCWithSensorFusionMdlRef 模型被配置為支持使用 Embedded Coder 軟件生成 C 代碼。要檢查是否有訪問Embedded Coder的權限,請運行。 hasEmbeddedCoderLicense = license('checkout','RTW_Embedded_Coder') 可以為模型生成一個C函數,并通過運行探索代碼生成報告。 if hasEmbeddedCoderLicense rtwbuild('ACCWithSensorFusionMdlRef')end 可以使用軟件在環(SIL)仿真來驗證編譯后的C代碼的行為是否符合預期。要在SIL模式下仿真ACCWithSensorFusionMdlRef引用的模型,請使用。 if hasEmbeddedCoderLicenseset_param('ACCTestBenchExample/ACC with Sensor Fusion',... 'SimulationMode','Software-in-the-loop (SIL)')end 當 運行ACCTestBenchExample模型時,將為ACCWithSensorFusionMdlRef模型生成、編譯和執行代碼。這使能夠通過仿真來測試編譯代碼的行為。 43.8 結論本例展示了如何在彎道上用傳感器融合實現一個集成的自適應巡航控制器(ACC),在Simulink中使用自動駕駛工具箱生成的合成數據進行測試,對其進行組件化,并自動生成代碼。 |
|