机器人运动学基础:刚体运动描述、旋转矩阵、齐次变换矩阵、正逆运动学

各位同学好,我是你们的老朋友。今天咱们来聊聊机器人运动学里最核心的几个概念。说实话,这部分内容我刚开始接触时也觉得有点抽象,但后来在项目里吃过几次亏,才真正体会到它的分量。

你想想看,一个机器人要抓杯子,它得先知道自己的手在哪儿,杯子在哪儿,然后才能规划怎么过去。这背后就是运动学在支撑。说白了,运动学就是研究「怎么动」的学问,不涉及力,只关心位置、速度和加速度。

刚体运动的描述

我们先从最基础的开始。机器人身上的每个部件,比如手臂、手腕、手指,都可以看作刚体。刚体就是不会变形的物体。描述一个刚体在空间中的状态,需要两个信息:位置和姿态。

位置好理解,就是它在哪儿。姿态呢?就是它朝哪个方向。举个例子,你手里拿着一本书,书的位置是书的重心坐标,书的姿态就是书页朝哪边、书脊朝哪边。

我个人习惯把位置和姿态合起来叫「位姿」。一个刚体在三维空间中有6个自由度——3个平移自由度(x, y, z)和3个旋转自由度(roll, pitch, yaw)。

核心要点:描述刚体运动,本质上就是描述这6个自由度随时间的变化。

旋转矩阵

旋转矩阵是描述姿态最常用的工具。它是一个3x3的正交矩阵,行列式为+1。为什么用矩阵?因为方便计算啊。

我记得第一次做机械臂标定时,就栽在旋转矩阵上。当时我直接用欧拉角去算,结果出现了万向锁,机械臂直接卡住了。从那以后,我养成了一个习惯:凡是涉及连续旋转的,优先用旋转矩阵或四元数。

旋转矩阵有几个重要性质:

  • 每一列都是单位向量,且两两正交
  • 逆矩阵等于转置矩阵(R⁻¹ = Rᵀ)
  • 多个旋转可以连乘:R = R₁ · R₂ · R₃

来看一个绕Z轴旋转θ角的例子:

R_z(θ) = | cosθ  -sinθ  0 |
         | sinθ   cosθ  0 |
         | 0      0     1 |

嗯,这里要注意:旋转顺序很重要。先绕X轴转30度再绕Y轴转60度,和反过来结果完全不同。我建议你在代码里统一用「右乘」的顺序,这样更符合直觉。

齐次变换矩阵

旋转矩阵只能描述姿态,不能描述位置。那怎么办?把位置和姿态合在一起,就得到了齐次变换矩阵。它是一个4x4的矩阵:

T = | R   p |
    | 0   1 |

其中R是3x3旋转矩阵,p是3x1位置向量。最后一行是[0 0 0 1]。

为什么叫「齐次」?因为引入了第4维,把旋转和平移统一成线性变换。这样做的好处是:你可以把多个变换连乘,一次搞定。

举个例子,机器人从基座到末端执行器,中间经过了好几个关节。每个关节都有一个变换矩阵。把它们乘起来,就得到了末端相对于基座的位姿。这就是正运动学的核心思想。

小技巧:写代码时,我习惯把齐次变换矩阵封装成一个类,包含旋转矩阵和平移向量。这样调试起来方便很多。

正运动学

正运动学,就是已知关节角度,求末端位姿。说白了,你告诉机器人「每个关节转多少度」,它告诉你「手在哪儿、朝哪个方向」。

对于串联机器人,正运动学很简单:把每个关节的变换矩阵连乘就行。比如一个6轴机器人:

T_06 = T_01 · T_12 · T_23 · T_34 · T_45 · T_56

每个T_ij表示从关节i到关节j+1的变换。这里面包含了关节角度、连杆长度、连杆偏距等参数。这些参数合起来就是DH参数(Denavit-Hartenberg参数)。

我在做协作机器人项目时,发现很多同学把DH参数搞混了。其实记住一点就行:DH参数就是描述相邻两个关节坐标系之间关系的四个参数。分别是:

  • a:连杆长度
  • α:连杆扭角
  • d:连杆偏距
  • θ:关节角度

对于旋转关节,θ是变量;对于移动关节,d是变量。

逆运动学

逆运动学就麻烦多了。它是已知末端位姿,求关节角度。你告诉机器人「手要放到这里」,它得算出每个关节该转多少度。

为什么麻烦?因为逆运动学通常有多解,甚至无解。比如你让机械臂去够一个太远的东西,它根本够不着,那就是无解。如果目标在可到达范围内,通常有多个关节角度组合能达到同一个末端位姿。

我曾经在调试一个焊接机器人时,遇到了逆运动学求解不稳定的问题。每次算出来的关节角度都不一样,导致焊接轨迹抖动。后来发现是数值解法迭代初值选得不好。我换成了解析解法,问题就解决了。

避坑指南:逆运动学求解时,一定要注意奇异位形。当机器人处于奇异位形时,某些关节速度会趋于无穷大,非常危险。我曾经在测试时没处理好,差点把电机烧了。

逆运动学的求解方法主要有两种:

  • 解析法:通过几何关系直接推导出封闭解。速度快,但只适用于特定构型的机器人。
  • 数值法:用迭代的方式逼近解。通用性强,但计算量大,且需要好的初值。

我个人建议:如果机器人构型比较规则(比如6轴机器人满足Pieper准则),优先用解析法。如果构型复杂,再用数值法。

知识体系总览

下面这张图是我自己整理的,把今天讲的内容串起来了。你可以看到,从刚体描述到正逆运动学,是一条清晰的逻辑链。

机器人运动学知识体系 刚体运动描述 位置 + 姿态 = 6自由度 旋转矩阵 (3x3) 齐次变换矩阵 (4x4) 正运动学 关节角度 → 末端位姿 逆运动学 末端位姿 → 关节角度 DH参数法 解析法 数值法 核心思想:用数学语言描述机器人的运动,为轨迹规划和控制打下基础

好了,今天的内容就到这里。运动学是机器人学的基石,后面的轨迹规划、动力学、控制都离不开它。我建议你动手写写代码,把旋转矩阵和齐次变换矩阵实现一遍,再做个简单的正运动学求解。纸上得来终觉浅,绝知此事要躬行。

可可精品资料库