DH和MDH的变换矩阵

请参考3 Robotics Toolbox(1—安装与坐标变换),总之,在B站台大机器人学之运动学——林沛群的课程中(第24P)有:
在这里插入图片描述在这里插入图片描述


MDH和DH在theta d a alpha的定义上都有所不用,导致建立出来的变化矩阵就不一样!!!!!!


MATLAB的Robotic toolbox10.2的fkine函数与机械臂MDH和DH变化矩阵的应用

fkine是Robotic toolbox求解正运动的函数,具体是利用MDH方式求解变化矩阵还是DH求解变化矩阵与fkine函数关系不大,和机械臂定义类型有关!!!


已知Robotic toolbox定义机械臂类型有三种:不声明,声明’standard’和声明’modified’。其中不声明和’standard’都表示使用DH方法求得的变化矩阵,而声明’modified’则采用实验MDH求的变化矩阵。参考3 Robotics Toolbox(2—机械臂建模、正逆运动求解和轨迹规划) ,如果想使用fkine求解得出的是MDH方式的变化矩阵,那就在连杆定义时候后面声明’modified’,否则得到的都是DH定义方式!!!


下面的用自定义的MDH和DH函数来验证:①mdl_puma560是DH求解方式,因为它是默认的定义方式;②mdl_puma560akb采用的是MDH求解方式,因为文件声明了’modified’;③自定义的机械臂应用fkine函数。

Robotic toolbox的mdl_puma560采用的是DH求解方式

启动Robotic toolbox10.2,输入命令mdl_puma560,再输入p560.fkine([0 0 0 0 0 0])查看矩阵变换结果为左图,利用自定义的MDH方式(函数名fun_dirsolu_mdh)按照p560.display得到的参数创建机械臂,求的关节角均为0时的变化矩阵如图中,利用DH方式(函数名fun_dirsolu_sdh)求得的变化矩阵如图右。
在这里插入图片描述

mdl_puma560akb采用的是MDH求解方式

输入命令mdl_puma560akb,再输入p560m.fkine([0 0 0 0 0 0])查看矩阵变换结果为左图,利用自定义的MDH方式(函数名fun_dirsolu_mdh)按照p560m.display得到的参数创建机械臂,求的关节角均为0时的变化矩阵如图中,利用DH方式(函数名fun_dirsolu_sdh)求得的变化矩阵如图右
在这里插入图片描述

自定义的机械臂应用fkine函数

在Robotic的 toolbox的安装文件夹下可以找到很多模型文件,这里又采用puma560akb的源码(…/rvctools/robot/models/mdl_puma560akb.m)来应用kine函数。

创建DH类型的PUMA560aku

% %未声明类型,表示为standard类型机械臂即采用DH求解变化矩阵
clear;
L(1) = Link([  0      0        0       0       0]);
L(2) = Link([  0      0.2435   0      -pi/2    0]);
L(3) = Link([  0     -0.0934   0.4318  0       0]');
L(4) = Link([  0      0.4331  -0.0203  pi/2    0]);
L(5) = Link([  0      0        0      -pi/2    0]);
L(6) = Link([  0      0        0       pi/2    0]);

robottest = SerialLink(L,'name','robottest');

robottest.fkine([0 0 0 0 0 0])

创建MDH类型的PUMA560aku

clear;
L(1) = Link([  0      0        0       0       0], 'modified');
L(2) = Link([  0      0.2435   0      -pi/2    0], 'modified');
L(3) = Link([  0     -0.0934   0.4318  0       0], 'modified');
L(4) = Link([  0      0.4331  -0.0203  pi/2    0], 'modified');
L(5) = Link([  0      0        0      -pi/2    0], 'modified');
L(6) = Link([  0      0        0       pi/2    0], 'modified');

robottest = SerialLink(L,'name','robottest');

robottest.fkine([0 0 0 0 0 0])

在这里插入图片描述

总结

fkine是Robotic toolbox求解正运动的函数,具体是利用MDH方式求解变化矩阵还是DH求解变化矩阵主要看和机械臂定义的类型!!!

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐