Моделирование руки промышленного робота

Этот пример показывает моделирование серого ящика динамики руки промышленного робота. Манипулятор описан нелинейной гибкой моделью с тремя массами согласно рисунку 1. Эта модель идеализирована в том смысле, что перемещения приняты, чтобы быть вокруг оси, не затронутой силой тяжести. Для простоты моделирование также выполняется с передаточным отношением r = 1, и истинные физические параметры впоследствии получены посредством прямого масштабирования с истинным передаточным отношением. Эксперименты моделирования и идентификации, детализированные ниже, основаны на работе, опубликованной в

  E. Wernholt and S. Gunnarsson. Nonlinear Identification of a
  Physically Parameterized Robot Model. In preprints of the 14th IFAC
  Symposium on System Identification, pages 143-148, Newcastle,
  Australia, March 2006.

Рисунок 1: Принципиальная схема руки промышленного робота.

Моделирование манипулятора

Вход к роботу является прикладным крутящим моментом u (t) =tau (t) сгенерированный электрическим двигателем, и получившейся скоростью вращения двигателя y (t) = d/dt q_m (t) является измеренный выход. Угловые положения масс после коробки передач и в конце структуры руки, q_g (t) и q_a (t), неизмеримы. Гибкость в коробке передач моделируется к нелинейной пружине, описанной пружинным крутящим моментом tau_s (t), который расположен между двигателем и второй массой, в то время как "линейная" пружина между последними двумя гибкостью моделей масс в структуре руки. Трение системы действует в основном на первую массу и здесь моделируется нелинейным моментом трения tau_f (t).

Представление состояний:

         ( x1(t) )   ( q_m(t) - q_g(t) )
         ( x2(t) )   ( q_g(t) - q_a(t) )
  x(t) = ( x3(t) ) = (   d/dt q_m(t)   )
         ( x4(t) )   (   d/dt q_g(t)   )
         ( x5(t) )   (   d/dt q_a(t)   )

и применение крутящего момента балансируется для этих трех результатов масс в следующей нелинейной структуре модели в пространстве состояний:

  d/dt x1(t) = x3(t) - x4(t)
  d/dt x2(t) = x4(t) - x5(t)
  d/dt x3(t) = 1/J_m*(-tau_s(t) - d_g*(x3(t)-x4(t)) - tau_f(t) + u(t))
  d/dt x4(t) = 1/J_g*(tau_s(t) + d_g*(x3(t)-x4(t)) - k_a*x2(t) - d_a*(x4(t)-x5(t)))
  d/dt x5(t) = 1/J_a*(k_a*x2(t) + d_a*(x4(t)-x5(t)))
        y(t) = x3(t)

где J_m, J_g и J_a являются моментами инерции двигателя, коробки передач и структуры руки, соответственно, d_g, и d_a ослабляют параметры, и k_a является жесткостью структуры руки.

Момент трения коробки передач, tau_f (t), моделируется, чтобы включать многие явления трения, с которыми сталкиваются на практике, среди прочего так называемое трение Кулона и эффект Stribeck:

  tau_f(t) = Fv*x3(t) + (Fc+Fcs*sech(alpha*x3(t)))*tanh(beta*x3(t))

где Fv и ФК являются вязким и коэффициентами трения Кулона, Fcs и альфа являются коэффициентами для отражения эффекта Stribeck и беты, параметр раньше получал плавный переход от отрицательного до положительных скоростей x3 (t). (Аналогичный подход, но на основе немного отличающейся структуры модели, для описания статического отношения между скоростью и моментом трения / сила далее обсужден в примере, названном idnlgreydemo5: "Статическое Моделирование Трения".)

Крутящий момент пружины, tau_s (t), принят, чтобы быть описанным кубическим полиномом без квадратного термина в x1 (t):

  tau_s(t) = k_g1*x1(t) + k_g3*x1(t)^3

где k_g1 и k_g3 являются двумя параметрами жесткости пружины коробки передач.

В других типах идентификационных экспериментов, обсужденных в статье Вернхолта и Ганнарссона, возможно идентифицировать полный момент инерции J = J_m+J_g+J_a. С этим мы можем ввести неизвестные масштабные коэффициенты a_m и a_g и выполнить следующие репараметризации:

  J_m = J*a_m
  J_g = J*a_g
  J_a = J*(1-a_m-a_g)

где (если J известен) только a_m и a_g должен быть оценен.

В целом, это дает следующую структуру пространства состояний, включая 13 различных параметров: Fv, ФК, Fcs, альфа, бета, J, a_m, a_g, k_g1, k_g3, d_g, k_a и d_a. (По определению мы также использовали то, что sech (x) = 1/дубинка (x).)

    tau_f(t) = Fv*x3(t) + (Fc+Fcs/cosh(alpha*x3(t)))*tanh(beta*x3(t))
    tau_s(t) = k_g1*x1(t) + k_g3*x1(t)^3
  d/dt x1(t) = x3(t) - x4(t)
  d/dt x2(t) = x4(t) - x5(t)
  d/dt x3(t) = 1/(J*a_m)*(-tau_s(t) - d_g*(x3(t)-x4(t)) - tau_f(t) + u(t))
  d/dt x4(t) = 1/(J*a_g)*(tau_s(t) + d_g*(x3(t)-x4(t)) - k_a*x2(t) - d_a*(x4(t)-x5(t)))
  d/dt x5(t) = 1/(J(1-a_m-a_g))*(k_a*x2(t) + d_a*(x4(t)-x5(t)))
        y(t) = x3(t)

Объект модели манипулятора IDNLGREY

Вышеупомянутая структура модели вводится в файл MEX на C, названный robotarm_c.c, с состоянием, и вывела функции обновления можно следующим образом (целый файл может быть просмотрен командой, "вводят robotarm_c.c"). В функции обновления состояния заметьте, что мы здесь использовали две промежуточных двойных переменные, с одной стороны чтобы улучшить удобочитаемость уравнений и с другой стороны улучшить скорость выполнения (taus появляется дважды в уравнениях, но только вычисляется однажды).

  /* State equations. */
  void compute_dx(double *dx, double *x, double *u, double **p)
  {
      /* Declaration of model parameters and intermediate variables. */
      double *Fv, *Fc, *Fcs, *alpha, *beta, *J, *am, *ag, *kg1, *kg3, *dg, *ka, *da;
      double tauf, taus;   /* Intermediate variables. */
      /* Retrieve model parameters. */
      Fv    = p[0];    /* Viscous friction coefficient.            */
      Fc    = p[1];    /* Coulomb friction coefficient.            */
      Fcs   = p[2];    /* Striebeck friction coefficient.          */
      alpha = p[3];    /* Striebeck smoothness coefficient.        */
      beta  = p[4];    /* Friction smoothness coefficient.         */
      J     = p[5];    /* Total moment of inertia.                 */
      am    = p[6];    /* Motor moment of inertia scale factor.    */
      ag    = p[7];    /* Gear-box moment of inertia scale factor. */
      kg1   = p[8];    /* Gear-box stiffness parameter 1.          */
      kg3   = p[9];    /* Gear-box stiffness parameter 3.          */
      dg    = p[10];   /* Gear-box damping parameter.              */
      ka    = p[11];   /* Arm structure stiffness parameter.       */
      da    = p[12];   /* Arm structure damping parameter.         */
      /* Determine intermediate variables. */
      /* tauf: Gear friction torque. (sech(x) = 1/cosh(x)! */
      /* taus: Spring torque. */
      tauf = Fv[0]*x[2]+(Fc[0]+Fcs[0]/(cosh(alpha[0]*x[2])))*tanh(beta[0]*x[2]);
      taus = kg1[0]*x[0]+kg3[0]*pow(x[0],3);
      /* x[0]: Rotational velocity difference between the motor and the gear-box. */
      /* x[1]: Rotational velocity difference between the gear-box and the arm. */
      /* x[2]: Rotational velocity of the motor. */
      /* x[3]: Rotational velocity after the gear-box. */
      /* x[4]: Rotational velocity of the robot arm. */
      dx[0] = x[2]-x[3];
      dx[1] = x[3]-x[4];
      dx[2] = 1/(J[0]*am[0])*(-taus-dg[0]*(x[2]-x[3])-tauf+u[0]);
      dx[3] = 1/(J[0]*ag[0])*(taus+dg[0]*(x[2]-x[3])-ka[0]*x[1]-da[0]*(x[3]-x[4]));
      dx[4] = 1/(J[0]*(1.0-am[0]-ag[0]))*(ka[0]*x[1]+da[0]*(x[3]-x[4]));
  }
  /* Output equation. */
  void compute_y(double y[], double x[])
  {
      /* y[0]: Rotational velocity of the motor. */
      y[0] = x[2];
  }

Следующий шаг должен создать объект IDNLGREY, отражающий ситуацию с моделированием. Нужно здесь отметить, что нахождение соответствующих начальных значений параметров для манипулятора требует некоторого дополнительного усилия. В статье Вернхолта и Ганнарссона, это было выполнено на двух предыдущих шагах, где другие структуры модели и идентификационные методы использовались. Начальные значения параметров, используемые ниже, являются результатами тех идентификационных экспериментов.

FileName      = 'robotarm_c';               % File describing the model structure.
Order         = [1 1 5];                    % Model orders [ny nu nx].
Parameters    = [ 0.00986346744839  0.74302635727901 ...
                  3.98628540790595  3.24015074090438 ...
                  0.79943497008153  0.03291699877416 ...
                  0.17910964111956  0.61206166914114 ...
                 20.59269827430799  0.00000000000000 ...
                  0.06241814047290 20.23072060978318 ...
                  0.00987527995798]';       % Initial parameter vector.
InitialStates = zeros(5, 1);                % Initial states.
Ts            = 0;                          % Time-continuous system.
nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, ...
                'Name', 'Robot arm',                            ...
                'InputName', 'Applied motor torque',            ...
                'InputUnit', 'Nm',                              ...
                'OutputName', 'Angular velocity of motor',      ...
                'OutputUnit', 'rad/s',                          ...
                'TimeUnit', 's');

Имена и модули состояний обеспечиваются для лучшей бухгалтерии:

nlgr = setinit(nlgr, 'Name', {'Angular position difference between the motor and the gear-box' ...
                       'Angular position difference between the gear-box and the arm'   ...
                       'Angular velocity of motor'                                      ...
                       'Angular velocity of gear-box'                                   ...
                       'Angular velocity of robot arm'}');
nlgr = setinit(nlgr, 'Unit', {'rad' 'rad' 'rad/s' 'rad/s' 'rad/s'});

Названия параметра также заданы подробно. Кроме того, моделирование было сделано, такой способ, которым все параметры должны быть положительными, i.e., минимум каждого параметра должен быть установлен к 0 (и следовательно ограниченная оценка будет позже выполняться). Как в статье Вернхолта и Ганнарссона, мы также рассматриваем первые 6 параметров, i.e., Fv, ФК, Fcs, альфа, бета, и J, чтобы быть столь хорошим, что они не должны быть оценены.

nlgr = setpar(nlgr, 'Name', {'Fv   : Viscous friction coefficient'            ... % 1.
                      'Fc   : Coulomb friction coefficient'            ... % 2.
                      'Fcs  : Striebeck friction coefficient'          ... % 3.
                      'alpha: Striebeck smoothness coefficient'        ... % 4.
                      'beta : Friction smoothness coefficient'         ... % 5.
                      'J    : Total moment of inertia'                 ... % 6.
                      'a_m  : Motor moment of inertia scale factor'    ... % 7.
                      'a_g  : Gear-box moment of inertia scale factor' ... % 8.
                      'k_g1 : Gear-box stiffness parameter 1'          ... % 9.
                      'k_g3 : Gear-box stiffness parameter 3'          ... % 10.
                      'd_g  : Gear-box damping parameter'              ... % 11.
                      'k_a  : Arm structure stiffness parameter'       ... % 12.
                      'd_a  : Arm structure damping parameter'         ... % 13.
                     });
nlgr = setpar(nlgr, 'Minimum', num2cell(zeros(size(nlgr, 'np'), 1)));   % All parameters >= 0!
for parno = 1:6   % Fix the first six parameters.
    nlgr.Parameters(parno).Fixed = true;
end

Шаги моделирования, выполненные до сих пор, оставили нас с первоначальной моделью манипулятора со свойствами можно следующим образом:

present(nlgr);
                                                                                                                            
nlgr =                                                                                                                      
Continuous-time nonlinear grey-box model defined by 'robotarm_c' (MEX-file):                                                
                                                                                                                            
   dx/dt = F(t, u(t), x(t), p1, ..., p13)                                                                                   
    y(t) = H(t, u(t), x(t), p1, ..., p13) + e(t)                                                                            
                                                                                                                            
 with 1 input(s), 5 state(s), 1 output(s), and 7 free parameter(s) (out of 13).                                             
                                                                                                                            
 Inputs:                                                                                                                    
    u(1)   Applied motor torque(t) [Nm]                                                                                     
 States:                                                                           Initial value                            
    x(1)   Angular position difference between the motor and the gear-box(t) [rad]   xinit@exp1   0   (fixed) in [-Inf, Inf]
    x(2)   Angular position difference between the gear-box and the arm(t) [rad]     xinit@exp1   0   (fixed) in [-Inf, Inf]
    x(3)   Angular velocity of motor(t) [rad/s]                                      xinit@exp1   0   (fixed) in [-Inf, Inf]
    x(4)   Angular velocity of gear-box(t) [rad/s]                                   xinit@exp1   0   (fixed) in [-Inf, Inf]
    x(5)   Angular velocity of robot arm(t) [rad/s]                                  xinit@exp1   0   (fixed) in [-Inf, Inf]
 Outputs:                                                                                                                   
    y(1)   Angular velocity of motor(t) [rad/s]                                                                             
 Parameters:                                             Value                                                              
    p1    Fv   : Viscous friction coefficient                0.00986347      (fixed) in [0, Inf]                            
    p2    Fc   : Coulomb friction coefficient                  0.743026      (fixed) in [0, Inf]                            
    p3    Fcs  : Striebeck friction coefficient                 3.98629      (fixed) in [0, Inf]                            
    p4    alpha: Striebeck smoothness coefficient               3.24015      (fixed) in [0, Inf]                            
    p5    beta : Friction smoothness coefficient               0.799435      (fixed) in [0, Inf]                            
    p6    J    : Total moment of inertia                       0.032917      (fixed) in [0, Inf]                            
    p7    a_m  : Motor moment of inertia scale factor           0.17911      (estimated) in [0, Inf]                        
    p8    a_g  : Gear-box moment of inertia scale factor       0.612062      (estimated) in [0, Inf]                        
    p9    k_g1 : Gear-box stiffness parameter 1                 20.5927      (estimated) in [0, Inf]                        
    p10   k_g3 : Gear-box stiffness parameter 3                       0      (estimated) in [0, Inf]                        
    p11   d_g  : Gear-box damping parameter                   0.0624181      (estimated) in [0, Inf]                        
    p12   k_a  : Arm structure stiffness parameter              20.2307      (estimated) in [0, Inf]                        
    p13   d_a  : Arm structure damping parameter             0.00987528      (estimated) in [0, Inf]                        
                                                                                                                            
Name: Robot arm                                                                                                             
                                                                                                                            
Status:                                                                                                                     
Created by direct construction or transformation. Not estimated.                                                            
More information in model's "Report" property.                                                                              

Данные ввода - вывода

Большое количество реальных наборов данных было собрано из экспериментального робота. Для того, чтобы сохранить робота вокруг его рабочей точки, но также и из соображений безопасности, данные были собраны с помощью экспериментального расположения управления с обратной связью, которое впоследствии позволяет оффлайновые расчеты опорных сигналов для объединенных контроллеров.

В этом тематическом исследовании мы ограничим прогрессивное обсуждение четырьмя различными наборами данных, один для оценки и остающихся единиц в целях валидации. В каждом случае периодический сигнал возбуждения с длительностью приблизительно 10 секунд использовался, чтобы сгенерировать задающую скорость для контроллера. Выбранная частота дискретизации составляла 2 кГц (шаг расчета, Ts, = 0,0005 секунды). Для наборов данных использовались три различных типов входных сигналов: (ue: входной сигнал набора данных оценки; uv1, uv2, uv3: входные сигналы трех наборов данных валидации)

  ue, uv1: Multisine signals with a flat amplitude spectrum in the
           frequency interval 1-40 Hz with a peak value of 16 rad/s. The
           multisine signal is superimposed on a filtered square wave
           with amplitude 20 rad/s and cut-off frequency 1 Hz.
      uv2: Similar to ue and uv1, but without the square wave.
      uv3: Multisine signal (sum of sinusoids) with frequencies 0.1,
           0.3, and 0.5 Hz, with peak value 40 rad/s.

Давайте загрузим доступные данные и поместим все четыре набора данных в один один объект IDDATA z:

load(fullfile(matlabroot, 'toolbox', 'ident', 'iddemos', 'data', 'robotarmdata'));
z = iddata({ye yv1 yv2 yv3}, {ue uv1 uv2 uv3}, 0.5e-3, 'Name', 'Robot arm');
z.InputName = 'Applied motor torque';
z.InputUnit = 'Nm';
z.OutputName = 'Angular velocity of motor';
z.OutputUnit = 'rad/s';
z.ExperimentName = {'Estimation' 'Validation 1'  'Validation 2' 'Validation 3'};
z.Tstart = 0;
z.TimeUnit = 's';
present(z);
th =
Time domain data set containing 4 experiments.
         
Experiment                      Samples      Sample Time
   Estimation                    19838            0.0005
   Validation 1                  19838            0.0005
   Validation 2                  19838            0.0005
   Validation 3                  19838            0.0005
                                                        
Name: Robot arm                                         
                                                        
Outputs                         Unit (if specified)     
   Angular velocity of motor       rad/s                
                                                        
Inputs                          Unit (if specified)     
   Applied motor torque            Nm                   
                                                        

Следующий рисунок показывает данные ввода - вывода, используемые в четырех экспериментах.

figure('Name', [z.Name ': input-output data'],...
   'DefaultAxesTitleFontSizeMultiplier',1,...
   'DefaultAxesTitleFontWeight','normal',...
   'Position',[100 100 900 600]);
for i = 1:z.Ne
    zi = getexp(z, i);
    subplot(z.Ne, 2, 2*i-1);   % Input.
    plot(zi.u);
    title([z.ExperimentName{i} ': ' zi.InputName{1}],'FontWeight','normal');
    if (i < z.Ne)
        xlabel('');
    else
        xlabel([z.Domain ' (' zi.TimeUnit ')']);
    end
    subplot(z.Ne, 2, 2*i);     % Output.
    plot(zi.y);
    title([z.ExperimentName{i} ': ' zi.OutputName{1}],'FontWeight','normal');
    if (i < z.Ne)
        xlabel('');
    else
        xlabel([z.Domain ' (' zi.TimeUnit ')']);
    end
end

Рисунок 2: Измеренные данные ввода - вывода экспериментального манипулятора.

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

Насколько хороший первоначальная модель манипулятора? Давайте использовать COMPARE, чтобы симулировать выходные параметры модели (для всех четырех экспериментов) и сравнить результат с соответствующими измеренными выходными параметрами. Для всех четырех экспериментов мы знаем, что значения первых двух состояний 0 (зафиксированы), в то время как значения остающихся трех состояний первоначально установлены к измеренному выходу в (незафиксированное) время начала. Однако оценками COMPARE по умолчанию все начальные состояния, и с z содержание четырех различных экспериментов это означало бы 4*5 = 20 начальных состояний оценивать. Даже после фиксации первых двух состояний, 4*3 = 12 начальных состояний остались бы, чтобы оценить (в случае, если внутренняя стратегия начального состояния модели сопровождается). Поскольку набор данных является довольно большим, это привело бы к долгим расчетам, и избегать этого мы оцениваем 4*3 свободных компонента начальных состояний с помощью PREDICT (возможный, если начальное состояние передается как структура начального состояния), но ограничьте оценку первым 10:th доступных данных. Мы затем даем COMPARE КОМАНДУ использовать получившееся 5 4 матрица X0init начального состояния, не выполняя оценки начального состояния.

zred = z(1:round(zi.N/10));
nlgr = setinit(nlgr, 'Fixed', {true true false false false});
X0 = nlgr.InitialStates;
[X0.Value] = deal(zeros(1, 4), zeros(1, 4), [ye(1) yv1(1) yv2(1) yv3(1)], ...
    [ye(1) yv1(1) yv2(1) yv3(1)], [ye(1) yv1(1) yv2(1) yv3(1)]);
[~, X0init] = predict(zred, nlgr, [], X0);
nlgr = setinit(nlgr, 'Value', num2cell(X0init(:, 1)));
clf
compare(z, nlgr, [], compareOptions('InitialCondition', X0init));

Рисунок 3: Сравнение между измеренными выходными параметрами и симулированными выходными параметрами первоначальной модели манипулятора.

Как видно, эффективность первоначальной модели манипулятора достойна или довольно хороша. Пригодными для трех типов наборов данных составляют приблизительно 79% для Вас и yv1, 37% для yv2 и 95% для yv3. Заметьте, что более высокое пригодное для ye/yv1 по сравнению с yv2 находится в большом из-за способности первоначальной модели получить прямоугольную волну, в то время как часть мультисинуса не получена одинаково хорошо. Мы можем также посмотреть на ошибки предсказания для четырех экспериментов:

pe(z, nlgr, peOptions('InitialCondition',X0init));

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

Оценка параметра

Давайте теперь попытаемся улучшать производительность первоначальной модели манипулятора путем оценки 7 свободных параметров модели и 3 свободных начальных состояний первого эксперимента z (набор данных оценки). Эта оценка займет время (обычно несколько минут).

nlgr = nlgreyest(nlgr, getexp(z, 1), nlgreyestOptions('Display', 'on'));

Эффективность предполагаемой модели манипулятора

COMPARE снова используется, чтобы оценить эффективность предполагаемой модели манипулятора. Мы также здесь даем COMPARE КОМАНДУ не выполнять любую оценку начального состояния. Для первого эксперимента мы заменяем предполагаемое начальное состояние на то, оцененное NLGREYEST, и для остающихся трех экспериментов мы используем PREDICT, чтобы оценить начальное состояние на основе уменьшаемого объекта IDDATA zred.

X0init(:, 1) = cell2mat(getinit(nlgr, 'Value'));
X0 = nlgr.InitialStates;
[X0.Value] = deal(zeros(1, 3), zeros(1, 3), [yv1(1) yv2(1) yv3(1)], ...
    [yv1(1) yv2(1) yv3(1)], [yv1(1) yv2(1) yv3(1)]);
[yp, X0init(:, 2:4)] = predict(getexp(zred, 2:4), nlgr, [], X0);
clf
compare(z, nlgr, [], compareOptions('InitialCondition', X0init));

Рисунок 5: Сравнение между измеренными выходными параметрами и симулированными выходными параметрами предполагаемой модели манипулятора.

График сравнения показывает улучшение в терминах лучших подгонок. Для Вас и yv1 подгонка - теперь приблизительно 85% (прежде чем: 79%), для yv2 приблизительно 63% (прежде чем: 37%), и для yv3 несколько меньше чем 95,5% (прежде чем: также немного меньше чем 95,5%). Улучшение является самым явным для второго набора данных валидации, где сигнал мультисинуса без любой прямоугольной волны был применен как вход. Однако способность предполагаемой модели следовать за частью мультисинуса Вас и yv1 была также значительно улучшена (все же, это не отражается подходящими фигурами, как это больше под влиянием подгонки к прямоугольной волне). График ошибок предсказания также показывает, что остаточные значения теперь в целом меньше, чем с первоначальной моделью манипулятора:

figure;
pe(z, nlgr, peOptions('InitialCondition',X0init));

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

Мы завершаем тематическое исследование путем текстового суммирования различных свойств предполагаемой модели манипулятора.

present(nlgr);
                                                                                                                                       
nlgr =                                                                                                                                 
Continuous-time nonlinear grey-box model defined by 'robotarm_c' (MEX-file):                                                           
                                                                                                                                       
   dx/dt = F(t, u(t), x(t), p1, ..., p13)                                                                                              
    y(t) = H(t, u(t), x(t), p1, ..., p13) + e(t)                                                                                       
                                                                                                                                       
 with 1 input(s), 5 state(s), 1 output(s), and 7 free parameter(s) (out of 13).                                                        
                                                                                                                                       
 Inputs:                                                                                                                               
    u(1)   Applied motor torque(t) [Nm]                                                                                                
 States:                                                                           Initial value                                       
    x(1)   Angular position difference between the motor and the gear-box(t) [rad]   xinit@exp1          0   (fixed) in [-Inf, Inf]    
    x(2)   Angular position difference between the gear-box and the arm(t) [rad]     xinit@exp1          0   (fixed) in [-Inf, Inf]    
    x(3)   Angular velocity of motor(t) [rad/s]                                      xinit@exp1   -19.1193   (estimated) in [-Inf, Inf]
    x(4)   Angular velocity of gear-box(t) [rad/s]                                   xinit@exp1   -22.2095   (estimated) in [-Inf, Inf]
    x(5)   Angular velocity of robot arm(t) [rad/s]                                  xinit@exp1   -23.4558   (estimated) in [-Inf, Inf]
 Outputs:                                                                                                                              
    y(1)   Angular velocity of motor(t) [rad/s]                                                                                        
 Parameters:                                                Value   Standard Deviation                                                 
    p1    Fv   : Viscous friction coefficient                0.00986347                0   (fixed) in [0, Inf]                         
    p2    Fc   : Coulomb friction coefficient                  0.743026                0   (fixed) in [0, Inf]                         
    p3    Fcs  : Striebeck friction coefficient                 3.98629                0   (fixed) in [0, Inf]                         
    p4    alpha: Striebeck smoothness coefficient               3.24015                0   (fixed) in [0, Inf]                         
    p5    beta : Friction smoothness coefficient               0.799435                0   (fixed) in [0, Inf]                         
    p6    J    : Total moment of inertia                       0.032917                0   (fixed) in [0, Inf]                         
    p7    a_m  : Motor moment of inertia scale factor          0.266507      0.000286962   (estimated) in [0, Inf]                     
    p8    a_g  : Gear-box moment of inertia scale factor       0.647608      0.000190868   (estimated) in [0, Inf]                     
    p9    k_g1 : Gear-box stiffness parameter 1                 20.0719        0.0263196   (estimated) in [0, Inf]                     
    p10   k_g3 : Gear-box stiffness parameter 3                 24.1643         0.331945   (estimated) in [0, Inf]                     
    p11   d_g  : Gear-box damping parameter                   0.0304388      0.000282163   (estimated) in [0, Inf]                     
    p12   k_a  : Arm structure stiffness parameter              11.7447        0.0311201   (estimated) in [0, Inf]                     
    p13   d_a  : Arm structure damping parameter             0.00285346      8.06513e-05   (estimated) in [0, Inf]                     
                                                                                                                                       
Name: Robot arm                                                                                                                        
                                                                                                                                       
Status:                                                                                                                                
Termination condition: Change in parameters was less than the specified tolerance..                                                    
Number of iterations: 20, Number of function evaluations: 21                                                                           
                                                                                                                                       
Estimated using Solver: ode45; Search: lsqnonlin on time domain data "Robot arm".                                                      
Fit to estimation data: 85.21%                                                                                                         
FPE: 9.503, MSE: 9.494                                                                                                                 
More information in model's "Report" property.                                                                                         

Заключительные замечания

Методы системы идентификации широко используются в робототехнике. "Хорошие" модели робота жизненно важны для современных концепций управления роботом и часто рассматриваются как необходимость того, чтобы удовлетворять постоянно растущий спрос в скорости и точности. Модели являются также решающими компонентами в различных приложениях диагноза робота, где модели используются для предсказания проблем, связанных с износом и для обнаружения фактической причины неправильного функционирования робота.