В этом примере показано, как найти установившуюся рабочую точку для модели Simscape™ Multibody™ с помощью findop
функция с основанным на проекции оптимизатором.
Основанные на проекции оптимизаторы осуществляют непротиворечивость начальных условий модели при каждой оценке целевой функции или нелинейной ограничительной функции, которая может улучшить результаты обрезки для моделей Simscape. Используя основанные на проекции оптимизаторы для обрезки требует программного обеспечения Optimization Toolbox™.
Модель для этого примера является системой экскаватора типа обратная лопата, смоделированной в Simscape Multibody.
Откройте модель Simulink.
mdl = 'scdbackhoeTRIM';
open_system(mdl)
Чтобы задать технические требования рабочей точки, сначала создайте объект спецификации. Вход, выход и значения состояния в ops
совпадайте с начальными условиями модели.
opspec = operspec(mdl);
Укажите, что выходные параметры модели являются известными значениями для обрезки.
opspec.Outputs(1).Known = true(10,1);
Задайте известные значения для углов в системе экскаватора типа обратная лопата.
opspec.Outputs(1).y(1) = 0; % Bucket angle opspec.Outputs(1).y(3) = 50; % Upper angle opspec.Outputs(1).y(5) = -50; % Lower angle opspec.Outputs(1).y(7) = 0; % Base angle opspec.Outputs(1).y(9) = -45; % Support angle
Для соответствующих скоростей вращения известные значения являются нулем, которые совпадают с начальными условиями модели в opspec
.
Создайте набор опции для обрезки и задайте тип оптимизатора с помощью OptimizerType
опция. Поскольку этот пример использует основанный на проекции решатель градиентного спуска. Чтобы просмотреть итеративное обновление прогресса обрезки в Командном окне, установите DisplayReport
опция к 'iter'
.
opt = findopOptions('OptimizerType','graddescent-proj',... 'DisplayReport','iter');
Задайте максимальное количество вычислений функции для оптимизации.
opt.OptimizationOptions.MaxFunEvals = 20000;
Найдите установившуюся рабочую точку, которая выполняет техническим требованиям в opspec
. Эта операция занимает несколько минут.
op = findop(mdl,opspec,opt);
Optimizing to solve for all desired dx/dt=0, x(k+1)-x(k)=0, and y=ydes. (Maximum Error) Block --------------------------------------------------------- (4.50000e+01) scdbackhoeTRIM/Out1 (3.54436e+00) scdbackhoeTRIM/Out1 (2.29690e-01) scdbackhoeTRIM/Out1 (3.84952e-02) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Right/Revolute Joint Arm (9.31982e-03) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Right/Revolute Joint Arm (7.25861e-04) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Left/Revolute Joint Arm (6.61699e-04) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Left/Revolute Joint Arm (8.93141e-05) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Left/Revolute Joint Arm (1.41364e-05) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Left/Revolute Joint Arm (9.73877e-06) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate (1.01718e-06) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Right/Revolute Joint Arm (1.04643e-06) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate (5.67263e-08) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate (5.67263e-08) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate Operating point specifications were successfully met.
Сконфигурируйте модель, чтобы использовать вычисленную рабочую точку op
как начальное условие модели.
set_param(mdl,'LoadExternalInput','on') set_param(mdl,'ExternalInput','getinputstruct(op)') set_param(mdl,'LoadInitialState','on') set_param(mdl,'InitialState','getstatestruct(op)')
Симулируйте модель.
sim(mdl);
Просмотрите траектории угла поворота шарнира.
open_system([mdl, '/Joint Angle Trajectories'])
Результаты симуляции показывают, что эти пять углов обрезаются к их ожидаемым значениям. Траектория может отклоняться немного в зависимости от времени из-за числового шума и нестабильности. Можно стабилизировать углы с помощью контроллеров обратной связи.