第二章:机器人运动学——D-H参数法、正运动学求解、逆运动学求解
各位好,咱们接着聊机器人运动学。
说实话,刚入行那会儿,我觉得运动学就是一堆矩阵乘法,枯燥得很。直到有一次在产线上调试六轴机器人,发现末端总是差那么几毫米对不准工件,我才真正意识到——运动学不是纸上谈兵,它是让机器人“听话”的底层逻辑。
这一章,咱们就掰开揉碎了讲:D-H参数法、正运动学、逆运动学。我尽量用大白话,把那些公式背后的物理意义说清楚。
2.1 D-H参数法:给机器人关节“上户口”
先问个问题:怎么描述一个关节相对于另一个关节的位置和姿态?
你可能会说,用坐标系呗。没错,但问题在于——每个工程师定义的坐标系可能都不一样。你往左偏,我往右偏,最后算出来的末端位置天差地别。
D-H参数法就是来解决这个问题的。它是一套标准化的“户口本”,给每个关节都规定了统一的坐标系建立规则。
2.1.1 四个参数,一个都不能少
每个关节(或者说每根连杆)只需要四个参数:
- ai-1(连杆长度):两个关节轴线之间的公垂线长度。说白了,就是这根杆子有多长。
- αi-1(连杆扭转角):两个关节轴线在空间中的夹角。嗯,这个角度决定了关节是“直着”还是“歪着”。
- di(连杆偏距):沿关节轴线方向,两根连杆之间的偏移量。常见于移动关节。
- θi(关节角):绕关节轴线的旋转角度。这是唯一会变化的参数(对于旋转关节)。
我个人习惯:拿到一个机器人模型,先别急着算矩阵。先把每个关节的D-H参数列成一张表。这张表就是你的“地图”,后面所有计算都依赖它。
举个例子,一个典型的六轴工业机器人,它的D-H参数表大概长这样:
| 关节 i | ai-1 (mm) | αi-1 (°) | di (mm) | θi (°) |
|---|---|---|---|---|
| 1 | 0 | 0 | 400 | θ1 |
| 2 | 250 | -90 | 0 | θ2 |
| 3 | 0 | 0 | 0 | θ3 |
| 4 | 0 | 90 | 350 | θ4 |
| 5 | 0 | -90 | 0 | θ5 |
| 6 | 0 | 90 | 100 | θ6 |
避坑指南:我曾经在定义α角时搞反了正负号,结果仿真出来的机器人像喝醉了酒一样乱晃。记住:α的正负由右手定则决定,沿着X轴从Zi-1转向Zi。
2.2 正运动学求解:从关节角度到末端位姿
正运动学,说白了就是:你给我每个关节的角度,我告诉你末端在哪儿、朝哪个方向。
怎么算?矩阵连乘。
每个关节的变换矩阵 Ti 由D-H参数唯一确定:
T_i = Rot_x(α_{i-1}) * Trans_x(a_{i-1}) * Rot_z(θ_i) * Trans_z(d_i)
把从基座到末端的所有变换矩阵乘起来,就得到了末端相对于基座的位姿矩阵:
T_0_n = T_1 * T_2 * ... * T_n
这个矩阵里,左上角3x3是姿态(旋转矩阵),右上角3x1是位置(平移向量)。
我在项目中遇到过:有个同事用MATLAB算正解,矩阵乘了十几层,结果发现末端位置算出来是负数。查了半天,原来是某个关节的d参数写成了负值。所以,参数表一定要反复核对,尤其是符号。
正运动学的好处是——唯一解。给定一组关节角,末端位姿是确定的。这就像你拧螺丝,拧多少圈,螺丝头就伸出来多少,没得商量。
2.3 逆运动学求解:从末端位姿到关节角度
逆运动学就反过来了:你给我末端的目标位置和姿态,我反算出每个关节该转多少度。
这才是真正头疼的地方。为什么?因为逆解通常有多个解,甚至无解。
2.3.1 多解问题
你想想看,一个六轴机器人,要到达同一个点,可以有“肘部朝上”和“肘部朝下”两种姿态,这就是两组不同的关节角。更别说还有“手腕翻转”的情况。
所以,逆运动学求解时,我们通常需要根据实际情况选择一组最优解。比如:
- 选择关节运动量最小的解(省时间)
- 选择避开奇异点的解(安全)
- 选择与当前姿态最接近的解(平滑)
2.3.2 解析法与数值法
逆解的方法主要有两种:
- 解析法:通过代数推导,直接写出关节角的表达式。速度快,但只适用于特定构型的机器人(比如后三个关节轴线交于一点的机器人)。
- 数值法:用迭代逼近的方式求解,比如牛顿-拉夫森法。通用性强,但计算慢,且可能不收敛。
注意:数值法在奇异点附近容易“翻车”。我曾经用数值法解一个接近奇异点的位姿,迭代了100次还没收敛,最后CPU直接跑满。所以,能解析就解析,别偷懒。
2.3.3 一个简单的逆解示例(2自由度平面机器人)
为了让你直观理解,咱们看个最简单的2自由度平面机器人。它只有两个旋转关节,都在同一个平面内。
已知末端位置 (x, y),求关节角 θ1 和 θ2。
// 几何法求解
// 连杆长度: L1, L2
// 末端位置: (x, y)
// 先求 θ2(余弦定理)
cosθ2 = (x^2 + y^2 - L1^2 - L2^2) / (2 * L1 * L2)
θ2 = ± acos(cosθ2) // 注意:正负号对应两种解
// 再求 θ1
θ1 = atan2(y, x) - atan2(L2 * sinθ2, L1 + L2 * cosθ2)
你看,θ2 有正负两个解,这就是“肘部朝上”和“肘部朝下”的区别。
2.4 知识体系总览
说了这么多,咱们用一张图把这一章的核心逻辑串起来:
这张图把咱们这一章的核心逻辑串起来了。你看,D-H参数法是基础,正运动学和逆运动学就像一枚硬币的两面,缺一不可。
我的建议:学运动学,别光盯着公式。拿个真实的机器人(或者仿真软件),手动给几个关节角,看看末端怎么动。反过来,给定一个目标点,看看机器人怎么“想办法”到达。动手试几次,比看一百页书都管用。
好了,这一章就到这里。运动学是机器人控制的基石,后面咱们讲动力学、轨迹规划,都离不开它。先把D-H参数和正逆解搞明白,后面就顺了。
公众号:蓝海资料掘金营,微信deep3321