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

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

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

где Fv и Fc являются вязкими и коэффициентами трения Кулона, Fcs и альфа являются коэффициентами для отражения эффекта Штрибека и параметром бета-a, используемым для получения плавного перехода от отрицательных к положительным скоростям 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. (По определению мы также использовали тот факт, что sect (x) = 1/cosh (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, с состояниями и выходом функциями обновления следующим образом (весь файл можно просмотреть командой "type robotarm_c.c"). В функции обновления состояния заметьте, что мы здесь использовали две промежуточные двойные переменные, с одной стороны, для повышения читаемости уравнений и с другой стороны для улучшения скорости выполнения (таус появляется дважды в уравнениях, но вычисляется только один раз).

  /* 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'});

Имена параметров также подробно указаны. Кроме того, моделирование было сделано таким образом, что все параметры должны быть положительными, то есть минимум каждого параметра должен быть установлен на 0 (и, следовательно, ограниченная оценка будет выполнена позже). Как и в статье Вернхольта и Гуннарссона, мы также считаем первые 6 параметров, то есть Fv, Fc, 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% для ye и 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: Сравнение между измеренными выходами и моделируемыми выходами предполагаемой модели руки робота.

График сравнения показывает улучшение с точки зрения лучших подгонок. Для ye и yv1 подгонка сейчас составляет около 85% (до: 79%), для yv2 около 63% (до: 37%) и для yv3 несколько менее 95,5% (до: также чуть менее 95,5%). Улучшение наиболее выражено для второго набора данных валидации, где в качестве входных данных был приложен многосинейный сигнал без какой-либо квадратной волны. Однако способность предполагаемой модели следовать за многосинейной частью ye и 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.0636   (estimated) in [-Inf, Inf]
    x(4)   Angular velocity of gear-box(t) [rad/s]                                   xinit@exp1   -22.2378   (estimated) in [-Inf, Inf]
    x(5)   Angular velocity of robot arm(t) [rad/s]                                  xinit@exp1   -23.4169   (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.266501      0.000286954   (estimated) in [0, Inf]                     
    p8    a_g  : Gear-box moment of inertia scale factor       0.647571      0.000190591   (estimated) in [0, Inf]                     
    p9    k_g1 : Gear-box stiffness parameter 1                 20.0776        0.0263497   (estimated) in [0, Inf]                     
    p10   k_g3 : Gear-box stiffness parameter 3                  24.182         0.332381   (estimated) in [0, Inf]                     
    p11   d_g  : Gear-box damping parameter                   0.0305093      0.000282675   (estimated) in [0, Inf]                     
    p12   k_a  : Arm structure stiffness parameter               11.749        0.0310964   (estimated) in [0, Inf]                     
    p13   d_a  : Arm structure damping parameter             0.00283252      8.05227e-05   (estimated) in [0, Inf]                     
                                                                                                                                       
Name: Robot arm                                                                                                                        
                                                                                                                                       
Status:                                                                                                                                
Termination condition: Change in parameters was less than the specified tolerance..                                                    
Number of iterations: 19, Number of function evaluations: 20                                                                           
                                                                                                                                       
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.                                                                                         

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

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