本文我们分别用SDH法和MDH来给同一个机器人模型建模,感受一下两种建模方法在串联机械臂里面的应用。 所用平台:Matlab 本文重点是建系以及提取DH参数表的过程 想要运行程序只需要把所有代码复制粘贴进matlab运行即可   1. 机器人结构 我这边选的机器人模型有点特殊,需要自行增加坐标系。这是因为这里的Tool frame不能用DH法   在这里插入图片描述   2.尝试用标准DH建模   2.1 首先建系 我们按照标准DH建模规则建立如下坐标   在这里插入图片描述   如果大家按照建系规则建系的话,不难得到坐标系1,2,4。但这里我们注意到中间加了个X3Y3Z3坐标系,原因是不加这个另外的坐标系的话,最后Tool frame不能运用DH法来写出它的四个参数,写出来也不对。原因是它不满足DH的两个条件:   在这里插入图片描述   加了3坐标系之后,以上两个条件又重新满足了,参数表只需要加一行即可。   2.2 写出参数表 接下来写出参数表:   在这里插入图片描述   2.3 写出转换方程 Matlab 代码:  
syms q1 q2 q3;
l0 = 20;
l1 = 30;
l2 = 40;
l3 = 50;
DH = [0   pi/2  l0+l1    pi/2+q1;
      l2   0     0       q2;
      l3  pi/2   0       q3;
      0  -pi/2   0       -pi/2];
  transform matrix: From frame 0 to frame 1:  
SH0_1 = [cos(DH(1,4))    -sin(DH(1,4))*cos(DH(1,2))    sin(DH(1,4))*sin(DH(1,2))    DH(1,1)*cos(DH(1,4));
        sin(DH(1,4))     cos(DH(1,4))*cos(DH(1,2))   -cos(DH(1,4))*sin(DH(1,2))    DH(1,1)*sin(DH(1,4));
        0                sin(DH(1,2))                 cos(DH(1,2))                 DH(1,3)             ;
        0                0                            0                            1                  ];
SH0_1 = simplify(SH0_1);
  From frame 1 to frame 2:  
SH1_2 = [cos(DH(2,4))    -sin(DH(2,4))*cos(DH(2,2))    sin(DH(2,4))*sin(DH(2,2))    DH(2,1)*cos(DH(2,4));
        sin(DH(2,4))     cos(DH(2,4))*cos(DH(2,2))   -cos(DH(2,4))*sin(DH(2,2))    DH(2,1)*sin(DH(2,4));
        0                sin(DH(2,2))                 cos(DH(2,2))                 DH(2,3)             ;
        0                0                            0                            1                  ];
SH1_2 = simplify(SH1_2);
  From frame 2 to frame 3:  
SH2_3 = [cos(DH(3,4))    -sin(DH(3,4))*cos(DH(3,2))    sin(DH(3,4))*sin(DH(3,2))    DH(3,1)*cos(DH(3,4));
        sin(DH(3,4))     cos(DH(3,4))*cos(DH(3,2))   -cos(DH(3,4))*sin(DH(3,2))    DH(3,1)*sin(DH(3,4));
        0                sin(DH(3,2))                 cos(DH(3,2))                 DH(3,3)             ;
        0                0                            0                            1                  ];
SH2_3 = simplify(SH2_3);
  From frame 3 to frame 4:  
SH3_4 = [cos(DH(4,4))    -sin(DH(4,4))*cos(DH(4,2))    sin(DH(4,4))*sin(DH(4,2))    DH(4,1)*cos(DH(4,4));
        sin(DH(4,4))     cos(DH(4,4))*cos(DH(4,2))   -cos(DH(4,4))*sin(DH(4,2))    DH(4,1)*sin(DH(4,4));
        0                sin(DH(4,2))                 cos(DH(4,2))                 DH(4,3)             ;
        0                0                            0                            1                  ];
SH3_4 = simplify(SH3_4);
  最后全部乘起来得到正运动学公式  
SHbase_tool(q1,q2,q3)=simplify(SH0_1*SH1_2*SH2_3*SH3_4)
  2.4 验证结果 我们随便带入三个关节角,比如(pi/2/,pi/6,-pi/7) 命令行输入  
double(SHbase_tool(pi/2,pi/6,-pi/7))
  得到结果:  
>>double(SHbase_tool(pi/2,pi/6,-pi/7))

ans =

         0    0.0747   -0.9972  -84.5012
   -1.0000         0         0         0
         0    0.9972    0.0747   73.7365
         0         0         0    1.0000
  3.用MDH建模   3.1 建系 同样的模型,我们试着用MDH再建一次模型,参照MDH建模规则,得到如下坐标系。注意坐标系2和坐标系1原点重合。   在这里插入图片描述   3.2 写出参数表   在这里插入图片描述 3.3 写出转换方程  
MDH = [0      0   l0+l1     pi/2+q1;
      pi/2   0     0       q2;
      0      l2    0       pi/2+q3;
      pi/2   0     l3     -pi/2];
  Transform matrix From frame 0 to frame 1:  
MH0_1 = [cos(MDH(1,4))                  -sin(MDH(1,4))                   0                 MDH(1,2);
         cos(MDH(1,1))*sin(MDH(1,4))     cos(MDH(1,1))*cos(MDH(1,4))    -sin(MDH(1,1))    -MDH(1,3)*sin(MDH(1,1));
         sin(MDH(1,1))*sin(MDH(1,4))     sin(MDH(1,1))*cos(MDH(1,4))     cos(MDH(1,1))     MDH(1,3)*cos(MDH(1,1));
         0                               0                               0                 1];
MH0_1 = simplify(MH0_1);
  From frame 1 to frame 2:  
MH1_2 = [cos(MDH(2,4))                  -sin(MDH(2,4))                   0                 MDH(2,2);
         cos(MDH(2,1))*sin(MDH(2,4))     cos(MDH(2,1))*cos(MDH(2,4))    -sin(MDH(2,1))    -MDH(2,3)*sin(MDH(2,1));
         sin(MDH(2,1))*sin(MDH(2,4))     sin(MDH(2,1))*cos(MDH(2,4))     cos(MDH(2,1))     MDH(2,3)*cos(MDH(2,1));
         0                               0                               0                 1];
MH1_2 = simplify(MH1_2);
  From frame 2 to frame 3:  
MH2_3 = [cos(MDH(3,4))                  -sin(MDH(3,4))                   0                 MDH(3,2);
         cos(MDH(3,1))*sin(MDH(3,4))     cos(MDH(3,1))*cos(MDH(3,4))    -sin(MDH(3,1))    -MDH(3,3)*sin(MDH(3,1));
         sin(MDH(3,1))*sin(MDH(3,4))     sin(MDH(3,1))*cos(MDH(3,4))     cos(MDH(3,1))     MDH(3,3)*cos(MDH(3,1));
         0                               0                               0                 1];
MH2_3 = simplify(MH2_3);
  From frame 3 to frame 4:  
MH3_4 = [cos(MDH(4,4))                  -sin(MDH(4,4))                   0                 MDH(4,2);
         cos(MDH(4,1))*sin(MDH(4,4))     cos(MDH(4,1))*cos(MDH(4,4))    -sin(MDH(4,1))    -MDH(4,3)*sin(MDH(4,1));
         sin(MDH(4,1))*sin(MDH(4,4))     sin(MDH(4,1))*cos(MDH(4,4))     cos(MDH(4,1))     MDH(4,3)*cos(MDH(4,1));
         0                               0                               0                 1];
MH3_4 = simplify(MH3_4);
  最后得到正运动学方程  
MHbase_tool(q1,q2,q3)=simplify(MH0_1*MH1_2*MH2_3*MH3_4)
  3.4 验证 同样地,代入三个关节角(pi/2/,pi/6,-pi/7) 命令行输入  
double(MHbase_tool(pi/2,pi/6,-pi/7))
  得到结果:  
>> double(MHbase_tool(pi/2,pi/6,-pi/7))

ans =

         0    0.0747   -0.9972  -84.5012
   -1.0000         0         0         0
         0    0.9972    0.0747   73.7365
         0         0         0    1.0000
  果然,跟SDH建模得到的结果一样。以上