Моделирование трения: моделирование файла MATLAB статической системы SISO

Этот пример показывает моделирование серого ящика статического одно входа, система одно выхода с помощью функции 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 неизвестными положительными параметрами. Эта структура модели отображает много хороших свойств, возникающих в реальных приложениях:

  1. Модель трения симметрична вокруг источника

  2. Статический коэффициент трения аппроксимирован g (1) г (4)

  3. Первый термин уравнения, tanh (g (2) *v (t) - tanh (g (3) *v (t), получает так называемый эффект Striebeck, где проверка трения показывает довольно внезапное отбрасывание с увеличивающейся скоростью скольжения около источника.

  4. Эффект трения Coulombic моделируется термином g (4) *tanh (g (5) *v (t))

  5. Вязкое рассеяние трения отражается последним термином, g (6) *v (t)

Консультируйтесь с вышеупомянутой бумагой для значительно большего количества деталей о трении в целом и предложенной структуре модели в частности.

Моделирование трения IDNLGREY

Давайте теперь создадим объект модели 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);

Figure Static friction system contains 2 axes objects. Axes object 1 with title Friction force contains an object of type line. This object represents Static friction system. Axes object 2 with title Slip speed contains an object of type line. This object represents Static friction system.

Рисунок 1: данные ввода - вывода из системного трения показа.

Эффективность первоначальных моделей трения

С доступом к данным ввода - вывода и четыре различных первоначальных модели трения очевидный вопрос теперь состоит в том, насколько хороший эти модели? Давайте привлечем это по делу о наборе данных оценки посредством симуляций, выполненных COMPARE:

set(gcf,'DefaultLegendLocation','southeast');
compare(ze, nlgr, nlgr1, nlgr2, nlgr3);

Figure Static friction system contains an axes object. The axes object contains 5 objects of type line. These objects represent Static friction system (Friction force), Static friction model: 69.41%, No Striebeck term: 68.55%, No Coulombic term: 50.14%, No dissipation term: 73.04%.

Рисунок 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);

Figure Static friction system contains an axes object. The axes object contains 5 objects of type line. These objects represent Static friction system (Friction force), Static friction model: 99.68%, No Striebeck term: 91.63%, No Coulombic term: 91.85%, No dissipation term: 81.81%.

Рисунок 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);

Figure Static friction system contains an axes object. The axes object contains an object of type line. These objects represent Static friction system (Friction force), Static friction model.

Рисунок 4: ошибки Предсказания получены с предполагаемой полной моделью трения.

Мы далее проверяем случайность путем рассмотрения остаточных значений ("остатки") полной модели трения:

figure('Name', [nlgr.Name ': residuals of estimated IDNLGREY model']);
resid(zv, nlgr);

Figure Static friction model: residuals of estimated IDNLGREY model contains 2 axes objects. Axes object 1 with title AutoCorr contains 2 objects of type line. This object represents Static friction model. Axes object 2 with title XCorr (Slip speed) contains 2 objects of type line. This object represents Static friction model.

Рисунок 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');

Figure Static friction model: step responses of estimated models contains an axes object. The axes object with title From: Slip speed To: Friction force contains 4 objects of type line. These objects represent Static friction model, No Striebeck term, No Coulombic term, No dissipation term.

Рисунок 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 статической системы. Процедура для того, чтобы сделать это является в основном тем же самым что касается моделирования динамических систем.