本講展示了如何以編程方式創(chuàng)建使用駕駛場景設(shè)計(jì)器應(yīng)用程序構(gòu)建的駕駛場景。通過編程創(chuàng)建場景的不同變體,可以在多種條件下快速測試自動駕駛算法。 要創(chuàng)建駕駛場景的程序化變體,請遵循以下步驟: 1 通過使用駕駛場景設(shè)計(jì)器應(yīng)用程序交互式地構(gòu)建駕駛場景; 2 導(dǎo)出一個MATLAB函數(shù),生成與該場景對應(yīng)的MATLAB代碼; 3 在 MATLAB 編輯器中,修改導(dǎo)出的函數(shù)以創(chuàng)建原始場景的變體; 4 調(diào)用該函數(shù)生成一個代表該場景的drivingScenario對象; 5 將場景對象導(dǎo)入到應(yīng)用程序中,以仿真修改后的場景或生成其他場景。另外,要在Simulink中仿真修改后的場景,可通過使用Scenario Reader塊將對象導(dǎo)入Simulink模型中。 該圖是該工作流程的直觀表示 20.1在應(yīng)用程序中構(gòu)建場景使用 "駕駛場景設(shè)計(jì)器 "交互式地建立一個駕駛場景,在此場景中測試的算法。有關(guān)構(gòu)建場景的應(yīng)用,請關(guān)注收藏智駕社公眾號。 本講使用的駕駛場景是基于可以從駕駛場景設(shè)計(jì)器應(yīng)用程序中加載的預(yù)建場景之一。 在應(yīng)用程序中打開場景文件。 drivingScenarioDesigner('LeftTurnScenarioNoSensors.mat') 點(diǎn)擊 "運(yùn)行 "來仿真這個場景。在這個場景中,被控車輛向北行駛,直行通過一個十字路口。同時,從十字路口左側(cè)駛來的車輛向左轉(zhuǎn)彎并駛?cè)氡豢剀囕v所處車道的相鄰車道,處于被控車輛的前方。 為簡單起見,本方案不包括安裝在被控車輛上的傳感器。 20.2導(dǎo)出場景的MATLAB函數(shù)查看并仿真場景后,可以將場景導(dǎo)出到 MATLAB 命令行。從 "駕駛場景設(shè)計(jì)器 "應(yīng)用程序工具欄中,選擇 "導(dǎo)出">"導(dǎo)出 MATLAB 函數(shù)"。導(dǎo)出的函數(shù)包含用于生成在應(yīng)用程序中創(chuàng)建的場景的 MATLAB 代碼。打開導(dǎo)出的函數(shù): open LeftTurnScenarioNoSensors.m 調(diào)用這個函數(shù)會返回駕駛場景的如下方面: - scenario--場景中的道路和執(zhí)行器,以drivingScenario對象的形式返回。 - egoVehicle--場景中定義的被控車輛,以Vehicle對象返回。詳見Vehicle函數(shù)。 如果場景中包含傳感器,那么返回的函數(shù)中包含了用于生成傳感器的額外代碼。如果仿真了包含這些傳感器的場景,那么該函數(shù)也可以生成這些傳感器產(chǎn)生的探測信息。 20.3 修改功能以創(chuàng)建場景變量通過修改導(dǎo)出的MATLAB函數(shù)中的代碼, 可以生成單一場景的多種變體。一個常見的變體是以不同的速度測試被控車輛。在導(dǎo)出的MATLAB函數(shù)中,將被控車輛的速度設(shè)置為每秒10米的恒定值(速度=10)。要生成不同的被控車輛速度,可以將速度變量轉(zhuǎn)換為函數(shù)的輸入?yún)?shù)。打開包含導(dǎo)出函數(shù)修改版的腳本 open LeftTurnScenarioNoSensorsModified.m 在這個修改后的函數(shù)中: - egoSpeed作為一個輸入?yún)?shù)被包含在內(nèi)。 - 速度這個常量變量被刪除。 - 為了計(jì)算被控車輛的跟蹤,用egoSpeed代替了speed。 這張圖顯示了這些腳本的修改: 要產(chǎn)生額外的變化,可以考慮: - 修改道路和車道參數(shù),查看對車道探測的影響。 - 修改車輛的跟蹤或起始位置。 - 修改車輛的尺寸 20.4 生成程序化場景的調(diào)用功能利用修改后的函數(shù),生成被控車輛以每秒20米的恒定速度行駛的變型場景: scenario =LeftTurnScenarioNoSensorsModified(20) % m/s scenario =drivingScenario with properties: SampleTime: 0.0400 StopTime: Inf SimulationTime: 0 IsRunning: 1 Actors: [1x2 driving.scenario.Vehicle] 20.5 將修改后的場景導(dǎo)入到應(yīng)用程序中要將修改后的場景與修改后的車輛導(dǎo)入到應(yīng)用程序中,請使用drivingScenarioDesigner函數(shù)。指定drivingScenario對象作為輸入?yún)?shù): drivingScenarioDesigner(scenario)
以前,其他車輛先通過路口?,F(xiàn)在,隨著被控車輛的速度從每秒10米提高到20米,被控車輛先通過路口。 在應(yīng)用中處理駕駛場景對象時,請記住這幾點(diǎn): - 要嘗試不同的被控車輛速度,請?jiān)俅握{(diào)用導(dǎo)出的函數(shù),然后使用drivingScenarioDesigner函數(shù)導(dǎo)入新的drivingScenario對象。該應(yīng)用不包含導(dǎo)入這些對象的菜單選項(xiàng)。 - 如果的場景包括傳感器, 可以通過使用以下語法重新打開場景和傳感器:drivingScenarioDesigner(scenario,sensors)。 - 如果對執(zhí)行器的尺寸進(jìn)行了重大更改,請確保執(zhí)行器的ClassID屬性與應(yīng)用中指定的Class ID值相對應(yīng)。例如,在應(yīng)用程序中,汽車的Class ID為1,卡車的Class ID為2,如果 在程序上將汽車改為 有卡車的尺寸,更新該車輛的ClassID屬性,從1(汽車)到2。(卡車)。 20.6將修改后的場景導(dǎo)入到Simulink中要將修改后的場景導(dǎo)入Simulink模型,請使用Scenario Reader塊。該塊從應(yīng)用程序中保存的場景文件或保存到 MATLAB 工作區(qū)或模型工作區(qū)的drivingScenario 變量中讀取道路和執(zhí)行器。將Scenario Reader塊添加到的模型中,并設(shè)置這些參數(shù): 1 將駕駛場景的來源設(shè)置為來自工作區(qū)。 2 將MATLAB或模型工作區(qū)變量名稱設(shè)置為drivingScenario工作區(qū)中的變量名稱。 在Simulink中使用drivingScenario對象時,請記住以下幾點(diǎn)。 - 當(dāng)將Source of ego vehicle設(shè)置為Scenario時,模型將使用在的drivingScenario對象。該區(qū)塊根據(jù)被控車輛的指定的actorID屬性。這個actor必須是一個Vehicle對象(見車輛)。要改變指定的被控車輛,更新被控車輛ActorID參數(shù)。 - 當(dāng)將輸出的執(zhí)行器姿勢連接到傳感器塊時,更新這些塊以直接從駕駛場景對象中獲取執(zhí)行器配置文件。默認(rèn)情況下,這些塊使用同一組的所有執(zhí)行器的配置文件,其中配置文件在塊的執(zhí)行器配置文件選項(xiàng)卡上定義。要從對象中獲取配置文件,在每個傳感器塊的 "執(zhí)行器配置文件 "選項(xiàng)卡上,設(shè)置 "選擇"方法將執(zhí)行器配置文件參數(shù)指定為MATLAB表達(dá)式。然后,將actor profiles參數(shù)的MATLAB表達(dá)式設(shè)置為調(diào)用對象上的actorProfiles函數(shù)。例如:actorProfiles(scenario)。 |
|