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