第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里,我通常用任务空间轨迹生成 + 逆运动学模块的组合来实现。

工程经验:

在关节空间做轨迹规划,优点是计算简单、不会遇到奇异点。但缺点是末端轨迹不可控——你只知道关节怎么转,不知道手爪实际走了什么路径。反过来,任务空间规划可以精确控制末端轨迹,但需要实时求解逆运动学,计算量大。

我的建议是:点到点运动用关节空间规划,连续路径运动用任务空间规划。

知识体系总览

下面这张图,是我自己总结的运动学知识框架。你可以把它当作本章的“地图”:

运动学基础:知识体系 关节空间 (Joint Space) 任务空间 (Task Space) 正运动学 逆运动学 DH参数法(桥梁) 轨迹规划 运动控制 碰撞检测 核心:建立关节空间与任务空间的双向映射

这张图把今天的内容串起来了。你看,关节空间和任务空间是两大阵营,DH参数法是连接它们的桥梁。正运动学和逆运动学,就是在这座桥上双向通行。而轨迹规划、运动控制、碰撞检测,都是基于这个桥梁来做的。

好了,运动学基础就讲到这里。记住:正运动学是“已知关节求位姿”,逆运动学是“已知位姿求关节”,DH参数是“标准化建模工具”,关节空间和任务空间是“两个不同的坐标系”。 这四个概念,后面每一章都会用到。

课后小练习:

找一个你熟悉的机器人(比如UR5),查它的DH参数表。然后在Simulink里搭建一个正运动学模型,输入一组关节角,看看末端位置对不对。嗯,动手试试,比看十遍书都管用。


专注资料整理