Main Content

本页采用了机器翻译。点击此处可查看英文原文。

高速公路车道跟随自动测试

此示例展示了如何通过根据需求定义场景、自动测试组件以及为这些组件生成的代码来评估车道跟踪应用程序的功能。这些组件包括车道检测、传感器融合、决策逻辑和控制。此示例以 Highway Lane Following (Automated Driving Toolbox) 示例为基础。

简介

高速公路车道跟随系统引导车辆在标记车道内行驶。它还与同一车道上前方的车辆保持设定的速度或安全距离。该系统通常包括车道检测、传感器融合、决策逻辑和控制组件。系统级仿真是评估集成组件功能的常用技术。仿真配置用于根据系统需求测试场景。自动运行这些仿真可以进行回归测试以验证系统级功能。

Highway Lane Following (Automated Driving Toolbox) 示例展示了如何仿真车道跟随的系统级模型。此示例展示如何使用 Simulink Test™ 针对多种场景自动测试该模型。这些场景基于系统级需求。在此示例中,您将:

  1. 审核需求:这些需求描述了系统级测试条件。创建仿真测试场景来代表这些条件。

  2. 审查测试平台模型:审查包含度量评估的系统级车道跟随测试平台模型。这些度量评估将测试平台模型与 Simulink Test 结合起来,以进行自动化测试。

  3. 禁用运行时可视化:禁用运行时可视化以减少自动测试的执行时间。

  4. 自动化测试:配置测试管理器来仿真每个测试场景,评估成功准则并报告结果。在测试管理器中动态探索结果并将其导出为 PDF 供外部审阅者查看。

  5. 使用生成的代码进行自动测试:车道检测、传感器融合、决策逻辑和控制组件配置为生成 C++ 代码。对生成的代码运行自动测试以验证预期行为。

  6. 并行自动测试:使用多核计算机上的并行计算可以减少运行测试的总体执行时间。

测试系统级模型需要逼真的仿真环境。在此示例中,您可以通过与 Epic Games® 的 Unreal Engine 集成来启用系统级仿真。此示例需要 Windows® 64 位平台。

if ~ispc
    error(['This example is supported only on Microsoft', char(174),' Windows 64-bit platform.'])
end

为了确保仿真结果的可重复性,设置随机种子。

rng(0);

审核需求

Requirements Toolbox ™ 让您可以在 Simulink 中创作、分析和管理需求。此示例包含十个测试场景,每个场景都定义了高级测试需求。打开需求集。

为了探索测试平台模型,加载高速公路车道跟踪工程。

openProject("HighwayLaneFollowing");
open('HighwayLaneFollowingTestRequirements.slreqx')

或者,您也可以从 Simulink 中需求管理器应用程序的需求选项卡中打开该文件。

该文件中的每一行都以文本和图形格式指定了针对测试场景测试车道跟踪系统的需求。带有 scenario_LF_ 前缀的场景使您能够测试车道检测和车道跟随算法,而不会受到其他车辆的阻碍。带有 scenario_LFACC_ 前缀的场景使您能够与道路上的其他车辆一起测试车道检测、车道跟随和 ACC 行为。

  1. scenario_LF_01_Straight_RightLane — 直路场景,自主车辆位于右车道。

  2. scenario_LF_02_Straight_LeftLane — 直路场景,自主车辆位于左车道。

  3. scenario_LF_03_Curve_LeftLane — 弯曲道路场景,自主车辆位于左车道。

  4. scenario_LF_04_Curve_RightLane — 弯曲道路场景,自主车辆位于右车道。

  5. scenario_LFACC_01_Curve_DecelTarget — 弯曲道路场景,前方车道上有一辆减速的先导车辆。

  6. scenario_LFACC_02_Curve_AutoRetarget — 弯曲道路场景,自主车道中的先导车辆不断变化。此场景测试了自主车辆沿弯道行驶时重新瞄准新先导车辆的能力。

  7. scenario_LFACC_03_Curve_StopnGo — 弯曲道路场景,先导车辆在自主车道上减速。

  8. scenario_LFACC_04_Curve_CutInOut — 弯曲的道路场景,相邻车道上有一辆快速行驶的汽车切入自我车道并从自我车道切出。

  9. scenario_LFACC_05_Curve_CutInOut_TooClose — 弯曲的道路场景,相邻车道上有一辆快速行驶的汽车切入自我车道,并积极地从自我车道切出。

  10. scenario_LFACC_06_Straight_StopandGoLeadCar — 直路场景,先导车辆在自主车道上发生故障。

这些需求被实现为测试场景,其名称与 HighwayLaneFollowingTestBench 模型中使用的场景相同。

审查测试平台模型

此示例重用了 Highway Lane Following (Automated Driving Toolbox) 示例中的 HighwayLaneFollowingTestBench 模型。打开测试平台模型。

open_system("HighwayLaneFollowingTestBench");

该测试平台模型具有仿真 3D 场景车道标记检测器车辆检测器前方车辆传感器融合车道跟随决策逻辑车道跟随控制器以及车辆动力学组件。

该测试平台模型使用 helperSLHighwayLaneFollowingSetup 脚本配置。此安装脚本以 scenarioName 作为输入。scenarioName 可以是前面描述的任何一个测试场景。要运行安装脚本,请使用代码:

scenarioName = "scenario_LFACC_03_Curve_StopnGo";
helperSLHighwayLaneFollowingSetup("scenarioFcnName",scenarioName);

您现在可以仿真模型并可视化结果。有关仿真结果分析和测试平台模型中各个组件设计的更多详细信息,请参见Highway Lane Following (Automated Driving Toolbox)示例。

在这个例子中,重点更多地在于使用 Simulink Test 针对不同的测试场景自动执行该测试平台模型的仿真运行。Metrics Assessment 子系统支持将系统级度量评估与 Simulink Test 集成。打开 Metrics Assessment 子系统。

open_system("HighwayLaneFollowingTestBench/Metrics Assessment");

通过此示例,您可以使用四个系统级度量来评估系统级行为。此外,您还可以计算组件级度量来分析各个组件及其对整个系统性能的影响。

系统级度量

  • Verify Lateral Deviation —此模块验证车道中心线的横向偏差是否在相应场景规定的阈值范围内。在编写测试场景时定义阈值。

  • Verify In Lane —此模块验证自身车辆在整个仿真中是否沿着道路上的其中一条车道行驶。

  • Verify Time gap — 此模块验证自主车辆和先导车辆之间的时间间隔是否大于 0.8 秒。两辆车之间的时间间隔定义为计算出的车头距离与自主车辆速度之比。

  • Verify No Collision — 此模块验证自主车辆在仿真中的任何时候都不会与先导车辆发生碰撞。

组件级度量

  • Lane Metrics — 此模块验证检测到的车道边界和地面真实数据之间的距离是否在测试场景中指定的阈值范围内。

  • Vehicle Detector Metrics — 该模块计算并记录检测的真正率、假负率和假正率。

  • 传感器融合和跟踪度量——该子系统计算广义最优子模式分配 (GOSPA)度量、定位误差、未命中目标误差和错误跟踪误差。有关这些度量的更多信息,请参阅Forward Vehicle Sensor Fusion (Automated Driving Toolbox)示例。

禁用运行时可视化

系统级测试平台模型将仿真过程中的中间输出可视化,以便分析模型中的不同组件。当测试自动化时,这些可视化不是必需的。您可以通过禁用它们来减少自动测试的执行时间。

禁用车道标记检测器子系统的运行时可视化。

load_system('LaneMarkerDetector');
blk = 'LaneMarkerDetector/Lane Marker Detector';
set_param(blk,'EnableDisplays','off');

禁用车辆检测器子系统的运行时可视化。

load_system('VisionVehicleDetector');
blk = 'VisionVehicleDetector/Pack Detections/Pack Vehicle Detections';
set_param(blk,'EnableDisplay','off');

配置 Simulation 3D Scene Configuration (Automated Driving Toolbox)模块以在无头模式下运行虚幻引擎,其中 3D 仿真窗口被禁用。

blk = ['HighwayLaneFollowingTestBench/Simulation 3D Scenario/', ...
      'Simulation 3D Scene Configuration'];
set_param(blk,'EnableWindow','off');

自动化测试

测试管理器配置为自动测试车道跟随应用程序。在测试管理器中打开 HighwayLaneFollowingTestAssessments.mldatx 测试文件。

sltestmgr;
testFile = sltest.testmanager.load('HighwayLaneFollowingTestAssessments.mldatx');

观测此文件中先前编写的填充测试用例。每个测试用例都与需求编辑器中的相应需求相链接,以便于实现可追溯性。每个测试用例使用 POST-LOAD 回调来使用适当的输入运行安装脚本并配置输出视频文件名。在测试用例仿真之后,它从 CLEAN-UP 回调中调用 helperTMTestCasePostProcessing,通过生成Highway Lane Following (Automated Driving Toolbox)示例中解释的图来评估整个系统和各个组件的性能。

在仿真测试用例之后,Simulink Test 还从 CUSTOM CRITERIA 回调中调用这些函数来获取车道标记检测器和车辆检测器组件的额外度量:

  • helperVerifyPrecisionAndSensitivity — 验证车道标记检测器组件的精度和灵敏度度量是否在预定义的阈值限制内。

  • helperVerifyPrecisionAndMissrate — 验证车辆检测器组件的精度和漏检率度量是否在预定义的阈值限制内。

运行并探索单个测试场景的结果:

要减少命令窗口输出,请关闭 MPC 更新消息。

mpcverbosity('off');

要使用 Simulink Test 中的 scenario_LFACC_03_Curve_StopnGo 测试场景测试系统级模型,请使用以下代码:

testSuite = getTestSuiteByName(testFile,'Test Scenarios');
testCase = getTestCaseByName(testSuite,'scenario_LFACC_03_Curve_StopnGo');
resultObj = run(testCase);

要在仿真后生成报告,请使用以下代码:

sltest.testmanager.report(resultObj,'Report.pdf',...,
    'Title','Highway Lane Following',...
    'IncludeMATLABFigures',true,...
    'IncludeErrorMessages',true,...
    'IncludeTestResults',0,'LaunchReport',true);

检查报告 Report.pdf。请注意,测试环境部分显示了运行测试的平台和用于测试的 MATLAB® 版本。摘要部分显示测试结果和仿真持续时间(以秒为单位)。结果部分根据评估准则显示通过/失败的结果。本节还展示了从 helperGenerateFilesForLaneFollowingReport 函数记录的图表。

运行并探索所有测试场景的结果:

您可以使用 sltest.testmanager.run 仿真系统进行所有测试。或者,您可以通过单击测试管理器应用中的播放来仿真系统。

测试仿真完成后,可以在测试管理器的结果和工件选项卡中查看所有测试的结果。对于每个测试用例,模型中的 Check Static Range 模块与测试管理器相关联,以可视化整体通过/失败结果。

您可以在当前工作目录中找到生成的报告。该报告包含每个测试用例的通过/失败状态和图表的详细摘要。

在需求编辑器中验证测试状态:

打开需求编辑器并选择显示。然后,选择验证状态以查看每个需求的验证状态摘要。绿色和红色条表示每个测试的仿真结果的通过/失败状态。

使用生成的代码进行自动化测试

HighwayLaneFollowingTestBench 模型可以实现车道标记检测器车辆检测器前方车辆传感器融合车道跟随决策逻辑车道跟随控制器组件的集成测试。通过软件在环(SIL)验证对这些组件进行回归测试通常会有所帮助。如果您拥有 Embedded Coder™ Simulink Coder™ 许可证,那么您就可以为这些组件生成代码。此工作流程可让您验证生成的代码是否产生符合整个仿真中系统级需求的预期结果。

车道标记检测器设置为在软件在环模式下运行。

model = 'HighwayLaneFollowingTestBench/Lane Marker Detector';
set_param(model,'SimulationMode','Software-in-the-loop');

车辆检测器设置为在软件在环模式下运行。

model = 'HighwayLaneFollowingTestBench/Vehicle Detector';
set_param(model,'SimulationMode','Software-in-the-loop');

前向车辆传感器融合设置为在软件在环模式下运行。

model = 'HighwayLaneFollowingTestBench/Forward Vehicle Sensor Fusion';
set_param(model,'SimulationMode','Software-in-the-loop');

车道跟随决策逻辑设置为在软件在环模式下运行。

model = 'HighwayLaneFollowingTestBench/Lane Following Decision Logic';
set_param(model,'SimulationMode','Software-in-the-loop');

车道跟随控制器设置为在软件在环模式下运行。

model = 'HighwayLaneFollowingTestBench/Lane Following Controller';
set_param(model,'SimulationMode','Software-in-the-loop');

现在,运行 sltest.testmanager.run 来仿真系统的所有测试场景。测试完成后,检查生成的报告中的图表和结果。

再次启用 MPC 更新消息。

mpcverbosity('on');

并行自动化测试

如果您有 Parallel Computing Toolbox™ 许可证,那么您可以配置测试管理器使用并行池并行执行测试。要并行运行测试,请在使用 save_system('LaneMarkerDetector')save_system('VisionVehicleDetector')save_system('HighwayLaneFollowingTestBench') 禁用运行时可视化后保存模型。测试管理器使用默认的 Parallel Computing Toolbox 集群并且仅在本地机器上执行测试。并行运行测试可以加快执行速度并减少获取测试结果所需的时间。有关如何从测试管理器并行配置测试的更多信息,请参阅 使用并行执行运行测试