Этот пример показывает моделирование серого ящика статического одно входа, система одно выхода с помощью функции MATLAB в качестве файла ОДУ.
Система идентификации обычно имеет дело с идентификацией параметров динамических моделей. Однако статические модели также представляют интерес, иногда самостоятельно и иногда как подмодели больших более включенных моделей. Пример последнего обсужден в тематическом исследовании "Рука Промышленного робота" (idnlgreydemo13.m), где статическая модель трения используется как фиксированный (предпредполагаемый) компонент модели манипулятора.
Мы обсуждаем, как представлять статическое явление трения как модель IDNLGREY и оценить соответствующие коэффициенты.
Прерывистые и кусочно-непрерывные модели трения часто проблематичны для высокоэффективных непрерывных контроллеров. Этот самый факт заставил Маккара, Диксона, Сойера и Ху предлагать новую постоянно и дифференцируемую модель трения, которая получает наиболее распространенные явления трения, с которыми сталкиваются на практике. В новой структуре модели трения сообщили
C. Makkar, W. E. Dixon, W. G. Sawyer, and G.Hu "A New Continuously
Differentiable Friction Model for Control Systems Design", IEEE(R)/ASME
International Conference on Advanced Intelligent Mechatronics,
Monterey, CA, 2005, pages 600-605.
и будет служить базисом для наших статических идентификационных экспериментов.
Модель трения, предложенная Маккаром, и др., соединяется, скорость скольжения v (t) тела в контакте с другим телом к трению обеспечивают f (t) через статическое отношение
f(t) = g(1)*(tanh(g(2)*v(t) - tanh(g(3)*v(t))
+ g(4)*tanh(g(5)*v(t)) + g(6)*v(t)
где g (1)..., g (6) являются 6 неизвестными положительными параметрами. Эта структура модели отображает много хороших свойств, возникающих в реальных приложениях:
Модель трения симметрична вокруг источника
Статический коэффициент трения аппроксимирован g (1) г (4)
Первый термин уравнения, tanh (g (2) *v (t) - tanh (g (3) *v (t), получает так называемый эффект Striebeck, где проверка трения показывает довольно внезапное отбрасывание с увеличивающейся скоростью скольжения около источника.
Эффект трения Coulombic моделируется термином g (4) *tanh (g (5) *v (t))
Вязкое рассеяние трения отражается последним термином, g (6) *v (t)
Консультируйтесь с вышеупомянутой бумагой для значительно большего количества деталей о трении в целом и предложенной структуре модели в частности.
Давайте теперь создадим объект модели IDNLGREY, описывающий статическое трение. Как обычно, начальная точка должна записать IDNLGREY моделирование файла, и здесь мы создаем файл MATLAB, friction_m.m, с содержимым можно следующим образом.
function [dx, f] = friction_m(t, x, v, g, varargin)
%FRICTION_M Nonlinear friction model with Stribeck, Coulomb and viscous
% dissipation effects.
% Output equation.
f = g(1)*(tanh(g(2)*v(1))-tanh(g(3)*v(1))) ... % Stribeck effect.
+ g(4)*tanh(g(5)*v(1)) ... % Coulomb effect.
+ g(6)*v(1); % Viscous dissipation term.
% Static system; no states.
dx = [];
Заметьте, что дуплекс обновления состояния всегда должен возвращаться файлом модели и что это должно быть пусто ([]) в статических случаях моделирования.
Наш следующий шаг должен передать файл модели, информацию о порядке модели, предположил вектор параметра и т.д как входные параметры конструктору IDNLGREY. Мы также задаем имена и модули ввода и вывода и утверждаем, что все параметры модели должны быть положительными.
FileName = 'friction_m'; % File describing the model structure. Order = [1 1 0]; % Model orders [ny nu nx]. Parameters = {[0.20; 90; 11; ... 0.12; 110; 0.015]}; % Initial parameters. InitialStates = []; % Initial initial states. Ts = 0; % Time-continuous system. nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, ... 'Name', 'Static friction model', ... 'InputName', 'Slip speed', 'InputUnit', 'm/s', ... 'OutputName', 'Friction force', 'OutputUnit', 'N', ... 'TimeUnit', 's'); nlgr = setpar(nlgr, 'Minimum', {zeros(5, 1)}); % All parameters must be >= 0.
После этих действий у нас есть первоначальная модель трения со свойствами можно следующим образом.
present(nlgr);
nlgr = Continuous-time nonlinear static model defined by 'friction_m' (MATLAB file): y(t) = H(t, u(t), p1) + e(t) with 1 input(s), 0 state(s), 1 output(s), and 6 free parameter(s) (out of 6). Inputs: u(1) Slip speed(t) [m/s] Outputs: y(1) Friction force(t) [N] Parameters: Value p1(1) p1 0.2 (estimated) in [0, Inf] p1(2) 90 (estimated) in [0, Inf] p1(3) 11 (estimated) in [0, Inf] p1(4) 0.12 (estimated) in [0, Inf] p1(5) 110 (estimated) in [0, Inf] p1(6) 0.015 (estimated) in [0, Inf] Name: Static friction model Status: Created by direct construction or transformation. Not estimated. More information in model's "Report" property.
В наших идентификационных экспериментах мы не только интересуемся полной моделью трения, но также и исследованием, как уменьшаемая модель трения выполнила бы. Уменьшаемым мы здесь означаем модель трения, которая содержит два из трех терминов полной модели. Чтобы исследовать это, три копии полной структуры модели создаются, и в каждой копии мы фиксируем вектор параметра так, чтобы только два из терминов способствовали:
nlgr1 = nlgr; nlgr1.Name = 'No Striebeck term'; nlgr1 = setpar(nlgr1, 'Value', {[zeros(3, 1); Parameters{1}(4:6)]}); nlgr1 = setpar(nlgr1, 'Fixed', {[true(3, 1); false(3, 1)]}); nlgr2 = nlgr; nlgr2.Name = 'No Coulombic term'; nlgr2 = setpar(nlgr2, 'Value', {[Parameters{1}(1:3); 0; 0; Parameters{1}(6)]}); nlgr2 = setpar(nlgr2, 'Fixed', {[false(3, 1); true(2, 1); false]}); nlgr3 = nlgr; nlgr3.Name = 'No dissipation term'; nlgr3 = setpar(nlgr3, 'Value', {[Parameters{1}(1:5); 0]}); nlgr3 = setpar(nlgr3, 'Fixed', {[false(5, 1); true]});
В нашем распоряжении 2 различных (симулированных) набора данных, куда входная скорость скольжения была развернута от-10 м/с до 10 м/с способом типа пандуса. Мы загружаем данные и создаем два объекта IDDATA для наших идентификационных экспериментов, ze для оценки и zv в целях валидации.
load(fullfile(matlabroot, 'toolbox', 'ident', 'iddemos', 'data', 'frictiondata')); ze = iddata(f1, v, 1, 'Name', 'Static friction system'); set(ze, 'InputName', 'Slip speed', 'InputUnit', 'm/s', ... 'OutputName', 'Friction force', 'OutputUnit', 'N', ... 'Tstart', 0, 'TimeUnit', 's'); zv = iddata(f2, v, 1, 'Name', 'Static friction system'); set(zv, 'InputName', 'Slip speed', 'InputUnit', 'm/s', ... 'OutputName', 'Friction force', 'OutputUnit', 'N', ... 'Tstart', 0, 'TimeUnit', 's');
Данные ввода - вывода, которые будут использоваться для оценки, показывают в окне графика.
figure('Name', ze.Name);
plot(ze);
Рисунок 1: данные ввода - вывода из системного трения показа.
С доступом к данным ввода - вывода и четыре различных первоначальных модели трения очевидный вопрос теперь состоит в том, насколько хороший эти модели? Давайте привлечем это по делу о наборе данных оценки посредством симуляций, выполненных COMPARE:
set(gcf,'DefaultLegendLocation','southeast'); compare(ze, nlgr, nlgr1, nlgr2, nlgr3);
Рисунок 2: Сравнение между истинным выходом и симулированными выходными параметрами четырех первоначальных моделей трения.
Ни одна из первоначальных моделей не может правильно описать истинный выход. Чтобы преодолеть это, мы оцениваем параметры модели всех четырех структур модели. Мы конфигурируем все оценки, чтобы выполнить самое большее 30 итераций и остановить итерации только в случае, если допуск является почти нулем (которым это на практике никогда не будет для реальных данных). Эти расчеты займут время.
opt = nlgreyestOptions('Display', 'on'); opt.SearchOptions.MaxIterations = 30; opt.SearchOptions.FunctionTolerance = eps; opt.EstimateCovariance = false; nlgr = nlgreyest(nlgr, ze, opt); nlgr1 = nlgreyest(nlgr1, ze, opt); nlgr2 = nlgreyest(nlgr2, ze, opt); nlgr3 = nlgreyest(nlgr3, ze, opt);
Эффективность моделей еще раз исследована путем сравнения истинного выхода с симулированными выходными параметрами этих четырех моделей, как получено использование COMPARE, но на этот раз сравнение основано на наборе данных валидации zv.
compare(zv, nlgr, nlgr1, nlgr2, nlgr3);
Рисунок 3: Сравнение между истинным выходом и симулированными выходными параметрами четырех предполагаемых моделей трения.
Для этой системы мы ясно видим, что полная модель превосходит уменьшаемые единицы по характеристикам. Тем не менее, упрощенные модели, кажется, могут получить эффекты, которые они моделируют скорее хорошо, и по каждой оценке случая результаты в намного лучшей подгонке. Худшая подгонка получена для модели, где вязкий термин рассеяния был не учтен. Впечатляющий припадок полной модели не стал никаким большим удивлением, когда его структура модели совпадает с этим, раньше генерировал истинные выходные данные. Параметры полной модели также близко к тем, которые использовались, чтобы сгенерировать истинный выход модели:
disp(' True Estimated parameter vector');
True Estimated parameter vector
ptrue = [0.25; 100; 10; 0.1; 100; 0.01];
fprintf(' %7.3f %7.3f\n', [ptrue'; getpvec(nlgr)']);
0.250 0.249 100.000 106.637 10.000 9.978 0.100 0.100 100.000 87.699 0.010 0.010
Критерий Итоговой ошибки предсказания (FPE) (низкие значения хороши) применился ко всем четырем моделям трения, подтверждает превосходство полной модели трения:
fpe(nlgr, nlgr1, nlgr2, nlgr3);
1.0e-03 * 0.0002 0.1665 0.1584 0.7931
Что касается динамических систем, мы можем также исследовать ошибки предсказания статической модели с помощью PE. Мы делаем это для полной модели трения и приходим к заключению, что остаточные значения, кажется, имеют случайную природу:
pe(zv, nlgr);
Рисунок 4: ошибки Предсказания получены с предполагаемой полной моделью трения.
Мы далее проверяем случайность путем рассмотрения остаточных значений ("остатки") полной модели трения:
figure('Name', [nlgr.Name ': residuals of estimated IDNLGREY model']); resid(zv, nlgr);
Рисунок 5: Остаточные значения получены с предполагаемой полной моделью трения.
Переходной процесс статических моделей может также быть вычислен и построен. Давайте применим модульный шаг и давайте сделаем это для всех четырех предполагаемых моделей трения:
figure('Name', [nlgr.Name ': step responses of estimated models']); step(nlgr, nlgr1, nlgr2, nlgr3); legend(nlgr.Name, nlgr1.Name, nlgr2.Name, nlgr3.Name, 'location', 'SouthEast');
Рисунок 6: Модульные переходные процессы четырех предполагаемых моделей трения.
Мы наконец отображаем много свойств, как предполагаемые стандартные отклонения параметров, функции потерь, и т.д., полной модели трения.
present(nlgr);
nlgr = Continuous-time nonlinear static model defined by 'friction_m' (MATLAB file): y(t) = H(t, u(t), p1) + e(t) with 1 input(s), 0 state(s), 1 output(s), and 6 free parameter(s) (out of 6). Inputs: u(1) Slip speed(t) [m/s] Outputs: y(1) Friction force(t) [N] Parameters: Value p1(1) p1 0.249402 (estimated) in [0, Inf] p1(2) 106.637 (estimated) in [0, Inf] p1(3) 9.97835 (estimated) in [0, Inf] p1(4) 0.0999916 (estimated) in [0, Inf] p1(5) 87.6992 (estimated) in [0, Inf] p1(6) 0.0100019 (estimated) in [0, Inf] Name: Static friction model Status: Termination condition: Change in parameters was less than the specified tolerance.. Number of iterations: 9, Number of function evaluations: 10 Estimated using Solver: FixedStepDiscrete; Search: lsqnonlin on time domain data "Static friction system". Fit to estimation data: 99.68% FPE: 2.428e-07, MSE: 2.414e-07 More information in model's "Report" property.
Этот пример показал, как выполнить моделирование IDNLGREY статической системы. Процедура для того, чтобы сделать это является в основном тем же самым что касается моделирования динамических систем.