机器人运动学参数辨识(DH参数误差标定)

0. 前言

用于辨识几何参数误差的方法众多,其中较为常用的是最小二乘法和智能搜索算法。本文基于MDH参数建立两岸坐标系,不清楚的可以参考机器人修正DH参数(MDH)和标准DH(SDH)参数这篇文章

1. 全微分几何参数误差模型

根据建立的机器人MDH模型,机器人相邻关节坐标系之间的齐次变换矩阵表示为:
i i − 1 T = R X ( α i − 1 ) D X ( a i − 1 ) R Z ( θ i ) D Z ( d i ) = [ c θ i − s θ i 0 a i − 1 s θ i c α i − 1 c θ i c α i − 1 − s α i − 1 − s α i − 1 d i s θ i s α i − 1 c θ i s α i − 1 c α i − 1 c α i − 1 d i 0 0 0 1 ] (1) \begin{aligned} _i^{i-1}T&=R_X(\alpha_{i-1})D_X(a_{i-1})R_Z(\theta_i)D_Z(d_i)\\&=\begin{bmatrix}c\theta_i&-s\theta_i&0&a_{i-1}\\s\theta_ic\alpha_{i-1}&c\theta_ic\alpha_{i-1}&-s\alpha_{i-1}&-s\alpha_{i-1}d_i\\s\theta_is\alpha_{i-1}&c\theta_is\alpha_{i-1}&c\alpha_{i-1}&c\alpha_{i-1}d_i\\0&0&0&1\end{bmatrix}\end{aligned}\tag{1} ii1T=RX(αi1)DX(ai1)RZ(θi)DZ(di)= cθisθicαi1sθisαi10sθicθicαi1cθisαi100sαi1cαi10ai1sαi1dicαi1di1 (1)
如果按照上述方法将连杆坐标系固定于连杆上时,连杆的几何参数可以定义为

  1. a i − 1 a_{i-1} ai1:沿 X ˆ i − 1 \^X_{i-1} Xˆi1轴,从 Z ˆ i − 1 \^Z_{i-1} Zˆi1移动到 Z ˆ i \^Z_{i} Zˆi的距离,通常取正值;
  2. α i − 1 \alpha_{i-1} αi1:绕 X ˆ i − 1 \^X_{i-1} Xˆi1轴,从 Z ˆ i − 1 \^Z_{i-1} Zˆi1旋转到 Z ˆ i \^Z_{i} Zˆi的角度,采用右手法则判断正负;
  3. d i d_i di:沿 Z ˆ i \^Z_{i} Zˆi轴,从 X ˆ i − 1 \^X_{i-1} Xˆi1移动到 X ˆ i \^X_{i} Xˆi的距离;
  4. θ i \theta_i θi:绕 Z ˆ i \^Z_{i} Zˆi轴,从 X ˆ i − 1 \^X_{i-1} Xˆi1旋转到 X ˆ i \^X_{i} Xˆi的角度,采用右手法则判断正负;

几何参数的微小误差影响各关节的齐次变换矩阵,设四个运动学参数的微小误差值为 δ θ i \delta\theta_i δθi, δ d i \delta d_i δdi, δ α i − 1 \delta \alpha_{i-1} δαi1, δ a i − 1 \delta a_{i-1} δai1
对旋转变换矩阵进行全微分,由于几何参数误差本身就属于微小误差,忽略高阶误差得:
d ( i i − 1 T ) = ∂ i i − 1 T ∂ a i − 1 Δ a i − 1 + ∂ i i − 1 T ∂ α i − 1 Δ α i − 1 + ∂ i i − 1 T ∂ d i Δ d i + ∂ i i − 1 T ∂ θ i Δ θ i d(^{i-1}_iT)=\frac{\partial^{i-1}_iT}{\partial a_{i-1}}\Delta a_{i-1}+\frac{\partial^{i-1}_iT}{\partial\alpha_{i-1}}\Delta\alpha_{i-1}+\frac{\partial^{i-1}_iT}{\partial d_i}\Delta d_{i}+\frac{\partial^{i-1}_iT}{\partial\theta_i}\Delta\theta_{i} d(ii1T)=ai1ii1TΔai1+αi1ii1TΔαi1+diii1TΔdi+θiii1TΔθi
机器人第i关节位置误差和几何参数的关系:
d ( P i ) = ∂ P i ∂ a i − 1 Δ a i − 1 + ∂ P i ∂ α i − 1 Δ α i − 1 + ∂ P i ∂ d i Δ d i + ∂ P i ∂ θ i Δ θ i d(P_i)=\frac{\partial P_i}{\partial a_{i-1}}\Delta a_{i-1}+\frac{\partial P_i}{\partial\alpha_{i-1}}\Delta\alpha_{i-1}+\frac{\partial P_i}{\partial d_i}\Delta d_{i}+\frac{\partial P_i}{\partial\theta_i}\Delta\theta_{i} d(Pi)=ai1PiΔai1+αi1PiΔαi1+diPiΔdi+θiPiΔθi
机器人第i关节姿态误差和几何参数的关系:
δ i = ∂ O i ∂ a i − 1 Δ a i − 1 + ∂ O i ∂ α i − 1 Δ α i − 1 + ∂ O i ∂ d i Δ d i + ∂ O i ∂ θ i Δ θ i \delta_i=\frac{\partial O_i}{\partial a_{i-1}}\Delta a_{i-1}+\frac{\partial O_i}{\partial\alpha_{i-1}}\Delta\alpha_{i-1}+\frac{\partial O_i}{\partial d_i}\Delta d_{i}+\frac{\partial O_i}{\partial\theta_i}\Delta\theta_{i} δi=ai1OiΔai1+αi1OiΔαi1+diOiΔdi+θiOiΔθi
把两者组合起来可写作雅可比行列式形式:
Δ X i = [ d P i δ i ] = Ψ i Δ ξ i \left.\Delta X_i=\left[\begin{array}{c}dP_{i}\\\delta_{i}\end{array}\right.\right]=\Psi_i\Delta\xi_i ΔXi=[dPiδi]=ΨiΔξi
式中, d P i = [ d x i , d y i , d z i ] T dP_i=[dx_i ,dy_i ,dz_i]^T dPi=[dxi,dyi,dzi]T Δ ξ i = [ Δ a i − 1 , Δ α i − 1 , Δ d i , Δ θ i ] T \Delta\xi_i=[\Delta a_{i-1} ,\Delta\alpha_{i-1},\Delta d_i, \Delta\theta_i]^T Δξi=[Δai1,Δαi1,Δdi,Δθi]T δ i = [ δ x i , δ y i , δ z i ] T \delta_i=\begin{bmatrix}\delta x_i,\delta y_i,\delta z_i\end{bmatrix}^T δi=[δxi,δyi,δzi]T Ψ i \Psi_i Ψi是一个6*4的矩阵

1.1 末端位置全微分

由于位置变换是平移变换,所以总的位置误差可以由各关节误差累加得到:
d P n = [ d x d y d z ] = [ M a M α M d M θ ] [ Δ a Δ α Δ d Δ θ ] (2) dP_n=\begin{bmatrix}dx\\dy\\dz\end{bmatrix}=\begin{bmatrix}M_a&M_\alpha&M_d&M_\theta\end{bmatrix}\begin{bmatrix}\Delta a\\\Delta\alpha\\\Delta d\\\Delta\theta\end{bmatrix} \tag{2} dPn= dxdydz =[MaMαMdMθ] ΔaΔαΔdΔθ (2)
d P n dP_n dPn表示机器人末端位置的偏差值, M a , M α , M d , M θ M_a,M_\alpha,M_d,M_\theta Ma,Mα,Md,Mθ为3*n矩阵,是机器人的运动学参数偏差的系数矩阵,对应着上述对应下标为i时雅可比矩阵的前三行 Δ a , Δ α , Δ d , Δ θ \Delta a,\Delta\alpha,\Delta d,\Delta\theta Δa,Δα,Δd,Δθ时机器人运动学的参数偏差,其中 Δ a = [ Δ a 1 , Δ a 2 , . . . , Δ a n ] T \Delta a=[\Delta a_1,\Delta a_2,...,\Delta a_n]^T Δa=[Δa1,Δa2,...,Δan]T,其他三个参数同理。

1.2 末端姿态全微分

δ n = [ δ x δ y δ z ] = [ M a M α M d M θ ] [ Δ a Δ α Δ d Δ θ ] (3) \delta_n=\begin{bmatrix}\delta x\\\delta y\\\delta z\end{bmatrix}=\begin{bmatrix}M_a&M_\alpha&M_d&M_\theta\end{bmatrix}\begin{bmatrix}\Delta a\\\Delta\alpha\\\Delta d\\\Delta\theta\end{bmatrix} \tag{3} δn= δxδyδz =[MaMαMdMθ] ΔaΔαΔdΔθ (3)
δ n \delta_n δn表示机器人末端姿态的偏差值, M a , M α , M d , M θ M_a,M_\alpha,M_d,M_\theta Ma,Mα,Md,Mθ为3*n矩阵,是机器人的运动学参数偏差的系数矩阵,对应着上述对应下标为i时雅可比矩阵的后三行 Δ a , Δ α , Δ d , Δ θ \Delta a,\Delta\alpha,\Delta d,\Delta\theta Δa,Δα,Δd,Δθ时机器人运动学的参数偏差,其中 Δ a = [ Δ a 1 , Δ a 2 , . . . , Δ a n ] T \Delta a=[\Delta a_1,\Delta a_2,...,\Delta a_n]^T Δa=[Δa1,Δa2,...,Δan]T,其他三个参数同理。

1.3 末端位姿全微分

结合前面所述,位姿全微分可写为:
Δ X n = [ d P n δ n ] = Ψ Δ ξ (4) \left.\Delta X_n=\left[\begin{array}{c}dP_{n}\\\delta_{n}\end{array}\right.\right]=\Psi \Delta\xi \tag{4} ΔXn=[dPnδn]=ΨΔξ(4)
其中
- d P n dP_n dPn:(3x1)来自 T n T_n Tn第四列的位置偏差
- δ n \delta_n δn:(3x1)来自旋转矩阵 R n R_n Rn的姿态偏差
- Ψ \Psi Ψ:(6x(nx4))广义雅可比矩阵
- Δ ξ \Delta \xi Δξ:(nx4)n个关节的几何参数偏差

2 机器人运动学参数辨识算法

2.1 偏差辨识流程

流程如下:
在这里插入图片描述

2.2 最小二乘法

以位置误差为例:多组位置误差数据构建的几何参数误差模型是超定方程,公式(4)的微分几何参数误差模型实际上是一个线性方程组,包含3个线性方程,方程中的位置误差 Δ P n \Delta P_n ΔPn可以通过测量直接得到,nx4个几何误差是未知数,需要对多个位置进行测量构建超定方程组,从而求几何参数误差的近似解,以六轴机器人为例,共有24个几何误差未知数,而一个点的位置误差可以增加三个求解条件(即x,y,z),所以至少需要8组位置误差数据才能求解,而实际中应采集的点数应该大于这个数。
公式(4)可以写成 A x = b Ax=b Ax=b的形式,辨识机器人运动学参数的具体误差就是求出 x x x的值。如果矩阵 A 是可逆的,可以直接计算出 x 的值: x = A − 1 ⋅ b x=A^{-1}\cdot b x=A1b。但是为了辨识机器人的运动学参数偏差,矩阵 A 的行数(采集点的数量*3)总是会大于列数(需要辨识的参数),也就是待求解参数的数量小于方程的数量,不能通过矩阵的逆运算求取机器人的运动学参数偏差,则需要通过最小二乘法来求取。

最小二乘法的具体过程如下:
在这里插入图片描述
在这里插入图片描述
结合(4)式,这里用最小二乘法求得的运动学参数偏差可以写为如下形式:
Δ ξ = ( Ψ T Ψ ) − 1 Ψ T Δ P ^ \Delta\xi=(\Psi^T\Psi)^{-1}\Psi^T \Delta \hat{P} Δξ=(ΨTΨ)1ΨTΔP^
由于最小二乘法只进行一次计算,所以使用该方法进行参数辨识时可以和迭代 方法结合,从而减少位置误差,提高参数辨识效果
在这里插入图片描述

2.3 机器人定位误差补偿

根据辨识得 到的机器人运动学参数偏差值和机器人运动到期望位姿的各个关节的理论关节角,可以 计算出机器人在该目标位置的位姿偏差 Δ T \Delta T ΔT ,使用期望位姿减去该位姿偏差就可以得到 补偿后的位姿,将 补偿后的位姿赋予机器人控制器可使机器人运动到期望位置,笛卡尔空间补偿法,如图所示:
在这里插入图片描述

3 参考文献

[1] 闻了然和张方, 《机器人运动学模型参数修正》, 数字技术与应用, 卷 41, 期 4, 页 1-4+29, 2023.
[2] 潘钊, 《基于机器学习的工业机器人位置误差标定研究》, 华中科技大学, 2022.
[3] 郭哲, 《垂直六关节工业机器人运动学参数标定》, 东南大学, 2019.

  • 15
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于固定点约束的机器人运动学参数标定代码的简单示例。代码使用MATLAB编写,需要使用Robotics Toolbox for MATLAB进行运算。 首先,我们需要定义机器人DH参数和关节角度,以及机器人的初始姿态。 ```matlab % Define robot parameters L1 = Link('d', 0.5, 'a', 0, 'alpha', pi/2); L2 = Link('d', 0, 'a', 0.5, 'alpha', 0); robot = SerialLink([L1 L2], 'name', 'robot'); % Define joint angles and initial pose q = [0.5, 0]; T = robot.fkine(q); ``` 然后,我们需要定义机器人的固定点,并将它们转换为机器人坐标系中的坐标。 ```matlab % Define fixed points in robot base frame P1 = [0.1, 0.1, 0.1]; P2 = [0.1, -0.1, 0.1]; P3 = [-0.1, -0.1, 0.1]; % Transform fixed points to robot coordinate frame P1 = T * [P1, 1]'; P2 = T * [P2, 1]'; P3 = T * [P3, 1]'; ``` 接下来,我们可以使用机器人的正逆运动学函数来计算机器人的末端执行器位置和姿态,并将其转换为机器人坐标系中的坐标。然后,我们可以使用固定点的坐标和机器人末端执行器的坐标来计算误差。 ```matlab % Calculate robot end-effector position and orientation T = robot.fkine(q); p = T.t; R = T.R; % Transform end-effector position to robot coordinate frame p = T * [p, 1]'; % Calculate error between fixed points and end-effector position e1 = P1(1:3) - p(1:3); e2 = P2(1:3) - p(1:3); e3 = P3(1:3) - p(1:3); ``` 最后,我们可以使用误差来计算机器人运动学参数,并进行迭代计算,直到误差收敛到一个可接受的范围。 ```matlab % Initialize robot parameters a1 = 0.5; a2 = 0.5; % Calculate Jacobian matrix J = robot.jacob0(q); % Iterate until error is small enough while norm([e1, e2, e3]) > 0.001 % Calculate delta_a using pseudoinverse delta_a = pinv(J) * [e1; e2; e3]; % Update robot parameters a1 = a1 + delta_a(1); a2 = a2 + delta_a(2); % Update robot DH parameters robot.links(1).a = a1; robot.links(2).a = a2; % Recalculate Jacobian matrix J = robot.jacob0(q); % Calculate error between fixed points and end-effector position e1 = P1(1:3) - p(1:3); e2 = P2(1:3) - p(1:3); e3 = P3(1:3) - p(1:3); end ``` 这是一个非常简单的机器人运动学参数标定代码示例,实际应用中可能需要更复杂的算法和方法来提高精度和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值