主要内容

近似高保真无人机模型与无人机制导模型块

在不同的开发阶段,仿真模型通常需要不同的保真度。在快速原型阶段,我们希望快速实验和调整参数,以测试不同的自主算法。在生产开发阶段,我们希望通过增加保真度的模型来验证我们的算法。在本例中,我们演示了一种方法来近似高保真模型指导模型块和使用它来原型和调整一个航路点跟随导航系统。看到固定翼无人机航路点跟踪器的优化.同样的导航系统在一个高保真模型上进行了测试,以验证其性能。

该示例模型使用了一个高保真无人机(UAV)模型,由一个植物模型和一个中级内置自动驾驶仪组成。这个模型包含近一千个块,使用起来相当复杂。作为开发过程的第一步,我们创建了一个变体系统,可以在这个高保真模型和无人机制导模型块之间切换。高保真模型是从File Exchange条目中提取的,金宝appSimulink无人机参考应用程序

不同保真度的无人机模型

uavModel =“FixedWingModel.slx”;open_system (uavModel);

您可以通过更改与此模型相关的数据字典中存储的MATLAB®变量值来在低保真度模型和高保真度模型之间切换。

plantDataDictionary = 金宝appSimulink.data.dictionary.open(“pathFollowingData.sldd”);plantDataSet = getSection(plantdatdictionary,设计数据的);切换到高保真模式assignin (plantDataSet“useHighFidelity”1);

切换到低保真模式assignin (plantDataSet“useHighFidelity”, 0);

近似高保真固定翼模型和低保真制导模型

为了用无人机制导模型块近似高保真模型,创建阶跃控制信号馈入模型并观察阶跃响应RollAngle高度,空速命令。

stepModel =“stepResponse”;open_system (stepModel)

首先,命令改变滚转角度。

controlBlock = get_param(Step presponse /Step Control Input“对象”);controlBlock。StepControl =“滚转角度步长控制”;assignin (plantDataSet“useHighFidelity”1);sim (stepModel);
###启动串行模型参考仿真构建。成功更新模型参考仿真目标为:FixedWingModel构建摘要仿真目标构建:模型动作重建原因========================================================================================= PlantModel代码生成和编译。PlantModel_msf。Mexa64不存在。FixedWingModel代码生成和编译。FixedWingModel_msf。Mexa64不存在。构建2个模型中的2个(0个模型已经更新)构建持续时间:0h 0m 58.336s
highFidelityRollAngle = RollAngle.Data(:);highFidelityTime = RollAngle.Time;图()plot(highFidelityTime, highFidelityRollAngle,“——r”);标题(“滚转角度阶跃响应”

图中包含一个轴对象。标题为“滚动角度步进响应”的axis对象包含一个类型为line的对象。

放大到上面的仿真结果,您可以看到内置在高保真模型中的滚转角度控制器的特性。滚转角度的沉降时间接近2.5秒。

Xlim ([75 80]) ylim([-0.1 0.548])

图中包含一个轴对象。标题为“滚动角度步进响应”的axis对象包含一个类型为line的对象。

对于二阶PD控制器,为了在一个临界阻尼系统中实现这个设置时间,应该使用以下增益来配置UAV模型的低保真变体中的UAV制导模型块。对于本例,使用无人机制导模型块是使用代码生成来模拟的,以提高多次运行的速度。请参阅块参数。

Zeta = 1.0;%临界阻尼Ts = 2.5;% 2%的沉淀时间Wn = 5.8335/(ts*zeta);newRollPD = [wn^2 2*zeta*wn];

设置新的增益并模拟低保真度模型的阶跃响应。将其与原始响应进行比较。

load_system uavModel set_param (“固定翼模型/固定翼模型/低保真度/固定翼无人机制导模型”...“PDRollFixedWing”, strcat (“(”num2str (newRollPD),“]”save_system(uavModel)“useHighFidelity”, 0);sim (stepModel);
###启动串行模型参考仿真构建。# # #成功更新了模型参考模拟目标:FixedWingModel构建总结模拟目标构建:模型重建行动的理由  ======================================================================================== FixedWingModel代码生成和编译。模型或库FixedWingModel更改。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 12.76s
lowFidelityRollAngle = RollAngle.Data(:);lowFidelityTime = RollAngle.Time;持有;情节(lowFidelityTime lowFidelityRollAngle,“- b”);传奇(“高保真的反应”“低保真反应”“位置”“东南”);

图中包含一个轴对象。标题为Roll Angle Step Response的axis对象包含2个类型为line的对象。这些对象表示高保真响应、低保真响应。

低保真模型实现了类似的阶跃响应。类似地,我们可以调优其他两个控制通道:高度而且空速.这里可以使用更复杂的方法来优化控制增益,而不是视觉检查控制响应。考虑使用系统识别工具箱®执行高保真无人机模型行为的进一步分析。

controlBlock。StepControl =“空速步控”;assignin (plantDataSet“useHighFidelity”, 0);sim (stepModel);
###启动串行模型参考仿真构建。模型参考仿真目标FixedWingModel是最新的。构建总结0(1个模型已构建到最新)构建持续时间:0h 0m 2.833s
lowFidelityAirSpeed = AirSpeed.Data(:);lowFidelityTime = AirSpeed.Time;assignin (plantDataSet“useHighFidelity”1);sim (stepModel);
###启动串行模型参考仿真构建。PlantModel的模型参考仿真目标是最新的。# # #成功更新了模型参考模拟目标:FixedWingModel构建总结模拟目标构建:模型重建行动的理由  ====================================================================================================================== FixedWingModel代码生成和编译。变量控制useHighFidelity == 1值从false更改为true。构建2个模型中的1个(1个模型已经更新)构建持续时间:0h 0m 24.237s
highFidelityAirSpeed = AirSpeed.Data(:);highFidelityTime = AirSpeed.Time;图()plot(lowFidelityTime, lowFidelityAirSpeed,“- b”);持有;情节(highFidelityTime highFidelityAirSpeed,“——r”);传奇(“低保真反应”“高保真的反应”“位置”“东南”);标题(“空气速度阶跃响应”) xlim([70 80]) ylim([17.5 19.2])

图中包含一个轴对象。标题为Air Speed Step Response的axis对象包含2个类型为line的对象。这些对象表示低保真响应、高保真响应。

controlBlock。StepControl =“高度阶跃控制”;assignin (plantDataSet“useHighFidelity”, 0);sim (stepModel);
###启动串行模型参考仿真构建。# # #成功更新了模型参考模拟目标:FixedWingModel构建总结模拟目标构建:模型重建行动的理由  ====================================================================================================================== FixedWingModel代码生成和编译。变量控制useHighFidelity == 1值从true变为false。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 10.82s
lowFidelityHeight = Height.Data(:);lowFidelityTime = Height.Time;assignin (plantDataSet“useHighFidelity”1);sim (stepModel);
###启动串行模型参考仿真构建。PlantModel的模型参考仿真目标是最新的。# # #成功更新了模型参考模拟目标:FixedWingModel构建总结模拟目标构建:模型重建行动的理由  ====================================================================================================================== FixedWingModel代码生成和编译。变量控制useHighFidelity == 1值从false更改为true。构建2个模型中的1个(1个模型已经更新)构建持续时间:0h 0m 22.653秒
highFidelityHeight = Height.Data(:);highFidelityTime = Height.Time;图()plot(lowFidelityTime, lowFidelityHeight,“- b”);持有;情节(highFidelityTime highFidelityHeight,“——r”);传奇(“低保真反应”“高保真的反应”“位置”“东南”);标题(“高度阶跃响应”) xlim([70 150]) ylim([49 56])

图中包含一个轴对象。标题为Height Step Response的axes对象包含2个类型为line的对象。这些对象表示低保真响应、高保真响应。

用低保真模型测试导航算法

现在我们已经用无人机制导模型块,我们可以尝试将其替换为无人机制导模型块固定翼无人机航路点跟踪器的优化的例子。针对不同保真度的模型,测试前瞻距离和航向控制增益的影响。

navigationModel =“pathFollowing”;open_system (navigationModel);
assignin (plantDataSet“useHighFidelity”, 0);sim (navigationModel);
###启动串行模型参考仿真构建。# # #成功更新了模型参考模拟目标:FixedWingModel构建总结模拟目标构建:模型重建行动的理由  ====================================================================================================================== FixedWingModel代码生成和编译。变量控制useHighFidelity == 1值从true变为false。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 10.242秒
图visualizeSimStates (simStates);

图中包含一个轴对象。axis对象包含204个类型为patch、line的对象。

用高保真模型验证

assignin (plantDataSet“useHighFidelity”1);sim (navigationModel);
###启动串行模型参考仿真构建。PlantModel的模型参考仿真目标是最新的。# # #成功更新了模型参考模拟目标:FixedWingModel构建总结模拟目标构建:模型重建行动的理由  ====================================================================================================================== FixedWingModel代码生成和编译。变量控制useHighFidelity == 1值从false更改为true。构建2个模型中的1个(1个模型已经更新)构建持续时间:0h 0m 21.123s
图visualizeSimStates (simStates);

图中包含一个轴对象。axis对象包含204个类型为patch、line的对象。

结论

这个例子展示了我们如何用固定翼无人机的低保真抽象来近似一个高保真模型。相反的方法也可以用来帮助选择高保真模型的自动驾驶控制增益。您可以首先通过在不同的测试场景中模拟低保真模型来确定自动驾驶仪控制响应的可接受特性,然后相应地调整高保真模型自动驾驶仪。

discardChanges (plantDataDictionary);清晰的plantDataSet清晰的plantDataDictionaryclose_system (uavModel 0);close_system (stepModel 0);close_system (navigationModel 0);

另请参阅

||

相关的话题