方法为Simscape™Multibody™模型找到一个稳态工作点findop
函数使用基于投影的优化器。
基于投影的优化器在每次评估目标函数或非线性约束函数时强制模型初始条件的一致性,这可以改善Simscape模型的修剪结果。使用基于投影的修剪优化器需要“优化工具箱”软件。
本例的模型是在Simscape Multibody中建模的反铲系统。
打开Simulin金宝appk模型。
mdl =“scdbackhoeTRIM”;open_system (mdl)
要定义工作点规范,首先要创建一个规范对象。中的输入、输出和状态值运维
匹配模型初始条件。
Opspec = operspec(mdl);
指定模型输出是用于修剪的已知值。
opspec.Outputs(1)。已知=真(10,1);
指定反铲系统中角度的已知值。
opspec.Outputs(1).y(1) = 0;%桶角opspec.Outputs(1).y(3) = 50;%上角opspec.Outputs(1).y(5) = -50;%下角度opspec.Outputs(1).y(7) = 0;%底角opspec.Outputs(1).y(9) = -45;%支金宝app撑角
对于相应的角速度,已知值为零,这与模型的初始条件相匹配opspec
.
属性创建用于微调的选项集并指定优化器类型OptimizerType
选择。对于本例,使用基于投影的梯度下降求解器。要在“命令窗口”中查看修剪进度的迭代更新,请设置DisplayReport
选项“通路”
.
opt = findopOptions(“OptimizerType”,“graddescent-proj”,...“DisplayReport”,“通路”);
指定用于优化的函数计算的最大数量。
opt.OptimizationOptions.MaxFunEvals = 20000;
找到符合规格的稳态工作点opspec
.该操作耗时数分钟。
Op = findop(mdl,opspec,opt);
优化解出所有期望的dx/dt=0, x(k+1)-x(k)=0, y=ydes。(最大错误)块--------------------------------------------------------- (4.50000e+01) scdbackhoeTRIM/Out1 (3.54436e+00) scdbackhoeTRIM/Out1 (2.29690e-01) scdbackhoeTRIM/Out1 (3.84952e-02) scdbackhoeTRIM/Plant/安装组件/安装底座和支撑臂/支撑臂右/转动关节臂(9.31982e-03) scdbackhoeTRI金宝appM/Plant/安装组件/安装底座和支撑臂/支撑臂右/转动关节臂(7.25867e-04) scdbackhoeTRIM/Plant/安装组件/安装底座/安装底座和金宝app支撑臂/支撑臂左/转动关节臂(6.61700e-04) scdbackhoeTRIM/植物/安装组件/安装底座和支撑臂/支撑臂左/转动关节臂(8.93138e-05) scdbackhoeTRIM/植物/安装组件/安装底座和支撑臂/支撑臂左/转动关节臂(1.41327e-05) scdbackhoeTRIM/植物/安装组件/安装底座和支撑臂/支撑臂左/转动关节臂(9.72968e-06) scdbackhoeTRIM/植物/气缸底座到安装板(1.02408e-06)scdbackhoeTRIM/装置/安装组件/安装底座和支撑臂/支撑臂右/转动关节臂(1.05012e-06) s金宝appcdbackhoeTRIM/装置/汽缸底座到安装板(1.05012e-06) scdbackhoeTRIM/装置/汽缸底座到安装板操作点规格已成功满足。
配置模型以使用计算的工作点人事处
作为模型的初始条件。
set_param (mdl“LoadExternalInput”,“上”) set_param (mdl“ExternalInput”,“getinputstruct (op) ') set_param (mdl“LoadInitialState”,“上”) set_param (mdl“InitialState”,“getstatestruct (op) ')
模拟模型。
sim (mdl);
观察关节角轨迹。
(mdl open_system (,'/关节角轨迹'])
仿真结果表明,这5个角度都被裁剪到各自的期望值。由于数值噪声和不稳定性,弹道可以随时间轻微偏离。你可以使用反馈控制器来稳定角度。