学习了相关运动学参数辨识的内容,再次汇总记录,欢迎批评指正。
1 什么是DH标定
机械臂从理论图纸设计到加工组装完成之后,我们需要对其进行运动学建模,可以使用MDH/SDH或者POE的方式。假设采样MDH建模,那么需要四个参数,但是实际值与理论值肯定存在偏差。
机器人的几何参数误差主要包括关节转角误差、连杆长度误差、连杆扭角误差和连杆偏置误差等。
在这些几何参数误差中,连杆长度误差和连杆偏置误差是机器人的各个连杆在制造加工和装配时,由于精度因素从而导致的误差;关节转角误差是因为编码器的零位误差所造成的转角误差;连杆扭角是由于相邻的关节轴线间的垂直度或平行度的偏差所形成的误差。
当然除了几何误差,还有非几何误差,机器人在不同环境、不同负载下工作产生的,受自身材料的限制,机器人受力受热会发生变形,实际模型会动态变化,因此这类误差通常被称为非几何参数误差,本文不做考虑。
有研究表示其中<font color="#f79646">几何误差</font>占比80%左右。所谓运动学参数辨识,DH标定,就是辨识上述几何参数的误差,进而提高机器人的定位精度。
2 辨识步骤
在机器人进行标定的过程中,运动学模型的选择以及标定过程中所使用的方法对标定起着至关重要的作用,机器人参数标定一般分为四个步骤:
1 ) 建模 通过建立相应模型来描述其特性;
2 ) 测量 通过一定的设备或者手段对机器人的多个不同位姿进行精确测量,测量设备可以是高精度相机或者激光仪等;
3 ) 参数辨识 通过建立的误差模型,对误差参数进行有效的识别;误差模型的建立是关键;
4 ) 误差补偿 通过将上步骤得到的误差参数修正到模型中对应的参数,使得模型中的参数更加接近真实值,以便机器人能够更将精确地到达指定位置。
其中,建模/测量/参数补偿不在本文讨论中,本文主要记录参数辨识的误差模型建立和相关算法。
3 误差模型
误差的来源是几个尺寸误差以及位置零位误差。
误差模型有多种,主要包括
- 几何误差模型
根据机器人的运动学方程推导机器人末端误差模型,包括
- 静态误差模型:只考虑连杆参数等静态误差因素
- 动态误差模型: 如运动时振动 变形等
- <font color="#f79646">需要知道机器人基坐标与测量坐标之间的关系</font>
- 距离误差模型
采用两点之间的相对距离描述机器人末端的定位精度,充分利用测量系统的精度,<font color="#f79646">不需要知道机器人基坐标和测量坐标系之间关系</font>
- 概率误差模型
- 误差因素采用随机变量来描述所建立的机器人运动模型。通过 Monte Carlo 方法或积分法来确定机器人末端在相应误差范围内的概率值,然后得到机器人的位姿误差在机器人工作空间的分布情况。
由于机器人各关节之间强耦合,当机器人的位置精度提高时,末端姿态精度也会相应提高。因此在大部分的论文研究中只考虑位置误差。
3.1 误差模型
我们知道采用MDH方法建立两个两杆之间的齐次变换矩阵为
两边取参数的偏导,由于几何参数误差较小,因为微分模型等于误差模型,当然如果误差比较大的话辨识后效果较差,但是,误差那么大,还叫误差吗?那成错误了。误差是指在一定范围内可以通过算法数据拟合进而减小理论与实际之间的差值,是一种优化方法。
然后将每一项改成类似的形式
可有得到系数矩阵
matlab具体求解代码实现
clc
clear
T = MDH_transform_sym();
invT = inv(T);
syms a alpha_ d theta real
grad_T = jacobian(T(:), [theta, alpha_, d, a]);
grad_T = reshape(grad_T, size(T,1), size(T,2), []);
grad_theta = grad_T(:,:,1);
grad_alpha = grad_T(:,:,2);
grad_d = grad_T(:,:,3);
grad_a = grad_T(:,:,4);
U_theta = invT * grad_theta;
U_theta = simplify(U_theta);
U_alpha = invT * grad_alpha;
U_alpha = simplify(U_alpha);
U_d = invT * grad_d
U_d = simplify(U_d)
U_a = invT * grad_a
U_a = simplify(U_a)
整理得到,并将上述的系数矩阵U代入
这个式子很有意思,上三角为斜对称矩阵。为什么呢?
我们看下微分运动,已知绕XYZ的旋转矩阵为
假设进行欧拉角XYZ的连续旋转,RXRYRZ相乘,并加入偏移,得到
当角度很小时,sin=0,cos=1,上式简化为
也就是
3.2 误差函数
此时,有两种方法。
一种是通过误差传递矩阵,伴随矩阵,将误差传递至末端,具体实现为
这样对于一个测量点,加入关节数量为6,那么可以组成矩阵 [6x1] = [6x24] [24x1]
对于m个测量点,组成[6mx1] = [6mx24] [24x1]
[24x1]为待辨识的误差项,可以通过最小二乘计算得到。
另一种方法是根据运动学推算。
同样可以组成系数矩阵,构造Ax=B式子。但是有一点需要注意的是,姿态,无法通过过程中的系数矩阵组合成轴角或者欧拉角。也就是上式对于位置误差是适用的。姿态误差有待考证,有知道的小伙伴可评论留言,对于式子中的A的姿态误差是如何求出的。
4 辨识算法
LM 自适应补偿 **Levenberg-Marquardt算法** (LM Algorithm)
- 最小二乘的改进,将最速下 降法与高斯-牛顿法相结合,具有很强的局部收敛性,收敛速度快,且具有很好的鲁棒性,但是其空间复杂度较大,需要消耗较高的内存资源。
<font color="#f79646">最小二乘法 </font> (Least Squares Method)(最常用)
- 方法迭代简单,收敛较快,无需考虑系统或者噪声影响,但计算量大
<font color="#f79646">遗传算法</font>是一种常用的智能搜索算法,该算法的灵感来源于自然界的演化和遗传机制,算法将系统参数的优化看作自然选择中的“优胜劣汰,适者生存”,对求解非线性问题有很好的效果。
- 但是有论文《基于机器学习的工业机器人位置误差标定研究》中显示效果不如最小二乘。
5 代码验证
基于以上理论,我们使用matlab进行算法的验证。
部分代码如下
U_theta = [0 -1 0 0; 1 0 0 0; 0 0 0 0; 0 0 0 0];
U_alpha = [0 0 -sintheta -d*sintheta; 0 0 -costheta, -d*costheta; sintheta, costheta, 0 0 ;0 0 0 0];
U_a = [0 0 0 costheta; 0 0 0 -sintheta; 0 0 0 0; 0 0 0 0];
U_d = [0 0 0 0; 0 0 0 0; 0 0 0 1; 0 0 0 0];
dtheta = Tleft * U_theta * Tright;
dalpha = Tleft * U_alpha * Tright;
da = Tleft * U_a * Tright;
dd = Tleft * U_d * Tright;
6 问题
当然上述过程还遗留一些问题。
问题1
使用该算法的前提是已知两个位姿关系。1 基座标之间的关系,测量设备基座和机械臂基座的位姿关系;2 标定工具和机械臂末端的位姿关系。
其在误差链路中影响测量值和实际值的误差大小,理论上辨识时需要加上其误差。基座b和工具t的偏导也需要考虑进来。
问题2
还有一种方法是通过迭代的方式进行计算,还在看相关论文,留作大家的课后题吧。欢迎评论区讨论留言。
以上是基本的运动学参数辨识误差模型和使用最小二乘辨识的过程和记录,欢迎批评指正。整理不易,还请点赞支持。