第1章:运动学基础——正运动学与逆运动学、DH参数法、关节空间与任务空间
各位工程师朋友,大家好。我是老张,在机器人控制这个行当摸爬滚打了十几年。今天咱们开始聊运动学,这是轨迹规划的根基。说白了,你连机器人胳膊怎么动都算不清楚,后面那些花哨的轨迹算法全是空中楼阁。
我个人习惯,讲运动学之前,先问一个问题:你给机器人发一个“去抓杯子”的指令,它内部到底发生了什么? 嗯,这个问题想明白了,今天的内容你就掌握了八成。
1.1 正运动学:从关节到指尖
正运动学,英文叫Forward Kinematics。它的任务很简单:已知每个关节的角度(或者位移),求末端执行器(比如手爪)在空间中的位置和姿态。
我刚开始做项目时,总觉得这步是“废话”——关节角度都知道了,末端位置不是明摆着吗?后来发现,真不是这么回事。你想想看,一个六轴机器人,六个关节同时转,末端轨迹是三维空间里一条复杂的曲线。靠肉眼?根本看不出来。
正运动学的核心,就是建立从关节空间到任务空间的映射关系。数学上,我们用一个4x4的齐次变换矩阵来描述这个映射:
T = f(q1, q2, q3, q4, q5, q6)
其中T是末端位姿矩阵,q1到q6是关节变量。这个f函数,就是我们要推导的东西。
核心公式(以六轴机器人为例):
末端位姿矩阵 T = A1 * A2 * A3 * A4 * A5 * A6
其中Ai是第i个关节的齐次变换矩阵,由DH参数决定。
我在项目中遇到过最典型的场景:调试一个焊接机器人,示教器上显示关节角度都正常,但焊枪就是偏了5毫米。最后查出来,是正运动学模型里一个连杆长度参数写错了。所以,正运动学模型必须和实际机械结构严格对应,差一个毫米都不行。
1.2 逆运动学:从指尖到关节
逆运动学,Inverse Kinematics,这才是真正让人头疼的部分。它的任务是:已知末端期望的位置和姿态,反算出每个关节应该转多少度。
为什么说它难?因为正运动学是“一对一”的映射——给定一组关节角,末端位姿是唯一的。但逆运动学是“一对多”——同一个末端位姿,可能对应多组关节角解。甚至,有些位姿根本无解(超出工作空间)。
举个例子,你让机器人去抓桌子上的杯子。杯子位置固定,但机器人可以用“肘部朝上”或者“肘部朝下”两种姿态去抓。这就是多解。我建议,在实际工程中,一定要根据当前关节角度选择“最近”的那组解,避免关节突然大范围转动。
避坑指南:
我曾经在一个码垛项目里,逆运动学求解时没做“奇异位形”检测。结果机器人运动到某个位置时,关节速度突然变成无穷大,差点把电机烧了。记住:逆运动学求解前,一定要检查雅可比矩阵是否奇异。
逆运动学的求解方法,我常用的有三种:
- 解析法: 针对特定构型(如PUMA 560)推导封闭解。速度快,但通用性差。
- 数值法: 基于雅可比矩阵的迭代求解(如牛顿-拉夫森法)。通用性强,但可能不收敛。
- 几何法: 利用空间几何关系直接计算。适合自由度较少的机器人。
我个人习惯,在Simulink里用数值法做原型验证,然后根据结果反推解析解。这样效率最高。
1.3 DH参数法:运动学的“通用语言”
DH参数法,全称Denavit-Hartenberg参数法。说白了,就是一套标准化的“搭积木”规则,用来描述相邻两个关节之间的坐标变换。
你想想看,一个机器人有那么多连杆和关节,每个关节的坐标系怎么定义?如果没有统一标准,每个人定义的都不一样,代码根本没法复用。DH参数法就是解决这个问题的。
每个关节需要四个参数:
| 参数 | 符号 | 含义 |
|---|---|---|
| 连杆长度 | ai-1 | 沿Xi-1轴,从Zi-1到Zi的距离 |
| 连杆扭角 | αi-1 | 绕Xi-1轴,从Zi-1到Zi的转角 |
| 连杆偏距 | di | 沿Zi轴,从Xi-1到Xi的距离 |
| 关节角 | θi | 绕Zi轴,从Xi-1到Xi的转角 |
有了这四个参数,相邻关节的变换矩阵就可以写成标准形式。我在项目中,习惯把DH参数表直接写在Simulink的MATLAB Function模块里,方便调试。
注意: DH参数有两种约定——标准DH和改进DH。区别在于坐标系定义顺序不同。我个人建议统一用改进DH(Craig版本),因为它在处理树形结构(如人形机器人)时更直观。千万别混用,否则算出来的位姿全是错的。
1.4 关节空间与任务空间:两个世界的对话
这两个概念,是理解运动学的基础。我简单解释一下:
- 关节空间: 由所有关节变量组成的空间。比如六轴机器人,关节空间就是6维的,每个维度对应一个关节角度。
- 任务空间: 由末端执行器的位置和姿态组成的空间。通常是6维(3个位置 + 3个姿态角)。
正运动学,就是从关节空间到任务空间的映射。逆运动学,则是反过来。
为什么要把这两个空间分开?因为轨迹规划通常是在任务空间做的——你告诉机器人“从这里直线运动到那里”,但实际控制电机时,必须转换成关节空间的指令。这个转换,就是运动学要干的事。
我举个例子:你让机器人画一个圆。在任务空间里,圆的方程很简单:x = R*cos(θ), y = R*sin(θ)。但每个时刻对应的关节角度是多少?这就需要逆运动学实时求解。在Simulink里,我通常用任务空间轨迹生成 + 逆运动学模块的组合来实现。
工程经验:
在关节空间做轨迹规划,优点是计算简单、不会遇到奇异点。但缺点是末端轨迹不可控——你只知道关节怎么转,不知道手爪实际走了什么路径。反过来,任务空间规划可以精确控制末端轨迹,但需要实时求解逆运动学,计算量大。
我的建议是:点到点运动用关节空间规划,连续路径运动用任务空间规划。
知识体系总览
下面这张图,是我自己总结的运动学知识框架。你可以把它当作本章的“地图”:
这张图把今天的内容串起来了。你看,关节空间和任务空间是两大阵营,DH参数法是连接它们的桥梁。正运动学和逆运动学,就是在这座桥上双向通行。而轨迹规划、运动控制、碰撞检测,都是基于这个桥梁来做的。
好了,运动学基础就讲到这里。记住:正运动学是“已知关节求位姿”,逆运动学是“已知位姿求关节”,DH参数是“标准化建模工具”,关节空间和任务空间是“两个不同的坐标系”。 这四个概念,后面每一章都会用到。
课后小练习:
找一个你熟悉的机器人(比如UR5),查它的DH参数表。然后在Simulink里搭建一个正运动学模型,输入一组关节角,看看末端位置对不对。嗯,动手试试,比看十遍书都管用。