精华内容
下载资源
问答
  • ![图片说明](https://img-ask.csdn.net/upload/202003/26/1585200824_828508.jpg) 图为6关节机器人DH模型图,这个模型的DH参数表应该怎么建立?
  • 在MATLAB中利用符号函数功能,通过手动输入DH参数符号矩阵 or Excel文件导入DH参数表从而获得DH符号矩阵公式1.前言2.废话不多说,上代码演示效果1. **函数使用方法一:==通过excel直接导入DH参数获得DH矩阵==**2. **...

    1.前言

    由于自己的专业方向,现在正在开始学习机器人相关知识。在机器人领域中(特别是机械臂之类的工业机器人),如果需要对机器人进行运动学分析,我们常常需要用到D-H矩阵(即Denavit-Hartenberg矩阵)。

    然而求过DH矩阵的小伙伴都知道,我们目前基本都是通过对应的DH参数表以及DH矩阵计算公式手动计算出各个DH转换矩阵。特别是在获得DH矩阵之后一般还需进行多个DH转换矩阵的相乘等操作,从而获得我们所需的变换关系。如果我们自己手动去计算这些矩阵,实在是恶心…

    考虑到人工手动计算DH矩阵的麻烦,我便想“能不能利用工具,只要我输入DH参数就能自动算出对应的DH矩阵?”

    今天,我在这里将要分享给大家的是一个自己写的 matlab 函数,这个函数便是用来求DH矩阵的。函数部分介绍如下:

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %                     符号矩阵计算 DH 转换矩阵公式
    % 1、函数功能:[Dof,A] = m_SigalMesu(DH_table_or_excelname,sheetname,range)
    %    利用符号矩阵 or excel文件导入 D-H 参数表,自动获得转换矩阵
    %    DH_table_or_excelname —— DH参数符号矩阵 or 具有DH参数便表的excel文件名
    %    sheetname —— 只有在excel导入时候才有作用,它表示导入数据在excel文件的sheetname sheet中
    %    range —— 只有在excel导入时候才有作用,它表示DH参数表范围
    %    Dof —— 转换矩阵个数
    %    A   —— 转换矩阵,三维数据。A(:,:,i)为求得的第i个DH矩阵
    %
    % 2D-H参数输入格式:
    %    [连杆1长度a1 连杆1扭角aerf1 关节1偏移量d1 关节1角度theta1;
    %     连杆2长度a2 连杆2扭角aerf2 关节2偏移量d2 关节2角度theta2;
    %                            ....                            ]   
    %    符号矩阵直接创建方法:
    %    1M = sym('[a,2*b;3*a,0]');
    %    2) M = str2sym('[a,2*b;3*a,0]');
    %  注:sym函数可能不再适用
    %
    % 3、从excel导入输入格式:
    %    [Dof,A] = m_SigalMesu('excelname','sheetname','range')
    %    如:[Dof,A] = m_SigalMesu('dh_test.xlsx','sheet1','B2:E8')
    %
    %  注:该函数如果输入一个参数,则表示输入为DH参数符号矩阵;
    %      如果需要从excel导入,则需要根据自己建立的参数表输入:
    %      excel文件名、sheet名、甚至对应DH参数范围
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    function [Dof,A] = m_SigalMesu(DH_table_or_excelname,sheetname,range);
    

    函数部分截图如下:
    在这里插入图片描述

    并且这样求得的矩阵还有个好处:利用matlab的符号运算功能,将获得的DH矩阵,能够直接通过matlab用于计算我们所需的变换矩阵!!!——从而不再需要我们自己手动计算 ~~~

    由于创作不易,具体函数代码,大家如果需要,则到我主页下载;或留言邮箱~~~
    下载网址:https://download.csdn.net/download/binheon/11180873

    2.废话不多说,上代码演示效果

    1. 函数使用方法一:通过excel直接导入DH参数获得DH矩阵

    1)、建立一个excel文件,并将自己的DH参数按照固定格式(由于我在建这个函数时将格式给固定了,因此使用这函数时输入格式要按照固定格式来)输入到excel表中。如下例子:
    在这里插入图片描述

    2)、直接调用函数,输入excel名、sheet名、表格范围

    %%%% 从excel文件中导入数据,并求得DH矩阵
    >>[Dof,A] = m_SigalMesu('dh_test.xlsx','sheet1','B2:E8') % 输入参数为:excel文件名、文件中对应的sheet名、表范围
    
    Dof =
    
         7   % DH矩阵个数
    
     
    A(:,:,1) =
     
    [ cos(theta10), -sin(theta10), 0, 0]
    [ sin(theta10),  cos(theta10), 0, 0]
    [            0,             0, 1, 0]
    [            0,             0, 0, 1]  %1DH矩阵函数
     
     
    A(:,:,2) =
     
    [ cos(90), -sin(90), 0, l12*cos(90)]
    [ sin(90),  cos(90), 0, l12*sin(90)]
    [       0,        0, 1,           0]
    [       0,        0, 0,           1] %2DH矩阵函数
     
     
    A(:,:,3) =
     
    [ cos(theta32), -sin(theta32), 0, l2*cos(theta32)]
    [ sin(theta32),  cos(theta32), 0, l2*sin(theta32)]
    [            0,             0, 1,               0]
    [            0,             0, 0,               1] %3DH矩阵函数
     
     
    A(:,:,4) =
     
    [ cos(theta43), -sin(theta43), 0, l3*cos(theta43)]
    [ sin(theta43),  cos(theta43), 0, l3*sin(theta43)]
    [            0,             0, 1,               0]
    [            0,             0, 0,               1]
     
     
    A(:,:,5) =
     
    [ cos(theta54), -sin(theta54), 0, 0]
    [ sin(theta54),  cos(theta54), 0, 0]
    [            0,             0, 1, 0]
    [            0,             0, 0, 1]
     
     
    A(:,:,6) =
     
    [ cos(theta65), -sin(theta65), 0, l5*cos(theta65)]
    [ sin(theta65),  cos(theta65), 0, l5*sin(theta65)]
    [            0,             0, 1,               0]
    [            0,             0, 0,               1]
     
     
    A(:,:,7) =
     
    [ 1, 0, 0, l6]
    [ 0, 1, 0,  0]
    [ 0, 0, 1,  0]
    [ 0, 0, 0,  1]
     
    >> 
    

    Dof——为DH参数组的数目,也是DH矩阵的个数;
    A——便是返回的DH参数的集合;它是一个三维数据,因而A(:,:,i)就是第i个DH矩阵。

    这样一个求DH矩阵的函数,只要输入了 DH参数 就能简简单单的获得对应的 DH矩阵

    3)、如果还需要求转换关系,如求0到7之间的转换关系矩阵(即求0到7的7个DH矩阵的乘积),直接将得到的DH矩阵相乘:
    A(:,:,1)*A(:,:,2)*A(:,:,3)*A(:,:,4)*A(:,:,5)*A(:,:,6)*A(:,:,7)

    %%%% 直接相乘:T = A(:,:,1)*A(:,:,2)*A(:,:,3)*A(:,:,4)*A(:,:,5)*A(:,:,6)*A(:,:,7)
    %%%% 考虑到函数的复杂性,最好利用simplif()函数化简下:
    >>T = simplify(A(:,:,1)*A(:,:,2)*A(:,:,3)*A(:,:,4)*A(:,:,5)*A(:,:,6)*A(:,:,7))
     
    T =
     
    [ cos(theta10 + theta32 + theta43 + theta54 + theta65 + 90), -sin(theta10 + theta32 + theta43 + theta54 + theta65 + 90), 0, l12*cos(theta10 + 90) + l2*cos(theta10 + theta32 + 90) + l5*cos(theta10 + theta32 + theta43 + theta54 + theta65 + 90) + l6*cos(theta10 + theta32 + theta43 + theta54 + theta65 + 90) + l3*cos(theta10 + theta32 + theta43 + 90)]
    [ sin(theta10 + theta32 + theta43 + theta54 + theta65 + 90),  cos(theta10 + theta32 + theta43 + theta54 + theta65 + 90), 0, l12*sin(theta10 + 90) + l2*sin(theta10 + theta32 + 90) + l5*sin(theta10 + theta32 + theta43 + theta54 + theta65 + 90) + l6*sin(theta10 + theta32 + theta43 + theta54 + theta65 + 90) + l3*sin(theta10 + theta32 + theta43 + 90)]
    [                                                         0,                                                          0, 1,                                                                                                                                                                                                                               0]
    [                                                         0,                                                          0, 0,                                                                                                                                                                                                                               1]
     
    
    

    simplify()函数是用于符号函数的化简,具体有关符号函数化简,以及matlab的符号函数、符号矩阵的知识可查看下链接:
    https://wenku.baidu.com/view/e488e5decc7931b764ce15c4.html

    https://wenku.baidu.com/view/4a21893800f69e3143323968011ca300a6c3f621.html

    2. 函数使用方法二:将DH参数数据通过手动建立一个符号矩阵输入

    1)、通过手动方式输入DH参数,且输入格式必须按照函数注释的格式输入。
    同样以下的excel中的DH参数为例:
    在这里插入图片描述
    那么函数的使用如下:

    %%%% 1、首先建立一个DH参数符号矩阵DH_TABLE
    syms l12 l2 l3 l5 l6 theta10 theta32 theta43 theta54 theta65 % 定义符号参数
    DH_TABLE = [0   , 0, 0, theta10;
                l12 , 0, 0, 90;
                l2  , 0, 0, theta32;
                l3  , 0, 0, theta43;
                0   , 0, 0, theta54;
                l5  , 0, 0, theta65;
                l6  , 0, 0, 0       ] % 定义DH参数表
    
    DH_TABLE =
     
    [   0, 0, 0, theta10]
    [ l12, 0, 0,      90]
    [  l2, 0, 0, theta32]
    [  l3, 0, 0, theta43]
    [   0, 0, 0, theta54]
    [  l5, 0, 0, theta65]
    [  l6, 0, 0,       0]
    
    %%%% 或者直接:DH_TABLE = str2sym('[0,0,0,theta10;l12,0,0,90;l2,0,0,theta32;l3,0,0,theta43;0,0,0,theta54;l5,0,0,theta65;l6,0,0,0]')
    %%%% str2sym()函数直接能够生产符号矩阵,但是如果需要带具体数值到所得矩阵公式中计算的话,该定义符号矩阵的方式则不行
    
    %%%% 2、直接调用求DH参数函数求得DH矩阵
    >>[Dof,A] = m_SigalMesu(DH_TABLE)
    
    Dof =
    
         7
    
     
    A(:,:,1) =
     
    [ cos(theta10), -sin(theta10), 0, 0]
    [ sin(theta10),  cos(theta10), 0, 0]
    [            0,             0, 1, 0]
    [            0,             0, 0, 1]
     
     
    A(:,:,2) =
     
    [ cos(90), -sin(90), 0, l12*cos(90)]
    [ sin(90),  cos(90), 0, l12*sin(90)]
    [       0,        0, 1,           0]
    [       0,        0, 0,           1]
     
     
    A(:,:,3) =
     
    [ cos(theta32), -sin(theta32), 0, l2*cos(theta32)]
    [ sin(theta32),  cos(theta32), 0, l2*sin(theta32)]
    [            0,             0, 1,               0]
    [            0,             0, 0,               1]
     
     
    A(:,:,4) =
     
    [ cos(theta43), -sin(theta43), 0, l3*cos(theta43)]
    [ sin(theta43),  cos(theta43), 0, l3*sin(theta43)]
    [            0,             0, 1,               0]
    [            0,             0, 0,               1]
     
     
    A(:,:,5) =
     
    [ cos(theta54), -sin(theta54), 0, 0]
    [ sin(theta54),  cos(theta54), 0, 0]
    [            0,             0, 1, 0]
    [            0,             0, 0, 1]
     
     
    A(:,:,6) =
     
    [ cos(theta65), -sin(theta65), 0, l5*cos(theta65)]
    [ sin(theta65),  cos(theta65), 0, l5*sin(theta65)]
    [            0,             0, 1,               0]
    [            0,             0, 0,               1]
     
     
    A(:,:,7) =
     
    [ 1, 0, 0, l6]
    [ 0, 1, 0,  0]
    [ 0, 0, 1,  0]
    [ 0, 0, 0,  1]
     
    
    

    这样便通过DH参数,首先建立一个符号矩阵,再传入求DH矩阵函数,便获得了对应的DH矩阵公式

    2)、若需求转换矩阵,同样可直接选择对应的DH矩阵进行相乘等操作获得。如上面方法一中的3)部分代码。

    3)、虽然从表面上看来,直接通过excel导入,更加方便。但是对于此求DH矩阵函数而言,由于对excel导入的数据并没进行过多的处理,因而从excel导入的DH参数不可出现特殊字符,也不可能出现 “+”、“-”、“*”、“/”(加、减、乘、除)符号。

    !!!! 但是,如果通过建立符号矩阵的方式输入DH参数,参数中可以出现 “+”、“-”、“*”、“/”(加、减、乘、除)运算符号。如下:

    %%%% 输入的DH参数具有“*”、“+”运算符号,“l11*l13”、“l12+l2”
    >> syms l11 l13 l12 l2 l3 l5 l6 theta10 theta32 theta43 theta54 theta65
    >> DH_TABLE = [l11*l13, 0, 0, theta10;
                   l12+l2 , 0, 0, 90;
                   l2     , 0, 0, theta32;
                   l3     , 0, 0, theta43;
                   0      , 0, 0, theta54;
                   l5     , 0, 0, theta65;
                   l6     , 0, 0, 0       ] % 具有加减乘除运算符号的DH参数矩阵 
                   
     DH_TABLE =
    [  l11*l13, 0, 0, theta10]
    [ l2 + l12, 0, 0,      90]
    [       l2, 0, 0, theta32]
    [       l3, 0, 0, theta43]
    [        0, 0, 0, theta54]
    [       l5, 0, 0, theta65]
    [       l6, 0, 0,       0]
     
     
    >> [Dof,A] = m_SigalMesu(DH_TABLE) % 通过参数矩阵获得DH矩阵
    
    Dof =
    
         7
    
     
    A(:,:,1) =
     
    [ cos(theta10), -sin(theta10), 0, l11*l13*cos(theta10)]
    [ sin(theta10),  cos(theta10), 0, l11*l13*sin(theta10)]
    [            0,             0, 1,                    0]
    [            0,             0, 0,                    1]
     
     
    A(:,:,2) =
     
    [ cos(90), -sin(90), 0, cos(90)*(l2 + l12)]
    [ sin(90),  cos(90), 0, sin(90)*(l2 + l12)]
    [       0,        0, 1,                  0]
    [       0,        0, 0,                  1]
     
     
    A(:,:,3) =
     
    [ cos(theta32), -sin(theta32), 0, l2*cos(theta32)]
    [ sin(theta32),  cos(theta32), 0, l2*sin(theta32)]
    [            0,             0, 1,               0]
    [            0,             0, 0,               1]
     
     
    A(:,:,4) =
     
    [ cos(theta43), -sin(theta43), 0, l3*cos(theta43)]
    [ sin(theta43),  cos(theta43), 0, l3*sin(theta43)]
    [            0,             0, 1,               0]
    [            0,             0, 0,               1]
     
     
    A(:,:,5) =
     
    [ cos(theta54), -sin(theta54), 0, 0]
    [ sin(theta54),  cos(theta54), 0, 0]
    [            0,             0, 1, 0]
    [            0,             0, 0, 1]
     
     
    A(:,:,6) =
     
    [ cos(theta65), -sin(theta65), 0, l5*cos(theta65)]
    [ sin(theta65),  cos(theta65), 0, l5*sin(theta65)]
    [            0,             0, 1,               0]
    [            0,             0, 0,               1]
     
     
    A(:,:,7) =
     
    [ 1, 0, 0, l6]
    [ 0, 1, 0,  0]
    [ 0, 0, 1,  0]
    [ 0, 0, 0,  1]
     
    >> T = simplify(A(:,:,1)*A(:,:,2)) % 计算0-1-2的转换关系
     
    T =
     
    [ cos(theta10 + 90), -sin(theta10 + 90), 0, cos(theta10 + 90)*(l2 + l12) + l11*l13*cos(theta10)]
    [ sin(theta10 + 90),  cos(theta10 + 90), 0, sin(theta10 + 90)*(l2 + l12) + l11*l13*sin(theta10)]
    [                 0,                  0, 1,                                                   0]
    [                 0,                  0, 0,                                                   1]
     
    

    这便是通过建立符号矩阵的方式输入DH参数的优点所在!!!

    4)、另外,我们在通过matlab获得DH矩阵,甚至进而得到转换矩阵之后;如果需要带入具体数值求值,则需要利用到subs()函数。
    subs函数使用格式如下:
    subs(表达式,表达式参数,表达式参数对应的新值)

    如:求得0-1-2的转换矩阵,并将具体数值带入其矩阵中:

    %%%% 获得0-1-2的转换矩阵
    >> T = simplify(A(:,:,1)*A(:,:,2))
     
    T =
    [ cos(theta10 + 90), -sin(theta10 + 90), 0, cos(theta10 + 90)*(l2 + l12) + l11*l13*cos(theta10)]
    [ sin(theta10 + 90),  cos(theta10 + 90), 0, sin(theta10 + 90)*(l2 + l12) + l11*l13*sin(theta10)]
    [                 0,                  0, 1,                                                   0]
    [                 0,                  0, 0,                                                   1]
    
    %%%% 将l12 = 2 带入T矩阵
    >> t = subs(T,l2,2)
     
    t =
    [ cos(theta10 + 90), -sin(theta10 + 90), 0, cos(theta10 + 90)*(l12 + 2) + l11*l13*cos(theta10)]
    [ sin(theta10 + 90),  cos(theta10 + 90), 0, sin(theta10 + 90)*(l12 + 2) + l11*l13*sin(theta10)]
    [                 0,                  0, 1,                                                  0]
    [                 0,                  0, 0,                                                  1]
    
    %%%% 将theta10 = 90°,l11 = 1,l12 = 2 ,l2 = 3,l3 = 0.5 带入T矩阵
    >> t = subs(T,[theta10 l11 l12 l2 l3],[90 1 2 3 0.5])
     
    t =
    [ cos(180), -sin(180), 0, 5*cos(180) + l13*cos(90)]
    [ sin(180),  cos(180), 0, 5*sin(180) + l13*sin(90)]
    [        0,         0, 1,                        0]
    [        0,         0, 0,                        1]
     
     
    
    

    注:本次利用到了matlab符号函数计算工具,具体的相关知识参考:

    https://wenku.baidu.com/view/e488e5decc7931b764ce15c4.html

    展开全文
  • 本文主要向大家介绍了机器人之DH参数例子-SCARA机器人,通过具体的内容向大家展现,希望对大家学习机器人有所帮助。DH参数分配此处说到的SCARA机器人是KUKAKR10机器人:它是一个revolute_revolute_prismatic_...

    本文主要向大家介绍了机器人之DH参数例子-SCARA机器人,通过具体的内容向大家展现,希望对大家学习机器人有所帮助。

    DH参数分配

    此处说到的SCARA机器人是KUKA KR10机器人:

    它是一个revolute_revolute_prismatic_revolute结构或者简称为RRPR结构,并且所有的关节轴都是平行的。

    步骤1:从{1,2,…,n}标记所有关节,如下图:

    步骤2:从{0,1,…,n}标记所有连杆,0表示为固定连杆,如下图:

    步骤3:绘制线条通过所有关节,定义关节轴,如下图:

    关节3和关节4是一致的。

    步骤4:将每个坐标系的Z轴指定为沿其关节轴指向的点,如下图:

    步骤5:定义各坐标系z轴方向,如下图:

    步骤6:定义各坐标系x轴方向,不包括0轴和末端执行器轴,如下图:

    步骤7:标记基础坐标系,如下图:

    步骤8:标记末端执行器,如下图:

    DH参数表填写

    建议先读.

    i=1时,alpha 0 表示z0和z1在x0方向的夹角,遵循右手法则。

    a0表示z0到z1在x0方向的距离。

    d1表示x0到x1沿着z1方向的距离。

    theta1表示x0和x1在z1方向的夹角,遵循右手法则,由于当theta1等于0时x0和x1是平行的。但是机器人运动时当theta为0时两个x轴并不平行。所以表中theta1处的值应为theta加上一个偏移常量。

    i=2时,alpha 1表示z1和z2在x1方向的夹角,遵循右手法则。

    a1表示z1到z2在x1方向的距离。

    d2表示x1到x2沿着z2方向的距离。

    theta2的值同theta1的逻辑。

    i=3时,alpha 2表示z2和z3在x2方向的夹角,遵循右手法则。

    a2表示z2到z3在x2方向的距离。

    d3表示x2到x3沿着z3方向的距离。

    因为关节3是移动轴,所以theta3为0。

    i=4时,alpha 3表示z3和z4在x3方向的夹角,遵循右手法则。

    a3表示z3到z4在x3方向的距离。

    d4表示x3到x4沿着z4方向的距离。

    theta4的值同theta1的逻辑。

    本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能智能机器人频道!

    展开全文
  • 六自由度机械臂研究(3)- 机械臂DH参数表建立 DH参数简介 DH参数全称是Denavit-Hartenberg参数, 目前是机器人领域广泛应用于机器人结构描述的方法。 我们可以用这些参数来来描述一个机器人机构, 并用这些参数来...

    六自由度机械臂研究(3)- 机械臂DH参数表的建立

    DH参数简介

    DH参数全称是Denavit-Hartenberg参数, 目前是机器人领域广泛应用于机器人结构描述的方法。 我们可以用这些参数来描述一个机器人机构, 并用这些参数来进行运动学算法的推导与解算。 例如,对于一个六关节机械臂, 仅仅需要18个参数就可以完全描述这些固定的运动学参数。

    因此, 机器人的每个连杆的可以用4个运动学参数来描述, 其中两个参数用于描述连杆本身, 另外两个参数用于描述连杆之间的连接关系。简单的说, 就是用这四个参数来描述两个相邻关节杆的相对位置关系。

    关于连杆连接的两种描述: 标准DH建模改进DH建模, 根据我们的建系方法, 我们需要用改进DH建模法来进行建模, 两种建模的区别网上有很多讲解, 博主在此不多做详解, 博主参考博客为标准DH建模与改进DH建模

    DH选的四个参数的物理意义

    DH选的四个参数都有非常明确的物理含义:
    link length (连杆长度):两个关节的轴(旋转关节的旋转轴,平移关节的平移轴)之间的公共法线长度。

    link twist (连杆扭转 ):一个关节的轴相对于另一个关节的轴绕它们的公共法线旋转的角度。

    link offset (连杆偏移):一个关节与下一个关节的公共法线和它与上一个关节的公共法线沿这个关节轴的距离。

    joint angle (关节转角):一个关节与下一个关节的公共法线和它与上一个关节的公共法线绕这个关节轴的转角。

    参数具体计算方法:

    连杆长度 ai-1 : 沿着Xi-1, 从Zi-1Zi的距离。(表示连杆i-1两端关节轴的公垂线长度)

    连杆扭转 αi-1 : 绕着Xi-1, 从Zi-1Zi的角度。

    连杆偏距 di : 沿Zi, 从 Xi-1Xi的距离。

    关节转角 θi: 绕Zi, 从Xi-1Xi的角度。

    根据已经建立好的六自由度机械臂的坐标系。 如下图所示:
    机械臂坐标系
    我们可以根据以上方法来分别求出从坐标系{ 0 } 到 坐标系{5} 的四个DH参数

    根据改装过的六自由度机械臂的坐标系, 并通过上述DH参数计算方法(以当前姿势作为初始状态), 可以得到DH参数表. 如下图所示:

    i ai-1 (cm) αi-1 di (cm) θi
    1 0.00 0 0 0
    2 1.25 pi/2 0 pi/2
    3 10.5 0 0 pi/2
    4 0.00 pi/2 13.0 -pi
    5 0.00 pi/2 0 pi
    6 0.00 pi/2 10.0 -pi

    检查确认无误后, 就可以以DH参数表为基础建立各个关节轴的位姿方位矩阵。 这些矩阵就是运动学算法基础元素。 下一节将会详细介绍。

    展开全文
  • 连杆坐标系3 DH参数3.1 DH参数的介绍3.2 DH参数定义3.2.1 连杆长度和扭角3.2.2 连杆转角和连杆偏距4. 解决问题5. 总结1. 引言前面的文章我们一直在介绍坐标系以及它们之间的变换关系,数学的意味还是很浓的。讲了...

    目录

    1. 引言

    2. 连杆坐标系

    3 DH参数

    3.1 DH参数的介绍

    3.2 DH参数定义

    3.2.1 连杆长度和扭角

    3.2.2 连杆转角和连杆偏距

    4. 解决问题

    5. 总结

    1. 引言

    前面的文章我们一直在介绍坐标系以及它们之间的变换关系,数学的意味还是很浓的。讲了那么多的公式和规律,它们要怎么用在机器人上呢?这篇文章将介绍坐标系和机器人之间的纽带即连杆坐标系。完成这篇文章的介绍之后我们就可以利用一些机器人的开发平台如ROS,Robotic Toolbox,SimMechanics等来进行一些基本的机器人建模与仿真工作了。

    2. 连杆坐标系

    从前面一系列关于坐标系的文章中我们了解到可以利用齐次变换矩阵来计算某个空间点在各个坐标系下的坐标。在机器人正运动学—坐标系及其变换文章开头我们提出了一个问题,如何求解一个多连杆机器人(如下图)的末端点P在世界坐标系下的坐标。介绍到这里我们终于可以尝试解决这个问题。

    由于机器人的各个连杆之间可以发生相对运动,我们真的很难直观地看出末端点在世界坐标系的位置。那怎么办呢?其实我们可以把这个问题分解一下让每个子问题求解起来没有那么困难。

    如果我们建立一个与末端连杆固连的坐标系,那么P点在该坐标系下的坐标是很容易给出的,因为它只和末端连杆的机械尺寸有关,与机器人的运动无关,这就是一个连杆坐标系。连杆坐标系是一个个与机器人的连杆固连在一起的坐标系。如果我们在机器人的每一个连杆上都建立一个固连坐标系,并且我们想办法求解每相邻两个连杆之间的坐标系变换关系,是不是就能很容易地将P点坐标映射到世界坐标系了呢(相对而言相邻两个连杆之间的坐标变换关系是容易求得的)。

    这时比较关键的问题是怎么求解相邻两个坐标系之间的变换关系。随便建立连杆坐标系肯定是不好的,一方面这将导致坐标系之间的关系复杂多样,难以统一;另一方面我们可能需要进行很多不必要参数的测量。因此建立连杆坐标系需要一套准则。我们希望这套准则尽可能使用较少的参数来描述各个坐标系,同时我们希望这套准则是普适的。

    1995年Jacques Denavit和 Richard Hartenberg解决了这个问题,他们提出了著名的DH参数法建立连杆坐标系的准则。在这个准则下每个连杆只需四个参数就可以确定它的连杆坐标系。

    3 DH参数

    3.1 DH参数的介绍

    DH参数是一种描述连杆坐标系的方法,如下图所示。可以认为这是机器人中的两个相邻连杆

    。在这里我首先还是希望解释一下图中符号的含义,特别是下标含义,我学习的时候经常弄混。

    首先我们来定义两个概念,驱动关节和传动关节,这两个概念很容易理解。我们都知道对于电驱动的机器人,各个关节处通常都会有伺服电机驱动。在一个串联机器人中连杆i靠近基座的关节驱动连杆i的运动,称为连杆i的驱动关节; 连杆i靠近末端执行器的关节用于驱动连杆i+1的运动,因此我们称这个关节为连杆i的传动关节。DH参数建立的坐标系又被称为传动轴坐标系。这里需要强调连杆i的坐标系是建立在传动关节也就是靠近末端执行器一侧的关节处,也就是说坐标系

    (简称

    )是与

    固连在一起的,坐标系

    是与

    固连在一起的,在后面的介绍中请各位一定牢记,否则你会觉得整个坐标系变换都很奇怪。

    对应的是

    的驱动轴; 

    对应的是

    的传动轴以及

    的驱动轴;  

    对应的是

    的传动轴…

    标志右斜杠的两对直线圈1和圈2分别是两对平行直线。图中的

     、

     、

     、

    就是我们要介绍的

    的DH参数。

    3.2 DH参数定义

    要说DH参数为何如此受青睐我觉得主要有两个原因。第一就是DH参数描述一个连杆坐标系只需要4个参数; 第二这四个参数具备明显的物理意义:

    代表坐标系

    和坐标系

    之间

    轴的夹角,也就是

    旋转的角度(这不就是关节i电机旋转的角度吗)

    代表坐标系

    想对于坐标系

    轴方向的偏移量

    代表

    的驱动轴和传动轴之间的夹角

    代表

    的数学意义上的长度

    从上面的描述我们可以看出1和2是描述的是

    之间的关系,3和4描述的是

    的固有属性(因为它们只和

    有关)。因此要说清楚DH参数,这两组不同含义的参数还是分开来看。

    3.2.1 连杆长度和扭角

    我们先从

    的定义开始,因为这两个参数比较直观。下图就是连杆固有参数

    的示意图。再次强调连杆长度和扭角是连杆自身的固有属性,与其他连杆没有任何关系。

    无论这个连杆有多么的复杂,我们都可以对它进行一种统一的描述:两根关节轴线(

    )以及他们的公垂线(圈1)是对一个连杆最简单的抽象。这里可能需要一点点空间几何的知识,异面直线有且仅有一条公垂线。

    在这里我们定义

    的公垂线圈1的长度为连杆长度

    ,这就是四个DH参数中的第一个参数。

    定义

    两条异面直线的夹角为连杆的关节扭角

    ,图中双右斜杠对应的两条直线平行,这是DH参数中的第二个参数。

    3.2.2 连杆转角和连杆偏距

    接下来我们来看连杆转角

    和连杆偏距

    的定义。这两个参数描述的是一种位置关系。再次强调它们描述的是相邻两个连杆之间的位置关系,不再是连杆的固有属性。就这里来说

    描述的是

    相对于

    的位置关系。

    请在回到图1中观察,

    分别是与

    固连的坐标系。根据我们的定义

    轴建在

    的公垂线上,

    轴建在

    的公垂线上。仔细体会一下这说明了什么。这说明

    轴和

    轴都垂直于

    ,也就是

    是异面直线

    的公垂线。

    图1中单右斜杠对应的两条直线平行,那么

    对应的就是直线

    的夹角。因此我们定义

    轴夹角为连杆转角

    我们发现

    沿

    (即

    轴)旋转

    轴平行了!我们定义

    轴之间的公垂线长度为连杆偏距

    我们发现

    沿着

    旋转

    ,再沿着新坐标系的

    轴(其实还是

    ,因为前面的旋转是绕着

    轴的,因此

    轴方向不会改变)平移

    ,之后你会发现新的坐标系和

    轴已经完全重合了!!

    更进一步,再将新坐标系沿着其

    轴旋转

    角,我们发现新坐标系和

    不仅

    轴重合,而且

    轴平行了!!!那么如果再沿着

    轴平移

    呢?没错两个坐标系这时候完全重合!!!!

    以上描述的过程用数学语言表达就是:

    这个变换矩阵可以将

    中的点映射到

    !有一点需要注意沿同一轴连续的平移和旋转是可以交换位置的,这一点大家从几何的角度思考一下就不难发现,因此沿

    的平移和旋转可交换,沿

    轴的平移和旋转可交换。

    4. 解决问题

    到这里我们终于可以解决前面提到的关于机器人末端点在基坐标系下的坐标的问题了。方法很简单,就是在每个连杆上都建立一个坐标系,然后用前面提到的变换关系找到相邻连杆之间的变换关系,这样问题就迎刃而解了。如下图所示就是在SCARA机器人的各个连杆上建立的坐标系,为了便于观察添加了一些辅助线。

    在利用DH参数进行机器人正运动学分析时我们习惯上列写DH参数表。有了参数表后我们就已经从机器人中抽象出了数学模型。有人说高手眼中没有机器人,只有坐标系大概就是这种感觉吧。我们把这个机器人的参数列成如下的表格。(依然请各位牢记DH参数中

    代表两个

    轴夹角,

    代表两个

    轴的公垂线长度,

    代表两个

    轴夹角,

    代表两个

    轴的公垂线长度)

    DH参数表到这里就算是建立完成了,SCARA机器人第三轴是平移关节,DH参数表中的变量为

    ,其余参数均为固定值。还记得我们在3.2.2介绍的变换关系吗?每相邻两个连杆之间的关系都可以用这个变换加以描述。因此我们可以找到:

    我们要求的P点是不是就是坐标系{4}的原点呢?它在基坐标系下如下表示呢?很简单把所有变换迭乘就可以了:

    因此当我们测量到DH参数中各个变量的值以及已知机器人的结构参数时,只需要代入到上面的方程中,就可以求解末端点P在基坐标系下的坐标。

    5. 总结

    这篇文章我们介绍了DH参数以及其物理意义,有些特殊的连杆如何建立坐标系没有进行相关介绍,比如连杆两个轴线平行/相交时如何建立坐标系。建立DH坐标系有哪些小技巧,这些我们将在下一篇文章进行讨论。由于个人能力有限,所述内容难免存在疏漏,欢迎指出,欢迎讨论。

    展开全文
  • SCARA机器人技术参数(1)负载额定5KG,不大于10KG(2)自由度4(3)运动参数大臂±120°(回转行程),角速度额定15RPM,最大30RPM。小臂±120°(回转行程),角速度额定15RPM,最大30RPM。手腕回转±180°(回转行程),角速度...
  • 如下参考链接1的作者大大实现了UR5机械臂的正运动学和逆运动学的...参考链接:六轴UR机械臂正逆运动学求解_MATLAB代码(标准DH参数表) UR机械臂正逆运动学求解 一、参考链接说明 参考链接2的作者实现了UR5机械.
  • SCARA机器人技术参数:(1)负载:额定5Kg,不大于10Kg(2)自由度:4(3)运动参数: 大臂:±120°(回转行程),角速度额定15rpm,最大30rpm。 小臂:±120° (回转行程),角速度额定15rpm,最大30rpm。 手腕回转:±180°...
  • 工业机器人九大选型参数来源:未知|发布时间:2020-08-24|浏览数:载入中...工业机器人九大选型参数机器人适用于非常多的应用,从材料搬运到机器维护,从焊接到切割。如今,工业机器人制造商开发了适用于各种应用的...
  • 2019/5/30 新编辑:已经有两个小伙伴证明了:我这个程序在我的MATLAB2017b上运行没问题,但在2018版本上就会报错,我也不知道是什么原因!!! 2019/4/25新编辑:改正了zhengyundongxue和niyundon...
  • 1SCARA机器人驱动方式及参数初定SCARA机器人有3个旋转关节,其轴线相互平行,在平面内进行定位和定向。另一个关节是移动关节,用于完成末端件在垂直于平面的运动。手腕参考点的位置是由两旋转关节的角位移φ1和φ2,...
  • 这里我们获得的DH参数表在D-H参数表面板显示。 2.PUMA762机器人正运动学 根据改进DH的相邻连杆坐标系转换关系i-1Ti,将DH参数代入计算,可以得到每一个连杆变换矩阵,最后将其连乘可以得到机器人末端法兰盘到基坐标...
  • l一般情况下机器人各关节的几何关系可通过Denavit-Hartenberg(D—H)参数表来描述。 提出了采用D—H参截袁生成机器人三堆虚拟模型的方法,实现了机器人的可视 匕 仿真系统提供 的视图控制功能和场景漫游功能实现了多...
  • 7-1 机械手臂轨迹规划实例(Manipulator Trajectory-Planning Example)一、Revisit 物件取放任务之情境:...移动手臂将杯子挂到墙上的杯架1、六轴RRRRRR手臂之DH Table六轴RRRRRR手臂之DH Table2、在IK的课程中,练...
  • 表1 爱普生SCARA机器人技术参数表(图片来自官网) 爱普生机器人本体的精度推算其对谐波减速器精度的要求,要想确保350mm臂展重复定位精度±0.01的精度,谐波减速器单向重复定位精度必须控制在11.88角秒。因此需要...
  • 原标题:六款日产SCARA机器人性能数据大比拼【文/虞超】3C、新能源等新兴行业市场的快速发展,特别是在电子制造等轻小型快速消费品制造领域对机器人的精度、速度均有所要求,带动了SCARA机器人销量持续上升。...
  • 由此,建立该机器人的D-H参数表: D-H参数表 同时,我们假设 =200; =40; =400; = 250。关节工作区间: , .基于上述参数,我们在matlab进行仿真和绘图。 % 设置关节范围 q1_lim = [-pi,pi]; q2_lim = [-pi,pi]; q3_...
  • 表1 爱普生SCARA机器人技术参数表(图片来自官网) 机器人本体的精度推算其对谐波减速器精度的要求,要想确保350mm臂展重复定位精度±0.01的精度,谐波减速器单向重复定位精度必须控制在11.88角秒。因此需要谐波减速...
  • DH参数与URDF盲点

    2021-03-12 15:19:30
    DH参数与URDF盲点一、DH参数表二、URDF文件 一、DH参数表 DH参数表表述的是连杆坐标系之间的关系,而不是关节坐标系之间的关系,这一点一定要搞清楚,而连杆是由关节相互连接的。首先介绍一下DH参数中各个参数的含义...
  • PUMA560机器人D-H参数和改进DH参数

    千次阅读 2020-04-27 01:17:11
    最近做了一下PUMA560的轨迹规划,发现它的DH参数多种多样...链接:简直要崩溃了,PUMA560机器人DH参数表,你们见过多少个版本?. 先按这个同学列出的4个不同形式的参数来分析,我把这4个归类为3种。 原因有下: 1、如...
  • 3、DH参数表是唯一的吗?二、标准DH参数建模三、修正DH参数建模四、实例(standard DH)1、SCARA机器人2、SCARA机器人 一、前言 1、描述两个坐标系的变换关系需要6个参数(3个表示位置变换,3个表示姿态...

空空如也

空空如也

1 2 3 4 5 6
收藏数 106
精华内容 42
关键字:

dh参数表