В этом примере показано моделирование динамики руки промышленного робота в сером ящике. Рука робота описана нелинейной гибкой моделью с тремя массами согласно фиг.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 и альфа - коэффициенты для отражения эффекта Стрибека, а бета - параметр, используемый для получения плавного перехода от отрицательных к положительным скоростям x3 (t). (Аналогичный подход, но основанный на несколько иной структуре модели, для описания статической взаимосвязи между скоростью и крутящим моментом/силой трения рассматривается далее в учебном пособии idngreydemo5 «Статическое моделирование трения».)
Предполагается, что крутящий момент пружины 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/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)^3d/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)
Приведенная выше структура модели вводится в C MEX-файл с именем 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: Измеренные данные ввода-вывода экспериментальной руки робота.
Насколько хороша начальная модель руки робота? Для моделирования выходных данных модели (для всех четырех экспериментов) и сравнения результата с соответствующими измеренными выходами используйте команду СРАВНИТЬ. Для всех четырех экспериментов известно, что значения первых двух состояний равны 0 (фиксированные), в то время как значения остальных трех состояний первоначально устанавливаются на измеренный выходной сигнал в момент начала (нефиксированные). Однако по умолчанию COMPARE оценивает все начальные состояния, и при z, содержащем четыре различных эксперимента, это будет означать 4 * 5 = 20 начальные состояния для оценки. Даже после фиксации первых двух состояний, 4 * 3 = 12 начальные состояния остаются для оценки (в случае, если выполняется внутренняя модель начальной стратегии состояния). Поскольку набор данных довольно велик, это приведет к длительным вычислениям, и чтобы избежать этого, мы оцениваем 4 * 3 свободные компоненты начальных состояний с помощью PREDICT (возможно, если начальное состояние передается как структура начального состояния), но ограничиваем оценку первой 10: й из доступных данных. Затем мы даем команду 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.
Методы идентификации систем широко используются в робототехнике. Модели «хороших» роботов жизненно важны для современных концепций управления роботами и часто рассматриваются как необходимость удовлетворения постоянно возрастающего спроса на скорость и точность. Модели также являются важными компонентами в различных приложениях для диагностики роботов, где модели используются для прогнозирования проблем, связанных с износом, и для обнаружения фактической причины неисправности робота.