d-h参数详解

发布时间:2023-05-22

一、什么是d-h参数

1、d-h参数是表示机械臂运动学中的一种参数化方法。
2、d-h表示Denavit–Hartenberg(D-H)参数。 这种表示法由Denavit和Hartenberg在1955年提出,以描述初始连杆(称为基准元素)的位置和方向,以及相对于前一个连杆的转动。 基于这些参数,可以计算每个连接点的位置和方向。

二、d-h参数的核心要素

1、坐标系:每个关节位置和方向的确定都基于一个连接坐标系。
2、连接:机械臂中不同部分之间的连接点。
3、参数:根据坐标系和连接来确定每个关节的位置和方向,即确定d-h参数。

三、d-h参数的计算

通过以下步骤计算每个关节的d-h参数:
1、为机械臂的每个连接标定坐标系,分别命名为X<sub>i-1</sub>,Y<sub>i-1</sub>,Z<sub>i-1</sub>,O<sub>i-1</sub>。
2、根据机械臂的连接点,确定关节的连接方向和长度。
3、根据连接方向,确定相邻两坐标系之间的旋转轴,然后再确定角度的正负方向,分别表示为α<sub>i-1</sub>和β<sub>i-1</sub>。其中,α<sub>i-1</sub>是绕Z<sub>i-1</sub>轴旋转,β<sub>i-1</sub>是绕X<sub>i</sub>轴的旋转。
4、在确定了连接长度、方向和旋转轴之后,就可以根据d-h参数计算出机械臂各个关节的运动学参数。

四、代码示例

#include<math.h>
double L[6] = {0,215,0,220,0,80}; //机械臂各关节连杆长度
double dh(double alpha, double a, double d, double theta)
{
    double T[4][4] = {
        {cos(theta), -sin(theta)*cos(alpha), sin(theta)*sin(alpha), a*cos(theta)},
        {sin(theta), cos(theta)*cos(alpha), -cos(theta)*sin(alpha), a*sin(theta)},
        {0,sin(alpha),cos(alpha),d},
        {0,0,0,1}
    };
    return T;
}
int main()
{
    double alpha[6] = {0,M_PI/2,0,M_PI/2,-M_PI/2,M_PI/2}; //机械臂各关节的α角
    double a[6] = {0,0,L[1],0,L[3],0}; //机械臂各关节的a长
    double d[6] = {L[0],0,0,0,L[4],L[5]}; //机械臂各关节的d长
    double theta[6] = {0,0,0,0,0,0}; //机械臂各关节的θ角
    double T01[4][4] = dh(alpha[0], a[0], d[0], theta[0]);
    double T02[4][4] = dh(alpha[1], a[1], d[1], theta[1]);
    double T03[4][4] = dh(alpha[2], a[2], d[2], theta[2]);
    double T04[4][4] = dh(alpha[3], a[3], d[3], theta[3]);
    double T05[4][4] = dh(alpha[4], a[4], d[4], theta[4]);
    double T06[4][4] = dh(alpha[5], a[5], d[5], theta[5]);
    double T06_final[4][4] = T01*T02*T03*T04*T05*T06; //机械臂从起点到终点的变换矩阵
    return 0;
}

五、d-h参数在机械臂运动中的应用

d-h参数在机械臂运动中的应用十分广泛,例如:
1、机械臂正逆运动学问题的解决;
2、通过d-h参数的计算,可以得到机械臂从起点到终点的变换矩阵,从而实现机械臂的运动控制;
3、根据d-h参数,可以对机械臂进行可视化建模和仿真等工作。