第二章 正运动学入门:DH参数法、连杆坐标系建立、变换矩阵推导

好,咱们正式开始啃正运动学这块硬骨头。

说实话,我刚入行那会儿,看到一堆坐标系和矩阵就头大。后来发现,只要把DH参数法搞明白,正运动学就是个套公式的活儿。你想想看,机器人每个关节动一下,末端到底在哪儿?这就是正运动学要回答的问题。

2.1 什么是正运动学?

正运动学,说白了就是:已知关节角度,求末端位姿

比如你有个六轴机器人,你告诉每个关节转多少度,然后问「现在手爪在哪儿、朝哪个方向?」——这就是正运动学干的事。

我在做焊接机器人项目时,经常需要先算正运动学,才能判断焊枪能不能够到焊缝。嗯,这一步算错了,后面全白搭。

核心公式:

T = T₁ × T₂ × T₃ × … × Tₙ

其中 T 是末端相对于基座的变换矩阵,Tᵢ 是相邻连杆间的变换矩阵。

2.2 DH参数法——机器人界的「身份证」

DH参数法,全称Denavit-Hartenberg参数法。它用四个参数就能描述两个相邻关节之间的关系。我个人习惯把这四个参数记成「两转两移」:

参数 符号 含义 我记它的方式
连杆长度 aᵢ 沿Xᵢ轴,从Zᵢ₋₁到Zᵢ的距离 「长度」——两个关节轴之间的垂直距离
连杆扭角 αᵢ 绕Xᵢ轴,从Zᵢ₋₁到Zᵢ的转角 「扭角」——两个关节轴之间的夹角
连杆偏距 dᵢ 沿Zᵢ₋₁轴,从Xᵢ₋₁到Xᵢ的距离 「偏距」——沿着前一个关节轴的偏移
关节角 θᵢ 绕Zᵢ₋₁轴,从Xᵢ₋₁到Xᵢ的转角 「转角」——关节实际转动的角度

我的小窍门:

记参数顺序时,我脑子里有个口诀:「长扭偏角」——长度、扭角、偏距、关节角。对应到变换矩阵里,就是先沿X轴移动a,再绕X轴转α,然后沿Z轴移动d,最后绕Z轴转θ。

2.3 连杆坐标系建立——给机器人「画骨架」

建立坐标系是DH参数法里最容易出错的一步。我曾经因为坐标系方向搞反,调试了整整两天……后来总结了一套标准流程:

  1. 找关节轴:每个关节画一条Z轴,方向沿关节旋转轴(或移动轴)。
  2. 定原点:相邻两Z轴的公垂线与Zᵢ的交点,就是坐标系{i}的原点。
  3. 画X轴:沿公垂线方向,从Zᵢ₋₁指向Zᵢ。
  4. 定Y轴:右手定则,Y = Z × X。

你想想看,如果两个Z轴平行怎么办?嗯,这时候公垂线不唯一,我一般选经过前一个坐标系原点的那个。

⚠️ 避坑指南:

我曾经在建立SCARA机器人的坐标系时,把第二个关节的X轴方向搞反了。结果算出来的末端位置差了十万八千里。记住:X轴永远从Zᵢ₋₁指向Zᵢ,方向别搞反!

2.4 变换矩阵推导——从参数到矩阵的「翻译」

有了DH参数,变换矩阵就是机械式的计算。标准DH法的变换矩阵长这样:

Tᵢ = Rot(z, θᵢ) × Trans(z, dᵢ) × Trans(x, aᵢ) × Rot(x, αᵢ)

展开成4×4矩阵:

Tᵢ = [cosθᵢ   -sinθᵢcosαᵢ    sinθᵢsinαᵢ    aᵢcosθᵢ]
     [sinθᵢ    cosθᵢcosαᵢ   -cosθᵢsinαᵢ    aᵢsinθᵢ]
     [0        sinαᵢ         cosαᵢ         dᵢ     ]
     [0        0             0             1      ]

看着复杂?其实每个元素都有物理意义:

  • 左上3×3是旋转矩阵,描述坐标系{i}相对于{i-1}的姿态
  • 右上3×1是位置向量,描述坐标系{i}原点在{i-1}中的位置
  • 最后一行是固定的[0 0 0 1]

实战经验:

我写代码时,从来不会手算这个矩阵。直接写个函数,输入a、α、d、θ四个参数,自动生成矩阵。这样既快又不容易出错。给你看个Python示例:

import numpy as np

def dh_transform(a, alpha, d, theta):
    """标准DH法变换矩阵"""
    ct = np.cos(theta)
    st = np.sin(theta)
    ca = np.cos(alpha)
    sa = np.sin(alpha)
    
    T = np.array([
        [ct, -st*ca,  st*sa,  a*ct],
        [st,  ct*ca, -ct*sa,  a*st],
        [0,   sa,     ca,     d   ],
        [0,   0,      0,      1   ]
    ])
    return T

2.5 知识体系总览

下面这张图,是我自己总结的正运动学核心逻辑。你看一遍,基本就清楚整个流程了:

正运动学计算流程 步骤1:建立连杆坐标系 确定Z轴、X轴、原点 步骤2:提取DH参数 a, α, d, θ 步骤3:计算变换矩阵 Tᵢ = f(a,α,d,θ) 连乘 关键细节 坐标系建立规则 • Z轴沿关节轴线 • X轴沿公垂线 • Y轴由右手定则确定 DH参数提取 • a:沿X轴距离 • α:绕X轴转角 • d:沿Z轴距离 • θ:绕Z轴转角 矩阵连乘 • T = T₁×T₂×...×Tₙ • 顺序不能乱 • 结果含位置+姿态

2.6 一个完整的例子

拿一个两连杆平面机械臂来说。假设连杆1长L₁,连杆2长L₂,两个关节都是旋转关节。

第一步:建立坐标系

  • 基坐标系{0}:Z₀垂直纸面向上,X₀水平向右
  • 坐标系{1}:Z₁垂直纸面向上,X₁沿连杆1方向
  • 坐标系{2}:Z₂垂直纸面向上,X₂沿连杆2方向

第二步:提取DH参数

连杆i aᵢ αᵢ dᵢ θᵢ
1 L₁ 0 0 θ₁
2 L₂ 0 0 θ₂

第三步:计算变换矩阵

T₁ = [cosθ₁  -sinθ₁  0  L₁cosθ₁]
     [sinθ₁   cosθ₁  0  L₁sinθ₁]
     [0       0       1  0      ]
     [0       0       0  1      ]

T₂ = [cosθ₂  -sinθ₂  0  L₂cosθ₂]
     [sinθ₂   cosθ₂  0  L₂sinθ₂]
     [0       0       1  0      ]
     [0       0       0  1      ]

T = T₁ × T₂

算出来的T矩阵右上角3×1,就是末端在基坐标系下的位置:

x = L₁cosθ₁ + L₂cos(θ₁+θ₂)
y = L₁sinθ₁ + L₂sin(θ₁+θ₂)

验证小技巧:

我每次算完,都会代入几个特殊角度验证。比如θ₁=0、θ₂=0时,末端应该在(L₁+L₂, 0)处。如果算出来不对,赶紧回头检查DH参数或者矩阵顺序。

嗯,正运动学就是这么回事。说白了就是:建坐标系→填DH参数→算矩阵→连乘。每一步都有章可循,多练几次就熟了。


公众号:蓝海资料掘金营,微信deep3321