3、运动学基础:正运动学与逆运动学概念、D-H参数法建模
各位同学,咱们今天聊点硬核的——运动学基础。说实话,我刚入行那会儿,觉得运动学就是一堆公式来回倒腾。后来在调试一个六轴机械臂时,发现算出来的位置和实际差了快两厘米,才意识到这东西真不能靠感觉。
运动学解决什么问题?说白了就是两件事:我知道每个关节转了多少度,想知道末端在哪儿(正运动学);或者我知道末端要去哪儿,反推每个关节该转多少(逆运动学)。你想想看,机器人要抓个杯子,是不是就得先算清楚这个?
核心要点:正运动学有唯一解,逆运动学可能有多个解甚至无解。这是很多新手容易忽略的。
3.1 正运动学:从关节空间到笛卡尔空间
正运动学,就是已知关节角度,求末端位姿。公式长这样:
T = f(θ₁, θ₂, ..., θₙ)
其中 T 是 4×4 的齐次变换矩阵,包含了位置和姿态信息。θᵢ 是第 i 个关节的角度。
我记得第一次做正运动学推导时,用了整整三天。后来发现,其实核心就是矩阵连乘。每个关节对应一个变换矩阵,把这些矩阵按顺序乘起来,就得到了末端位姿。
举个例子,一个两连杆机械臂:
T = A₁ × A₂
其中:
A₁ = [cosθ₁ -sinθ₁ 0 a₁cosθ₁]
[sinθ₁ cosθ₁ 0 a₁sinθ₁]
[0 0 1 0 ]
[0 0 0 1 ]
A₂ = [cosθ₂ -sinθ₂ 0 a₂cosθ₂]
[sinθ₂ cosθ₂ 0 a₂sinθ₂]
[0 0 1 0 ]
[0 0 0 1 ]
乘出来就是末端位置:
x = a₁cosθ₁ + a₂cos(θ₁+θ₂)
y = a₁sinθ₁ + a₂sin(θ₁+θ₂)
嗯,这里要注意:正运动学计算量随关节数增加而爆炸。六轴机械臂的矩阵乘法,手算能算到怀疑人生。所以我建议用符号计算工具,比如 MATLAB 的 Symbolic Toolbox 或者 Python 的 SymPy。
3.2 逆运动学:从笛卡尔空间回到关节空间
逆运动学就麻烦多了。已知末端位姿,求关节角度。公式是:
θ₁, θ₂, ..., θₙ = f⁻¹(T)
为什么麻烦?因为 f⁻¹ 通常不是单值函数。一个末端位置,可能对应多种关节构型。比如六轴机械臂,同一个点可能有 8 组解。
避坑指南:我曾经在项目里直接用了数值法求解逆运动学,结果迭代不收敛,机械臂直接撞到工作台上。后来改用解析法加几何约束,才稳定下来。数值法虽然通用,但一定要加边界检查和奇异点处理。
逆运动学的求解方法主要有两种:
- 解析法:通过几何关系直接推导出公式。速度快,精度高,但只适用于特定构型。
- 数值法:用迭代逼近,比如牛顿-拉夫森法。通用性强,但可能不收敛或陷入局部最优。
我个人习惯是:能解析就解析,解析不了再用数值法。而且数值法一定要给初值,初值越接近真实解,收敛越快。
3.3 D-H参数法:建模的标准化工具
D-H参数法,全称 Denavit-Hartenberg 参数法。说白了,就是给每个关节建立坐标系,然后用四个参数描述相邻坐标系的关系。
这四个参数是:
| 参数 | 符号 | 含义 |
|---|---|---|
| 连杆长度 | aᵢ | 沿 xᵢ 轴,从 zᵢ 到 zᵢ₊₁ 的距离 |
| 连杆扭角 | αᵢ | 绕 xᵢ 轴,从 zᵢ 到 zᵢ₊₁ 的转角 |
| 连杆偏距 | dᵢ | 沿 zᵢ₋₁ 轴,从 xᵢ₋₁ 到 xᵢ 的距离 |
| 关节转角 | θᵢ | 绕 zᵢ₋₁ 轴,从 xᵢ₋₁ 到 xᵢ 的转角 |
有了这四个参数,相邻坐标系的变换矩阵就是:
Aᵢ = Rot(z, θᵢ) × Trans(z, dᵢ) × Trans(x, aᵢ) × Rot(x, αᵢ)
展开后:
Aᵢ = [cosθᵢ -sinθᵢcosαᵢ sinθᵢsinαᵢ aᵢcosθᵢ]
[sinθᵢ cosθᵢcosαᵢ -cosθᵢsinαᵢ aᵢsinθᵢ]
[0 sinαᵢ cosαᵢ dᵢ ]
[0 0 0 1 ]
你想想看,只要把每个关节的 D-H 参数填进表格,然后矩阵连乘,正运动学就出来了。是不是很优雅?
小技巧:建立 D-H 坐标系时,我习惯先画草图,标出每个关节的 z 轴方向。z 轴沿着关节旋转轴,x 轴沿着相邻 z 轴的公垂线。这样不容易出错。
3.4 知识体系总览
下面这张图,是我自己总结的运动学知识框架。你看一眼,心里就有数了。
这张图把运动学的核心脉络理清楚了。正运动学用 D-H 参数法建模,逆运动学用解析法或数值法求解。两者最终都服务于机器人的轨迹规划和运动控制。
3.5 实战中的坑与经验
最后,分享几个我在项目中踩过的坑:
- 坐标系方向搞反:D-H 参数中 z 轴方向必须一致,否则矩阵乘出来全是错的。我建议画图时标清楚每个轴的方向。
- 奇异点处理:当两个关节轴平行时,D-H 参数中的 α 为 0,会导致自由度丢失。这时候需要特殊处理,比如加一个微小偏移。
- 逆运动学多解选择:同一个末端位置可能有多个解。我一般根据关节限位和能耗来选择最优解,比如选关节角度变化最小的那个。
总结一下:正运动学是基础,逆运动学是难点,D-H 参数法是工具。把这三点吃透了,运动学这块就算拿下了。剩下的就是多练,多调,多踩坑。