研究机械臂的正向运动学需要从机械臂的变换矩阵开始。
    
    变换矩阵可以说有两种形式,一种产生了标准D-H参数,另一种产生了改进D-H参数表。
   
    
    
    标准D-H参数——变换矩阵
   
    引用一些博客的图片,以及我多次的试验,在这里记下来。
    
    
    
    在此之前,需要重点强调的是,无论是标准D-H参数法还是改进D-H参数法,
    
     我们都是使用矩阵右乘的法则:
    
    
    在下面提到的变换的四个过程中,比如有两个坐标系,一个是
    
     初始坐标i
    
    ,一个是
    
     目的坐标系j
    
    。我们会设定一个作为中间转换过程的坐标系A,一开始这个坐标系A是与初始坐标i重合。我们仔细留意一下,**就知道下面的每一次转化都是在运动的坐标A或者是最后的坐标系j来进行的。**这样就呼应了右乘的方法。
    
    标准D-H参数法的变换矩阵的顺序是,
    
    
     按照Z-X的顺序:
    
    
    
     ①
    
    先绕坐标系i的Z轴旋转θ角,该值便为θ1。使得Xi轴与Xj轴平行。——
    
     先绕坐标系A的轴旋转θ角,使得XA与Xj平行。
    
    一样的功能,破折号前是简便的说法。
    
    
     ②
    
    在沿着坐标系i的Z轴,将Xi轴移动D1的距离,与Xi轴与Xj重合。——
    
     沿着坐标系A的Z轴,将XA移动D1的距离
    
    ,
    
     这里就可以清晰理解,坐标系i其实是没动过的,动的只是坐标系A,而坐标j也算是运动的坐标系
    
    
    
     ③
    
    接着绕着坐标系j的Xj轴(同时也是Xi轴,应为此前已经重合了),旋转α角,该值为α1。——
    
     现在到绕这坐标系A的X轴旋转了
    
    
    
     ④
    
    最后便是沿着坐标系j的Xj轴,将坐标系i的Zi轴平移a1的距离。
    
    这样一来便可以产生一个连杆,这个连杆可以命名为LINK(I);
    
    最最最重要的一步是:
    
    上面有四个步骤,每个步骤都可以写出一个齐次坐标矩阵(4
    
     4),
     
     由于使用的是矩阵右乘,来求出末端相对于参考系的位姿,(我的理解是在正向运动学中,末端是未知,是运动的。只能设置每个的关节的角度,按照矩阵乘法的概念),可以写成:
     
     T1=ROT(θ)Trans(D1)ROT(α)Trans(a1),
     
     然后就是有末端执行器的[xj,yj,zj,1]T=T1
    
    [xi,yi,zi,1]。
    
    最后上面的四个变换便可以写成一个公式,(在MATLAB上找到证据)
    
    
    
    如果是标准D-H参数的话,就选第一个作为计算正向运动的式子,如果是改进D-H参数,就选择第二个。
    
    假设我有一个六自由度的机械臂,那么就有六个这样的矩阵,
    
    ①号关节-②号
    
    ②号——③号
    
    ③号——④号
    
    ④号——⑤号
    
    ⑤号——⑥号
    
    ⑥号——工具(最末端的坐标系)
    
    这样子,利用这些矩阵便可以求出末端执行器相对于基坐标的位姿。
    
    公式是这样的:
   
   i2=T(1-2)*i1..............
   最后变换便可以得到
   iE=T(1-2)T(2-3)T(3-4)T(4-5)T(5-6)T(6-E)i0,(当然这个公式是基于基坐标系的,参考坐标系不同,公式就会不同。
   为此我也在Matlab上验证了一下。
    L1 = Link([0 348.5 0 pi/2 ],‘standard’);%1 2
    
    L2 = Link([0 0 284.5 0 ],‘standard’);%2 3
    
    L3 = Link([0 0 30 pi/2 ],‘standard’);%3 4
    
    L4 = Link([0 286.5 0 -pi/2 ],‘standard’);%4 5
    
    L5 = Link([0 0 0 pi/2 ],‘standard’);%5 6
    
    L6 = Link([0 81.5 0 0 ],‘standard’);%6 和末端执行器
    
    robot = SerialLink([L1 L2 L3 L4 L5 L6 ],‘name’, ‘my robot’);
    
    %robot.plot([0 0 0 0 0 0 ]);
    
    teach(robot);
    
    display(robot);
   
    theta1=0;
    
    theta2=0;%
    
    theta3=0;
    
    theta4=0;
    
    theta5=0;
    
    theta6=0;
    
    q=[theta1 theta2 theta3 theta4 theta5 theta6];
    
    T=robot.fkine(q);
    
    robot.plot(q);
   
    a2= L2.a;
    a3= L3.a;
    d1= L1.d;
    d4= L4.d;
    d6= L6.d;
s1=sin(0);
c1=cos(0);
s2=sin(0);
c2=cos(0);
s3=sin(0);
c3=cos(0);
s4=sin(0);
c4=cos(0);
s5=sin(0);
c5=cos(0);
s6=sin(0);
c6=cos(0);
T1=[c1   0    s1  0;     s1    0     -c1  0;       0       1        0    d1;      0   0   0  1;]%1-2
T2=[c2  -s2   0    a2*c2;    s2    c2     0  a2*s2;        0       0       1    0;      0   0   0  1;] %2-3   
T3=[c3   0    s3   a3*c3;    s3    0     -c3  a3*s3;       0       1       0    0;      0   0   0  1;]%3-4
T4=[c4   0   -s4   0;     s4    0     c4   0;       0       -1      0   d4;    0   0   0  1;]%4-5
T5=[c5   0    s5   0;     s5    0     -c5  0;        0      1       0    0;      0   0   0  1;]%5-6
T6=[c6  -s6    0    0;     s6    c6    0  0;         0      0       1   d6;     0   0   0  1;]%6-7
Tz=T1*T2*T3*T4*T5*T6
    我用的自己设计一款高仿机械臂,朋友们可以参考我的一篇博客,里面有介绍一些的详细的数据,经过验证,是正确的。
    
    关于书籍的内容,
    
    蔡自兴教授有编写过一版书
    
    在介绍变换矩阵时,介绍了标准D-H参数法对应的变换方法和顺序,但是在后面介绍PUMA560时,用的是改进D-H参数对应的变换方法和顺序,以及他的公式。(我发现)
    
    后来又看了一版书,教授使用的都是改进D-H参数,我觉得是这样的,不知到大家有没有发现。
   
 
