主要内容

为高速公路变道规划器生成代码

这个例子展示了如何设计、测试和生成用于高速公路驾驶的变道计划器的c++代码。此示例紧跟基于Frenet参考路径的公路轨迹规划的例子。在这个例子中,你:

  1. 设计了试验台模型,利用地面真实信息验证了高速公路变道规划器的功能。

  2. 为高速公路车道变更规划器生成代码,分析执行时间,并通过模拟验证功能等效性。

简介

高速公路变道系统使自动车辆在高速公路上自动从一个车道移动到另一个车道。高速公路变道规划系统是高速公路变道系统的基本组成部分。它有望处理不同的驾驶行为,以安全导航自我车辆从一个点到另一个点。在这个示例中,高速公路变道规划器为不同的驾驶行为(如巡航控制、前车跟踪(LCF)和变道机动)采样轨迹。然后评估成本、可行性和与其他车辆碰撞的可能性,并生成最佳无碰撞轨迹。这个示例还展示了如何生成c++代码,并使用软件在循环(SIL)执行验证生成的代码。在这个例子中,你:

  1. 探索试验台模型-测试台架模型包含场景和环境、规划器配置参数、高速公路车道变更规划器和评估功能的指标。

  2. 变道计划模型-参考模型包含终端状态采样器、运动规划器和运动预测模块。终端状态采样器根据规划器参数和场景中自我车辆和其他车辆的当前状态对终端状态进行采样。运动预测模块预测mio的未来运动。运动规划器对轨迹进行采样并输出最优轨迹。

  3. 模拟与巡航控制和引导车跟踪-模拟系统,只启用巡航控制和引导汽车跟踪机动。

  4. 模拟车道变化-通过增加车道变换机动来模拟系统。

  5. 生成c++代码—配置换道规划器参考模型以SIL模式运行,并通过仿真验证功能等价。

  6. 评估执行时间并执行代码覆盖率分析-通过执行时间和覆盖率来评估生成代码的性能。

  7. 探索其他场景—这些场景是在额外的条件下测试系统。您可以应用本例中使用的建模模式来测试您自己的公路车道变更系统的规划器组件。

探索试验台模型

本例中的公路变道计划系统包含一个公路变道计划试验台和一个参考模型。

  • 试验台模型-试验台模型在闭环中模拟和测试高速公路变道规划算法的行为。

  • 参考模型——公路变道规划器参考模型实现了公路变道规划器算法,并生成算法的c++代码。

参考模型可以与高速公路变道系统。要探索测试台架模型,请打开项目示例文件的工作副本。MATLAB将文件复制到示例文件夹中,以便您可以编辑它们。

目录(fullfile (matlabroot,“工具箱”“开车”“drivingdemos”));helperDrivingProjectSetup (“HLCPlanner.zip”“workDir”pwd);

打开试验台模型。

open_system (“HighwayLaneChangePlannerTestBench”);

打开此模型将运行helperSLHighwayLaneChangePlannerSetup脚本,该脚本使用drivingScenario基本工作区中的对象。它还配置规划器参数、初始自我车辆信息、车道信息、规划器所需的全局规划点,以及定义车辆的输入和输出所需的Simulink总线信号万博1manbetxHighwayLaneChangePlannerTestBench模型。测试台模型包含以下子系统:

  • 场景和环境——指定用于模拟的场景、车辆和地图数据的子系统。

  • 规划配置参数-指定规划算法所需的配置参数的子系统。

  • 高速公路变道规划器——实现高速公路变道规划算法的子系统。

  • 度量评估——子系统,它指定度量来评估高速公路车道变更规划器的行为。

  • 可视化——将自我车辆和场景中定义的其他车辆的状态可视化的子系统。

  • Pack Actor——子系统,它使用来自计划器的自我车辆的当前状态更新Actor总线。

场景和环境子系统使用场景的读者块提供路网和车辆地面真相位置和地图数据,为高速公路变道规划算法所需。该子系统输出变道规划器所需的地图数据。打开场景和环境子系统。

open_system ('HighwayLaneChangePlannerTestBench/场景和环境');

场景的读者块配置为读取drivingScenario对象。它使用这个对象来读取参与者数据和车道边界信息。它接收自我车辆信息来执行闭环仿真。该块输出来自自我车辆坐标中的参与者的地面真实车辆信息。的汽车走向世界Block用于将目标车辆位置从车辆坐标转换为世界坐标。该子系统从基本工作空间读取地图数据,并输出有关车道和参考路径的信息。

Planner Configuration Parameters子系统使用常量块读取基本工作区变量,并使用总线创建者块构造总线结构。由该子系统创建的总线由变道规划器使用。

open_system ("HighwayLaneChangePlannerTestBench/Planner配置参数");

Planner Configuration Parameters块从基本工作区读取以下参数:

  • timeResolution以秒为单位定义采样轨迹的时间分辨率。

  • replanRate以秒为单位定义计划器的重计划速率。

  • timeHorizon定义时间范围向量,用于以秒为单位对轨迹进行采样。

  • preferredLane定义自我车辆的首选车道

  • setSpeed定义车辆可以以米/秒为单位跟随的驾驶员设定速度。

  • maxPlanningHorizon定义以米为单位的最大纵向规划平面。

  • egoFrontExt而且targetFrontExt分别定义自我和目标车辆的前端扩展,单位为米。这些参数用于在碰撞检查期间膨胀自我和目标车辆。

  • frontSafetyGap而且rearSafetyGap确定本车辆与其他车辆之间的安全距离。

  • egoTTC而且nextTTC定义场景中与其他车辆碰撞的时间边界。

  • latDevCost时间成本,speedCost定义用于计算采样终端状态代价的权重。

  • maxAccelmaxCurvaturemaxYawRate,maxVelocity定义运动可行性边界。

  • enableCCBehaviorenableLCFBehavior,enableLCBehavior分别用于实现巡航控制行为、前车跟随行为(LCF)和变道行为的终端状态采样。

Pack Actor子系统将计划器生成的信息打包到参与者总线中。参与者总线用于更新场景读取器块的自我参与者信息,以执行闭环模拟。

open_system (“HighwayLaneChangePlannerTestBench /包的演员”);

Get Actor Info MATLAB®函数块以总线分配块所需的格式输出Actor信息。总线分配块输出带有更新信息的参与者总线。计算偏航率MATLAB函数块计算自我车辆的偏航率。

可视化块创建一个MATLAB图形,显示场景的追逐视图和顶视图,并绘制场景中的自我车辆、采样轨迹、胶囊列表和其他车辆。

度量评估子系统使用包括纵向和横向颠簸、碰撞和碰撞时间在内的度量来评估高速公路车道变更规划器的行为。详情请参见高速公路变道

公路变道规划者模型

公路变道规划器参考模型实现了公路变道系统的主要算法。参考模型从场景和环境子系统读取地图数据、参与者姿势(世界坐标)和规划器参数,以执行轨迹规划。该模型使用Fernet坐标系统来寻找自我载体周围最重要的物体(mio)。随后,该模型对不同行为的终端状态进行采样,预测目标参与者的运动,并生成多个轨迹。最后,该模型评估生成轨迹的成本,并检查碰撞的可能性和运动的可行性,以估计最优轨迹。打开高速公路车道变更规划器参考模型。

open_system (“HighwayLaneChangePlanner”);

高速公路车道变更规划器参考模型包含以下块:

  • Frenet状态转换器MATLAB函数块将自我和目标行动者信息从世界坐标系转换为Frenet坐标系。

  • Find MIOs MATLAB函数块根据自我载体的当前状态,使用地面真相载体姿态识别最重要的对象(mio)。出现在自我车辆前面或后面的车辆被认为是mio。mio也可以出现在相邻的车道上,如下图所示。

Find MIOs块在Frenet坐标系中输出关于MIOs的信息,包括前导车辆。

  • 终端状态采样子系统对巡航控制、前车跟踪和变道行为的终端状态进行采样。它为轨迹发生器输出连接的终端状态。

  • 运动预测MATLAB系统块使用恒定速度模型预测mio的运动。将预测的mio状态用于碰撞检测。该块使用HelperMotionPrediction系统对象,实现了基于恒速度的运动预测模型。您可以实现自己的运动预测模块并测试测试台模型。

  • 运动规划器参考模型使用mio的预测状态、规划器参数和终端状态采样器生成的终端状态来执行自我飞行器的轨迹规划。

终端状态采样器子系统通过使用自我载体和MIOs状态信息计算终端状态来配置规划器行为。打开终端状态采样器子系统。

open_system ('HighwayLaneChangePlanner/终端状态采样器'

终端状态采样器子系统包含以下块:

  • 更新环境信息根据自我车辆的当前姿态更新其当前车道和首选车道。此块调用updateEnvironmentInfo函数在HelperTerminalStateSampler函数,该函数附加到本示例。

  • 巡航控制采样器根据自我车辆的当前状态对巡航行为的终端状态进行采样。此块调用cruiseControlSampler函数HelperTerminalStateSampler

  • 前车跟踪采样器对终端状态进行采样,以自适应地改变当前自我车道中前车的速度。此块调用leadCarFollowingSampler函数HelperTerminalStateSampler

  • 变道采样器对自我车辆的变道行为的终端状态进行采样。此块调用laneChangeSampler函数HelperTerminalStateSampler

  • 连接状态连接来自巡航控制采样器、前车跟踪采样器和变道采样器块的终端状态。

您可以设计自己的终端状态采样器,以对其他行为(如停止和前进)的终端状态进行采样。类中定义的标志,还可以在终端状态采样器中启用或禁用采样器helperSLHighwayLaneChangePlannerSetup脚本。

运动规划器参考模型基于采样的终端状态和规划器参数生成轨迹。打开运动规划器参考模型。

open_system (“MotionPlanner”

运动规划器参考模型包含以下块:

  • 脉冲发生器模块定义了轨迹发生器模块的重新规划周期。缺省值是1秒。

  • Cost Evaluator块计算与所有采样的终端状态相关的成本,并按升序对它们进行排序。

  • 轨迹生成器块为采样的终端状态生成轨迹。采样轨迹在世界坐标中。

  • 有效性检查子系统验证轨迹生成器生成的轨迹的可行性和碰撞性。它输出自我车可以跟随的最佳轨迹。

  • State Estimator块标识路径上要遵循的适当点。生成的路径必须符合道路形状。

有效性检查子系统检查生成的轨迹与mio的预测轨迹的运动学可行性和碰撞。打开Validity Checker子系统。

open_system (“MotionPlanner /有效性检查器”

运动可行性块使用helperKinematicFeasibility函数检查生成轨迹的偏航率、曲率、加速度和速度边界的可行性。您可以添加其他可行性标准来验证轨迹。

Collision Checker块检查是否与mio的未来轨迹发生碰撞。它输出自我飞行器可以跟随的最佳轨迹。您可以应用此建模模式并实现您自己的逻辑来评估成本和找到最佳轨迹的可行性。

公路变道规划器测试台架在默认情况下对巡航控制、前车跟踪和变道行为的轨迹进行采样。属性中的标志,可以启用或禁用这些行为helperSLHighwayLaneChangePlannerSetup脚本。

模拟巡航控制和引导车跟随行为

建立具有巡航控制和引导车跟车行为的公路变道计划测试台架,并运行模型以可视化系统行为。配置测试台架模型以使用scenario_LC_15_StopnGo_Curved场景。在这个场景中,前导车在前导车前面缓慢行驶。前车跟随行为使自车能够调整速度以避免与缓慢移动的前车相撞。当你只启用巡航控制行为时,自我车辆以设定的速度行驶,避免与先导车辆相撞是不可能的。

helperSLHighwayLaneChangePlannerSetup (“scenarioFcnName”“scenario_LC_15_StopnGo_Curved”);

默认情况下,helperSLHighwayLaneChangeSetup脚本通过启用巡航控制、前车跟踪和变道行为来配置模型。禁用变道行为,并模拟模型来观察系统行为。

enableLCBehavior = 0;sim卡(“HighwayLaneChangePlannerTestBench”);

关闭该图形。

hLCPlot = findobj(“类型”“图”“名字”“变道状态图”);如果~ isempty (hLCPlot)关闭(hLCPlot);结束

绘制自我速度和方向,以分析自我飞行器在模拟过程中的行为。

hPlotSimResults = helperplotegolateralandlongitude results (logsout);

观察自车通过降低速度与前车协商以避免碰撞。自我车辆方向的变化是由于车辆沿着弯曲的道路行驶的事实。

关闭该图形。

关闭(hPlotSimResults);

现在,通过启用变道行为来模拟模型。

用变道行为模拟

现在,启用变道行为并模拟模型来观察系统行为。启用变道行为允许自我车辆执行变道以保持所需的速度,并避免在场景中与缓慢移动的领先车辆相撞。

enableLCBehavior = 1;sim卡(“HighwayLaneChangePlannerTestBench”);

关闭该图形。

hLCPlot = findobj(“类型”“图”“名字”“变道状态图”);如果~ isempty (hLCPlot)关闭(hLCPlot);结束

绘制自我速度和方向,以分析自我飞行器在模拟过程中的行为。

hPlotSimResults = helperplotegolateralandlongitude results (logsout);

观察到自车保持几乎恒定的速度,并避免了由于变道机动而与缓慢移动的前车相撞。自我取向图清晰地反映了变道过程中自我取向的变化。

关闭该图形。

关闭(hPlotSimResults);

生成c++代码

您现在可以为算法生成c++代码,应用常见的优化,并生成一个报告以方便研究生成的代码。

配置高速公路变道规划器和运动规划器模型,以生成用于实时实现算法的c++代码。设置模型参数以启用代码生成并显示配置值。

现在,设置并查看模型参数以启用c++代码生成。在保存模型之前,关闭参考模型以在根级别上保存模型。

close_system (“MotionPlanner”);helperSetModelParametersForCodeGeneration (“MotionPlanner”);save_system (“MotionPlanner”);close_system (“HighwayLaneChangePlanner”);helperSetModelParametersForCodeGeneration (“HighwayLaneChangePlanner”);save_system (“HighwayLaneChangePlanner”);
模型配置参数:参数值描述  ___________________________________ _______________ ______________________________________________________________________________________________________________________ {' SystemTargetFile}{的ert。tlc的}{“代码生成>系统目标文件”}{‘TargetLang}{“c++”}{的代码生成语言>}{‘SolverType}{'固定'}{“解决者>类型”}{‘FixedStep}{‘汽车’}{的解算器>固定步大小(基本样本时间)}{‘EnableMultiTasking}{”“}{的解算器>对待每个离散率作为一个单独的任务”}{‘ProdLongLongMode}{”“}{硬件实现>支持很久的}{‘BlockReduction}{”“}{“模拟目标>块还原”}{‘MATLABDynamicMemAlloc}{”的}万博1manbetx{'仿真目标>仿真目标> MATLAB函数中的动态内存分配'}{'OptimizeBlockIOStorage'}{'在'}{'仿真目标>信号存储重用'}{'内联不变信号'}{'BuildConfiguration'}{'更快的运行'}{'代码生成>构建配置'}{'RTWVerbose'}{'的'}{'代码生成>详细构建'}{'CombineSignalStateStructs'}{'代码生成>接口>组合信号/状态结构'}{'万博1manbetxSupportVariableSizeSignals'} {'on'}{'代码生成>接口>支持可变大小信号'}{' codeinterfacpackaging '} {'GenerateExternalIOAccessMethods'}{'方法'}{'代码生成>接口>数据成员可见性>外部I/O访问'}{'EfficientFloat2IntCast'} {'on'}{'代码生成>优化>从包装范围外值的浮点到整数转换中删除代码'}{‘ZeroExternalMemoryAtStartup}{‘off’}{“代码生成>优化I / O >删除根水平零初始化(逆逻辑)”}{‘CustomSymbolStrGlobalVar} {N M美元的}{“代码生成>符号>全局变量”}{‘CustomSymbolStrType} {' N M_T美元}{“代码生成符号> >全球类型”}{‘CustomSymbolStrField} {N M美元的}{“代码生成>符号>全球类型”字段名称}{‘CustomSymbolStrFcn} {APV_ $ N M美元$ F '}{“代码生成方法> >符号子系统”}{' CustomSymbolStrTmpVar} {N M美元的}{“代码生成> >当地临时变量的符号}{‘CustomSymbolStrMacro} {N M美元的}{“代码生成> >符号常数宏”}模型配置参数:参数值描述  ___________________________________ _______________ ______________________________________________________________________________________________________________________ {' SystemTargetFile}{的ert。tlc的}{“代码生成>系统目标文件”}{‘TargetLang}{“c++”}{的代码生成语言>}{‘SolverType}{'固定'}{“解决者>类型”}{‘FixedStep}{‘汽车’}{的解算器>固定步大小(基本样本时间)}{‘EnableMultiTasking}{”“}{的解算器>对待每个离散率作为一个单独的任务”}{‘ProdLongLongMode}{”“}{硬件实现>支持很久的}{‘BlockReduction}{”“}{“模拟目标>块还原”}{‘MATLABDynamicMemAlloc}{”的}万博1manbetx{'仿真目标>仿真目标> MATLAB函数中的动态内存分配'}{'OptimizeBlockIOStorage'}{'在'}{'仿真目标>信号存储重用'}{'内联不变信号'}{'BuildConfiguration'}{'更快的运行'}{'代码生成>构建配置'}{'RTWVerbose'}{'的'}{'代码生成>详细构建'}{'CombineSignalStateStructs'}{'代码生成>接口>组合信号/状态结构'}{'万博1manbetxSupportVariableSizeSignals'} {'on'}{'代码生成>接口>支持可变大小信号'}{' codeinterfacpackaging '} {'GenerateExternalIOAccessMethods'}{'方法'}{'代码生成>接口>数据成员可见性>外部I/O访问'}{'EfficientFloat2IntCast'} {'on'}{'代码生成>优化>从包装范围外值的浮点到整数转换中删除代码'}{‘ZeroExternalMemoryAtStartup}{‘off’}{“代码生成>优化I / O >删除根水平零初始化(逆逻辑)”}{‘CustomSymbolStrGlobalVar} {N M美元的}{“代码生成>符号>全局变量”}{‘CustomSymbolStrType} {' N M_T美元}{“代码生成符号> >全球类型”}{‘CustomSymbolStrField} {N M美元的}{“代码生成>符号>全球类型”字段名称}{‘CustomSymbolStrFcn} {APV_ $ N M美元$ F '}{“代码生成方法> >符号子系统”} {'CustomSymbolStrTmpVar' } {'$N$M' } {'Code Generation>Symbols>Local temporary variables' } {'CustomSymbolStrMacro' } {'$N$M' } {'Code Generation>Symbols>Constant macros' }

为参考模型生成代码并检查代码生成报告。

rtwbuild (“HighwayLaneChangePlanner”);
###开始构建序列模型参考代码生成构建###开始构建过程:MotionPlanner ###成功完成构建过程:MotionPlanner ###开始构建过程:HighwayLaneChangePlanner ###成功完成构建过程:HighwayLaneChangePlanner构建摘要代码生成目标:模型重建行动的原因  =============================================================================== MotionPlanner代码生成和编译MotionPlanner.cpp并不存在。高级模型目标构建:模型重建行动的理由  ========================================================================================================= HighwayLaneChangePlanner代码生成和编译代码生成信息文件不存在。建造2个模型中的2个(0个模型已经更新)建造时间:0h 8m 26s

使用代码生成报告来查看生成的代码。要了解有关代码生成报告的更多信息,请参见代码生成报告(嵌入式编码).使用代码生成报告中的代码接口报告链接来查看这些生成的方法:

  • 初始化-初始化时调用一次。

  • 一步—每一步定期调用,执行车道标志检测算法。

  • 终止-终止时呼叫一次。

中声明信号接口的附加get和set方法HighwayLaneChangePlanner.h定义在HighwayLaneChangePlanner.cpp

评估代码的功能

在为高速公路车道变更规划器生成c++代码之后,现在可以使用软件在循环(SIL)模拟评估代码功能。它提供了对已部署应用程序行为的早期洞察。要了解有关SIL模拟的更多信息,请参见SIL和PIL模拟(嵌入式编码)

SIL模拟使您能够验证在主机上编译生成的代码在功能上与正常模式相同。

配置算法和测试台架模型参数,以支持SIL仿真和日志执行概要信息。万博1manbetx

helperSetModelParametersForSIL (“HighwayLaneChangePlanner”);helperSetModelParametersForSIL (“HighwayLaneChangePlannerTestBench”);
HighwayLaneChangePlanner配置参数:参数值描述  ________________________________ ____________________ ____________________________________________________________ {' SystemTargetFile}{的ert。tlc'}{'代码生成>系统目标文件'}{'TargetLang'} {' c++ '}{'代码生成>语言'}{'CodeExecutionProfiling'}{'代码生成>验证>测量任务执行时间'}{'CodeProfilingSaveOptions'}{'代码生成>验证>保存选项'}{' codeexecutionprofilvariable '} {'executionProfile'}{'代码生成>验证>工作区变量'}HighwayLaneChangePlannerTestBench配置参数:参数值描述  ________________________________ ____________________ ____________________________________________________________ {' SystemTargetFile}{的ert。tlc'}{'代码生成>系统目标文件'}{'TargetLang'} {' c++ '}{'代码生成>语言'}{'CodeExecutionProfiling'}{'代码生成>验证>测量任务执行时间'}{'CodeProfilingSaveOptions'}{'代码生成>验证>保存选项'}{' codeexecutionprofilvariable '} {'executionProfile'}{'代码生成>验证>工作区变量'}

配置试验台模型以SIL模式进行模拟。

set_param ('HighwayLaneChangePlannerTestBench/Highway LaneChangePlanner '“SimulationMode”“Software-in-the-loop (SIL)”);sim卡(“HighwayLaneChangePlannerTestBench”);
###开始构建序列模型参考代码生成构建###开始构建过程:MotionPlanner ###成功完成构建过程:MotionPlanner ###开始构建过程:HighwayLaneChangePlanner ###成功完成构建过程:HighwayLaneChangePlanner构建摘要代码生成目标:模型重建行动的原因  ===================================================================================================== MotionPlanner代码编译代码插装设置已经改变了。生成和编译的HighwayLaneChangePlanner.cpp不存在。2 / 2模型构建(0模型已经更新)构建持续时间:0h 4m 48.198s ###准备开始SIL模拟…使用“Microsoft Visual c++ 2017 (C)”构建。MEX完成成功。停止组件的SIL模拟:HighwayLaneChangePlanner

关闭该图形。

hLCPlot = findobj(“类型”“图”“名字”“变道状态图”);如果~ isempty (hLCPlot)关闭(hLCPlot);结束

您可以比较普通仿真模式和SIL仿真模式的输出。您可以使用以下代码验证这些运行之间的差异是否在公差范围内。绘制常规仿真模式和SIL仿真模式下检测到的车道边界参数的差异。

runIDs = 万博1manbetxSimulink.sdi.getAllRunIDs;normalSimRunID = runIDs(end - 1);SilSimRunID = runIDs(end);diffResult = 万博1manbetxSimulink.sdi.compareRuns(normalSimRunID,SilSimRunID);

绘制从正常模式和SIL模式计算的车道边界参数之间的差异。

hFigDiffResult = helperPlotLCPlannerDiffSignals(diffResult);

关闭数字句柄。

关闭(hFigDiffResult);

注意,模拟的正常模式和SIL模式之间的差异近似为零。

评估代码的执行时间和覆盖率

在SIL模拟期间,将在主机计算机上生成的代码的执行时间度量记录到变量中executionProfile在MATLAB的基础工作空间。这些时间可以作为生成代码性能的早期指示器。为了精确地测量执行时间,当生成的代码集成到外部环境中时,或者当您使用循环中处理器(PIL)模拟时,请对其进行概要分析。要了解更多关于PIL概要分析的信息,请参阅使用SIL和PIL进行代码执行分析(嵌入式编码)

的执行时间一步的函数HighwayLaneChangePlanner使用helperPlotLCPlannerExecutionProfile函数。

hFigLCExeProfile = helpplotlcplannerexecutionprofile (executionProfile);

您可以从这个图中推断出高速公路车道变更规划器每帧花费的平均时间。有关生成执行概要文件和在SIL模拟期间分析它们的详细信息,请参见SIL和PIL的执行时间分析(嵌入式编码)

关闭该图形。

关闭(hFigLCExeProfile);

如果您拥有Simulink 万博1manbetxCoverage™许可证,您还可以为生成的代码执行代码覆盖率分析,以度量测试的完整性。您可以使用缺失的覆盖率数据来发现测试中的空白、缺失的需求或意想不到的功能。配置覆盖率设置并模拟测试台架模型以生成覆盖率分析报告。查找生成的报告CoverageResults / HighwayLaneChangePlanner_modelrefsil_summary_cov.html在工作目录中。

如果(许可证(“测试”“万博1manbetxSimulink_Coverage”) helperCoverageSettings (“HighwayLaneChangePlannerTestBench”);cvDataGroupObj = cvsim(“HighwayLaneChangePlannerTestBench”);获得HighwayLaneChangePlanner的生成代码覆盖率。cvDataObj = get(cvDataGroupObj,“HighwayLaneChangePlanner”);cvhtml (“CoverageResults / HighwayLaneChangePlanner_modelrefsil_summary_cov”, cvDataObj);结束hLCPlot = findobj(“类型”“图”“名字”“变道状态图”);如果~ isempty (hLCPlot)关闭(hLCPlot);结束
###开始构建序列模型参考代码生成构建###开始构建过程:MotionPlanner ###成功完成构建过程:MotionPlanner ###开始构建过程:HighwayLaneChangePlanner ###成功完成构建过程:HighwayLaneChangePlanner构建摘要代码生成目标:模型重建行动的原因  ====================================================================================== MotionPlanner代码编译代码插装设置已经改变了。HighwayLaneChangePlanner代码已编译代码插装设置已更改。2 / 2模型构建(0模型已经更新)构建持续时间:0h 6m 33.501 1s ###准备开始SIL模拟…使用“Microsoft Visual c++ 2017 (C)”构建。MEX完成成功。启动组件的SIL模拟:HighwayLaneChangePlanner停止组件的SIL模拟:HighwayLaneChangePlanner已完成代码覆盖分析

在模拟这个测试场景所生成的代码时,您可以找到决策覆盖率、语句覆盖率和函数覆盖率结果,scenario_LC_15_StopnGo_Curved.您可以用不同的场景测试这个模型,以获得生成的代码的完全覆盖。有关如何在SIL模拟期间分析覆盖结果的详细信息,请参见软件在环(SIL)模式和处理器在环(PIL)模式下模型的代码覆盖(嵌入式编码)

探索其他场景

以下附加场景与高速公路变道规划器测试台模型兼容。

  • scenario_LC_01_SlowMoving

  • scenario_LC_02_SlowMovingWithPassingCar

  • scenario_LC_03_DisabledCar

  • scenario_LC_04_CutInWithBrake

  • scenario_LC_05_SingleLaneChange

  • scenario_LC_06_DoubleLaneChange

  • scenario_LC_07_RightLaneChange

  • scenario_LC_08_SlowmovingCar_Curved

  • scenario_LC_09_CutInWithBrake_Curved

  • scenario_LC_10_SingleLaneChange_Curved

  • scenario_LC_11_MergingCar_HighwayEntry

  • scenario_LC_12_CutInCar_HighwayEntry

  • scenario_LC_13_DisabledCar_Ushape

  • scenario_LC_14_DoubleLaneChange_Ushape

  • scenario_LC_15_StopnGo_Curved(默认)

方法创建这些场景驾驶场景设计并导出到场景文件。检查每个文件中的注释,以获得关于每个场景中道路和车辆的更多细节。配置“高速公路变道计划器”测试平台和工作空间,以模拟这些场景helperSLHighwayLaneChangePlannerSetup函数。例如,您可以为弯曲道路场景配置模拟。

helperSLHighwayLaneChangePlannerSetup (“scenarioFcnName”“scenario_LC_14_DoubleLaneChange_Ushape”);

结论

本例展示了如何设计、测试和生成高速公路变道规划程序的代码。测试成功后,可以将该规划器集成到高速公路变道系统中。

另请参阅

|

相关的话题