生成车道跟随控制和传感器融合的c++消息接口
这个例子展示了如何生成支持高速公路车道跟踪系统组件之间基于消息的通信的c++代码。金宝app生成带有消息接口的代码使应用程序能够在使用外部消息协议服务的分布式系统中进行通信。
简介
下一代自动驾驶汽车(av)运行高度复杂的算法来执行感知、规划和控制。面向服务的体系结构(SOA)正在成为处理这种日益增长的复杂性的普遍方法。SOA提倡使用本地计算单元实现感知、规划和控制算法的分布式方法。这些单元可以使用基于消息的通信服务(如机器人操作系统(ROS)、数据分发服务(DDS)和AUTOSAR自适应平台)相互交换信息。
本例着重于建模高速公路车道跟随应用程序的传感器融合和控制组件之间基于消息的通信。该示例使用发送(金宝app模型)而且收到(金宝app模型)块,以建模该系统组件之间的消息传金宝app递接口。该示例还使用HLFControlsWithSensorFusionTestBench
模型高速公路车道跟随控制和传感器融合的自动化测试的例子。在这个例子中,你:
识别用于部署的算法组件——用信号检查测试台架模型,并识别测试台架模型中的算法组件。
将Sim金宝appulink消息接口添加到算法组件-使用Simulink消息检查测试台架模型。模拟模型并检验结果。
生成c++代码——使用Simulink消息配置算法组件以生成c++代码。金宝app
查看生成的代码——查看生成的代码并观察消息接口。
在本例中,您将通过与Epic Games®的虚幻引擎®集成来启用系统级模拟。3D仿真环境要求Windows®64位平台。
如果~ ispc错误([“3D模拟只支持微软”金宝appchar (174),“窗口”char (174),“。”])结束
识别用于部署的算法组件
这个例子使用了一个系统级的模拟测试台模型来与Simulink消息进行交互。金宝app要探索测试台架模型,请打开项目示例文件的工作副本。MATLAB将文件复制到示例文件夹中,以便您可以编辑它们。
目录(fullfile (matlabroot,“工具箱”,“开车”,“drivingdemos”) helperDrivingProjectSetup (“HLFControlsSensorFusion.zip”, workDir = pwd)
打开测试台架模型,并突出显示用于部署的模型组件。
open_system (“HLFControlsWithSensorFusionTestBench”) hilite_system (HLFControlsWithSensorFusionTestBench/前向车辆传感器融合) hilite_system (HLFControlsWithSensorFusionTestBench/车道跟踪决策逻辑) hilite_system (HLFControlsWithSensorFusionTestBench/Lane Following Controller)
测试台模型包含以下子系统:
三维仿真场景
—用于模拟的道路、车辆、视觉检测生成器和雷达传感器。前方车辆传感器融合
融合前方车辆的视觉和雷达传感器探测。车道跟随决策逻辑
-指定横向和纵向决策逻辑的算法模型,向控制器提供车道中心信息和最重要对象(MIO)相关信息。车道跟踪控制器
—指定控制器的算法模型。车辆动力学
-指定自我车辆的动态模型。指标的评估
—评估系统级行为。
这个例子配置前方车辆传感器融合
,车道跟随决策逻辑
,车道跟踪控制器
组件使用Simulink消息。金宝app
将Sim金宝appulink消息接口添加到算法组件
要为算法组件建模消息传递接口,可以在算法组件的输出和输入端口分别添加Send和Receive块。打开包含消息接口的测试台架模型。
open_system (“SOAHLFControlsWithSensorFusionTestBench”)
观察模型组件之间的消息接口。要研究消息Send和Receive接口的建模模式,请打开每个组件模型。
打开前方车辆传感器融合
组件。
open_system (“SOAForwardVehicleSensorFusion”)
打开车道跟随决策逻辑
组件。
open_system (“SOALaneFollowingDecisionLogic”)
打开车道跟踪控制器
组件。
open_system (“SOALaneFollowingController”)
观察连接到的Simuli金宝appnk消息发送和接收块车道跟踪控制器
参考组件。模拟模型并检验结果。
sim卡(“SOAHLFControlsWithSensorFusionTestBench”);
假设测量的输出通道3没有任何扰动。假设添加到测量输出通道#2的输出扰动是集成白噪声。假设测量的输出通道1没有任何扰动。假设添加到测量输出通道#4的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。
绘制横向控制器的性能指标。
hFigLatResults = helpplotlflateralresults (logsout);
关闭该图形。
关上(hFigLatResults)
绘制纵向控制器的性能指标。有关横向和纵向控制器指标的更多信息,请参见高速公路车道跟踪.
hFigLongResults = helperPlotLFLongitudinalResults(logsout,time_gap,...default_spacing);
关闭该图形。
关上(hFigLongResults)
生成c++代码
的c++代码前方车辆传感器融合
,车道跟随决策逻辑
,车道跟踪控制器
算法组件。
为代码生成支持配置参考模型参数。金宝app
helperSetModelParametersForCodeGeneration ({“SOAForwardVehicleSensorFusion”,...“SOALaneFollowingDecisionLogic”,...“SOALaneFollowingController”});save_system (“SOAForwardVehicleSensorFusion”);save_system (“SOALaneFollowingDecisionLogic”);save_system (“SOALaneFollowingController”);
模型配置参数:参数值描述 ___________________________________ _______________ ______________________________________________________________________________________________________________________ {' SystemTargetFile}{的ert。tlc的}{“代码生成>系统目标文件”}{‘TargetLang}{“c++”}{的代码生成语言>}{‘SolverType}{'固定'}{“解决者>类型”}{‘FixedStep}{‘汽车’}{的解算器>固定步大小(基本样本时间)}{‘EnableMultiTasking}{”“}{的解算器>对待每个离散率作为一个单独的任务”}{‘ProdLongLongMode}{”“}{硬件实现>支持很久的}{‘BlockReduction}{”“}{“模拟目标>块还原”}{‘MATLABDynamicMemAlloc}{”的}金宝app{'仿真目标>仿真目标> MATLAB函数中的动态内存分配'}{'OptimizeBlockIOStorage'}{'上'}{'仿真目标>信号存储重用'}{'内联不变信号'}{'BuildConfiguration'}{'更快的运行'}{'代码生成>构建配置'}{'RTWVerbose'} {'off'}{'代码生成>详细构建'}{'CombineSignalStateStructs'}{'代码生成>接口>组合信号/状态结构'}{'金宝appSupportVariableSizeSignals'} {'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'}{'代码生成>符号>常量宏'}
为前方车辆传感器融合
组件。
slbuild (“SOAForwardVehicleSensorFusion”);
###开始构建序列模型参考代码生成过程:ForwardVehicleSensorFusion成功完成代码生成过程:SOAForwardVehicleSensorFusion成功完成代码生成过程:SOAForwardVehicleSensorFusion构建摘要模型重建行动的原因 ============================================================================================ ForwardVehicleSensorFusion生成ForwardVehicleSensorFusion.cpp代码不存在。高级模型目标构建:模型重建行动的理由 ================================================================================================= SOAForwardVehicleSensorFusion代码生成的代码生成信息文件不存在。建造2个模型中的2个(0个模型已经更新)建造时间:0h 3m 48.978s
为车道跟随决策逻辑
组件。
slbuild (“SOALaneFollowingDecisionLogic”);
开始构建串行模型参考代码生成过程:LaneFollowingDecisionLogic成功完成代码生成:LaneFollowingDecisionLogic成功完成代码生成:SOALaneFollowingDecisionLogic构建摘要代码生成目标:模型重建行动的原因 ============================================================================================ LaneFollowingDecisionLogic生成LaneFollowingDecisionLogic.cpp代码不存在。高级模型目标构建:模型重建行动的理由 ================================================================================================= SOALaneFollowingDecisionLogic代码生成的代码生成信息文件不存在。构建2个模型中的2个(0个模型已经更新)构建持续时间:0h 0m 27.85s
为车道跟踪控制器
组件。
slbuild (“SOALaneFollowingController”);
###开始串行模型参考代码生成构建:LaneFollowingController假设没有扰动添加到测量输出通道#3。假设添加到测量输出通道#2的输出扰动是集成白噪声。假设测量的输出通道1没有任何扰动。假设添加到测量输出通道#4的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。成功完成代码生成:SOALaneFollowingController构建摘要代码生成目标构建:模型动作重建原因====================================================================================== LaneFollowingController生成的代码LaneFollowingController.cpp不存在。高级模型目标构建:模型重建行动的理由 ============================================================================================== SOALaneFollowingController代码生成的代码生成信息文件不存在。构建2个模型中的2个(0个模型已经更新)构建持续时间:0h 1m 1.832s
探索生成的代码
方法生成的代码前方车辆传感器融合
组件并验证消息接口。
打开SOAForwardVehicleSensorFusion.cpp
文件并查看这些消息接口:
TimeRecvData。RecvData
接收系统时间三维仿真场景
子系统。VisionRecvData。RecvData
-接收来自三维仿真场景
子系统。RadarRecvData。RecvData
-接收雷达探测三维仿真场景
子系统。TracksSendData。SendData
-将此组件检测到的已确认的轨道发送到车道跟随决策逻辑
组件。
类的消息类也可以使用此过程来验证车道跟随决策逻辑
而且车道跟踪控制器
组件生成的代码。
有关如何将生成的代码与外部消息协议集成的信息,请参见生成c++消息以在Simulink和操作系统或中间件之间通信数据金宝app(嵌入式编码)而且与POSIX消息队列集成的基于消息的通信模型(嵌入式编码).