前方车辆传感器融合自动化PIL测试
类的嵌入式代码前方车辆传感器融合算法并在NVIDIA®Jetson®硬件上使用处理器在环仿真(PIL)进行验证。它还展示了如何使用Simulink®Test™在该板上自动化测试算法。在这个例子中,你:
配置模型以运行PIL模拟,并根据正常的模拟验证结果。
使用Simulink Test对前向车辆传感器融合算法进行自动PIL测试。
简介
自动驾驶系统的前向车辆传感器融合组件通过不同传感器的信息融合来感知自动驾驶汽车前方的周围环境。该组件是各种自动驾驶应用决策过程的核心,例如高速公路车道跟踪和向前碰撞预警。该组件通常部署到目标硬件。
这个例子展示了如何使用PIL仿真在NVIDIA Jetson硬件上测试前向车辆传感器融合算法。PIL模拟交叉编译生成的源代码,然后下载目标代码并在目标硬件上运行。通过比较正常和PIL模拟结果,您可以测试模型和生成的代码的数值等价性。有关更多信息,请参见SIL和PIL模拟(嵌入式编码).
此示例构建在前方车辆传感器融合的例子。
在这个例子中,你:
回顾试验台模型-该模型包含传感器、传感器融合和跟踪算法,以及评估功能的指标。
模拟模型—配置测试场景的试验台模型。模拟模型并可视化结果。
生成C代码—配置参考模型生成C代码。
运行PIL模拟-在NVIDIA Jetson硬件上进行PIL仿真并评估结果。
自动化PIL测试—配置测试经理为了模拟每个测试场景,评估成功标准,并报告结果。中动态地探索结果测试经理,并将其导出为PDF格式,以供外部审阅。
回顾试验台模型
要探索测试台架模型,请打开项目示例文件的工作副本。MATLAB®将文件复制到示例文件夹,以便您可以编辑它们。
helperDrivingProjectSetup (“FVSensorFusion.zip”, workDir = pwd)
此示例重用ForwardVehicleSensorFusionTestBench
模型前方车辆传感器融合的例子。
打开试验台模型。
open_system (“ForwardVehicleSensorFusionTestBench”)
打开此模型将运行helperSLForwardVehicleSensorFusionSetup
脚本,该脚本使用drivingScenario
基本工作区中的对象。它还配置传感器融合和跟踪参数、车辆参数以及定义输入和输出所需的Simulink总线信号ForwardVehicleSensorFusionTestBench
模型。测试台模型包含以下子系统:
传感器与环境
—模拟场景、车辆和传感器。前方车辆传感器融合
—实现雷达聚类、探测级联和目标跟踪算法。评估跟踪器指标
-使用一组轨道和它们的地面真理之间的广义最优子模式分配(GOSPA)度量来评估跟踪器性能。
有关这些子系统的更多信息,请参见前方车辆传感器融合的例子。
模拟模型
配置ForwardVehicleSensorFusionTestBench
模型来模拟scenario_LFACC_03_Curve_StopnGo
场景。这个场景包含六辆载具,包括自我载具。场景函数定义了它们的轨迹。在这种情况下,自我车辆的车道上有一辆领先车辆。在自我车辆右侧的车道上,绿色和蓝色指示的目标车辆正在同一方向行驶。在自我车辆左侧的车道上,黄色和紫色指示的目标车辆正朝相反的方向行驶。
helperSLForwardVehicleSensorFusionSetup (scenarioFcnName =“scenario_LFACC_03_Curve_StopnGo”)
模拟试验台模型。
sim卡(“ForwardVehicleSensorFusionTestBench”)
“模拟”将打开“3D模拟”窗口,其中显示场景,但不显示检测或传感器覆盖范围。使用鸟瞰的范围可视化自我参与者、目标参与者、传感器覆盖和检测,以及确认的轨迹。若要仅可视化传感器数据,请在模拟过程中通过清除“3D仿真”窗口中的显示三维仿真窗口参数在模拟3D场景配置块。
在仿真过程中,模型输出GOSPA度量及其分量。该模型使用确认的轨迹和实际信息将度量记录到基本工作空间变量logsout
.你可以把这些值画进去logsout
通过使用helperPlotForwardVehicleSensorFusionResults
函数。
hFigResults = helperPlotForwardVehicleSensorFusionResults(logsout);
图显示,定位误差占大部分的GOSPA度量值。注意,由于跟踪器的建立延迟,错过的目标组件从一个高值开始,并在一段时间后下降到零。偏离目标曲线中的其他峰值出现的原因是,由于前导车辆遮挡,最初对对面车辆没有检测到,而且一旦车辆以相反方向接近自我车辆,跟踪器存在一定的建立延迟,导致偏离目标曲线出现峰值。
关闭该图形。
关上(hFigResults)
生成C代码
您现在可以为算法生成C代码,应用常见的优化,并生成一个报告以方便研究生成的代码。配置前方车辆传感器融合
模型生成C代码,实时实现算法。设置模型参数以启用代码生成并显示配置值。
设置模型参数以启用C代码生成并保存模型。
helperSetModelParametersForPIL (“ForwardVehicleSensorFusion”) save_system (“ForwardVehicleSensorFusion”)
为参考模型生成代码。
slbuild (“ForwardVehicleSensorFusion”);
检查代码生成报告。请注意,“内存信息*指标表明算法在执行期间需要的内存小于1mb。因此,您可以在任何具有1 MB或更多RAM的硬件上部署和运行模型。
运行PIL仿真
生成C代码后,现在可以在NVIDIA Jetson板上使用PIL模拟验证代码。PIL模拟使您能够测试已编译、生成的代码在预期硬件上的功能等效性。有关PIL模拟的更多信息,请参见SIL和PIL模拟(嵌入式编码).
按照以下步骤执行PIL模拟。
1.为NVIDIA Jetson板创建一个硬件对象。
hwObj = jetson(“jetson-name”,“ubuntu”,“ubuntu”);
2.的模型配置参数设置前方车辆传感器融合
参考模型。
%设置硬件板。set_param (“ForwardVehicleSensorFusion”HardwareBoard =“英伟达杰森”) save_system (“ForwardVehicleSensorFusion”)
设置PIL仿真模型参数。set_param (《Forward vehiclesensorfusiontestbench /Forward VehicleSensorFusion》SimulationMode =“Processor-in-the-loop”) helperSetModelParametersForPIL (“ForwardVehicleSensorFusionTestBench”)
3.模拟模型并观察行为。
sim卡(“ForwardVehicleSensorFusionTestBench”)
比较普通仿真模式和PIL仿真模式的输出。
runIDs = Simulink.sdi.getAllRunIDs;normalSimRunID = runIDs(end - 1);PilSimRunID = runIDs(end);diffResult = Simulink.sdi.compareRuns(normalSimRunID,PilSimRunID);
绘制从正常模式和PIL模式计算的传感器融合指标的差异。
hFigDiffResults = helperPlotFVSFDiffSignals(diffResult);
请注意,在两次运行期间捕获的GOSPA指标是相同的,这确保PIL模式模拟产生与普通模式模拟相同的结果。
关闭该图形。
关上(hFigDiffResults)
评估执行时间
在PIL模拟期间,主机将已部署代码的执行时间度量记录到executionProfile
变量在MATLAB基础工作空间。您可以使用执行时间度量来确定生成的代码是否满足在目标硬件上实时部署的需求。这些时间表示生成的代码在目标硬件上的性能。有关更多信息,请参见为生成的代码创建执行时间配置文件(嵌入式编码).
绘制_step函数的执行时间。
hFigExecProfile = figure;阴谋(1 e3 * executionProfile.Sections (2) .ExecutionTimeInSeconds)包含(“时间步”) ylabel (“时间(ms)”)
注意,在这个场景中跟踪器的运行时间小于2毫秒,这比相机和雷达传感器的100毫秒更新时间要小得多。跟踪器运行时间较短,表明该算法能够实现实时计算。
关闭该图形。
关上(hFigExecProfile)
自动化PIL测试
Simulink Test包括测试管理器,您可以使用它为Simulink模型编写测试用例。在创建您的测试用例之后,您可以将它们分组并单独或批处理地执行它们。打开ForwardVehicleSensorFusionPILTests.mldatx
测试文件中的测试经理.的测试经理配置为通过使用等价测试自动化传感器融合和跟踪算法的PIL测试。等效性检验比较了常规模拟结果和PIL模拟结果。有关更多信息,请参见测试两个模拟是否等价(仿真软件测试).
的测试场景前方车辆传感器融合的自动化测试实例,演示了一种前向车辆传感器融合算法的SIL验证。
sltestmgr testFile = sltest.testmanager.load(“ForwardVehicleSensorFusionPILTests.mldatx”);
每个测试用例包含两个部分:SIMULATION1而且SIMULATION2.的SIMULATION1部分使用其POST-LOAD回调函数以使用适当的输入运行安装脚本,并配置ForwardVehicleSensorFusion
模型在正常仿真模式下运行,如图所示。
的SIMULATION2部分使用其POST-LOAD回调函数来设置硬件,并配置ForwardVehicleSensorFusion
模型在PIL仿真模式下运行,如图所示。
从测试文件运行测试场景需要您创建一个硬件对象。中的第一步运行PIL仿真节创建硬件对象。
运行和研究单个测试场景的结果
上测试系统级模型scenario_LFACC_03_Curve_StopnGo
场景。
testSuite = getTestSuiteByName(testFile,“PIL等价性检验”);testCase = getTestCaseByName(testSuite,“scenario_LFACC_03_Curve_StopnGo”);resultObj = run(testCase);
生成模拟后获得的测试报告。
sltest.testmanager.report (resultObj“Report.pdf”,...Title =前向车辆传感器融合PIL仿真结果,...IncludeMATLABFigures = true,...IncludeErrorMessages = true,...IncludeTestResults = false,...LaunchReport = true);
检查Report.pdf
.的测试环境部分显示了运行测试的平台和用于测试的MATLAB版本。的总结部分显示测试的结果和模拟的持续时间(以秒为单位)。的结果部分根据评估标准显示通过或不通过的结果。
运行并探索所有测试场景的结果
为所有测试运行系统模拟运行(测试文件)
命令。您也可以单击玩在测试经理应用程序。
中查看结果结果和工件的标签。测试经理.您可以可视化总体通过或失败的结果。
您可以在当前工作目录中找到生成的报告。该报告包含每个测试用例的通过或失败状态和图的详细摘要。
结论
这个示例向您展示了如何在NVIDIA Jetson硬件板上自动化前向车辆传感器融合算法的PIL测试。该算法生成的代码在执行期间只需要不到1mb的内存,这使得它适合在任何至少有1mb RAM的硬件上进行测试。