第二节:机器人运动学基础——齐次变换矩阵、DH参数法、正运动学建模
各位同学,大家好。今天我们聊点硬核的——机器人运动学基础。
说实话,我刚入行那会儿,觉得运动学就是一堆矩阵乘法,枯燥得很。直到有一次在现场调试六轴机器人,发现末端位置死活对不上,才意识到:运动学不是数学题,是工程命脉。你算不对,机器人就撞。
好,咱们开始。
2.1 齐次变换矩阵:机器人的“坐标翻译官”
先问一个问题:机器人怎么知道自己的手在哪儿?
答案是——它不知道。它只知道每个关节转了多少度。至于手在空间中的位置,全靠我们帮它算。这个计算工具,就是齐次变换矩阵。
齐次变换矩阵长这样:
| R(3x3) T(3x1) |
| 0 0 0 1 |
左边3x3是旋转矩阵,描述姿态;右边3x1是平移向量,描述位置。最后一行固定是[0 0 0 1],这是齐次坐标的规矩。
我个人习惯把齐次变换矩阵理解为“坐标翻译官”。比如,从基座坐标系到末端坐标系,中间经过N个关节,每个关节都有一个变换矩阵。把这些矩阵乘起来,就得到了末端在基座下的位姿。
核心公式:
T_0_n = T_0_1 × T_1_2 × ... × T_{n-1}_n
注意:矩阵乘法不满足交换律,顺序错了,结果全错。
我的小技巧: 写代码时,我习惯把每个变换矩阵单独定义,然后按顺序相乘。千万别图省事写在一行里,调试时你会哭的。
2.2 DH参数法:标准化你的机器人
有了齐次变换矩阵,理论上我们可以描述任意两个坐标系的关系。但问题来了——每个关节的坐标系怎么建? 没有统一标准,你建一个样,我建一个样,代码根本没法复用。
这时候,DH参数法就登场了。
DH参数法说白了,就是给每个关节定了四个参数:
| 参数 | 符号 | 含义 |
|---|---|---|
| 连杆长度 | a | 相邻两关节轴线的公垂线长度 |
| 连杆扭角 | α | 相邻两关节轴线的夹角 |
| 关节距离 | d | 沿关节轴线的偏移量 |
| 关节角度 | θ | 绕关节轴线的旋转角度 |
有了这四个参数,任意两个相邻关节的变换矩阵就可以写成标准形式:
T_i = Rot(z, θ_i) × Trans(z, d_i) × Trans(x, a_i) × Rot(x, α_i)
你想想看,只要把每个关节的DH参数填进去,整个机器人的运动学模型就建好了。是不是很优雅?
避坑指南: 我曾经在项目里吃过DH参数符号的亏。不同教材对a、d、α的定义可能不同,有的用标准DH,有的用改进DH。一定要在项目开始前统一约定,不然后面全乱套。
2.3 正运动学建模:从关节空间到笛卡尔空间
正运动学,就是已知关节角度,求末端位姿。说白了,你告诉机器人“每个关节转多少度”,它告诉你“手在哪儿、朝哪个方向”。
建模步骤其实很简单:
- 建立坐标系:按照DH规则,在每个关节处建立坐标系
- 填写DH参数表:把a、α、d、θ填进去
- 计算变换矩阵:每个关节一个T矩阵
- 连乘得到末端位姿:T_0_n = T_0_1 × T_1_2 × ... × T_{n-1}_n
举个例子,一个简单的两关节平面机器人:
// 伪代码示例
// 关节1:θ1 = 30°,a1 = 1m
// 关节2:θ2 = 45°,a2 = 0.8m
T_0_1 = DH(θ1, d1=0, a1, α1=0)
T_1_2 = DH(θ2, d2=0, a2, α2=0)
T_0_2 = T_0_1 * T_1_2
// 结果:末端位置 (x, y) 和姿态角
嗯,这里要注意:正运动学是唯一的。给定一组关节角度,末端位姿是确定的。这也是为什么正运动学常用于轨迹规划和碰撞检测。
实战经验: 我在做六轴机器人标定时,第一步就是验证正运动学模型。把每个关节转到零位,看末端是不是在理论位置。如果对不上,先查DH参数,再查矩阵乘法顺序。90%的问题出在这两个地方。
2.4 知识体系总览
为了让大家更直观地理解本章的知识结构,我画了一张图:
从这张图可以看得很清楚:齐次变换矩阵是底层工具,DH参数法提供了标准化建模方法,正运动学则是最终的应用。三者环环相扣,缺一不可。
我的建议: 初学者可以先从两关节机器人入手,手算一遍正运动学,再用代码验证。别一上来就搞六轴,容易懵。我当年就是这么过来的。
好,这一节的内容就到这儿。记住:运动学是机器人标定的地基。地基不稳,后面所有补偿都是空中楼阁。
可可精品资料库