主要内容

工业机器人手臂的建模

该实例展示了工业机器人手臂动力学的灰箱建模。根据图1,用非线性三质量柔性模型描述机器人手臂。这个模型是理想化的,因为它假定运动是围绕一个不受重力影响的轴进行的。为简便起见,在齿轮传动比r = 1的情况下进行建模,然后通过直接缩放真实的齿轮传动比得到真实的物理参数。下面详细的建模和识别实验是基于发表于

E. Wernholt和S. Gunnarsson。物理参数化机器人模型的非线性辨识。第14届IFAC系统识别研讨会预印本,143-148页,澳大利亚纽卡斯尔,2006年3月。

图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) =阵线* x3 (t) + (Fc + Fcs *双曲正割(α* x3 (t))) *双曲正切(β* x3 (t))

其中,Fv和Fc为粘性系数和库仑摩擦系数,Fcs和alpha为反映Stribeck效应的系数,beta为用于获得x3(t)从负速度平滑过渡到正速度的参数。(类似的方法,但基于稍微不同的模型结构,用于描述速度和摩擦扭矩/力之间的静态关系,将在idnlgreydemo5教程中进一步讨论:“摩擦的静态建模”。)

弹簧的扭矩tau_s(t),假设用x1(t)中没有平方项的三次多项式描述:

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

其中k_g1和k_g3是变速箱弹簧的两个刚度参数。

Wernholt和Gunnarsson在文中讨论的其他类型的识别实验中,可以识别出总惯性矩J = J_m+J_g+J_a。这样,我们就可以引入未知的缩放因子a_m和a_g,并执行以下的重新参数化:

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

其中(如果J已知)只需要估计a_m和a_g。

总而言之,这给出了如下的状态空间结构,包括13个不同的参数:Fv, Fc, Fcs, alpha, beta, J, a_m, a_g, k_g1, k_g3, d_g, k_a和d_a。(根据定义,我们还使用了sech(x) = 1/cosh(x)这一事实。)

tau_f (t) =阵线* x3 (t) + (Fc + Fcs / cosh(α* x3 (t))) *双曲正切(β* 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机器人手臂模型对象

上面的模型结构被输入到一个名为robotarm_c.c的C mex文件中,使用如下的状态和输出更新函数(整个文件可以通过命令“type robotarm_c.c”查看)。在状态更新函数中,请注意,我们在这里使用了两个中间双变量,一方面是为了增强方程的可读性,另一方面是为了提高执行速度(taus出现在方程中两次,但只计算一次)。

/ *状态方程。*/ void compute_dx(double *dx, double *x, double *u, double **p){/*模型参数和中间变量声明。* /双*阵线,* Fc, * Fcs, *α,β*,*,*,*,* kg1, * kg3, * dg, * ka, *达;双taufτ子;/ *中间变量。*/
/*获取模型参数。*/ Fv = p[0];/*粘性摩擦系数。*/ Fc = p[1];/*库仑摩擦系数。*/ Fcs = p[2];/* Striebeck摩擦系数。*/ alpha = p[3];/* Striebeck平滑系数。*/ 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. */
/*确定中间变量。*/ /* tauf:齿轮摩擦扭矩。(双曲正割(x) = 1 / cosh (x) !*/ /* taus:弹簧扭矩。* / tauf =阵线[0]* x [2] + (Fc [0] + Fcs [0] / (cosh(α[0]* x[2]))) *双曲正切(β[0]* x [2]);τ= kg1 [0] * x [0] + kg3[0] *战俘(x [0], 3);
/* x[0]:电机与齿轮箱的转速差。*/ /* x[1]:变速箱与臂之间的转速差。*/ /* x[2]:电机转速。*/ /* x[3]:变速箱后的转速。*/ /* x[4]:机器人手臂的转动速度。*/ dx[0] = x[2]-x[3];dx [1] = x [3] - x [4];dx [2] = 1 / (J [0] * [0]) * (-taus-dg [0] * (x [2] - x [3]) -tauf + u [0]);dx [3] = 1 / (J [0] * ag)[0]) *(τ+ dg [0] * (x [2] - x [3]) - ka [0] * x [1] - da [0] * (x [3] - x [4]));dx [4] = 1 / (J[0] *(1.0是[0]ag) [0])) * (ka [0] * x [1] + da [0] * (x [3] - x [4])); }
/ *输出方程。*/ void compute_y(double y[], double x[]) {/* y[0]:电机的转速。*/ y = x;}

下一步是创建反映建模情况的IDNLGREY对象。需要注意的是,为机器人手臂找到合适的初始参数值需要一些额外的努力。在Wernholt和Gunnarsson的论文中,这是在前面的两个步骤中完成的,其中使用了其他模型结构和识别技术。下面使用的初始参数值是这些识别实验的结果。

文件名=“robotarm_c”描述模型结构的文件。订单= [1 1 5];模型订单[ny nu nx]。参数= [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];%初始参数向量。InitialStates = 0 (5, 1);%初始状态。t = 0;%的时间连续系统。nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts,...“名字”机器人手臂的...“InputName”应用电动机转矩的...“InputUnit”“纳米”...“OutputName”“电机角速度”...“OutputUnit”“rad / s”...“TimeUnit”“年代”);

为了更好地记帐,提供了州的名称和单位:

nlgr = setinit (nlgr,“名字”, {“电机与变速箱的角度位置差”...“齿轮箱和手臂的角度位置差异”...“电机角速度”...“变速箱角速度”...“机器臂的角速度”} ');nlgr = setinit (nlgr,“单位”, {rad的rad的“rad / s”“rad / s”“rad / s”});

还详细指定了参数名称。此外,建模是这样一种方式,所有的参数都应该是正的,即每个参数的最小值应该设置为0(因此以后将进行约束估计)。与Wernholt和Gunnarsson的论文一样,我们也认为前6个参数(即Fv、Fc、Fcs、alpha、beta和J)非常好,不需要估计。

nlgr = setpar (nlgr,“名字”, {‘Fv:粘性摩擦系数’...% 1。“Fc:库仑摩擦系数”...% 2。‘Fcs: Striebeck摩擦系数’...% 3。alpha: Striebeck平滑系数...% 4。“beta:摩擦平滑系数”...% 5。J:总惯性矩...% 6。'a_m:电机转动惯量比例因子'...% 7。'a_g:变速箱惯性矩比例系数'...% 8。'k_g1:变速箱刚度参数1'...% 9。'k_g3:变速箱刚度参数3'...% 10。'd_g:变速箱阻尼参数'...% 11。'k_a:臂结构刚度参数'...% 12。'd_a:臂结构阻尼参数'...% 13。});nlgr = setpar (nlgr,“最低”num2cell(0(大小(nlgr“np”), 1)));%所有参数>= 0!parno = 1:6%修改前6个参数。nlgr.Parameters (parno)。固定= true;结束

通过目前所进行的建模步骤,我们得到了一个初始的机器人手臂模型,其属性如下:

礼物(nlgr);
nlgr =由'robotarm_c'定义的连续时间非线性灰箱模型(MEX-file): dx/dt = F(t, u(t), x(t), p1,…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.

输入输出数据

从实验机器人中收集了大量的真实数据集。为了让机器人保持在其工作点附近,同时也是出于安全考虑,数据是使用实验反馈控制安排收集的,随后允许离线计算关节控制器的参考信号。

在本案例研究中,我们将继续讨论4个不同的数据集,一个用于估计,其余的用于验证目的。在每一种情况下,一个周期激励信号的持续时间约为10秒,以产生控制器的参考速度。选择的采样频率为2 kHz(采样时间,Ts, = 0.0005秒)。对于数据集,使用了三种不同类型的输入信号:(ue:估计数据集的输入信号;Uv1, uv2, uv3:三组验证数据的输入信号)

ue, uv1:频率范围为1- 40hz的平幅频谱,峰值为16 rad/s的多正弦信号。多正弦信号叠加在振幅为20 rad/s、截止频率为1 Hz的滤波方波上。
uv2:类似于ue和uv1,但没有方波。
uv3:多正弦信号(正弦信号之和),频率为0.1,0.3,0.5 Hz,峰值为40 rad/s。

让我们加载可用的数据,并将所有四个数据集放入一个IDDATA对象z中:

负载(fullfile (matlabroot“工具箱”“识别”“iddemos”“数据”“robotarmdata”));Z = iddata({ye yv1 yv2 yv3}, {ue uv1 uv2 uv3}, 0.5e-3,“名字”机器人手臂的);z.InputName =应用电动机转矩的;z.InputUnit =“纳米”;z.OutputName =“电机角速度”;z.OutputUnit =“rad / s”;z.ExperimentName = {“估计”“验证1”《验证2》'验证3 '};z.Tstart = 0;z.TimeUnit =“年代”;礼物(z);
th =包含4个实验的时域数据集。名称:机械臂输出单位(如指定)电机角速度rad/s输入单位(如指定)应用电机扭矩Nm

下图是四个实验的输入输出数据。

图(“名字”[z。的名字:输入输出数据的],...“DefaultAxesTitleFontSizeMultiplier”,1,...“DefaultAxesTitleFontWeight”“正常”...“位置”,[100 100 900 600]);i = 1: z。nezi = getexp(z, i); / /输入z次要情节(z。不2张2 *);%的输入。情节(zi.u);标题([z。ExperimentName{我}“:”子。InputName {1}),“FontWeight”“正常”);如果(i < z.Ne) xlabel('');其他的包含([z。域“(”子。TimeUnit“)”]);结束次要情节(z。Ne、2、2 *我);%输出。情节(zi.y);标题([z。ExperimentName{我}“:”子。OutputName {1}),“FontWeight”“正常”);如果(i < z.Ne) xlabel('');其他的包含([z。域“(”子。TimeUnit“)”]);结束结束

图2:测量实验机械臂的输入输出数据。

初始机器人手臂模型的性能

最初的机器人手臂模型有多好?让我们使用COMPARE来模拟模型输出(对于所有四个实验),并将结果与相应的测量输出进行比较。对于所有四个实验,我们知道前两个状态的值是0(固定),而其余三个状态的值最初设置为在开始时间的测量输出(不固定)。然而,默认情况下COMPARE估计所有初始状态,而z拥有4个不同的实验,这意味着需要估计4*5 = 20个初始状态。即使在确定了前两种状态后,4*3 = 12种初始状态仍然需要估计(如果遵循内部模型初始状态策略)。因为数据集相当大,这将导致冗长的计算,为了避免这种情况,我们估计4 * 3免费组件使用预测的初始状态(可能如果初始状态作为初始状态传递结构),但限制估计前10:th可用的数据。然后,我们指示COMPARE使用得到的5 × 4初始状态矩阵X0init,而不执行任何初始状态估计。

zr = z(1:圆形(zi.N / 10));nlgr = setinit (nlgr,“固定”,{真真假假假});X0 = nlgr.InitialStates;(X0。值]=交易(0(1、4),0(1、4),(你们(1)yv1 (1) yv2 (1) yv3(1)]。...[你们(1)yv1 (1) yv2 (1) yv3(1)]、[你们(1)yv1 (1) yv2 (1) yv3 (1)]);[~, X0init] = predict(zred, nlgr, [], X0);nlgr = setinit (nlgr,“价值”, num2cell (X0init (: 1)));[], compareOptions()“InitialCondition”X0init));

图3:初始机械臂模型的测量输出与仿真输出比较。

可以看出,初始机器人手臂模型的性能还算不错或相当不错。三种数据集的适合度分别为ye和yv1约79%,yv2约37%,yv3约95%。注意,由于初始模型能够捕获方波,相对于yv2,对ye/yv1更适合,而对多正弦部分的捕获不一样好。我们还可以看看这四个实验的预测误差:

pe (z, nlgr peOptions (“InitialCondition”X0init));

图4:初始机器人手臂模型的预测误差。

参数估计

现在让我们尝试通过估计z(估计数据集)的第一次实验的7个自由模型参数和3个自由初始状态来改进初始机器人手臂模型的性能。这个估计需要一些时间(通常是几分钟)。

nlgr = nlgreyest(nlgr, getexp(z, 1), nlgreyestOptions(“显示”“上”));

估计机器人手臂模型的性能

再次使用COMPARE来评估估计的机器人手臂模型的性能。我们还在这里指示COMPARE不要执行任何初始状态估计。在第一个实验中,我们用NLGREYEST估计的初始状态替换猜测的初始状态,而在剩下的三个实验中,我们使用PREDICT基于简化的IDDATA对象zred估计初始状态。

X0init(:, 1) = cell2mat(getinit(nlgr, 1))“价值”));X0 = nlgr.InitialStates;(X0。值]=交易(0 (1,3),0 (1,3),[yv1 (1) yv2 (1) yv3(1)]。...[yv1(1) yv2(1) yv3(1)], yv1(1) yv2(1) yv3(1)];[yp X0init(: 2:4)] =预测(getexp (zr, 2:4) nlgr, [], X0);[], compareOptions()“InitialCondition”X0init));

图5:估计的机器人手臂模型的测量输出与仿真输出的比较。

比较图显示了在更好的拟合方面的改进。对于ye和yv1来说,现在的适合度大约是85%(以前是79%),yv2大约是63%(以前是37%),yv3略低于95.5%(以前也是略低于95.5%)。这种改进在第二个验证数据集中表现得最为明显,其中使用了一个没有任何方波的多正弦信号作为输入。然而,估计模型跟踪ye和yv1的多正弦部分的能力也得到了相当大的改善(但这并没有反映在拟合数据中,因为这些数据更受方波拟合的影响)。预测误差图还显示,残差现在总体上小于初始机器人手臂模型:

图;pe (z, nlgr peOptions (“InitialCondition”X0init));

图6:估计机器人手臂模型的预测误差。

通过对估计的机械臂模型的各种性质的文本总结,总结了案例研究。

礼物(nlgr);
nlgr =由'robotarm_c'定义的连续时间非线性灰箱模型(MEX-file): dx/dt = F(t, u(t), x(t), p1,…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.0628 (estimated) in [-Inf, Inf] x(4) Angular velocity of gear-box(t) [rad/s] xinit@exp1 -22.2383 (estimated) in [-Inf, Inf] x(5) Angular velocity of robot arm(t) [rad/s] xinit@exp1 -23.4158 (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.266503 0.000286957 (estimated) in [0, Inf] p8 a_g : Gear-box moment of inertia scale factor 0.64757 0.000190568 (estimated) in [0, Inf] p9 k_g1 : Gear-box stiffness parameter 1 20.0778 0.0263498 (estimated) in [0, Inf] p10 k_g3 : Gear-box stiffness parameter 3 24.1819 0.332387 (estimated) in [0, Inf] p11 d_g : Gear-box damping parameter 0.030508 0.000282668 (estimated) in [0, Inf] p12 k_a : Arm structure stiffness parameter 11.7489 0.0310951 (estimated) in [0, Inf] p13 d_a : Arm structure damping parameter 0.00283225 8.05175e-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.

结束语

系统识别技术在机器人技术中得到广泛应用。“好的”机器人模型对于现代机器人控制概念至关重要,通常被认为是满足不断增长的速度和精度要求的必要条件。在各种机器人诊断应用中,这些模型也是至关重要的组成部分,这些模型用于预测与磨损有关的问题,并用于检测机器人故障的实际原因。