高速公路车道跟随控制器自动测试
这个例子展示了如何使用Simulink®Test™自动测试车道跟随控制器和为该组件生成的代码。在这个例子中,你:
在具有不同测试要求的不同测试场景中评估车道跟随控制器的行为。
自动测试车道跟随控制器和为参考模型生成的代码。
中提供的车道跟随控制器生成高速公路车道跟随控制器代码的例子。
介绍
车道跟随控制器是高速公路车道跟随应用的基本组成部分。车道跟随控制器利用车道和车辆信息以及设定的速度,为自动驾驶车辆生成转向角度和加速控制命令。有关如何设计lane跟随控制器和配置用于c++代码生成的模型的详细信息,请参阅生成高速公路车道跟随控制器代码的例子。
这个例子展示了如何使用Simulink Test对车道跟随控制器在多种情况下进行自动测试。场景基于系统级需求。它还展示了如何使用软件在循环(SIL)模拟来验证生成的代码。在这个例子中,你:
评审需求——需求描述了系统级的测试条件。使用模拟测试场景来表示这些条件。
审查测试台架模型-该模型包含控件、车辆动力学和评估功能的指标。度量评估将测试台架模型与Simulink test集成,以进行自动化测试。
禁用运行时可视化——禁用运行时可视化以减少自动化测试的执行时间。
自动化测试——配置一个测试管理器来模拟每个测试场景,评估成功标准,并报告结果。在测试管理器中动态地探索结果,并将它们导出为PDF供外部审阅者使用。
自动测试生成的代码-配置决策逻辑和控制组件,以生成c++代码。对生成的代码运行自动测试以验证行为。
自动化并行测试—通过在多核计算机上使用并行计算,减少运行测试的总执行时间。
在这个示例中,您可以通过与Epic Games®的虚幻引擎®集成来启用系统级仿真。3D仿真环境需要Windows®64位平台。
如果~ ispc错误([“3D模拟只支持微软”char (174),“窗口”char (174),“。”])结束
评审需求
为了探索需求,打开项目示例文件的工作副本。MATLAB®将文件复制到示例文件夹中,以便您可以编辑它们。
目录(fullfile (matlabroot,“工具箱”,“开车”,“drivingdemos”) helperDrivingProjectSetup (“HLFController.zip”, workDir = pwd)
需求工具箱™使您能够在Simulink中编写、分析和管理需求。此示例包含12个测试场景,并为每个场景定义了高级测试需求。打开需求集。
打开(“HighwayLaneFollowingControllerTestRequirements.slreqx”)
或者,也可以从需求的标签。要求经理应用程序在Simulink。
该文件中的每一行以文本和图形格式指定了跟随控制器组件的车道的测试要求。的场景scenario_LF_
前缀使您可以在不受其他车辆阻碍的情况下测试车道跟随控制器算法。的场景scenario_ACC_
前缀使您能够与道路上的其他车辆一起测试自适应巡航控制(ACC)行为。的场景scenario_LFACC_
前缀使您能够与道路上的其他车辆测试车道跟随和ACC行为。
scenario_LF_01_Straight_RightLane
-直路场景,自我车辆在右侧车道。scenario_LF_02_Straight_LeftLane
-直路场景,自我车在左车道。scenario_LF_03_Curve_LeftLane
弯道场景,ego车在左车道。scenario_LF_04_Curve_RightLane
弯道场景,自我车在右车道。scenario_ACC_01_Straight_TargetDiscriminationTest
-有两辆目标车辆的直路场景,一辆在自我车道,另一辆在相邻车道。这个场景测试了自我车辆识别领头车辆的能力,当有另一辆目标车辆以相同的速度靠近领头车辆行驶时。scenario_ACC_02_Straight_StopnGo
-直道场景,在自我车道上有一辆减速的先导车。scenario_LFACC_01_Curve_DecelTarget
-弯道场景,在自我车道上有一辆减速的先导车。scenario_LFACC_02_Curve_AutoRetarget
-弯道场景,在自我车道上更换领头车辆。这个场景测试了自我车辆在沿着曲线行驶时重新瞄准新的领先车辆的能力。scenario_LFACC_03_Curve_StopnGo
弯道场景,领头车辆在自我车道减速。scenario_LFACC_04_Curve_CutInOut
-弯道场景,一辆快速行驶的汽车在相邻车道上切入自我车道,然后从自我车道上切入。scenario_LFACC_05_Curve_CutInOut_TooClose
-弯道场景,在相邻车道上有一辆快速行驶的汽车切入自我车道,并咄咄逼人地从自我车道上切出。scenario_LFACC_06_Straight_StopandGoLeadCar
-直道场景,在自我车道有一辆坏掉的车。
回顾试验台模型
打开试验台模型。
open_system (“HighwayLaneFollowingControllerTestBench”)
试验台模型包含以下子系统:
模拟3D场景
-指定用于模拟的道路、车辆和视觉检测生成器。车道跟随决策逻辑
—指定横向和纵向决策逻辑,并向控制器提供车道中心信息和最重要对象(MIO)相关信息。车道跟随控制器
-指定路径跟踪控制器,该控制器生成控制命令以操纵自我车辆。车辆动力学
-指定自我车辆的动态模型。指标的评估
-评估系统级行为。
的模拟3D场景
,车道跟随决策逻辑
,车道跟随控制器
,车辆动力学
,指标的评估
子系统是基于子系统中所使用的生成高速公路车道跟随控制器代码的例子。
在这个例子中,重点是使用Simulink test对不同的测试场景自动化这个测试台架模型的模拟运行。的指标的评估
子系统使系统级度量评估与Simulink测试集成。这个子系统使用检查静态范围(模型)此集成的块。打开指标的评估
子系统。
open_system (“HighwayLaneFollowingControllerTestBench /指标评估”)
在本例中,使用四个指标来评估车道跟随系统。
验证侧向偏差
—验证车道偏离中心线的横向偏差在对应场景的规定阈值范围内。在编写测试场景时定义阈值。车道内验证
-这个block验证了ego车辆在整个模拟过程中是沿着道路上的一条车道行驶的。验证时间间隔
-此区块验证自我车辆与领先车辆之间的时间差距大于0.8秒。两车之间的时间差定义为计算出的车头距与车辆自身速度之比。验证无碰撞
-这个区块验证了在模拟过程中,自我车辆在任何时候都不会与领先车辆发生碰撞。
禁用运行时可视化
系统级测试台模型打开一个虚幻引擎仿真窗口,用于可视化场景。自动化测试时不需要此窗口。
配置模拟三维场景配置块以无头模式运行虚幻引擎,其中3D模拟窗口被禁用。
黑色=“HighwayLaneFollowingControllerTestBench/仿真3D场景/仿真3D场景配置”;set_param(黑色,EnableWindow =“关闭”);
自动化测试
的测试经理被配置为自动测试车道跟随控制器组件。打开HighwayLaneFollowingControllerMetricAssessments.mldatx
中的测试文件测试经理.
sltestmgr sltest.testmanager.load (“HighwayLaneFollowingControllerMetricAssessments.mldatx”);
观察先前在此文件中编写的填充测试用例。这些测试被配置为运行模型。
每个测试用例都使用POST-LOAD回调以使用适当的输入运行设置脚本。在模拟每个测试用例之后测试经理控件中运行脚本清理回调以生成结果图。
运行并浏览单个测试场景的结果
关闭关于模型预测控制对象的更新消息。
mpcverbosity (“关闭”);
方法测试系统级模型scenario_LFACC_03_Curve_StopnGo
来自Simulink test的测试场景。
testFile = sltest.testmanager.load(“HighwayLaneFollowingControllerMetricAssessments.mldatx”);testSuite = getTestSuiteByName(testFile,“测试场景”);testCase = getTestCaseByName(testSuite,“scenario_LFACC_03_Curve_StopnGo”);resultObj = run(testCase);
模拟完成后生成报告。
sltest.testmanager.report (resultObj“Report.pdf”,…Title =“高速公路车道跟踪控制器”,…IncludeMATLABFigures = true,…IncludeErrorMessages = true,…IncludeTestResults = false,…LaunchReport = true);
检查Report.pdf
.观察到测试环境
部分显示了运行测试的平台和用于测试的MATLAB版本。的总结
部分显示了测试的结果和以秒为单位的模拟持续时间。的结果
部分显示基于评估标准的合格或不合格结果。的记录图清理回调的命令。
如果您拥有Simulink Coverage™的许可,您可以在生成的Report.pdf
的覆盖设置测试经理文件。有关更多信息,请参见覆盖范围设置部分在测试管理器中指定测试属性(仿真软件测试).您可以使用覆盖率数据来发现测试中的差距、缺失的需求,或者意外的功能。
运行并探索所有测试场景的结果
对系统进行所有测试的模拟运行(测试文件)
命令。或者,您可以通过选择来模拟系统玩在测试经理应用程序。
测试模拟完成后,您可以在结果和工件的标签。测试经理.对于每个测试用例检查静态范围(模型)模型中的块与测试经理.这种关联使您能够可视化总体的通过或不通过结果。
您可以在当前工作目录中找到生成的报告。该报告包含通过或失败状态的详细摘要,以及每个测试用例的图。
在需求编辑器中验证测试状态
打开要求编辑器并选择显示.然后,选择验证状态查看每个需求的验证状态摘要。绿色和红色条表示每个测试的模拟结果的通过或失败状态。
使用生成的代码自动化测试
的HighwayLaneFollowingControllerTestBench
模型使您能够通过执行等效测试来验证生成的代码车道跟随决策逻辑
和车道跟随控制器
开环中的元件。要执行这些组件的等效测试,请使用背靠背测试。背靠背测试将正常模拟的结果与软件在循环、处理器在循环或硬件在循环模拟生成的代码结果进行比较。有关更多信息,请参见sltest.testmanager.createTestForComponent
(仿真软件测试).这个例子着重于验证车道跟随控制器
.
方法创建并运行等价性测试车道跟随控制器
.
1.选择一个测试场景并运行安装脚本。
helperSLHighwayLaneFollowingControllerSetup (scenarioFcnName =“scenario_LFACC_03_Curve_StopnGo”);
2.创建一个测试套件对象。
testSuite = getTestSuiteByName(testFile,“LaneFollowingControllerEquivalenceTest”);如果isempty(testSuite) testSuite = sltest.testmanager.TestSuite(testFile,“LaneFollowingControllerEquivalenceTest”);结束
3.为组件创建等效性测试。
testCase = sltest.testmanager.createTestForComponent(“测试文件”testSuite,…“组件”,“HighwayLaneFollowingControllerTestBench/Lane FollowingController”,…TestType =“对等”Simulation1Mode =“正常”,…Simulation2Mode =“Software-in-the-Loop (SIL)”UseComponentInputs = false,…HarnessOptions = {“LogOutputs”,真正的});
在前一步中默认创建了一个测试工具。找到并打开测试线束。
harnessList = sltest.harness.find(“HighwayLaneFollowingControllerTestBench/Lane FollowingController”);sltest.harness.open (“HighwayLaneFollowingControllerTestBench/Lane FollowingController”harnessList(结束). name);
4.设置等价测试的容差。
获取等价标准。
eq = captureequivalence (testCase);
设置输出信号的等效标准公差。
sc = getSignalCriteria(eq);为i = 1:尺寸(sc, 2)如果(比较字符串(sc (i)。名字“steering_angle”) || strcmp(sc(i))名字“ego_acceleration”) sc (i)。AbsTol = sqrt(eps)“替身”));其他的sc (i)。Enabled = false;结束结束
5.运行等效测试模拟。
运行(testCase);
6.模拟完成后查看测试结果。选择结果和工件的标签。测试经理或者输入以下命令。
sltest.testmanager.view;
该选项卡显示基于评估标准的通过或不通过结果。您也可以使用此流程为其他测试方案创建等价性测试。
此过程向您展示了如何以编程方式创建和运行等效测试。您还可以通过图形化的方式完成此操作,方法中解释的步骤创建并运行一个背靠背测试(仿真软件测试)的例子。
的HighwayLaneFollowingControllerTestBench
的集成测试车道跟随决策逻辑
和车道跟随控制器
组件与车辆动力学
在闭环。通过SIL验证对这些组件进行回归测试,可以识别系统级别的任何问题。此工作流使您能够验证生成的代码是否产生与整个模拟过程中系统级需求相匹配的预期结果。
设置车道跟随决策逻辑
以软件在环模式运行。
模型=“HighwayLaneFollowingControllerTestBench/Lane Following Decision Logic”;set_param(模型、SimulationMode =“Software-in-the-loop”)
设置车道跟随控制器
以软件在环模式运行。
模型=“HighwayLaneFollowingControllerTestBench/Lane FollowingController”;set_param(模型、SimulationMode =“Software-in-the-loop”)
使用运行(测试文件)
命令,用于模拟系统的所有测试场景。测试完成后,在生成的报告中查看图和结果。如果您拥有Simulink Coverage的许可,您还可以通过启用覆盖设置来获得生成报告中生成代码的代码覆盖分析测试经理文件。
您可以可视化单个测试用例的覆盖结果,以及聚合的覆盖结果。
重新启用MPC更新消息。
mpcverbosity (“上”);
并行自动化测试
如果您拥有并行计算工具箱™许可证,则可以进行配置测试经理使用并行池并行执行测试。要并行运行测试,请在使用禁用运行时可视化后保存模型save_system(“HighwayLaneFollowingControllerTestBench”)
.测试经理使用默认的并行计算工具箱集群,并仅在本地计算机上执行测试。并行运行测试可以加快执行速度并减少获得测试结果所需的时间。有关如何从上并行配置测试的详细信息测试经理,请参阅使用并行执行运行测试(仿真软件测试).