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

В этом примере показан серый ящик статической системы с одним входом и одним выходом с использованием функции MATLAB в качестве файла ODE.

Система идентификации обычно касается идентификации параметров динамических моделей. Однако статические модели также представляют интерес, иногда сами по себе, а иногда как подмодели больших более вовлеченных моделей. Пример последнего обсуждается в тематическом исследовании «Промышленная рука робота» (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.

и послужит базисом для наших экспериментов по статической идентификации.

Модель трения, предложенная Makkar, et al, связывает скорость скольжения 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) + g (4)

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

  4. Эффект туломбического трения моделируется термином 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 = [];

Заметьте, что обновление 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. Axes 1 with title Friction force contains an object of type line. This object represents Static friction system. Axes 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. The axes 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. The axes 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

Критерий Final Prediction Error (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. The axes 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. Axes 1 with title AutoCorr contains 2 objects of type line. This object represents Static friction model. Axes 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. The axes 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 статической системы. Процедура для этого в основном та же, что и для моделирования динамических систем.